Какой самый быстрый (параллельный?) Способ найти подстроку в очень длинной строке с помощью побитовых операторов?
Например, найти все позиции последовательности "GCAGCTGAAAACA" в геноме человека http://hgdownload.cse.ucsc.edu/goldenPath/hg18/bigZips/hg18.2bit(770 МБ)
* алфавит состоит из 4 символов («G», «C», T, «A»), представленных с использованием 2 битов: «G»: 00, «A»: 01, «T»': 10,' C ': 11
* можно предположить, что строка запроса (более короткая) имеет фиксированную длину, например, 127 символов
* по быстрому, я имею в виду, не включая предварительно-обработка / индексирование времени
* файл будет загружен в память после предварительной обработки, в основном будут миллиарды коротких строк, которые нужно искать в большей строке, все в памяти.
* по битам, потому что я ищу самый простой и быстрый способ поиска битовой комбинации в большом битовом массиве и как можно ближе к кремнию.
* KMP не будет работатьну а алфавит маленький
* C-код, машинный код x86 был бы интересен.
InpuОписание формата t (.2 бита): http://jcomeau.freeshell.org/www/genome/2bitformat.html
Связано:
Самый быстрый способ поиска битовой комбинации в потоке битов
Алгоритм помощи!Быстрый алгоритм поиска строки с партнером
http://www.arstdesign.com/articles/fastsearch.html
http://en.wikipedia.org/wiki/Bitap_algorithm