2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Поиск в строке делением пополам (у Вирта ошибка?)
Сообщение18.06.2009, 12:41 
Аватара пользователя


31/05/09
117
Calgary, AB
Добрый день,

в книге Н. Вирта "Алгоритмы и Структуры данных" нашел вот такой код :

Код:
T : ARRAY [0..N-1] OF String;
x : String;
....
L := 0; R := N;
WHILE L < N DO BEGIN
    m := (L + R) div 2; i := 0;
    WHILE (T[m, i] = x[i]) and (CHR(x[i]) <> #0) DO i := i + 1;
    IF T[m, i] < x[i] THEN L := m + 1 ELSE R := m;
END;
IF R < N THEN BEGIN
    i := 0;
    WHILE (T[R, i] = x[i]) and (x[i] <> #0) DO i := i + 1;
END;
(* (R < N) and  (T[R, i] = x[i]) фиксирует совпадение *)


Не могу понять с какой целью R присваивается значение N, если массив определен как
Код:
T : ARRAY [0..N-1] OF String;
Если положить
Код:
R := N - 1;
то программа будет работать в общем случае не хуже, а в лучшем случае на короче 1 проход цикла.
Или я что-то упустил?

 Профиль  
                  
 
 Re: Поиск в строке делением пополам (у Вирта ошибка?)
Сообщение18.06.2009, 14:53 
Заслуженный участник
Аватара пользователя


01/08/06
3054
Уфа
Посмотрите внимательно, что будет в этом случае, если N=2, например. В этом случае до элемента с индексом 1 никогда дело не дойдёт (оператор div округляет в сторону нуля).

Вообще (не помню, кто сказал) двоичный поиск --- это такая вещь, которую никто никогда с первого раза правильно не напишет :)

 Профиль  
                  
 
 Re: Поиск в строке делением пополам (у Вирта ошибка?)
Сообщение19.06.2009, 06:47 
Аватара пользователя


31/05/09
117
Calgary, AB
Цитата:
Посмотрите внимательно, что будет в этом случае, если N=2, например. В этом случае до элемента с индексом 1 никогда дело не дойдёт (оператор div округляет в сторону нуля).


Да, все правильно, спасибо.

Цитата:
Вообще (не помню, кто сказал) двоичный поиск --- это такая вещь, которую никто никогда с первого раза правильно не напишет :)


тогда что насчет поиска Кнута-Морриса-Пратта?

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group