2016-08-19 16 views
0

私は、疑似セーバーバージョン番号(メジャー、マイナー、パッチ番号のみを使用している)をインデックスファイルに依存するシステムに取り組んでいます。セミバーの数値と順序付け可能なハッシュサム

このように比較や検索が楽しく楽しくなるように、これらのバージョン番号の数値「ハッシュ」を計算しようとしています。この数値のハッシュは、次のプロパティ(極端な例以下)を持っている必要があります。

Hash(1.0.500) < Hash(1.1.0) < Hash(1.3000.0) < Hash(2.0.0) 

私はすでにそれぞれの位置を重み付けなど、またはこの

int hash = 17; 
hash = hash * 42 + Major; 
hash = hash * 42 + Minor; 
hash = hash * 42 + Patch; 

しかし、これらの缶のすべてのような幅広いソリューションを試してみました私は汚れた道を選んだと、このような衝突を避けるために大きな乗数のために行くことができた

Hash(1.0.1500) > Hash(1.1.0) 

(乗数または重量以下)の制限を迅速に到達(最小の組み合わせ数を確保してください)、クリーナーパスを選択することをお勧めします

これも可能ですか?

+0

インデックスの各部分にはサイズ制限がありますか? – kaushik

+0

私はサイズ制限を導入するのを避けたかったのですが、ヘンリーの反応に関しては、私は – Binary9

答えて

0

私が正しく理解していれば、注文が保存されるように3つのコンポーネント(辞書順に並べられた)を持つバージョン番号を単一の自然数に変換することを試みます。これは実際にはハッシュではありません。

コンポーネントのサイズに上限がある場合は、これは簡単です。最大成分値よりも大きい乗数を使うだけです。

このような上限がない場合、それは不可能です。 0.1.0が数Nにマッピングされるとすると、すべてのバージョン0.0.xは、より小さいNにマッピングされなければならず、無限に多い場合は不可能である。

+0

にしなければならないと思いました。私が持っていたもう一つのアイデアは、グループ全体またはバージョンを使って、後でそのグループに追加されたバージョンは、ロジックを破壊する可能性があります。 これは純粋な意味でのハッシュではないことがわかります(それが引用符で囲まれています)。とにかく答えてくれてありがとう – Binary9

関連する問題