drBatty писал(а): ↑31.05.2012 12:11
РАЗНЫЕ биты приводят к делению
ЛЮБЫЕ биты приводят к делению. Это спуск по дереву: равны — одна ветка, не равны — другая. Учитывая структуру дерева, когда биты не равны, мы сразу попадаем в лист дерева и спуск прекращается. Т.е. мы не считаем ни число различающихся битов (расстояние Хэмминга), ни число единичных. Мы ищем ОДИН, ПЕРВЫЙ различающийся бит.
drBatty писал(а): ↑31.05.2012 12:11
внимательно прочтите мой пост: Интернет без серверов
в первой строке кода вычисляется метрика. Далее она у меня разворачивается. Для лучшего понимания.
Так Вы про Kademlia или про какую-то другую сеть из Вашей головы? Приведите алгоритм Вашей сети, как я сделал выше, тогда будет о чем говорить.
Пока же, я вижу, что у Вашей метрики мизерный диапазон [0…160] для ключей SHA-1, в отличие от [0…2^160] у XOR-метрики, которой пользуется Kademlia. Т.е. вообще не очевидно, что при такой метрике поиск будет сходиться.
drBatty писал(а): ↑31.05.2012 12:11
Prefix(id1, id2). И да, Вы таки ещё не дали код этой функции.
Она вообще не существенна. См.
http://dsa.pp.ru/share/KademliaAlgorithmNoPrefix.html — переформулированный алгоритм, в котором вообще нет префиксов, только сравнение метрик.
Но если Вы настаиваете, то пожалуйста:
Код: Выделить всё
size_t prefix(unsigned x, unsigned y) {
size_t result = 8 * sizeof(unsigned);
for (unsigned z = x ^ y; z; --result, z >>= 1);
return result;
}