2012-03-31 8 views
3

Ich benutze BigInteger in einer Hausaufgabe, um die nächste Primzahl zu berechnen, die ich verwenden kann, um eine Hash-Tabelle, die quadratische Probing verwendet, zu ändern.Ist die Genauigkeit von nextProbablePrime() mit der Größe des Eingabewerts verknüpft?

Die Tabelle speichert Daten, die aus einer Datei eingelesen wurden. Die Beispieldatei, die ich erhalten habe, enthält nur 100 Elemente, aber ich kann nicht davon ausgehen, dass dies der maximale Datensatz ist, auf dem mein Programm getestet wird.

Ich frage mich, ob es eine Beziehung zwischen der Größe des Wertes, den ich an nextProbablePrime übergeben, und der Wahrscheinlichkeit, dass es eine Primzahl korrekt zurückgibt? Mit anderen Worten, gibt es eine Zahl, unter der nextProbablePrime garantiert genau ist? Ist es vernünftig, sich darauf zu verlassen?

+0

Sofern dies keine Voraussetzung ist, würde ich die Dinge einfacher halten. Sie können sich Hashtable ansehen, das eine einfache Progression verwendet, oder HashMap, die Potenzen von zwei verwendet. Ich finde, dass das Reduzieren des Ladefaktors eine nicht ideale, aber vernünftige Hash-Funktion kompensieren kann. –

+0

@PeterLawrey Leider bin ich darauf beschränkt, meine eigene Klasse zu schreiben und darf HashMaps usw. nicht verwenden. Ich denke, Ihr Argument bezüglich des Auslastungsfaktors ist gut, also habe ich es auf 0,5 reduziert, danke! –

+0

Sie können einen Leistungstest ausführen, um den optimalen Ladefaktor für Ihr Dataset zu ermitteln. Obwohl Sie Hashtable oder HashMap nicht verwenden können, können Sie den gesamten Code lesen. ;) –

Antwort

2

Da "die Wahrscheinlichkeit, dass die durch diese Methode zurückgegebene Zahl zusammengesetzt ist, 2^-100 nicht überschreitet" Ich denke, es ist vernünftig für Sie anzunehmen, sich auf die Rückgabe einer Primzahl zu verlassen.

0

nextProbablePrime() wird eigentlich für kryptografische Operationen verwendet, die (wirklich) große Zahlen suchen, die "wahrscheinlich prim" sind. Die Methode nextProbablePrime() gibt eine Zahl mit einer Wahrscheinlichkeit von 2^-100 als Primzahl zurück.

Ich glaube nicht, dass eine solche Methode für Ihre Bedürfnisse nützlich ist. Für angemessene Zahlen (wie die Größe einer Hashtabelle) können Sie einfach überprüfen, ob eine Zahl prim ist, indem Sie eine einfache, selbst erstellte Implementierung verwenden, insbesondere wenn eine hohe Leistung erforderlich ist.

0

Es ist gut für Ihren Zweck.

Besser wäre es, eine vorberechnete Liste von Hash-Tabellengrößen zu verwenden. Du brauchst wahrscheinlich nur ein halbes Dutzend oder so; Wählen Sie basierend auf der erwarteten Größe Ihrer Hash-Tabelle und wachsen Sie, wenn der Ladefaktor zu groß wird.

Die allgemeine Lektion besteht darin, alle möglichen Methoden zu nehmen, um die Komplexität Ihres Codes zu reduzieren. Sie schreiben eine Hashtabelle. Sie müssen sich keine Gedanken über Primzahlen machen.