IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> метод равномерного и дихотомического поиска
Catty
сообщение 14.09.2005 18:23
Сообщение #1


Бывалый
***

Группа: Пользователи
Сообщений: 239
Пол: Женский
Реальное имя: Юлия

Репутация: -  3  +


Нигде не могу в сети найти алгоритмы этих методов, если у кого то есть алгоритмы киньте сюда пожалуйста или дайте ссылку! :flowers: :flowers:


--------------------
For every evil under the sun
There is a remedy or there is none
If there is one - try to find it
If there is none - never mind it!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
klem4
сообщение 14.09.2005 18:26
Сообщение #2


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Цитата
2.3. Дихотомический (бинарный) поиск
Этот метод поиска предполагает, что множество хранится, как некоторая отсортированная (например, по возрастанию) последовательность элементов, к которым можно получить прямой доступ посредством индекса. Фактически речь идет о том, что множество хранится в массиве и этот массив отсортирован.

Суть метода заключается в следующем. Областью поиска (l, r) назовем часть массива с индексами от l до r, в которой предположительно находится искомый элемент. Сначала областью поиска будет часть массива (l, r), где l=1, а r=n, то есть вся заполненная элементами множества часть массива. Теперь найдем индекс среднего элемента m=(l+r) div 2. Если Key>A[m], то можно утверждать (поскольку массив отсортирован), что если Key есть в массиве, то он находится в одном из элементов с индексами от m+l до r, следовательно, можно присвоить l=m+1, сократив область поиска. В противном случае можно положить r=m. На этом заканчивается первый шаг метода. Остальные шаги аналогичны.

На каждом шаге метода область поиска будет сокращаться вдвое. Как только l станет равно r, то есть область поиска сократится до одного элемента, можно будет проверить этот элемент на равенство искомому и сделать вывод о результате поиска.

Запишем все сказанное в виде программы:

l := 1; r := n;
while (l<>r) do
begin
  m := (l+r) div 2;
  if Key>A[m] then l := m+1 else r := m;
end;
if A[l]=Key then <элемент найден> else <элемент не найден>;
Как уже было сказано, область поиска на каждом шаге сокращается вдвое, а это означает сложность T(log(n)).

Особого внимания здесь заслуживают операции добавления и удаления. Они должны сохранять массив отсортированным (лучше написать операции так, чтобы они не нарушали отсортированности массива, чем каждый раз сортировать его). Рассмотрим сначала добавление.

Чтобы при добавлении массив остался отсортированным, новый элемент должен быть вставлен в массив так, чтобы ему предшествовали меньшие элементы, а за ним следовали большие. То есть элементы, стоящие в месте вставки и за ним до конца массива должны быть сдвинуты на одну позицию в сторону конца массива:

i := n;
while (i>=1)and(A[i]>Key) do
begin
  A[i+1] := A[i]; {сдвигаем}
  Dec(i);
end;
A[i+1] := Key;
Inc(n);
Такая операция добавления имеет сложность T(n).

Удаление в том виде, в каком оно записано в разделе 2.1. сохраняет массив отсортированным.


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Catty   метод равномерного и дихотомического поиска   14.09.2005 18:23
klem4   RE: метод равномерного и дихотомического поиска   14.09.2005 18:26
klem4   Такое впечатление что просто хотят запудрить народ...   14.09.2005 18:35
Catty   я имела ввиду методы оптимизации: нам задано функц...   14.09.2005 18:59
klem4   конкретно то что ты написала можно сделать так : ...   14.09.2005 19:30
Catty   Это прямой перебор, а мне надо равномерный поиск...   14.09.2005 20:36
virt   дихотомия :: const _eps = 1E-7; .....................   14.09.2005 20:41
volvo   Catty, это все конечно хорошо, но функция Sin(x) -...   14.09.2005 20:42
virt   если я правильно догадываюсь то дихотомия это част...   14.09.2005 20:43
Catty   Volvo нужно искать глобальный минимум, тоесть самы...   14.09.2005 22:30
Catty   по идее оба метода должны находить самый минимальн...   14.09.2005 22:33
volvo   Ну, а как быть, если (опять же берем для примера y...   14.09.2005 22:39
Catty   Volvo забуть про sin(x) это я взяла для примера...   14.09.2005 22:51
virt   1) берется середина отрезка в котором ищется миним...   15.09.2005 7:29
Catty   спасибо рыбки! я уже во всем разобралась! ...   15.09.2005 19:31


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 21.07.2025 11:13
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"