AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Durchschnittliche statischtische Trefferanzahl pro Zeit
Thema durchsuchen
Ansicht
Themen-Optionen

Durchschnittliche statischtische Trefferanzahl pro Zeit

Ein Thema von Zacherl · begonnen am 13. Jan 2012 · letzter Beitrag vom 16. Jan 2012
Antwort Antwort
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#1

Durchschnittliche statischtische Trefferanzahl pro Zeit

  Alt 13. Jan 2012, 05:22
Hey Leute,

ich versuche grade einen Algorithmus zu optimieren und denke, dass mir dabei die durchschnittliche statistische Trefferanzahl pro Zeit helfen könnte. Und zwar habe ich folgenden Algo:

Code:
a = gesamtmenge;
b = teilmenge von a; // vielleicht ca. 1% der elemente aus a
for (time) do
begin
  e = wähle zufälliges element aus a
  if (e element von b) then
  begin
    // führe eine operation durch
  end;
end;
Hier sieht man ja schnell, dass der Aufwand vor allem linear zur Zeit wächst. Da mich aber nur die Elemente interessieren, die auch wirlich in b vorkommen, dachte ich mir das so:

Code:
n = durchschnittliche treffer von b pro zeit;
foreach (e aus b) do
begin
  for (n) do
  begin
    // führe eine operation durch
  end;
end;
Dadurch würde der Aufwand dann ja primär von der Anzahl der Elemente in b abhängen. Natürlich ist die Zeit immer noch ein Faktor, aber da b wie beschrieben in den meisten Fällen sehr sehr wenige Elemente hat, dürfte diese Lösung deutlich performanter ausfallen.

Jetzt meine Frage: Wie ermittele ich die durchschnittlichen Treffer abhängig von der Zeit?

Viele Grüße
Zacherl
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)

Geändert von Zacherl (13. Jan 2012 um 05:29 Uhr)
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#2

AW: Durchschnittliche statischtische Trefferanzahl pro Zeit

  Alt 13. Jan 2012, 08:31
Wie wäre es ganz banal mit "zeit' := zeit * (Length(b) / Length(a))", und dann über zeit' iterieren? Ohne mehr Wissen um das was du da überhaupt machst (ist schon recht abstrakt so), kann ich gerade nicht nachvollziehen, warum du dieses "n" bräuchtest.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.153 Beiträge
 
Delphi 12 Athens
 
#3

AW: Durchschnittliche statischtische Trefferanzahl pro Zeit

  Alt 13. Jan 2012, 09:49
treffer := versuche * (Length(b) / Length(a))

treffer := versuche_pro_zeit * zeit * (Length(b) / Length(a))


Entspricht dann dem statistischen Mittel, bei Optimalverteilung des "Zuffals", über unendlich Zeit (oder irgendwie so).


Wobei du hier noch ein Problem hast, denn wenn "führe eine operation durch" nur etwas Länger dauert, als die Auswahl eines elemente, dann ist das "Suchen" nach dem nächsten passenden Element viel schneller, als das Ausführen.

Es kann also rechnerisch am Ende sogar auf nahezu O(1) kommen, da die Suche verhältnismäßig keine relevante Zeit verbrauchen könnte.
Also
treffer := zeit / dauer_pro_durchführen

Die oberen Formeln würden dann quasi das maximale Optimium (oder so) darstellen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (13. Jan 2012 um 09:56 Uhr) Grund: bin nicht vom Fach, hab keine Ahnung und alles was nach Fachwörtern klingt, ist nur dummes Geschwätz
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#4

AW: Durchschnittliche statischtische Trefferanzahl pro Zeit

  Alt 13. Jan 2012, 19:49
Danke euch für eure Antworten, ich habe es aufgrund eurer Hinweise nun folgendermaßen gelöst:

Code:
// Hier bin ich noch am überlegen, ob ich 1 / Length(a) oder wirklich Length(b) / Length(a) nehme, weil mir der Wert recht hoch vorkommt
n := versuche_pro_zeit * zeit * (Length(b) / Length(a))
für jedes element {
  // Um die Sache etwas zufälliger zu gestalten
  m = random(n) + n / 2;
  for (m) {
    führe operation durch
  }
}
Die Elemente zu iterieren, statt zufällig auszuwählen, ist auf jeden Fall auch deshalb performanter, weil jedes Element eine maximale Anzahl an möglichen Operationen besitzt. Das heißt es kann sein, dass nach 3 Durchläufen alles "fertig" ist und ich zum nächsten Element übergehen kann. Ob eine Operation erfolg hat, wird allerdings nochmal über einen Zufallsfaktor bestimmt, weshalb hier natürlich auch im schlechtesten Falle wirklich m - Durchläufe stattfinden können.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)

Geändert von Zacherl (13. Jan 2012 um 19:57 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.153 Beiträge
 
Delphi 12 Athens
 
#5

AW: Durchschnittliche statischtische Trefferanzahl pro Zeit

  Alt 13. Jan 2012, 19:58
Wieso hoch?

Trefferwahrscheinlichkeit_als_0bis1 = Length(b) / Length(a)
Trefferwahrscheinlichkeit_in_Prozent = (Length(b) / Length(a)) * 100

je mehr B, um so öfters trifft man
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (13. Jan 2012 um 20:02 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#6

AW: Durchschnittliche statischtische Trefferanzahl pro Zeit

  Alt 13. Jan 2012, 21:10
Logisch. Je mehr B, desto höher die Wahrscheinlichkeit, dass man ein Element aus B trifft. Da ich aber in jedem Fall über alle Elemente iteriere, muss ich da ja irgendwie wieder ausgleichen und dann durch Length(B) teilen, bzw 1 statt Length(B) in der Anfangsberechnung verwenden. Oder sehe ich das falsch?

Nur weil in meinen Tests der optimierte Algorithmus mit 1 / Length(A) ziemlich nah an die Originalergebnisse herankommt, wobei mit Length(B) / Length(A) vie zu viele Operationen ausgeführt werden. Kann natürlich sein, dass ich bei meinen Stichproben einfach Pech hatte ...
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.153 Beiträge
 
Delphi 12 Athens
 
#7

AW: Durchschnittliche statischtische Trefferanzahl pro Zeit

  Alt 13. Jan 2012, 22:14
Nein, du suchst ja in B in A und nicht 1 in A.


Je mer B es gibt, um so mehr Elemente (B) gibt es in A, welche man dann auch treffen könnte.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (13. Jan 2012 um 22:20 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#8

AW: Durchschnittliche statischtische Trefferanzahl pro Zeit

  Alt 16. Jan 2012, 03:03
Stimmt natürlich. Das war der Denkfehler Danke!
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:33 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz