как сделать схемку получения, без разницы какого хеша, но что бы он был без возможности дешифровки
хэшить надо строку ввиде 8 байт, FF00FF00FF00FF00, она постоянно меняется. Чем меньше хэш по количеству символов тем лучше
нужно получить как можно большую скорость. Мне пока удалось вот таким путём сделать 6-7 мкс:
code_34857.txt
Этот топик читают: Гость
Ответов: 1343
Рейтинг: 31
|
|||
карма: 2 |
| ||
файлы: 1 | code_34857.txt [987B] [189] |
Ответов: 2059
Рейтинг: 132
|
|||
но что бы он был без возможности дешифровки Как это надо понимать? Все хеш функции являются такими по определению. Чем меньше хэш по количеству символов тем лучше Тем больше повторений. Простейшая хеш-функция для строк. Не бог весть что, зато быстрая. Это для текста, переделай для диапазона FF - 00 function Hash(const aKey: string; aTableSize: integer): integer; const M=31; var i: integer; begin Result:=0; for i:=1 to length(aKey) do Result := (M*Result+ord(aKey[i])) mod aTableSize; end; Легко перевести в asm, но выигрыша большого не будет. |
|||
карма: 6 |
|
Ответов: 1343
Рейтинг: 31
|
|||
flint2 писал(а): Тем больше повторений.это верно, но и вариаций строки в пределах 1000 я так думаю |
|||
карма: 2 |
|
Ответов: 4630
Рейтинг: 749
|
|||
А что, компонента CRC16_32 недостаточно? CRC16 даёт сумму длиной 2 байта
Rysik писал(а): вариаций строки в пределах 1000 я так думаю- длиной 16 символов (HEX-значения) - 16^16 - длиной 8 ASCII символов - 256^8 [offtop]в этих двух случаях количество комбинаций одинаково[/offtop] |
|||
карма: 26 |
|
Ответов: 1343
Рейтинг: 31
|
|||
Netspirit писал(а): А что, компонента CRC16_32 недостаточно?ммм, ТОПИК НАДО ЧИТАТЬ ВНИМАТЕЛЬНЕЙ! Rysik писал(а): нужно получить как можно большую скоростьразве эта фраза ни на что не насторожила ? |
|||
карма: 2 |
|
Ответов: 4630
Рейтинг: 749
|
|||
code_34863.txt
Компонент CRC16_32 можно ускорить, если не вычислять таблицу при каждом вызове методов, а только при изменении Polynom/Init. |
|||
карма: 26 |
| ||
файлы: 1 | code_34863.txt [4.2KB] [237] | ||
Голосовали: | Rysik |
Ответов: 1343
Рейтинг: 31
|
|||
Netspirit писал(а): Компонент CRC16_32 можно ускорить, если не вычислять таблицу при каждом вызове методов, а только при изменении Polynom/Init.хм действительно получше, но я уже реализовал по методу из шапки, ну придётся переделывать ------------ Дoбавленo в 11.54: ну пи... какой то, всю активную часть схемы убивает и останавливает, этот Inline, требуется читать данные каждые 0 мс, схема из шапки нормально работает в данном темпе, а вот этот IC ну ни в какую... |
|||
карма: 2 |
|
Ответов: 2059
Рейтинг: 132
|
|||
aKey - твоя строка.
length - длина строки aTableSize - константа - величина твоей таблицы (если умножить на три, то повторов практически не будет), т.е. если нужна разрядность байт, то 255, если dword, то FFFFFFFF. M - константа. Надо подобрать число. В твоём случае наверное 000F00. Всю малину портит 00. По этому может такой алгоритм и не подойдёт. Вот алгоритм которым я пользуюсь для хеш таблиц. Нулевые значения тут тоже пройдут. Выдрал из компонента. code_34876.txt Два компонента: http://forum.hiasm.com/forum_serv.php?q=56&id=3855 Обеспечивают доступ к значениям таблицы по левой части ключа. Типа: бла бла бла=тра та та селёдка. Работает очень шустро. Таблицу из 800 000 правил строит за миллисекунды. Доступ по ключю - единицы микросекунд. Второй компонент применяет к ключу маску и восстанавливает в правой части значения под звёздочками. Типа - все *но *ют=всё *но *ют. Ключ "все вино выпьют" значение по ключу "всё вино выпьют". |
|||
карма: 6 |
| ||
файлы: 1 | code_34876.txt [1.8KB] [298] |
Ответов: 4630
Рейтинг: 749
|
|||
Rysik писал(а): но я уже реализовал по методу из шапкиRysik писал(а): требуется читать данные каждые 0 мс0 мс - любые операции требуют времени для своего выполнения. Пиши всю программу на ассемблере. |
|||
карма: 26 |
|
Ответов: 2059
Рейтинг: 132
|
|||
карма: 6 |
| ||
файлы: 1 | code_34877.txt [524B] [295] |
Ответов: 1841
Рейтинг: 369
|
|||
Сложно однако пытаться выжать из идеи максимум скорости, когда тебе даже архитектура пакета, палки в колёса кидает
Обычный цикл с передачей данных (без обработки), уже отъедает львиную долю тактов ядра: Пример
[offtop]Я тут "пошаманил" у себя, ради интереса :
Ускорить можно, только подключив к процессу - GPU. [/offtop] |
|||
карма: 1 |
|
Ответов: 1343
Рейтинг: 31
|
|||
Netspirit писал(а): Интересно, откуда ж у тебя эти данные поступают...ну с какой скоростью они вылетают я не замерял но скорость чтения составляет 0 мс от простого таймера, читает данные простой ReadProcessMemory, по 8 байт ------------ Дoбавленo в 19.32: да и вообще уже по сути и не надо, ускорил с 17 мкс до 7 мкс, так клиенты говорят мол давай старую версию... не знаю конечно почему, но вероятно при большом количестве интерраций схема из шапки медленно работает и подвисает |
|||
карма: 2 |
|
Ответов: 4630
Рейтинг: 749
|
|||
А зачем контрольная сумма? Проверять не изменились ли данные? Если да, то их и так можно сравнивать с предыдущим значением.
|
|||
карма: 26 |
|
Ответов: 1343
Рейтинг: 31
|
|||
Netspirit писал(а): А зачем контрольная сумма?тупо прикрыть эти самые данные, они просто потом сравниваются через Position, и вот можно выловить легко данные, при включении и выключении тех или иных данных они заносятся в форматирование, и становятся целой строчкой разделённой, а Position ловит из потока и сравнивает со строчкой, если нашёл там такие то данные или такие то то идёт дальше схема по сути надо то записывать данные в массив и удалять их по мере включения, и этот массив сканить чем то очень быстро, и вот оптимальный вариант нашёл через компонент Position |
|||
карма: 2 |
|
Ответов: 2059
Рейтинг: 132
|
|||
Вообще толком не понятна задача.
Если хеш является индексом для идентификации данных, - это одно, если отслеживать изменения - это другое, то в данном случае и хеш не требуется, если из 8 байт получить 2, а по ним идентифицировать - смотри первое только бестолково. И что это такое FF00FF00FF00FF00 - маска?, частный случай, как пример? Если пример, то не удачный, который вводит в заблуждение. Тогда так FA0712DBCC54E809. P.S. Понятно. |
|||
карма: 6 |
|