Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Куча [Python] / 9 сообщений из 9, страница 1 из 1
16.11.2015, 10:23
    #39104160
Станислав Клевцов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Куча [Python]
Всем привет.

Подскажите, пожалуйста, как можно организовать работу с кучей
Добавление элемента (O(log n))\ извлечение max элемента (верхушки кучи) (O(n)) ?

В результате добавления происходит автобалансировка кучи ?

Заранее спасибо
...
Рейтинг: 0 / 0
16.11.2015, 11:25
    #39104213
FishHook
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Куча [Python]
Станислав Клевцов,

чем не нравится встроенный тип dict?
...
Рейтинг: 0 / 0
16.11.2015, 14:37
    #39104532
Станислав Клевцов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Куча [Python]
FishHookСтанислав Клевцов,

чем не нравится встроенный тип dict?

океу.
За сколько O-большое можно добавить новый элемент в нужное место в dict ? (Думаю это O(n) 1 проход по всему dict + операция вставки О(1) или я не прав ?
...
Рейтинг: 0 / 0
16.11.2015, 15:00
    #39104560
Станислав Клевцов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Куча [Python]
FishHookСтанислав Клевцов,

чем не нравится встроенный тип dict?

Вот еще немного теории

автор
"Если реализовать такую структуру на базе списка, то добавлять элементы можно в конец списка за O(1). Но поиск наибольшего элемента будет занимать O(n), если n - число элементов в списке, так как придется просматривать все элементы списка и выбирать из них наибольший.

Если же хранить элементы в списке упорядочив их по неубыванию, то извлечение наибольшего будет занимать O(1), но добавление элемента в список - O(n), так как придется сдвигать элементы, уже находящиеся в списке.

Специальная структура данных «Куча» (англ. heap) позволяет эти операции выполнять за O(log n)."
...
Рейтинг: 0 / 0
16.11.2015, 19:24
    #39104931
FishHook
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Куча [Python]
Станислав Клевцовможно добавить новый элемент в нужное место в dict ?
dict - это хэш таблица, у неё нет позиции элемента.
...
Рейтинг: 0 / 0
16.11.2015, 21:02
    #39104989
Станислав Клевцов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Куча [Python]
FishHookСтанислав Клевцовможно добавить новый элемент в нужное место в dict ?
dict - это хэш таблица, у неё нет позиции элемента.

Сорри, тогда как искать максимальный элемент в "словаре"?
...
Рейтинг: 0 / 0
17.11.2015, 07:40
    #39105137
Станислав Клевцов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Куча [Python]
FishHookСтанислав Клевцовможно добавить новый элемент в нужное место в dict ?
dict - это хэш таблица, у неё нет позиции элемента.

"Меньше вопросов, больше дела" Сам разобрался с задачей и решил её с помощью кучи
(где поиск макс\мин элемента за O(1),а также его удаление за O(1). Добавление новых элементов за O(log n)

А что касается dict, то поиск за O(1), но тупняки на добавлении и удалении элемента O(n).

Можно подвести итог. Для решения моей задчи dict не подходит, т.к. кушает много памяти на n-> 10^6 и не проходит по тестам системы.

Всем спасибо. Тема закрыта !
...
Рейтинг: 0 / 0
17.11.2015, 08:09
    #39105142
FishHook
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Куча [Python]
Станислав КлевцовСам разобрался с задачей и решил её с помощью кучи
И где ты в питоне взял кучу?
...
Рейтинг: 0 / 0
17.11.2015, 19:34
    #39105943
Станислав Клевцов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Куча [Python]
FishHook, библиотека "heapq"

Хеш-таблица требует предварительной инициализации ячеек значениями NULL
- трудоемкость O(h)

Код: python
1.
2.
3.
4.
5.
6.
7.
Поправка вычислительной сложности (ВС) :
Операция      Средняя ВС    Худшая ВС
Add(key,value)  О(1)       О(1)
Lookup(key)     О(1+n\h)   O(n)
Delete(key)     O(1+n\h)   O(n)
Min()           O(n+h)     O(n+h)
Max()           O(n+h)     O(n+h)



Пример :
Код: python
1.
2.
3.
4.
import heapq

h=[]
heapq._heapify_max(h)  - делает из списка кучу за линейное время
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Куча [Python] / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]