Привет Vladislav!
02 Jan 07 14:28, Vladislav Baliasov писал Alex Mogilnikov:AM>> если 0, в качестве AM>> результата берется младший байт адреса, если 1 - старший. Если AM>> адреса разные, у них гарантированно различается либо младший, AM>> либо старший байт.
VB> Hеэффективно.
Возвращать один или другой байт аргумента по условию неэффективно??? Тебе что, надо успеть это сделать за перу наносекунд? :) Или ты что-то другое имел в виду под "неэффективностью"?
VB> В какой-то мере это даст эффект, но как-то "неполноценно".
В смысле, не всегда работает? Условию задачи удовлетворяет. Приведи пример двух разных адресов, у которых совпадали бы попарно и младшие, и старшие байты. :) Или ты что-то другое имел в виду под "неполноценно"? :)
VB> Хотелось бы лучшего "распыления".
Метафоричности твоего изложения может позавидовать иной писатель. :) Hо меня очередное закавыченное слово ставит в тупик. Я вспомнил разве что старый сериал "Капитан Пауер и солдаты будущего", где героев распыляли в цифровой код. Причем они этого страшно боялись. :)
VB> Ведь у меня VB> изначально не два произвольно взятых уникальных номера, а гораздо VB> больше, соответственно, и вероятность пересечения много больше.
Тут ничего не поделаешь. Вероятность совпадения любого хэша зависит только от его разрядности и кол-ва экспериментов (попробованных номеров). Для
8-битного это будет что-то типа 1 - (255/256)^С(2,N), где C(2,N) - кол-во комбинаций 2 из N.Hо у тебя-то вопрос был не в вероятности...
VB> И я их VB> постепенно отсеиваю (когда могу распознать - т.е. когда отклики не VB> пересекаются). В предложенном тобой варианте я имею только две VB> комбинации, этого недостаточно.
Ты хочешь сказать, что, например, для _трех_ номеров 0x1234, 0x1256 и
0x3456 всегда найдется пара, у которой совпадет либо старшие, либо младшие байты, и уникальный результат не будет получен никогда? Тогда это совершенно другая постановка задачи.Ты хочешь некую функцию H8(N16, R16), которая гарантирует, что для любого значения N16 существует такое значение R16, которое даст уникальный для данного N16 результат? В смысле, что для остальных 65535 значений N результат (при том же R) будет другим? Такому условию удовлетворит например такая функция (псевдокод):
H8(N16, R16) { D16 = N16 - R16; return low(D16) | hi(D16); }
Гарантируется, что для любого N16 существует такое значение R16, при котором результат равен нулю, причем нулю он может быть равен _только_ для данного N16.
Hу, ты пока думай, а я спать пойду... :)))
Всего наилучшего, [Team PCAD 2000] Алексей М. ... Я удалю твою жажду. Без возможности восстановления.