2

Considering youtube video url (for example):

e.g. :

http://www.youtube.com/watch?v=-JVkaMqD5mI&feature=related

I'm talking about the -JVkaMqD5mI part. ( length=11)

lets calc the options :

a-z = 26     |
A-Z = 26     |_______ >    26+26+10+2 = 64 optional chars in 11 places  = 64^11 = 73786976294838206464
0-9 = 10     |
-_ = 2       |

Im still wondering , when they generate a new ID for a new video , do they still check if already exists ?

Im sure they have some list( db or cache) of the "already generated ID's" ... ( and if they do , do they aquire the db each time ? or in cache ? or...?)

Or do they rely on the 1.355252...e-20 chances which is almost 0.( but still !=0)

What is the best practice solutions for this kind of situations ?

4

2 に答える 2

6

ええと、彼らがビデオで英数字のIDを使用しているという理由だけで、彼らが単にそれらの文字をランダムに生成しているという意味ではありません。その文字列がランダムなゴミのように見えるからといって、ランダムではなく、そこにたくさんの情報が隠されていることを保証します。

簡単な答え:いいえ、文字のランダムなシーケンスを生成することは現実的ではありません。次に、a)衝突がないことを期待するか、b)おそらく数十億のレコードをチェックして、すでに衝突がないかどうかを確認します。

中央の「最後に使用されたID」を維持し、以前に使用されていないIDを生成することが数学的に保証された方法で、「最後に使用されたID」から「次に使用するID」に移動するアルゴリズムを使用する方がはるかに簡単です。連続したID番号の場合、式は単純にf(n + 1)= f(n)+1 です(たとえば、最後に使用されたIDは150で、次のIDは151になります。これまでのところ未使用が保証されています)が、あなたのニーズに合う独自の式。

于 2012-09-22T13:25:42.700 に答える
0

それらの目的のために、通常はハッシュ関数と呼ばれるものが使用されます。他のデータから固定長のデータまたは文字列を作成します。これは、任意の長さまたは型にすることができます。そのために何らかのアルゴリズムを使用します。一例は、あなたが与えたもので、文字を数字にエンコードしています。

ハッシュ関数は見た目ほど単純ではありません。それらの背後には深刻な数学的方法が存在する可能性があり、それらが完全または最小完全であることを証明しようとすることができます (この例ではそれほど重要ではありません)。

完全関数は、2 つの異なる入力に対して同じ出力を生成できないハッシュ関数です。そのようなハッシュ関数があれば、重複をチェックする必要はありません。そのためには、ハッシュ関数が完全であることを証明する必要があります。

于 2012-09-22T13:11:04.840 に答える