Ich bin gespannt, wie Orte wie imgur (die jedes Bild durch einen eindeutigen 5-stelligen Stift identifizieren) dies ausführen . Natürlich hätte man mindestens eine O(n) Lösung (oder bestenfalls O(n log (n)) je nach Algorithmus), aber da ich davon ausgehe, dass n Millionen sein wird, wird dies eine sein eine nicht realisierbare Lösung.

-1
Louis93 24 Nov. 2013 im 23:02

4 Antworten

Beste Antwort

Imgur verwendet höchstwahrscheinlich einen Primärschlüssel "Autonumber" in einer Datenbank. Die Zahlen in einem solchen Schlüssel sind garantiert eindeutig. Sie werden in sequentieller Reihenfolge zugewiesen und nie wieder verwendet (selbst wenn der von ihnen identifizierte Datensatz gelöscht wurde).

Sie können diese Zahlen beliebig mischen, einschließlich der von imgur verwendeten alphanumerischen Kombinationen. Eine Möglichkeit besteht darin, einen Base 36-Encoder zu verwenden, der für die Nummer 12345678 zurückgegeben wird

7CLZI

In Javascript ist das ganz einfach:

(1234567890).toString(36)  // => "kf12oi"
parseInt("kf12oi",36) // => 1234567890

Obwohl Sie diese Konvertierungen höchstwahrscheinlich auf dem Server und nicht im Browser durchführen.

base58 erhalten Sie Groß- und Kleinbuchstaben sowie Zahlen:

15FsU

Siehe auch
http://convertxy.com/index.php/numberbases/

5
Robert Harvey 24 Nov. 2013 im 19:34

Ich bin mir nicht ganz sicher, ob ich hier das richtige Ende des Sticks habe, aber vorausgesetzt, Sie möchten eine zufällige Zeichenfolge generieren und diese dann speichern, um auf etwas zuzugreifen, das Sie nur überprüfen müssen, ob es sich in Ihrem Geschäft befindet.

Wenn Sie eine SQL-DB-Tabelle mit einem eindeutigen Index für die Zeichenfolge hatten, können Sie einfach eine Einfügung versuchen. Wenn die Einfügung aufgrund eines wiederholten eindeutigen Schlüssels fehlschlägt, wissen Sie, dass Sie ihn verwendet haben. Es wäre fast augenblicklich.

1
Mark Fee 24 Nov. 2013 im 19:10

Sie können einen sequentiellen numerischen Schlüssel verwenden und ihn dann mit einem multiplikative Inverse. Dann base 64 codieren Sie es, um Ihren String zu erhalten.

Das Schöne ist, dass das Wiederherstellen des Schlüssels einfach genug ist: Decodieren Sie die Basis 64, führen Sie die multiplikative Inverse erneut durch, und Sie haben den Schlüssel.

2
Jim Mischel 24 Nov. 2013 im 20:02

Dies könnte mit einem http://en.wikipedia.org/wiki/Bloom_filter erfolgen. Dies ist ein sehr effizienter Algorithmus. Es hat den Nachteil einer kleinen Anzahl von Fehlalarmen.

1
wvdz 24 Nov. 2013 im 19:08