![]() |
|
Модераторы: Poseidon |
![]()
|
|
| Proksima |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 24.11.2006 Репутация: нет Всего: нет |
Помогите, пожалуйста, написать на прологе сортировку бинарными включенниями.
Заранее благодарю. |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 5 Всего: 260 |
опиши алгоритм. постараюсь помочь.
|
|||
|
||||
| Proksima |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 24.11.2006 Репутация: нет Всего: нет |
Метод прямых вставок: Делаются проходы по части списка, и в его начале "вырастает" отсортированная последовательность. Можно считать, что эта последовательность упорядочена. По ходу алгоритма в нее будут вставляться все новые элементы. Поиск подходящего места для очередного элемента входной последовательности осуществляется путем последовательных сравнений с элементом, стоящим перед ним. В зависимости от результата сравнения элемент либо остается на текущем месте(вставка завершена), либо они меняются местами и процесс повторяется.
Алгоритм сортировки бинарными включениями представляет из себя оптимизированную версию алгоритма сортировки простыми вставками, отличие заключается в том, что при поиске место, на которое надо вставить элемент ai в уже упорядоченную совокупность a0 , ..., ai-1 , определяется алгоритмом деления пополам (отсюда и название алгоритма "бинарные включения" здесь понимаем как "включения делением пополам"). Вот сам алгоритм:
Эту же сортировку когда-то описывала на лиспе. Было задание в одной из лабораторных работ... А вот с прологом что-то не заладилось... Можно помочь?
Это сообщение отредактировал(а) Guedda - 25.11.2006, 08:22 |
||||
|
|||||
| Artemios |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 405 Регистрация: 14.8.2006 Где: Саратов, Россия Репутация: 2 Всего: 50 |
сделал немножко иначе, чем:
а именно, построил бинарное дерево сортировки, а затем линеаризовал его:
Проверка:
Это сообщение отредактировал(а) Artemios - 25.11.2006, 19:48 -------------------- fib = 1: 1: [ x+y | (x,y) <- zip fib (tail fib) ] |
||||||
|
|||||||
| Proksima |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 24.11.2006 Репутация: нет Всего: нет |
Artemios, большое спасибо!
|
|||
|
||||
| ImSassy |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 15.9.2009 Репутация: нет Всего: нет |
Proksima, помоги, пожалйста, у тебя случайно не осталось этой сортировки на лиспе? А то мне нужно лабу сдавать, а я вообще бум-бум(((
|
|||
|
||||
| Rodman |
|
|||
|
CIO ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 6144 Регистрация: 7.5.2006 Где: Ukraine ⇛ Kyiv ci ty Репутация: 26 Всего: 122 |
|
|||
|
||||
| brianosally |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 22.12.2010 Репутация: нет Всего: нет |
%линеаризация(уничтожение многоуровневости списка к пр. [a,[b,[c]]] --> [a,b,c]) lineariz([H|L],L1):-lineariz(H,LS),lineariz(L,LS2),union_lists(LS,LS2,L1). lineariz([],[]). lineariz(H,[H]). [a,[b,[c]]] --> [a,b,c] [a,[b,[c]]] --> [a,b,c,[]] [a,[b,[c]]] --> [a,b,c,[],[]] [a,[b,[c]]] --> [a,b,c[],[],[]] ........................................... [a,[b,[c]]] --> [a,b,[c]] и т. д. Но если добавить ! в выражение, то обратный ход отсечется, как и куча лишних вариантов: %линеаризация(уничтожение многоуровневости списка к пр. [a,[b,[c]]] --> [a,b,c]) lineariz([H|L],L1):-lineariz(H,LS),lineariz(L,LS2),!,union_lists(LS,LS2,L1). lineariz([],[]). lineariz(H,[H]). результат : [a,[b,[c]]] --> [a,b,c] %второй вариант у меня так и не заработал, но может кто усовершенствует: %lineariz([[H|L]|H1],L2):-lineariz([H|[L|H1]],L2). %lineariz([H|[L|H1],[H|L2]):-lineariz([L|H1],[H|L2]). |
|||
|
||||
![]()
|
| Правила форума "Центр помощи" | |
|
|
ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Более подробно с правилами данного раздела Вы можете ознакомится в этой теме. Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Центр помощи | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |