ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
5 мая
276088 Топик полностью
fk0, легенда (03.10.2011 14:16, просмотров: 76) ответил MegaJohn на Замутил оптимизацию поиска пришедшей строки в UART от модема. Если расположить сравниваемые строки в алфавитном порядке, и искать как на рисунке[>] то достиг ускорения на 20% чем куча strcmp. Есть вариант еще одного ускорения: считать тупо сумму
Не уподобляйся mazur'у, а? На ассемблере ещё перепиши. Есть классические алгоритмы поиска подстроки в тексте -- Кнута-Морриса-Пратта, например. Ассемблеристы, конечно, могут и не знать. Только в твоём случае можно тупо каждую строчку тупо 50 раз сравнивать и не морочить мозг. Это всё актуально на хотя бы килобайтах, а не битах и байтах. Ознакомься с литературой. "Алгоритмы и структуры данных", Ахо, Хропкрофт, Ульман, например. Там ясно сказано, что практически все "эффективные" алгоритмы сливают тупому strcmp на малом наборе данных. И с хешем то же самое. И про вред преждевременной оптимизации тоже неплохо бы знать. Вполне возможно, что в твоём приложении разные строки интересны разным модулям программы и совершенно невозможно составить словарь на этапе компиляции (bsearch это тоже касается, к слову), да и много ещё чего. И самое главное -- этот strcmp() у тебя 0.5% процессорного времени и гоняться за ним никакого смысла. Я тебе даже больше скажу, твои самодельные побайтовые алгоритмы могут обосраться перед качественным strcmp() на 32-битном процессоре.
[ZX]