Kademliaプロトコルでは、ノードIDは160ビットの数値です。ノードはバケットに格納され、バケット0は最後のビットを除いてこのノードと同じIDを持つすべてのノードを格納し、バケット1は最後の2ビットを除いてこのノードと同じIDを持つすべてのノードを格納します。 160個のバケットすべてでオンになります。
新しいノードを配置する必要があるバケットを見つけるための最速の方法は何ですか?
バケットを単純に配列に格納しているので、次のようなメソッドが必要です。
Bucket[] buckets; //array with 160 items
public Bucket GetBucket(Int160 myId, Int160 otherId)
{
//some stuff goes here
}
明らかなアプローチは、最上位ビットから作業を進め、違いが見つかるまでビットごとに比較することです。巧妙なビットの調整に基づいたより良いアプローチがあることを望んでいます。
実用上の注意:私のInt160は20項目のバイト配列に格納されているため、この種の構造で適切に機能するソリューションが推奨されます。