ruby-heap 1.0.1 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 81514e6e431e57dad5a43540277e8d84a7b25df4
4
- data.tar.gz: 6ed5ed8d1cc587f884238472e00e73596acc2afb
3
+ metadata.gz: e6ecc83dcd850b3ac2c03e244912f8095f1539be
4
+ data.tar.gz: 68194b5303313d8b1582660ed131a5bcf4bc2daf
5
5
  SHA512:
6
- metadata.gz: 95450d6ead205907ec28748d29fa2175273a616de38d48bca30d6ada6eedb61024c9893349b9318a73945bbf6d4b829c84fc00ad23dca0215b68ea71373e313e
7
- data.tar.gz: 9a03daf237471d5a954126335c6039db118cfa87ad690f12dd4068556d981bf8cfb20f3e624a0b9ef39a01d168119d09ede11585fa801cd729767e56693f246d
6
+ metadata.gz: 0360ab2168bb8f0cebe0479995f6899f939452907a1e843de951c25fc0083137d7b57395a102e2d18c0de1ca1457ac3ce77ba4a13c037e4cd3961adb9fd1082d
7
+ data.tar.gz: 77da29a17c374797136933b9a8a8e8ae8e53a443467464b9a3207ed4ce088b620009e5a163fff9d53e9c561e6fe335a77f2876dcc726d6086c07f4c57db3e175
@@ -2,6 +2,7 @@ require 'Heap/version'
2
2
 
3
3
  # Main ruby-heap rb file
4
4
  module Heap
5
+ require 'Heap/heap_template'
5
6
  require 'Heap/binary_heap/binary_heap'
6
7
  require 'Heap/binary_heap/binary_heap_min'
7
8
  require 'Heap/binary_heap/binary_heap_max'
@@ -1,40 +1,15 @@
1
1
  module Heap
2
2
  module BinaryHeap
3
3
  # Binary Heap template
4
- class BinaryHeap
5
- attr_reader :elements
4
+ class BinaryHeap < HeapTemplate
5
+
6
+ protected
6
7
 
7
8
  def initialize(elements = [])
8
9
  @elements = []
9
10
  add(elements.pop) until elements.empty?
10
11
  end
11
12
 
12
- def add(element)
13
- if element.is_a? Array
14
- element.each do |el|
15
- @elements.push el
16
- swim_up(count)
17
- end
18
- elsif defined? element.elements
19
- add element.elements
20
- else
21
- @elements.push element
22
- swim_up(count)
23
- end
24
- end
25
-
26
- def count
27
- @elements.length
28
- end
29
-
30
- protected
31
-
32
- def swap(index1, index2)
33
- temp = @elements[index1 - 1]
34
- @elements[index1 - 1] = @elements[index2 - 1]
35
- @elements[index2 - 1] = temp
36
- end
37
-
38
13
  def get_children(index)
39
14
  child1 = 2 * index
40
15
  child2 = 2 * index + 1
@@ -3,22 +3,11 @@ module Heap
3
3
  # Binary Heap with max root
4
4
  class MaxHeap < BinaryHeap
5
5
  def extract_max
6
- @elements[0]
6
+ extract_root
7
7
  end
8
8
 
9
9
  def extract_max!
10
- swap(1, count)
11
- el = @elements.pop
12
- swim_down(1)
13
- el
14
- end
15
-
16
- def sort
17
- el_temp = @elements.clone
18
- result = []
19
- result.push extract_max! while count > 0
20
- @elements = el_temp
21
- result
10
+ extract_root!
22
11
  end
23
12
 
24
13
  private
@@ -3,22 +3,11 @@ module Heap
3
3
  # Binary Heap with min root
4
4
  class MinHeap < BinaryHeap
5
5
  def extract_min
6
- @elements[0]
6
+ extract_root
7
7
  end
8
8
 
9
9
  def extract_min!
10
- swap(1, count)
11
- el = @elements.pop
12
- swim_down(1)
13
- el
14
- end
15
-
16
- def sort
17
- el_temp = @elements.clone
18
- result = []
19
- result.push extract_min! while count > 0
20
- @elements = el_temp
21
- result
10
+ extract_root!
22
11
  end
23
12
 
24
13
  private
