Mein erstes Problem ist, dass ich ein sehr schnelles, spärliches Array in C # implementieren muss. Ursprüngliche Idee war, ein normales Dictionary<uint, TValue>
zu verwenden und es in meine eigene Klasse zu legen, um nur den TValue
type Parameter freizulegen. Stellt sich heraus, das ist ziemlich langsam.
Meine nächste Idee bestand also darin, jede ganze Zahl im benötigten Bereich ( UInt32.MinValue
bis UInt32.MaxValue
) einem Bucket von einiger Größe zuzuordnen und zu verwenden. Ich suche also nach einer guten Möglichkeit, eine vorzeichenlose Ganzzahl X einem Bucket Y zuzuordnen, zum Beispiel:
Ordnen Sie die Zahlen 0-1023 auf 8 verschiedene Buckets zu, die jeweils 128 Zahlen enthalten, 0-127, 128-255.
Aber wenn jemand eine schnellere Möglichkeit hat, ein schnelles Sparse-Array in C # zu implementieren, würde das auch am meisten geschätzt werden.
Ich habe auch festgestellt, dass Dictionary<K,V>
langsam ist, wenn der Schlüssel eine ganze Zahl ist. Ich weiß nicht genau, warum das so ist, aber ich habe eine schnellere Implementierung der Hashtabelle für uint
und ulong
keys geschrieben:
Vorbehalte / Nachteile:
Der 64-Bit-Schlüssel (Schlüssel ist ulong
) ist generisch, aber der andere (Schlüssel ist uint
) nimmt int
-Werte an, weil das alles ist, was ich zu der Zeit brauchte; Ich bin sicher, dass Sie dies leicht generisch machen können.
Gegenwärtig bestimmt die Kapazität die Größe der Hashtabelle für immer (d. h. sie wächst nicht).
Es gibt 101 verschiedene Möglichkeiten, Sparse Arrays zu implementieren, abhängig von Faktoren wie:
Die meisten Lehrbücher haben einen Abschnitt mit spärlichem Array, bei dem Google einfach viele Treffer erzielt. Sie müssen dann den Code in C # übersetzen, oder einfach den Code verwenden, den jemand anderes geschrieben hat, ich habe zwei ohne viel Aufwand gefunden (ich weiß nicht, wie gut das ist)