Re: подстроки
- From
- Oleg Khovayko ()
- To
- Dmitry Kitanin
- Date
- 2003-01-18T01:25:09Z
- Area
- RU.ALGORITHMS
From: Oleg Khovayko <olegh@hotpop.com>
Dmitry Kitanin wrote:
> Меня интересовал алгоритм поиска для 1го символа с временем =const,не зависящим
> от длины строки в которой ищем. Такие алгоритмы вообще существуют? Или это в
> принципе не возможно? Предобработка меня не пугает.
Ну тогда заводишь массив из 256 integer-ов, делаешь один проход по
строке, и делаешь предобработку - складываешь в этот массив позицию
первого символа для всех симовлов:
statiс int *mas;
void pre_process(const char str) {
unsigned const char *p;
mas = malloc(0400 * sizeof(int));
memset(mas, ~0, 0400);
for(p = str; *p; p++)
if(mas[*p] < 0) mas[*p] = p - str;
}
А потом делаешь поиск:
int char_pos(const unsigned char x) {
return mas[x];
}
Вот тебе и время поиска любого первого символа за время, не зависящее от
длины строки. Ибо все время уже было потрачено на предобработку.
--- ifmail v.2.15dev5
* Origin: Demos online service (2:5020/400)