@@ -0,0 +1,51 @@
1
+ module Heap
2
+ # Heap Template
3
+ class HeapTemplate
4
+ attr_reader :elements
5
+
6
+ def add(element)
7
+ if element.is_a? Array
8
+ element.each do |el|
9
+ @elements.push el
10
+ swim_up(count)
11
+ end
12
+ elsif defined? element.elements
13
+ add element.elements
14
+ else
15
+ @elements.push element
16
+ swim_up(count)
17
+ end
18
+ end
19
+
20
+ def count
21
+ @elements.length
22
+ end
23
+
24
+ def sort
25
+ el_temp = @elements.clone
26
+ result = []
27
+ result.push extract_root! while count > 0
28
+ @elements = el_temp
29
+ result
30
+ end
31
+
32
+ protected
33
+
34
+ def extract_root
35
+ @elements[0]
36
+ end
37
+
38
+ def extract_root!
39
+ swap(1, count)
40
+ el = @elements.pop
41
+ swim_down(1)
42
+ el
43
+ end
44
+
45
+ def swap(index1, index2)
46
+ temp = @elements[index1 - 1]
47
+ @elements[index1 - 1] = @elements[index2 - 1]
48
+ @elements[index2 - 1] = temp
49
+ end
50
+ end
51
+ end
@@ -1,42 +1,17 @@
1
1
  module Heap
2
2
  module MultipleHeap
3
3
  # Multiple Heap template
4
- class MultipleHeap
5
- attr_reader :elements
4
+ class MultipleHeap < HeapTemplate
6
5
  attr_reader :d
7
6
 
7
+ protected
8
+
8
9
  def initialize(d, elements = [])
9
10
  @elements = []
10
11
  @d = d
11
12
  add(elements.pop) until elements.empty?
12
13
  end
13
14
 
14
- def add(element)
15
- if element.is_a? Array
16
- element.each do |el|
17
- @elements.push el
18
- swim_up(count)
19
- end
20
- elsif defined? element.elements
21
- add element.elements
22
- else
23
- @elements.push element
24
- swim_up(count)
25
- end
26
- end
27
-
28
- def count
29
- @elements.length
30
- end
31
-
32
- protected
33
-
34
- def swap(index1, index2)
35
- temp = @elements[index1 - 1]
36
- @elements[index1 - 1] = @elements[index2 - 1]
37
- @elements[index2 - 1] = temp
38
- end
39
-
40
15
  def get_children(index)
41
16
  child_indexes = []
42
17
  (2..(@d + 1)).each { |i| child_indexes.push((index - 1) * @d + i) }
@@ -3,22 +3,11 @@ module Heap
3
3
  # Multiple Heap with max root
4
4
  class MaxHeap < MultipleHeap
5
5
  def extract_max
6
- @elements[0]
6
+ extract_root
7
7
  end
8
8
 
9
9
  def extract_max!
10
- swap(1, count)
11
- el = @elements.pop
12
- swim_down(1)
13
- el
14
- end
15
-
16
- def sort
17
- el_temp = @elements.clone
18
- result = []
19
- result.push extract_max! while count > 0
20
- @elements = el_temp
21
- result
10
+ extract_root!
22
11
  end
23
12
 
24
13
  private
@@ -3,22 +3,11 @@ module Heap
3
3
  # Multiple Heap with min root
4
4
  class MinHeap < MultipleHeap
5
5
  def extract_min
6
- @elements[0]
6
+ extract_root
7
7
  end
8
8
 
9
9
  def extract_min!
10
- swap(1, count)
11
- el = @elements.pop
12
- swim_down(1)
13
- el
14
- end
15
-
16
- def sort
17
- el_temp = @elements.clone
18
- result = []
19
- result.push extract_min! while count > 0
20
- @elements = el_temp
21
- result
10
+ extract_root!
22
11
  end
23
12
 
24
13
  private
@@ -1,3 +1,3 @@
1
1
  module Heap
2
- VERSION = '1.0.1'
2
+ VERSION = '1.0.2'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-heap
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexandr Sysoev
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-06-28 00:00:00.000000000 Z
11
+ date: 2017-06-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -72,6 +72,7 @@ files:
72
72
  - lib/Heap/binary_heap/binary_heap.rb
73
73
  - lib/Heap/binary_heap/binary_heap_max.rb
74
74
  - lib/Heap/binary_heap/binary_heap_min.rb
75
+ - lib/Heap/heap_template.rb
75
76
  - lib/Heap/multiple_heap/multiple_heap.rb
76
77
  - lib/Heap/multiple_heap/multiple_heap_max.rb
77
78
  - lib/Heap/multiple_heap/multiple_heap_min.rb