1

一意の番号を生成する必要があり、連続した方法を考えることができます。たとえば、0から始まるカウンターを作成できます。一意の番号が必要になるたびに、カウンターを返し、カウンターを1増やします。これは、次のようになるまで機能します。データタイプ(たとえばint)の範囲を超える一意の番号が多数ある場合もあります。また、生成された一意の番号。たとえば、カウンタは10ですが、4と5は使用されなくなったため、再利用できます。使用済みの場合、すべてをデータ構造に保持せずに再利用可能な番号を使用するにはどうすればよいですか?

ありがとう!

4

1 に答える 1

0

すでに配った番号で代用できますか?その場合は、任意の番号が返されたらすぐに、最後に配布された番号に置き換えて、割り当てカウンターをデクリメントします。返された最新のものである場合は、置換をスキップします。

そうでなければ、あなたができる最善のことは、範囲のソートされた配列を保持することだと思います。

新しい番号を割り当てるには:

配列が空の場合は、新しい範囲を作成し、その中の唯一の数値を返します。

それ以外の場合は、配列の最初の範囲を取得し、その長さを1増やします。その数を返します。それによって最初の2つの範囲が結合するかどうかを確認します。もしそうなら、それらを単一の範囲にマージします。

数値を返すには:

それが含まれる範囲を見つけます(たとえば、バイナリ検索によって。NSOrderedSet展開計画で許可されているかどうかを確認します)。返された数値が範囲のいずれかの端にある場合は、範囲を縮小してください。それ以外の場合は、返された番号を穴として1つを2つに分割します。

于 2012-10-30T05:54:59.007 に答える