ordered_ds 1.0.0 → 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/ordered_ds.rb +20 -18
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d9a8a07dd46959758a348493a35f3320ecf7d39f03245c0c0a427e718e936a52
|
4
|
+
data.tar.gz: 0a37156519aa6313ee525a23c2b13eb0447f2d2456b6a7bafa2a7a1ce8d23ea4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 28540d59778755070c408e372ab9d12616cb08d1d695126d63edfb6c5fc9a16ae3fe7edf23d90f902c7cea4613423e764e05a32666859a1e4bf49f79cf374b2d
|
7
|
+
data.tar.gz: f516ae08fb145bede577be79ea6443fd167b26f27832be19da05895eff7f87889f200de7228c5e9d1f2fb77730470511ee9f16610fbddea59d365713f2ed11f8
|
data/lib/ordered_ds.rb
CHANGED
@@ -1,25 +1,25 @@
|
|
1
1
|
class PQ
|
2
2
|
|
3
3
|
def initialize array = [], heapify = true, &is_unordered
|
4
|
-
raise ArgumentError.new 'PQ init' unless
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
4
|
+
raise ArgumentError.new 'PQ init' unless
|
5
|
+
array.class == Array &&
|
6
|
+
(heapify == true || heapify == false) &&
|
7
|
+
block_given?
|
8
|
+
@a, @u = array, is_unordered
|
9
|
+
return unless heapify
|
10
|
+
i = @a.size / 2
|
9
11
|
sink i while (i -= 1) >= 0
|
10
12
|
end
|
11
13
|
|
12
|
-
def size = @
|
13
|
-
|
14
|
-
def
|
15
|
-
|
16
|
-
def top = @z > 0 ? @a.first : nil
|
14
|
+
def size = @a.size
|
15
|
+
def empty? = @a.empty?
|
16
|
+
def top = @a.first
|
17
17
|
|
18
18
|
def << x
|
19
|
-
|
20
|
-
@
|
19
|
+
i = @a.size
|
20
|
+
@a << x
|
21
21
|
while i > 0
|
22
|
-
p = (i -
|
22
|
+
p = (i - 1) / 2
|
23
23
|
break unless @u.call @a[p], @a[i]
|
24
24
|
@a[p], @a[i] = @a[i], @a[p]
|
25
25
|
i = p
|
@@ -27,17 +27,19 @@ class PQ
|
|
27
27
|
end
|
28
28
|
|
29
29
|
def pop
|
30
|
-
return
|
31
|
-
@a[0] = @a
|
30
|
+
return @a.pop if @a.size < 2
|
31
|
+
t, @a[0] = @a.first, @a.pop
|
32
32
|
sink 0
|
33
|
-
|
33
|
+
t
|
34
34
|
end
|
35
35
|
|
36
36
|
private
|
37
37
|
|
38
38
|
def sink p
|
39
|
-
|
40
|
-
|
39
|
+
z = @a.size
|
40
|
+
while (c = p * 2 + 1) < z
|
41
|
+
r = c + 1
|
42
|
+
c = r if r < z && @u.(@a[c], @a[r])
|
41
43
|
break unless @u.call @a[p], @a[c]
|
42
44
|
@a[p], @a[c] = @a[c], @a[p]
|
43
45
|
p = c
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ordered_ds
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Viktor Reznov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-10-
|
11
|
+
date: 2023-10-29 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description:
|
14
14
|
email:
|