2016-02-01 5 views
0

Мы пытаемся реализовать самое длинное префиксное соответствие адресов IPv6. Каков наилучший способ представления адресов IPv6 для эффективного выполнения этого вычисления (максимально длинный префикс).Максимальное соответствие префикса IPv6

IPv6-адреса обычно представлены в массиве [Byte]. (IPv6-адреса обычно представлены в массиве [Byte] [16]).

Чтобы найти самое длинное префиксное совпадение, нам нужно преобразовать адреса в BitSet (или какое-то представление массива бит), а затем найти самый длинный префикс.

Новинка на этот уровень стека, и интересно, есть ли что-то, что у меня отсутствует.

Любые указатели, которые помогут мне двигаться в правильном направлении, высоко оценены.

FYI, это на Scala. (Таким образом, любые указатели, связанные с JVM, были бы полезны)

ответ

0

Если вы просто сохраняете свои оригинальные два массива и просматриваете байты с циклом while до тех пор, пока они не будут идентичными, вы должны быть примерно такими же быстрыми, как вы можете быть , После того, как вы получите удар, если вы хотите знать, что укусил это, используйте

java.lang.Integer.numberOfLeadingZeros((a[i] << 24)^(b[i] << 24)) 

подсчитать, сколько битов в пределах i го индекса (при условии a и b ваши массивы) совпадают.

Можно подумать о преобразовании в более крупный числовой тип, например Long, но, как правило, вы займете столько времени на преобразование, сколько хотите, чтобы найти совпадение, поэтому, если у вас нет более сложной побитовой математики адресов, вы также можете хранить его как байты.

 Смежные вопросы

  • Нет связанных вопросов^_^