Gem Version Code Climate

Heap (ruby сортировка кучей)

Библиотека используется для создания бинарной или d-ичной кучи (Heap).

Установка

Добавьте данную строчку в Gemfile Вашего приложения:

gem 'ruby-heap'

Затем выполните:

$ bundle

Или установите библиотеку отдельно, выполнив:

$ gem install ruby-heap

Использование

Двоичные кучи

Двоичная куча с минимальным корнем

Во время инициализации (и после создания кучи) Вы можете добавить в нее любые сравниваемые объекты (не только числа). Используемые объекты должны иметь функции сравнения (>, >=, <, <=).

require 'Heap'

# Инициализация
b_heap = Heap::BinaryHeap::MinHeap.new([2, 3, 1, -1])

# Получение элементов кучи (доступ только для чтения)
b_heap.elements     # [-1, 1, 3, 2]

# Получение отсортированных элементов кучи без
# изменения её элементов
b_heap.sort         # [-1, 1, 2, 3]

# Количество элементов в куче
b_heap.count        # 4

# Получение минимального элемента без удаления его из кучи
b_heap.extract_min  # -1

# Получение минимального элемента и его удаление из кучи
b_heap.extract_min! # -1
b_heap.count        # 3
b_heap.elements     # [1, 2, 3]

# Также Вы можете добавить новые элементы с помощью
# функции add
b_heap.add -1
b_heap.elements     # [-1, 1, 3, 2]
b_heap.add [0, 9, 200, -15, 6]
b_heap.elements     # [-15, -1, 3, 0, 1, 9, 200, 2, 6]
b_heap.sort         # [-15, -1, 0, 1, 2, 3, 6, 9, 200]

Те же действия с кучей (с максимальным корнем)

require 'Heap'

# Инициализация
b_heap = Heap::BinaryHeap::MaxHeap.new([2, 3, 1, -1])

# Получение элементов кучи (доступ только для чтения)
b_heap.elements     # [3, 2, 1, -1]

# Получение отсортированных элементов кучи без
# изменения её элементов
b_heap.sort         # [3, 2, 1, -1]

# Количество элементов в куче
b_heap.count        # 4

# Получение максимального элемента без удаления его из кучи
b_heap.extract_max  # 3

# Получение максимального элемента и его удаление из кучи
b_heap.extract_max! # 3
b_heap.count        # 3
b_heap.elements     # [2, -1, 1]

# Также Вы можете добавить новые элементы с помощью
# функции add
b_heap.add -1
b_heap.elements     # [2, -1, 1, -1]
b_heap.add [0, 9, 200, -15, 6]
b_heap.elements     # [200, 6, 9, 0, -1, 1, 2, -15, -1]
b_heap.sort         # [200, 9, 6, 2, 1, 0, -1, -1, -15]

Слияние куч

require 'Heap'

# Инициализация
min_heap = Heap::BinaryHeap::MinHeap.new [1, 2, 3]
max_heap = Heap::BinaryHeap::MaxHeap.new [9, -1, 4]

# Слияние
min_heap.add max_heap

min_heap.count    # 6
min_heap.sort     # [-1, 1, 2, 3, 4, 9]

Многомерные кучи

Многомерные (d-ичные) кучи имеют те же методы, что и бинарные. Однако, отличается инициализация:

require 'Heap'

# Первый параметр - измерение кучи (d)
# Второй параметр опционален и может содержать первые элементы в куче
min_heap = Heap::MultipleHeap::MinHeap.new(5, [10, 20, 30])
max_heap = Heap::MultipleHeap::MaxHeap.new(7)

Вклад в проект

Баг репорты и pull реквесты приветствуются на GitHub Страница проекта.

Лицензия

Библиотека является open source и регламентируется MIT License.