[informatik]Komplexitätsanalyse - Sieb des Eratosthenes
-
ich hab nen bischen bei wiki rumgewühlt.
ok, nochmal zum schreiben. für das markieren der zahlen könnte ich N/J
nehmen als obere grenze mit n/2+n/3+n/4 ....., was aber noch zu ungenau ist
genauer wäre n(1/2+1/3+1/4 ... 1/n) also könnte ich jetzt schreiben
n ln(n). Noch besser wäre mit Primzahlen n(1/2+1/3+1/5+1/7 ... 1/n).also wäre dann die Lösung m_write = n-1+ n ln ln n?
-
Supi. Genau die richtige Richtung.
Und jetzt die Tipps annehmen.
Du musst nicht jede Scheiße summieren, wenn die Vorgabe schon was summiert hat.
-
also n-1 rauslassen dass nurnoch n ln ln n bleibt?
-
volkard schrieb:
Supi. Genau die richtige Richtung.
Nein. Die richtige Richtung ist: Am Anfang werden alle Zahlen gesetzt. Dann werden die Nicht-Primzahlen exakt einmal gesetzt. Macht insgesamt n-1 plus die Anzahl der Nicht-Primzahlen.
-
also n-1 + summe 2n (geschnitten) summe 3n ...... ?
-
adonis schrieb:
also n-1 + summe 2n (geschnitten) summe 3n ...... ?
Ich verstehe nicht, was du mir sagen willst. Die Anzahl der Nicht-Primzahlen ist die Anzahl aller Zahlen minus die Anzahl der Primzahlen. Beide Größen hast du gegeben.
-
ich will die menge vielfachen vom 2 + der menge der vielfachen von 3
die in 2 nicht drin sind uswok, also ich brauch die Summenformel der natürlichen zahlen - hinweis 2
-
adonis schrieb:
ich will die menge vielfachen vom 2 + der menge der vielfachen von 3
die in 2 nicht drin sind uswDafür gibts das Inklusions-Exklusions-Prinzip. Aber ich sehe nicht, warum du das hier brauchst.
Edit: Die eben von mir genannte Lösung ist die Endlösung. Du brauchst nicht mehr über die verschiedenen Iterationen zu summieren.
-
also summen formel für die natürlich zahlen - 2. hinweis
Mit dem was ich oben geschrieben hab, erhalte ich doch die Anzahl der
nicht Primzahlen. wenn ich jetzt die summe aller zahlen nehme und die abziehe
hab ich die summe aller Primzahlen.ich könnte ja noch summe der mengen bilden die in nicht beiden vorkam und die draufzählen auf die menge der vielfachen von 2, dann hab ich doch die Anzahl der Schreibvorgänge.
-
also Idee menge A (4 6 8 ... n)
Menge B (6 9 12 15 ...n)für die Schreibvorgänge anzahl von menge A + anzahl nicht(A durchschnitt
und so weiter + die erste for-schleife.Würde jetzt noch Eine Menge C hinzukommen die vielfachen von wäre der nächste
summand wäre 0 weil C in A drin istJetzt müsste man vielleicht überlegen wie die Anzahl des weg streichens sinkt.
oder Abschätzungen machen wenn n steigt, steigt auch die Laufzeit.
Es wird mehr als linear ansteigen aber weniger als quadratisch, also
irgendwas im n log n oder n log² n Bereich.ich würde das begründen durch da wegstreichen der vielfachen von 2.
wenn n wächst hätte ich einen linearen anstieg. dann kommt noch das
wegstreichen der anderen zahlen dazu, was aber weniger sein sollte als n²
-
Puh, erst einmal unterscheide bitte zwischen Summe und Anzahl. Ich kann dich nur bitten, die Antworten in Ruhe noch einmal durchzulesen. Hör auf, irgendwelche Mengen zu schneiden. An jeder Primzahlposition wird im gesamten Verlauf des Algorithmus genau einmal geschrieben, an jeder Nicht-Primzahlposition genau zweimal. Macht insgesamt 1 * n / log(n) + 2 * (n - n / log(n)).
-
mhh? also wenn ich den code durch arbeite wird erst einmal jede zahl als
Primzahlkandidat markiert, und anschließend wird jede nicht Primalzahl
rausgenommen. und durch die if-bedingung wird nur einmal jede der Position
geschrieben.Zum Schluss sind nurnoch die Primzahlen mit 0 markiert.
wie kommst du auf 2-mal bei jeder "nicht Primzahl" Position?
zeile 11 ist der punkt, er scheibt die Primzahl nicht, sie wird gleich mit
2 multiplizert.ende müsste also so aussehen.
0 0 4 0 6 0 8 9 10 0 12 0 14 usw
vielleicht ist n/j doch kein schlechter Ansatz wieviele in N lassen sich
durch 2 teilen + den Anteil der sich durch 3 teilen lässt was aber zu ungenau
istdann wären wir schon wieder fast am anfang
-
Du hast sogar selbst geschrieben warum es 2 Schreibvorgänge für nicht-Primzahlen ist:
wird erst einmal jede zahl als
Primzahlkandidat markiert1. Schreibvorgang für alle
anschließend wird jede nicht Primalzahl
rausgenommen2. Schreibvorgang, diesmal nur für nicht Primzahlen
-
achso ja das ist wohl wahr
ok jetzt verstehe ich langsam ...jetzt erscheint es irgendwie logisch...
aber was fehlt mir? Übung oder ist es einfach nur mathematisches Verständnis
ich wär glaub nie drauf gekommen
-
aber auf jeden fall danke,
vorallem der geduld von Michael E..bringt mir zwar nichts mehr da ich schon abgegeben hab, aber sowas wurmt mich
immer
-
für read scheint es jetzt auch logisch zu sein.
auf jeden fall n für die äußere
und dann nochmal für die ganzen vielfachen solgange i:=2*j < N ist.