Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Скорость взятия элемента по индексу - функция nth 
:(
    Опции темы
GreenTea22
Дата 6.9.2009, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 6.9.2009

Репутация: нет
Всего: нет



Прохожу хороший туториал по лиспу: http://www.cs.sfu.ca/CC/310/pwfong/Lisp/3/tutorial3.html
И есть там такая задача 
Exercise: A set can be implemented as a sorted list, which is a list storing distinct members in ascending order. Implement the sorted list abstraction.  Ок, значит надо реализовать сет используя абстракцию отсортированного списка. Зачем? Вроде бы очевидно - для того чтобы к примеру находить элементы с логарифмической сложностью. Т.е. если мне нужно реализовать функцию добавления нового элемента то нужно будет найти индекс, куда его вставить. Используя тот факт что список отсортирован для нахождения этого индекса можно использовать метод половинного деления. 

Но вот что меня смутило.

Я новичек в лиспе. Насколько я сейчас понимаю в лиспе список является связным. То-есть операция взятия элемента по индексу функцией nth имеет сложность не O(1) а O(N).  На каждой итерации метода половинного деления надо один раз вызвать метод nth чтобы получить средний элемент. А это значит что как ни крути добиться логарифмической сложности не получится!! Я прав или ошибаюсь?
PM MAIL   Вверх
adejneka
Дата 7.9.2009, 05:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 8.7.2005
Где: Москва, Россия

Репутация: 9
Всего: 11



Прав. Зато объединение отсортированных списков с удалением дублей делается за линейное время, а не за квадратичное.
PM MAIL   Вверх
GreenTea22
Дата 7.9.2009, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 6.9.2009

Репутация: нет
Всего: нет



Странный этот лисп. Такой примитивной вещи как быстрое взятие элемента по индексу нету оО. Может конечно задач где это было бы критично не так много, но все же.. Очень странно
PM MAIL   Вверх
adejneka
Дата 8.9.2009, 05:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 8.7.2005
Где: Москва, Россия

Репутация: 9
Всего: 11



Если Вам нужен быстрый доступ по индексу - используйте массив вместо списка. Но тогда вставка элемента в начало будет работать долго. Разные структуры данных существуют не просто так - и не только в Лиспе.
PM MAIL   Вверх
GreenTea22
Дата 8.9.2009, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 6.9.2009

Репутация: нет
Всего: нет



Спасибо! В том туториале который я прохожу еще ничего небыло про массивы) Я было думал что в лиспе ничего кроме списков нет smile Ну тогда все классно.
PM MAIL   Вверх
lonli
Дата 13.9.2009, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 31.3.2007
Где: Москва

Репутация: нет
Всего: нет



Весьма советую: Практический Common Lisp
Там всё, что нужно.
PM MAIL ICQ   Вверх
GreenTea22
Дата 20.9.2009, 20:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 6.9.2009

Репутация: нет
Всего: нет



Большое спасибо!! Как раз читаю оригинал (http://gigamonkeys.com/book/). Хорошая книжка.

Это сообщение отредактировал(а) GreenTea22 - 20.9.2009, 20:29
PM MAIL   Вверх
_sg
Дата 25.4.2014, 09:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 119
Регистрация: 16.5.2007

Репутация: 2
Всего: 2



--------------------
vk.com/ansicommonlisp
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума LISP
Void
  • Пожалуйста, создавайте темы с содержательными названиями.
  • Lisp — это целое семейство языков. Всегда указывайте в теме используемый диалект (Common Lisp, Scheme и т.д.).
  • Уважаемые учащиеся, здесь всегда рады помочь Вам, но не делать за Вас вашу работу. У вас гораздо больше шансов получить помощь, если Вы приложите усилия и поделитесь с нами проблемами и результатами. В противном случае добро пожаловать в раздел Центр Помощи.
  • Получив ответ на интересующий Вас вопрос, не забудьте пометить его как решённый.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Void.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | LISP | Следующая тема »


 




[ Время генерации скрипта: 0.0713 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.