Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Prolog
Перезагрузить страницу коллектор списков
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Alex63 Alex63 вне форума
Member
 
Сообщений: 47
Сказал(а) спасибо: 1
Поблагодарили 1 раз в 1 сообщении
Регистрация: 11.05.2009
По умолчанию коллектор списков - 26.03.2018, 15:27

Как создать список не повторяющихся элементов, используя коллектор списков
list
::removeConsecutiveDuplicates(
[ X || person(X, _) ])

не используя removeConsecutiveDuplicates. Возможно ли как то вставить условие типа такого
[ [X|T] ||person(X, _), not(list::isMember(X, T)]
чтоб алгоритм был эффективнее.
Ответить с цитированием
  (#2 (permalink)) Старый
SergeMukhin78 SergeMukhin78 вне форума
Member
 
Сообщений: 559
Сказал(а) спасибо: 17
Поблагодарили 35 раз(а) в 35 сообщениях
Регистрация: 28.03.2012
По умолчанию 26.03.2018, 16:56

почитайте комментарии к предикатам removeConsecutiveDuplicates , removeDuplicates и removeDuplicatesEq.

Ваш пример немного неверный, но по идее он даёт сложность O(N^2),
а removeDuplicates O(N ln N).
. По скорости впереди removeConsecutiveDuplicates, но там серъезные ограничения на список.

Посмотрите реализацию этих предикатов.
Ответить с цитированием
  (#3 (permalink)) Старый
aag aag вне форума
ушёл... не вернётся)))
 
Сообщений: 3,400
Сказал(а) спасибо: 0
Поблагодарили 82 раз(а) в 82 сообщениях
Регистрация: 29.11.2008
По умолчанию 26.03.2018, 18:00

Если из базы, то мона не заморачиваясь:

... = [ X || person(X, _), retractAll(person(X,_)) ]
Ответить с цитированием
  (#4 (permalink)) Старый
SergeMukhin78 SergeMukhin78 вне форума
Member
 
Сообщений: 559
Сказал(а) спасибо: 17
Поблагодарили 35 раз(а) в 35 сообщениях
Регистрация: 28.03.2012
По умолчанию 26.03.2018, 18:13

Цитата:
Сообщение от aag Посмотреть сообщение
= [ X || person(X, _), retractAll(person(X,_)) ]
решение красивое, но O(N ^ 2) и опустошает базу
Ответить с цитированием
  (#5 (permalink)) Старый
aag aag вне форума
ушёл... не вернётся)))
 
Сообщений: 3,400
Сказал(а) спасибо: 0
Поблагодарили 82 раз(а) в 82 сообщениях
Регистрация: 29.11.2008
По умолчанию 26.03.2018, 18:22

Для эффективности нехай базу в мультимэп заколачивает... Список ключей - ответом.
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
SergeMukhin78 SergeMukhin78 вне форума
Member
 
Сообщений: 559
Сказал(а) спасибо: 17
Поблагодарили 35 раз(а) в 35 сообщениях
Регистрация: 28.03.2012
По умолчанию 26.03.2018, 18:27

Цитата:
Сообщение от aag Посмотреть сообщение
Для эффективности нехай базу в мультимэп заколачивает... Список ключей - ответом.
да, тут O(N ln N) но константа очень большая и памяти много (т.е. обгонит O(N^2) не скоро). Уж лучше делать как в pfc
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
конкатенация списков СанекКенас Haskell 5 07.12.2016 23:17
Сравнение списков Alda Lisp 5 13.01.2012 12:59
Рекурсивная обработка списков Devil1991 Prolog 0 20.09.2010 21:01
Обработка списков Svoboda Prolog 8 28.06.2010 12:05
Обработка списков Dj_John Prolog 5 18.05.2010 13:58
Обработка списков Ranika Prolog 0 26.04.2009 01:58
Сравнение списков z556 Prolog 6 15.04.2009 21:00
Сортировка списков imported_W_M Prolog 5 14.10.2008 08:26
Слияние списков sprew88 Prolog 5 20.12.2007 18:23
обработка списков alex99 Prolog 4 09.10.2006 21:46
сжатие списков Васильчук Prolog 1 29.05.2006 08:54
Пересечение списков linux Prolog 1 21.12.2004 12:09



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов