Задача такая: имеются более 1000 заранее известных строк из 0 и 1 (0100101110101110010011111110010100011110010...) длиной от 32 до 255, в среднем 64.
Надо сравнить с ними одну строку посимвольно начиная слева и выбрать наиболее похожую, ничего особо сложного, кроме времени - на один цикл отводится не более 2 мсек
Решаем задачу в лоб code_12864.txt и получаем 4-5 секунд
Та же задача через IC code_12865.txt 40 мсек, уже лучше, но ещё далеко!
Преобразовываем строки из 1 и 0 в байты и символы и делаем побитное сравнение code_12866.txt - 4 мсек! уже рядом, ещё бы наполовину сократить, но светлые мысли кончились
Кто сможет помочь, у кого они (светлые мысли) роятся
Этот топик читают: Гость
Ответов: 8928
Рейтинг: 823
|
|||
карма: 19 |
| ||
файлы: 3 | code_12864.txt [5.8KB] [216], code_12865.txt [5.5KB] [197], code_12866.txt [7KB] [195] |
Ответов: 3514
Рейтинг: 184
|
|||
FTCG?
|
|||
карма: 0 |
|
Ответов: 5227
Рейтинг: 587
|
|||
Леонид, непонятно только наиболее похожую, в процентном отношении или же обсолютно похожую?
|
|||
карма: 4 |
|
Ответов: 3851
Рейтинг: 159
|
|||
Леонид писал(а): выбрать наиболее похожуюпо длине и содержанию или наоборот - по содержанию и длине? для содержания можно попробовать XOR с подсчётом нулей (или единиц).. ------------ Дoбавленo в 21.22: andrestudio, наиболее допускает неточности.. |
|||
карма: 0 |
|
Ответов: 5227
Рейтинг: 587
|
|||
Андрей., меня вот это насторожило
Леонид писал(а): Преобразовываем строки из 1 и 0 в байты и символы и делаем побитное сравнениене знаю толи это но для обсолютного сравнения так |
|||
карма: 4 |
| ||
файлы: 1 | project.zip [12.7KB] [176] |
Ответов: 8928
Рейтинг: 823
|
|||
Астрамак, FTCG по скорости приближается к IC, но там не хватает компонентов.
andrestudio, наиболее похожую, не абсолютно равную, по первым слева на длину стандартной строки. Андрей., применил сдвиг и сравнение: ((_Chr shr k) and 1)=((_ChrSt shr k) and 1), где k - от 0 до 7 для байта. |
|||
карма: 19 |
|
Ответов: 3851
Рейтинг: 159
|
|||
Леонид, я плохо понимаю эту формулу, но думаю XOR будет правильнее ведь при сдвиге определяется равенство побайтно, а в байте может быть одно отличие, а может и больше, или требуется уточнить условие - что значит наиболее
|
|||
карма: 0 |
|
Ответов: 8928
Рейтинг: 823
|
|||
Андрей., вернее not(A xor B) - но операция выдаёт число: not(16 xor 25)=246, а мне нужна сумма единичек в двоичном представлении этого числа, т. е. 246=11110110 шесть шт. единичек, именно поэтому и сдвигаю байт 8 раз и 8 раз сравниваю с 1, переводить 246 делением на 2^n ещё дольше
------------ Дoбавленo в 22.37: andrestudio, вероятность абсолютного совпадения мала (~1/2^64), да и время 150 мсек |
|||
карма: 19 |
|
Ответов: 3851
Рейтинг: 159
|
|||
Леонид, именно - с подсчётом колличества этих 1 (или 0)
------------ Дoбавленo в 22.47: осталось вычислить - какие методы работают быстрее - математические или текстовые (если не применять IC).. |
|||
карма: 0 |
|
Ответов: 373
Рейтинг: 108
|
|||
Если не секрет где вы собираетесь применять такое сравнение?
|
|||
карма: 0 |
|
Ответов: 8928
Рейтинг: 823
|
|||
Vlad.-, аналог нейроннй сети; не хватает денег, чтобы приобрести 256 шт. PIC и желания, что бы запрограммировать и распаять их
|
|||
карма: 19 |
|
Ответов: 199
Рейтинг: 44
|
|||
Может быть провести предварительно статистический анализ строк: соотношение и перемешенность 0 и 1, и т.д., затем начать проверку со статистически наиболее близких строк,
тем самым сократив кол-во проверок? |
|||
карма: 0 |
|
Главный модератор
Ответов: 2999
Рейтинг: 396
|
|||
Может пакет FASM поможет?
|
|||
карма: 6 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
Леонид, я выкладывал If_perc c ИИ - должен подойти. Сравнивает посимвольно и выводит процент совпадений.
Сейчас на работе, если не найдете, то вечером выложу. |
|||
карма: 25 |
|
Ответов: 1397
Рейтинг: 50
|
|||
Tad, а праздник???
|
|||
карма: 0 |
|