depq 0.2 → 0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. data/README +59 -47
  2. data/depq.rb +452 -470
  3. data/test-depq.rb +599 -368
  4. metadata +1 -1
data/README CHANGED
@@ -1,4 +1,4 @@
1
- Depq - Feature Rich Double-Ended Priority Queue.
1
+ = Depq - Feature Rich Double-Ended Priority Queue.
2
2
 
3
3
  = Features
4
4
 
@@ -9,6 +9,18 @@ Depq - Feature Rich Double-Ended Priority Queue.
9
9
  * update priority - usable for Dijkstra's shortest path algorithm and various graph algorithms
10
10
  * implicit binary heap - most operations are O(log n) at worst
11
11
 
12
+ = Install
13
+
14
+ gem install depq
15
+
16
+ = Links
17
+
18
+ * ((<reference manual|URL:http://depq.rubyforge.org/rdoc/classes/Depq.html>))
19
+ * ((<home page on rubyforge|URL:http://depq.rubyforge.org/>))
20
+ * ((<project info on rubyforge|URL:http://rubyforge.org/projects/depq/>))
21
+ * ((<source repository on github|URL:http://github.com/akr/depq>))
22
+ * ((<raa entry|URL:http://raa.ruby-lang.org/project/depq/>))
23
+
12
24
  = Introduction
13
25
 
14
26
  == Simple Insertion/Deletion
@@ -18,18 +30,18 @@ You can deletes the values from the object from ascending/descending order.
18
30
  delete_min deletes the minimum value.
19
31
  It is used for ascending order.
20
32
 
21
- pd = Depq.new
22
- pd.insert "durian"
23
- pd.insert "banana"
24
- p pd.delete_min #=> "banana"
25
- pd.insert "orange"
26
- pd.insert "apple"
27
- pd.insert "melon"
28
- p pd.delete_min #=> "apple"
29
- p pd.delete_min #=> "durian"
30
- p pd.delete_min #=> "melon"
31
- p pd.delete_min #=> "orange"
32
- p pd.delete_min #=> nil
33
+ q = Depq.new
34
+ q.insert "durian"
35
+ q.insert "banana"
36
+ p q.delete_min #=> "banana"
37
+ q.insert "orange"
38
+ q.insert "apple"
39
+ q.insert "melon"
40
+ p q.delete_min #=> "apple"
41
+ p q.delete_min #=> "durian"
42
+ p q.delete_min #=> "melon"
43
+ p q.delete_min #=> "orange"
44
+ p q.delete_min #=> nil
33
45
 
34
46
  delete_max is similar to delete_min except it deletes maximum element
35
47
  instead of minimum.
@@ -37,17 +49,17 @@ It is used for descending order.
37
49
 
38
50
  == The Order
39
51
 
40
- The order is defined by the priorities corresnponds to the values and
52
+ The order is defined by the priorities corresponds to the values and
41
53
  comparison operator specified for the queue.
42
54
 
43
- pd = Depq.new(:casecmp) # use casecmp instead of <=>.
44
- pd.inesrt 1, "Foo" # specify the priority for 1 as "Foo"
45
- pd.insert 2, "bar"
46
- pd.insert 3, "Baz"
47
- p pd.delete_min #=> 2 # "bar" is minimum
48
- p pd.delete_min #=> 3
49
- p pd.delete_min #=> 1 # "Foo" is maximum
50
- p pd.delete_min #=> nil
55
+ q = Depq.new(:casecmp) # use casecmp instead of <=>.
56
+ q.insert 1, "Foo" # specify the priority for 1 as "Foo"
57
+ q.insert 2, "bar"
58
+ q.insert 3, "Baz"
59
+ p q.delete_min #=> 2 # "bar" is minimum
60
+ p q.delete_min #=> 3
61
+ p q.delete_min #=> 1 # "Foo" is maximum
62
+ p q.delete_min #=> nil
51
63
 
52
64
  If there are multiple values with same priority, subpriority is used to compare them.
53
65
  subpriority is an integer which can be specified by 3rd argument of insert.
@@ -55,19 +67,19 @@ If it is not specified, total number of inserted elements is used.
55
67
  So Depq is "stable" with delete_min.
56
68
  The element inserted first is minimum and deleted first.
57
69
 
58
- pd = Depq.new
59
- pd.insert "a", 1 # "a", "c" and "e" has same priority: 1
60
- pd.insert "b", 0 # "b", "d" and "f" has same priority: 0
61
- pd.insert "c", 1
62
- pd.insert "d", 0
63
- pd.insert "e", 1
64
- pd.insert "f", 0
65
- p pd.delete_min #=> "b" first element with priority 0
66
- p pd.delete_min #=> "d"
67
- p pd.delete_min #=> "f" last element with priority 0
68
- p pd.delete_min #=> "a" first element with priority 1
69
- p pd.delete_min #=> "c"
70
- p pd.delete_min #=> "e" last element with priority 1
70
+ q = Depq.new
71
+ q.insert "a", 1 # "a", "c" and "e" has same priority: 1
72
+ q.insert "b", 0 # "b", "d" and "f" has same priority: 0
73
+ q.insert "c", 1
74
+ q.insert "d", 0
75
+ q.insert "e", 1
76
+ q.insert "f", 0
77
+ p q.delete_min #=> "b" first element with priority 0
78
+ p q.delete_min #=> "d"
79
+ p q.delete_min #=> "f" last element with priority 0
80
+ p q.delete_min #=> "a" first element with priority 1
81
+ p q.delete_min #=> "c"
82
+ p q.delete_min #=> "e" last element with priority 1
71
83
 
72
84
  Note that delete_max is also stable.
73
85
  This means delete_max deletes the element with maximum priority with "minimum" subpriority.
@@ -78,22 +90,22 @@ An inserted element can be modified and/or deleted.
78
90
  This is done using Depq::Locator object.
79
91
  It is returned by insert, find_min_locator, etc.
80
92
 
81
- pd = Depq.new
82
- d = pd.insert "durian", 1
83
- m = pd.insert "mangosteen", 2
84
- c = pd.insert "cherry", 3
93
+ q = Depq.new
94
+ d = q.insert "durian", 1
95
+ m = q.insert "mangosteen", 2
96
+ c = q.insert "cherry", 3
85
97
  p m #=> #<Depq::Locator: "mangosteen":2>
86
98
  p m.value #=> "mangosteen"
87
99
  p m.priority #=> 2
88
- p pd.find_min #=> "durian"
89
- p pd.find_min_locator #=> #<Depq::Locator: "durian":1>
100
+ p q.find_min #=> "durian"
101
+ p q.find_min_locator #=> #<Depq::Locator: "durian":1>
90
102
  m.update("mangosteen", 0)
91
- p pd.find_min #=> "mangosteen"
92
- p pd.find_min_locator #=> #<Depq::Locator: "mangosteen":0>
93
- pd.delete_element d
94
- p pd.delete_min #=> "mangosteen"
95
- p pd.delete_min #=> "cherry"
96
- p pd.delete_min #=> nil
103
+ p q.find_min #=> "mangosteen"
104
+ p q.find_min_locator #=> #<Depq::Locator: "mangosteen":0>
105
+ q.delete_element d
106
+ p q.delete_min #=> "mangosteen"
107
+ p q.delete_min #=> "cherry"
108
+ p q.delete_min #=> nil
97
109
 
98
110
  For example, this feature can be used for graph algorithms
99
111
  such as Dijkstra's shortest path finding algorithm,
data/depq.rb CHANGED
@@ -1,4 +1,4 @@
1
- # depq.rb - Feature Rich Double-Ended Priority Queue.
1
+ # depq.rb - Double-Ended Priority Queue.
2
2
  #
3
3
  # Copyright (C) 2009 Tanaka Akira <akr@fsij.org>
4
4
  #
@@ -24,7 +24,7 @@
24
24
  # IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
25
25
  # OF SUCH DAMAGE.
26
26
 
27
- # Depq - Feature Rich Double-Ended Priority Queue.
27
+ # Depq - Double-Ended Priority Queue.
28
28
  #
29
29
  # = Features
30
30
  #
@@ -44,18 +44,18 @@
44
44
  # delete_min deletes the minimum value.
45
45
  # It is used for ascending order.
46
46
  #
47
- # pd = Depq.new
48
- # pd.insert "durian"
49
- # pd.insert "banana"
50
- # p pd.delete_min #=> "banana"
51
- # pd.insert "orange"
52
- # pd.insert "apple"
53
- # pd.insert "melon"
54
- # p pd.delete_min #=> "apple"
55
- # p pd.delete_min #=> "durian"
56
- # p pd.delete_min #=> "melon"
57
- # p pd.delete_min #=> "orange"
58
- # p pd.delete_min #=> nil
47
+ # q = Depq.new
48
+ # q.insert "durian"
49
+ # q.insert "banana"
50
+ # p q.delete_min #=> "banana"
51
+ # q.insert "orange"
52
+ # q.insert "apple"
53
+ # q.insert "melon"
54
+ # p q.delete_min #=> "apple"
55
+ # p q.delete_min #=> "durian"
56
+ # p q.delete_min #=> "melon"
57
+ # p q.delete_min #=> "orange"
58
+ # p q.delete_min #=> nil
59
59
  #
60
60
  # delete_max is similar to delete_min except it deletes maximum element
61
61
  # instead of minimum.
@@ -66,14 +66,14 @@
66
66
  # The order is defined by the priorities corresnponds to the values and
67
67
  # comparison operator specified for the queue.
68
68
  #
69
- # pd = Depq.new(:casecmp) # use casecmp instead of <=>.
70
- # pd.inesrt 1, "Foo" # specify the priority for 1 as "Foo"
71
- # pd.insert 2, "bar"
72
- # pd.insert 3, "Baz"
73
- # p pd.delete_min #=> 2 # "bar" is minimum
74
- # p pd.delete_min #=> 3
75
- # p pd.delete_min #=> 1 # "Foo" is maximum
76
- # p pd.delete_min #=> nil
69
+ # q = Depq.new(:casecmp) # use casecmp instead of <=>.
70
+ # q.inesrt 1, "Foo" # specify the priority for 1 as "Foo"
71
+ # q.insert 2, "bar"
72
+ # q.insert 3, "Baz"
73
+ # p q.delete_min #=> 2 # "bar" is minimum
74
+ # p q.delete_min #=> 3
75
+ # p q.delete_min #=> 1 # "Foo" is maximum
76
+ # p q.delete_min #=> nil
77
77
  #
78
78
  # If there are multiple values with same priority, subpriority is used to compare them.
79
79
  # subpriority is an integer which can be specified by 3rd argument of insert.
@@ -81,19 +81,19 @@
81
81
  # So Depq is "stable" with delete_min.
82
82
  # The element inserted first is minimum and deleted first.
83
83
  #
84
- # pd = Depq.new
85
- # pd.insert "a", 1 # "a", "c" and "e" has same priority: 1
86
- # pd.insert "b", 0 # "b", "d" and "f" has same priority: 0
87
- # pd.insert "c", 1
88
- # pd.insert "d", 0
89
- # pd.insert "e", 1
90
- # pd.insert "f", 0
91
- # p pd.delete_min #=> "b" first element with priority 0
92
- # p pd.delete_min #=> "d"
93
- # p pd.delete_min #=> "f" last element with priority 0
94
- # p pd.delete_min #=> "a" first element with priority 1
95
- # p pd.delete_min #=> "c"
96
- # p pd.delete_min #=> "e" last element with priority 1
84
+ # q = Depq.new
85
+ # q.insert "a", 1 # "a", "c" and "e" has same priority: 1
86
+ # q.insert "b", 0 # "b", "d" and "f" has same priority: 0
87
+ # q.insert "c", 1
88
+ # q.insert "d", 0
89
+ # q.insert "e", 1
90
+ # q.insert "f", 0
91
+ # p q.delete_min #=> "b" first element with priority 0
92
+ # p q.delete_min #=> "d"
93
+ # p q.delete_min #=> "f" last element with priority 0
94
+ # p q.delete_min #=> "a" first element with priority 1
95
+ # p q.delete_min #=> "c"
96
+ # p q.delete_min #=> "e" last element with priority 1
97
97
  #
98
98
  # Note that delete_max is also stable.
99
99
  # This means delete_max deletes the element with maximum priority with "minimum" subpriority.
@@ -104,22 +104,22 @@
104
104
  # This is done using Depq::Locator object.
105
105
  # It is returned by insert, find_min_locator, etc.
106
106
  #
107
- # pd = Depq.new
108
- # d = pd.insert "durian", 1
109
- # m = pd.insert "mangosteen", 2
110
- # c = pd.insert "cherry", 3
107
+ # q = Depq.new
108
+ # d = q.insert "durian", 1
109
+ # m = q.insert "mangosteen", 2
110
+ # c = q.insert "cherry", 3
111
111
  # p m #=> #<Depq::Locator: "mangosteen":2>
112
112
  # p m.value #=> "mangosteen"
113
113
  # p m.priority #=> 2
114
- # p pd.find_min #=> "durian"
115
- # p pd.find_min_locator #=> #<Depq::Locator: "durian":1>
114
+ # p q.find_min #=> "durian"
115
+ # p q.find_min_locator #=> #<Depq::Locator: "durian":1>
116
116
  # m.update("mangosteen", 0)
117
- # p pd.find_min #=> "mangosteen"
118
- # p pd.find_min_locator #=> #<Depq::Locator: "mangosteen":0>
119
- # pd.delete_element d
120
- # p pd.delete_min #=> "mangosteen"
121
- # p pd.delete_min #=> "cherry"
122
- # p pd.delete_min #=> nil
117
+ # p q.find_min #=> "mangosteen"
118
+ # p q.find_min_locator #=> #<Depq::Locator: "mangosteen":0>
119
+ # q.delete_element d
120
+ # p q.delete_min #=> "mangosteen"
121
+ # p q.delete_min #=> "cherry"
122
+ # p q.delete_min #=> nil
123
123
  #
124
124
  # For example, this feature can be used for graph algorithms
125
125
  # such as Dijkstra's shortest path finding algorithm,
@@ -175,22 +175,22 @@
175
175
  class Depq
176
176
  include Enumerable
177
177
 
178
- Locator = Struct.new(:value, :pdeque_or_subpriority, :index_or_priority)
178
+ Locator = Struct.new(:value, :depq_or_subpriority, :index_or_priority)
179
179
  class Locator
180
180
 
181
- # if pdeque_or_subpriority is Depq
182
- # pdeque_or_subpriority is pdeque
181
+ # if depq_or_subpriority is Depq
182
+ # depq_or_subpriority is depq
183
183
  # index_or_priority is index
184
184
  # else
185
- # pdeque_or_subpriority is subpriority
185
+ # depq_or_subpriority is subpriority
186
186
  # index_or_priority is priority
187
187
  # end
188
188
  #
189
189
  # only 3 fields for memory efficiency.
190
190
 
191
191
  private :value=
192
- private :pdeque_or_subpriority
193
- private :pdeque_or_subpriority=
192
+ private :depq_or_subpriority
193
+ private :depq_or_subpriority=
194
194
  private :index_or_priority
195
195
  private :index_or_priority=
196
196
 
@@ -240,16 +240,16 @@ class Depq
240
240
 
241
241
  # returns true if the locator is in a queue.
242
242
  def in_queue?
243
- pdeque_or_subpriority().kind_of? Depq
243
+ depq_or_subpriority().kind_of? Depq
244
244
  end
245
245
 
246
246
  # returns the queue.
247
247
  #
248
- # nil is returned if the locator is not in a pdeque.
249
- def pdeque
250
- in_queue? ? pdeque_or_subpriority() : nil
248
+ # nil is returned if the locator is not in a depq.
249
+ def depq
250
+ in_queue? ? depq_or_subpriority() : nil
251
251
  end
252
- alias queue pdeque
252
+ alias queue depq
253
253
 
254
254
  def index
255
255
  in_queue? ? index_or_priority() : nil
@@ -267,8 +267,8 @@ class Depq
267
267
  # returns the priority.
268
268
  def priority
269
269
  if in_queue?
270
- pd = pdeque_or_subpriority()
271
- priority, subpriority = pd.send(:internal_get_priority, self)
270
+ q = depq_or_subpriority()
271
+ priority, subpriority = q.send(:internal_get_priority, self)
272
272
  priority
273
273
  else
274
274
  index_or_priority()
@@ -278,11 +278,11 @@ class Depq
278
278
  # returns the subpriority.
279
279
  def subpriority
280
280
  if in_queue?
281
- pd = pdeque_or_subpriority()
282
- priority, subpriority = pd.send(:internal_get_priority, self)
281
+ q = depq_or_subpriority()
282
+ priority, subpriority = q.send(:internal_get_priority, self)
283
283
  subpriority
284
284
  else
285
- pdeque_or_subpriority()
285
+ depq_or_subpriority()
286
286
  end
287
287
  end
288
288
 
@@ -292,8 +292,8 @@ class Depq
292
292
  # So subpriority is not changed if subpriority is not specified or nil for a locator in a queue.
293
293
  # subpriority is set to nil if subpriority is not specified or nil for a locator not in a queue.
294
294
  #
295
- # pd = Depq.new
296
- # loc1 = pd.insert 1, 2, 3
295
+ # q = Depq.new
296
+ # loc1 = q.insert 1, 2, 3
297
297
  # p [loc1.value, loc1.priority, loc1.subpriority] #=> [1, 2, 3]
298
298
  # loc1.update(11, 12)
299
299
  # p [loc1.value, loc1.priority, loc1.subpriority] #=> [11, 12, 3]
@@ -308,16 +308,16 @@ class Depq
308
308
  def update(value, priority=value, subpriority=nil)
309
309
  subpriority = Integer(subpriority) if subpriority != nil
310
310
  if in_queue?
311
- pd = pdeque_or_subpriority()
311
+ q = depq_or_subpriority()
312
312
  if subpriority == nil
313
313
  subpriority = self.subpriority
314
314
  else
315
315
  subpriority = Integer(subpriority)
316
316
  end
317
- pd.send(:internal_set_priority, self, priority, subpriority)
317
+ q.send(:internal_set_priority, self, priority, subpriority)
318
318
  else
319
319
  self.index_or_priority = priority
320
- self.pdeque_or_subpriority = subpriority
320
+ self.depq_or_subpriority = subpriority
321
321
  end
322
322
  self.value = value
323
323
  nil
@@ -327,8 +327,8 @@ class Depq
327
327
  #
328
328
  # This method doesn't change the priority and subpriority.
329
329
  #
330
- # pd = Depq.new
331
- # loc = pd.insert 1, 2, 3
330
+ # q = Depq.new
331
+ # loc = q.insert 1, 2, 3
332
332
  # p [loc.value, loc.priority, loc.subpriority] #=> [1, 2, 3]
333
333
  # loc.update_value 10
334
334
  # p [loc.value, loc.priority, loc.subpriority] #=> [10, 2, 3]
@@ -341,8 +341,8 @@ class Depq
341
341
  #
342
342
  # This method doesn't change the value.
343
343
  #
344
- # pd = Depq.new
345
- # loc = pd.insert 1, 2, 3
344
+ # q = Depq.new
345
+ # loc = q.insert 1, 2, 3
346
346
  # p [loc.value, loc.priority, loc.subpriority] #=> [1, 2, 3]
347
347
  # loc.update_priority 10
348
348
  # p [loc.value, loc.priority, loc.subpriority] #=> [1, 10, 3]
@@ -353,10 +353,10 @@ class Depq
353
353
  update(self.value, priority, subpriority)
354
354
  end
355
355
 
356
- def internal_inserted(pdeque, index)
356
+ def internal_inserted(depq, index)
357
357
  raise ArgumentError, "already inserted" if in_queue?
358
358
  priority = index_or_priority()
359
- self.pdeque_or_subpriority = pdeque
359
+ self.depq_or_subpriority = depq
360
360
  self.index_or_priority = index
361
361
  priority
362
362
  end
@@ -365,7 +365,7 @@ class Depq
365
365
  def internal_deleted(priority, subpriority)
366
366
  raise ArgumentError, "not inserted" if !in_queue?
367
367
  self.index_or_priority = priority
368
- self.pdeque_or_subpriority = subpriority
368
+ self.depq_or_subpriority = subpriority
369
369
  end
370
370
  private :internal_deleted
371
371
 
@@ -377,23 +377,23 @@ class Depq
377
377
  # It should be a symbol or a Proc which takes two arguments.
378
378
  # If it is omitted, :<=> is used.
379
379
  #
380
- # pd = Depq.new
381
- # pd.insert "Foo"
382
- # pd.insert "bar"
383
- # p pd.delete_min #=> "Foo"
384
- # p pd.delete_min #=> "bar"
380
+ # q = Depq.new
381
+ # q.insert "Foo"
382
+ # q.insert "bar"
383
+ # p q.delete_min #=> "Foo"
384
+ # p q.delete_min #=> "bar"
385
385
  #
386
- # pd = Depq.new(:casecmp)
387
- # pd.insert "Foo"
388
- # pd.insert "bar"
389
- # p pd.delete_min #=> "bar"
390
- # p pd.delete_min #=> "Foo"
386
+ # q = Depq.new(:casecmp)
387
+ # q.insert "Foo"
388
+ # q.insert "bar"
389
+ # p q.delete_min #=> "bar"
390
+ # p q.delete_min #=> "Foo"
391
391
  #
392
- # pd = Depq.new(lambda {|a,b| a.casecmp(b) })
393
- # pd.insert "Foo"
394
- # pd.insert "bar"
395
- # p pd.delete_min #=> "bar"
396
- # p pd.delete_min #=> "Foo"
392
+ # q = Depq.new(lambda {|a,b| a.casecmp(b) })
393
+ # q.insert "Foo"
394
+ # q.insert "bar"
395
+ # p q.delete_min #=> "bar"
396
+ # p q.delete_min #=> "Foo"
397
397
  #
398
398
  def initialize(cmp = :<=>)
399
399
  @cmp = cmp
@@ -486,7 +486,7 @@ class Depq
486
486
  private :mode_heapify
487
487
 
488
488
  def check_locator(loc)
489
- if !self.equal?(loc.pdeque) ||
489
+ if !self.equal?(loc.depq) ||
490
490
  !get_entry(loc.send(:index))[0].equal?(loc)
491
491
  raise ArgumentError, "unexpected locator"
492
492
  end
@@ -557,10 +557,10 @@ class Depq
557
557
 
558
558
  # compare priority1 and priority2.
559
559
  #
560
- # pd = Depq.new
561
- # p pd.compare_priority("a", "b") #=> -1
562
- # p pd.compare_priority("a", "a") #=> 0
563
- # p pd.compare_priority("b", "a") #=> 1
560
+ # q = Depq.new
561
+ # p q.compare_priority("a", "b") #=> -1
562
+ # p q.compare_priority("a", "a") #=> 0
563
+ # p q.compare_priority("b", "a") #=> 1
564
564
  #
565
565
  def compare_priority(priority1, priority2)
566
566
  if @cmp.kind_of? Symbol
@@ -572,12 +572,12 @@ class Depq
572
572
 
573
573
  # returns true if the queue is empty.
574
574
  #
575
- # pd = Depq.new
576
- # p pd.empty? #=> true
577
- # pd.insert 1
578
- # p pd.empty? #=> false
579
- # pd.delete_max
580
- # p pd.empty? #=> true
575
+ # q = Depq.new
576
+ # p q.empty? #=> true
577
+ # q.insert 1
578
+ # p q.empty? #=> false
579
+ # q.delete_max
580
+ # p q.empty? #=> true
581
581
  #
582
582
  def empty?
583
583
  @ary.empty?
@@ -585,16 +585,16 @@ class Depq
585
585
 
586
586
  # returns the number of elements in the queue.
587
587
  #
588
- # pd = Depq.new
589
- # p pd.size #=> 0
590
- # pd.insert 1
591
- # p pd.size #=> 1
592
- # pd.insert 1
593
- # p pd.size #=> 2
594
- # pd.delete_min
595
- # p pd.size #=> 1
596
- # pd.delete_min
597
- # p pd.size #=> 0
588
+ # q = Depq.new
589
+ # p q.size #=> 0
590
+ # q.insert 1
591
+ # p q.size #=> 1
592
+ # q.insert 1
593
+ # p q.size #=> 2
594
+ # q.delete_min
595
+ # p q.size #=> 1
596
+ # q.delete_min
597
+ # p q.size #=> 0
598
598
  #
599
599
  def size
600
600
  @ary.size / ARY_SLICE_SIZE
@@ -605,24 +605,24 @@ class Depq
605
605
  #
606
606
  # The result is monotonically increased.
607
607
  #
608
- # pd = Depq.new
609
- # p [pd.size, pd.totalcount] #=> [0, 0]
610
- # pd.insert 1
611
- # p [pd.size, pd.totalcount] #=> [1, 1]
612
- # pd.insert 2
613
- # p [pd.size, pd.totalcount] #=> [2, 2]
614
- # pd.delete_min
615
- # p [pd.size, pd.totalcount] #=> [1, 2]
616
- # pd.insert 4
617
- # p [pd.size, pd.totalcount] #=> [2, 3]
618
- # pd.insert 3
619
- # p [pd.size, pd.totalcount] #=> [3, 4]
620
- # pd.insert 0
621
- # p [pd.size, pd.totalcount] #=> [4, 5]
622
- # pd.delete_min
623
- # p [pd.size, pd.totalcount] #=> [3, 5]
624
- # pd.insert 2
625
- # p [pd.size, pd.totalcount] #=> [4, 6]
608
+ # q = Depq.new
609
+ # p [q.size, q.totalcount] #=> [0, 0]
610
+ # q.insert 1
611
+ # p [q.size, q.totalcount] #=> [1, 1]
612
+ # q.insert 2
613
+ # p [q.size, q.totalcount] #=> [2, 2]
614
+ # q.delete_min
615
+ # p [q.size, q.totalcount] #=> [1, 2]
616
+ # q.insert 4
617
+ # p [q.size, q.totalcount] #=> [2, 3]
618
+ # q.insert 3
619
+ # p [q.size, q.totalcount] #=> [3, 4]
620
+ # q.insert 0
621
+ # p [q.size, q.totalcount] #=> [4, 5]
622
+ # q.delete_min
623
+ # p [q.size, q.totalcount] #=> [3, 5]
624
+ # q.insert 2
625
+ # p [q.size, q.totalcount] #=> [4, 6]
626
626
  #
627
627
  def totalcount
628
628
  @totalcount
@@ -632,15 +632,15 @@ class Depq
632
632
  #
633
633
  # Note that totalcount is not changed.
634
634
  #
635
- # pd = Depq.new
636
- # pd.insert 1
637
- # pd.insert 1
638
- # p pd.size #=> 2
639
- # p pd.totalcount #=> 2
640
- # pd.clear
641
- # p pd.size #=> 0
642
- # p pd.totalcount #=> 2
643
- # p pd.find_min #=> nil
635
+ # q = Depq.new
636
+ # q.insert 1
637
+ # q.insert 1
638
+ # p q.size #=> 2
639
+ # p q.totalcount #=> 2
640
+ # q.clear
641
+ # p q.size #=> 0
642
+ # p q.totalcount #=> 2
643
+ # p q.find_min #=> nil
644
644
  #
645
645
  def clear
646
646
  @ary.clear
@@ -661,7 +661,7 @@ class Depq
661
661
  set_entry(loc.send(:index), loc, priority, subpriority)
662
662
  else
663
663
  mode_heapify
664
- @mode.update_priority(self, @ary, loc, priority, subpriority)
664
+ @mode.update_prio(self, @ary, loc, priority, subpriority)
665
665
  end
666
666
  end
667
667
  private :internal_set_priority
@@ -672,10 +672,10 @@ class Depq
672
672
  #
673
673
  # The locator should not already be inserted in a queue.
674
674
  #
675
- # pd = Depq.new
675
+ # q = Depq.new
676
676
  # loc = Depq::Locator.new(1)
677
- # pd.insert_locator loc
678
- # p pd.delete_min #=> 1
677
+ # q.insert_locator loc
678
+ # p q.delete_min #=> 1
679
679
  #
680
680
  def insert_locator(loc)
681
681
  subpriority = loc.subpriority || default_subpriority
@@ -692,36 +692,36 @@ class Depq
692
692
  #
693
693
  # If subpriority is omitted or nil, totalcount is used for stability.
694
694
  #
695
- # pd = Depq.new
696
- # pd.insert 3
697
- # pd.insert 1
698
- # pd.insert 2
699
- # p pd.delete_min #=> 1
700
- # p pd.delete_min #=> 2
701
- # p pd.delete_min #=> 3
702
- #
703
- # pd = Depq.new
704
- # pd.insert 3, 10
705
- # pd.insert 1, 20
706
- # pd.insert 2, 30
707
- # p pd.delete_min #=> 3
708
- # p pd.delete_min #=> 1
709
- # p pd.delete_min #=> 2
695
+ # q = Depq.new
696
+ # q.insert 3
697
+ # q.insert 1
698
+ # q.insert 2
699
+ # p q.delete_min #=> 1
700
+ # p q.delete_min #=> 2
701
+ # p q.delete_min #=> 3
702
+ #
703
+ # q = Depq.new
704
+ # q.insert 3, 10
705
+ # q.insert 1, 20
706
+ # q.insert 2, 30
707
+ # p q.delete_min #=> 3
708
+ # p q.delete_min #=> 1
709
+ # p q.delete_min #=> 2
710
710
  #
711
711
  # This method returns a locator which locates the inserted element.
712
712
  # It can be used to update the value and priority, or delete the element.
713
713
  #
714
- # pd = Depq.new
715
- # pd.insert 3
716
- # loc1 = pd.insert 1
717
- # loc2 = pd.insert 2
718
- # pd.insert 4
719
- # p pd.delete_max #=> 4
720
- # pd.delete_locator loc1
714
+ # q = Depq.new
715
+ # q.insert 3
716
+ # loc1 = q.insert 1
717
+ # loc2 = q.insert 2
718
+ # q.insert 4
719
+ # p q.delete_max #=> 4
720
+ # q.delete_locator loc1
721
721
  # loc2.update 8
722
- # p pd.delete_max #=> 8
723
- # p pd.delete_max #=> 3
724
- # p pd.delete_max #=> nil
722
+ # p q.delete_max #=> 8
723
+ # p q.delete_max #=> 3
724
+ # p q.delete_max #=> nil
725
725
  #
726
726
  def insert(value, priority=value, subpriority=nil)
727
727
  loc = Locator.new(value, priority, subpriority)
@@ -739,12 +739,12 @@ class Depq
739
739
  #
740
740
  # This method returns nil.
741
741
  #
742
- # pd = Depq.new
743
- # pd.insert_all [3,1,2]
744
- # p pd.delete_min #=> 1
745
- # p pd.delete_min #=> 2
746
- # p pd.delete_min #=> 3
747
- # p pd.delete_min #=> nil
742
+ # q = Depq.new
743
+ # q.insert_all [3,1,2]
744
+ # p q.delete_min #=> 1
745
+ # p q.delete_min #=> 2
746
+ # p q.delete_min #=> 3
747
+ # p q.delete_min #=> nil
748
748
  #
749
749
  def insert_all(iter)
750
750
  iter.each {|v|
@@ -758,17 +758,17 @@ class Depq
758
758
  #
759
759
  # This method doesn't delete the element from the queue.
760
760
  #
761
- # pd = Depq.new
762
- # p pd.find_min_locator #=> nil
763
- # pd.insert 3
764
- # pd.insert 1
765
- # pd.insert 2
766
- # p pd.find_min_locator #=> #<Depq::Locator: 1>
761
+ # q = Depq.new
762
+ # p q.find_min_locator #=> nil
763
+ # q.insert 3
764
+ # q.insert 1
765
+ # q.insert 2
766
+ # p q.find_min_locator #=> #<Depq::Locator: 1>
767
767
  #
768
768
  def find_min_locator
769
769
  return nil if empty?
770
770
  use_min
771
- @mode.find_min_locator(self, @ary)
771
+ @mode.find_min_loc(self, @ary)
772
772
  end
773
773
 
774
774
  # return the minimum value with its priority.
@@ -776,14 +776,14 @@ class Depq
776
776
  #
777
777
  # This method doesn't delete the element from the queue.
778
778
  #
779
- # pd = Depq.new
780
- # p pd.find_min_priority #=> nil
781
- # pd.insert "durian", 1
782
- # pd.insert "banana", 3
783
- # pd.insert "melon", 2
784
- # p pd.find_min_priority #=> ["durian", 1]
785
- # pd.clear
786
- # p pd.find_min_priority #=> nil
779
+ # q = Depq.new
780
+ # p q.find_min_priority #=> nil
781
+ # q.insert "durian", 1
782
+ # q.insert "banana", 3
783
+ # q.insert "melon", 2
784
+ # p q.find_min_priority #=> ["durian", 1]
785
+ # q.clear
786
+ # p q.find_min_priority #=> nil
787
787
  #
788
788
  def find_min_priority
789
789
  loc = find_min_locator and [loc.value, loc.priority]
@@ -794,12 +794,12 @@ class Depq
794
794
  #
795
795
  # This method doesn't delete the element from the queue.
796
796
  #
797
- # pd = Depq.new
798
- # p pd.find_min #=> nil
799
- # pd.insert 3
800
- # pd.insert 1
801
- # pd.insert 2
802
- # p pd.find_min #=> 1
797
+ # q = Depq.new
798
+ # p q.find_min #=> nil
799
+ # q.insert 3
800
+ # q.insert 1
801
+ # q.insert 2
802
+ # p q.find_min #=> 1
803
803
  #
804
804
  def find_min
805
805
  loc = find_min_locator and loc.value
@@ -812,17 +812,17 @@ class Depq
812
812
  #
813
813
  # This method doesn't delete the element from the queue.
814
814
  #
815
- # pd = Depq.new
816
- # p pd.find_max_locator #=> nil
817
- # pd.insert 3
818
- # pd.insert 1
819
- # pd.insert 2
820
- # p pd.find_max_locator #=> #<Depq::Locator: 3>
815
+ # q = Depq.new
816
+ # p q.find_max_locator #=> nil
817
+ # q.insert 3
818
+ # q.insert 1
819
+ # q.insert 2
820
+ # p q.find_max_locator #=> #<Depq::Locator: 3>
821
821
  #
822
822
  def find_max_locator
823
823
  return nil if empty?
824
824
  use_max
825
- @mode.find_max_locator(self, @ary)
825
+ @mode.find_max_loc(self, @ary)
826
826
  end
827
827
 
828
828
  # return the maximum value with its priority.
@@ -830,14 +830,14 @@ class Depq
830
830
  #
831
831
  # This method doesn't delete the element from the queue.
832
832
  #
833
- # pd = Depq.new
834
- # p pd.find_max_priority #=> nil
835
- # pd.insert "durian", 1
836
- # pd.insert "banana", 3
837
- # pd.insert "melon", 2
838
- # p pd.find_max_priority #=> ["banana", 3]
839
- # pd.clear
840
- # p pd.find_max_priority #=> nil
833
+ # q = Depq.new
834
+ # p q.find_max_priority #=> nil
835
+ # q.insert "durian", 1
836
+ # q.insert "banana", 3
837
+ # q.insert "melon", 2
838
+ # p q.find_max_priority #=> ["banana", 3]
839
+ # q.clear
840
+ # p q.find_max_priority #=> nil
841
841
  #
842
842
  def find_max_priority
843
843
  loc = find_max_locator and [loc.value, loc.priority]
@@ -848,12 +848,12 @@ class Depq
848
848
  #
849
849
  # This method doesn't delete the element from the queue.
850
850
  #
851
- # pd = Depq.new
852
- # p pd.find_max #=> nil
853
- # pd.insert 3
854
- # pd.insert 1
855
- # pd.insert 2
856
- # p pd.find_max #=> 3
851
+ # q = Depq.new
852
+ # p q.find_max #=> nil
853
+ # q.insert 3
854
+ # q.insert 1
855
+ # q.insert 2
856
+ # p q.find_max #=> 3
857
857
  #
858
858
  def find_max
859
859
  loc = find_max_locator and loc.value
@@ -864,28 +864,28 @@ class Depq
864
864
  # returns the locators for the minimum and maximum element as a two-element array.
865
865
  # If the queue is empty, [nil, nil] is returned.
866
866
  #
867
- # pd = Depq.new
868
- # p pd.find_minmax_locator #=> [nil, nil]
869
- # pd.insert 3
870
- # pd.insert 1
871
- # pd.insert 2
872
- # p pd.find_minmax_locator #=> [#<Depq::Locator: 1>, #<Depq::Locator: 3>]
867
+ # q = Depq.new
868
+ # p q.find_minmax_locator #=> [nil, nil]
869
+ # q.insert 3
870
+ # q.insert 1
871
+ # q.insert 2
872
+ # p q.find_minmax_locator #=> [#<Depq::Locator: 1>, #<Depq::Locator: 3>]
873
873
  #
874
874
  def find_minmax_locator
875
875
  return [nil, nil] if empty?
876
876
  use_minmax
877
- return @mode.find_minmax_locator(self, @ary)
877
+ return @mode.find_minmax_loc(self, @ary)
878
878
  end
879
879
 
880
880
  # returns the minimum and maximum value as a two-element array.
881
881
  # If the queue is empty, [nil, nil] is returned.
882
882
  #
883
- # pd = Depq.new
884
- # p pd.find_minmax #=> [nil, nil]
885
- # pd.insert 3
886
- # pd.insert 1
887
- # pd.insert 2
888
- # p pd.find_minmax #=> [1, 3]
883
+ # q = Depq.new
884
+ # p q.find_minmax #=> [nil, nil]
885
+ # q.insert 3
886
+ # q.insert 1
887
+ # q.insert 2
888
+ # p q.find_minmax #=> [1, 3]
889
889
  #
890
890
  def find_minmax
891
891
  loc1, loc2 = self.find_minmax_locator
@@ -895,14 +895,14 @@ class Depq
895
895
 
896
896
  # delete the element specified by the locator.
897
897
  #
898
- # pd = Depq.new
899
- # pd.insert 3
900
- # loc = pd.insert 2
901
- # pd.insert 1
902
- # pd.delete_locator loc
903
- # p pd.delete_min #=> 1
904
- # p pd.delete_min #=> 3
905
- # p pd.delete_min #=> nil
898
+ # q = Depq.new
899
+ # q.insert 3
900
+ # loc = q.insert 2
901
+ # q.insert 1
902
+ # q.delete_locator loc
903
+ # p q.delete_min #=> 1
904
+ # p q.delete_min #=> 3
905
+ # p q.delete_min #=> nil
906
906
  #
907
907
  def delete_locator(loc)
908
908
  check_locator(loc)
@@ -916,7 +916,7 @@ class Depq
916
916
  loc
917
917
  else
918
918
  mode_heapify
919
- @heapsize = @mode.delete_locator(self, @ary, loc)
919
+ @heapsize = @mode.delete_loc(self, @ary, loc)
920
920
  loc
921
921
  end
922
922
  end
@@ -926,20 +926,20 @@ class Depq
926
926
  # This method returns the locator for the deleted element.
927
927
  # nil is returned if the queue is empty.
928
928
  #
929
- # pd = Depq.new
930
- # pd.insert 2
931
- # pd.insert 1
932
- # pd.insert 3
933
- # p pd.delete_min_locator #=> #<Depq::Locator: 1 (no queue)>
934
- # p pd.delete_min_locator #=> #<Depq::Locator: 2 (no queue)>
935
- # p pd.delete_min_locator #=> #<Depq::Locator: 3 (no queue)>
936
- # p pd.delete_min_locator #=> nil
929
+ # q = Depq.new
930
+ # q.insert 2
931
+ # q.insert 1
932
+ # q.insert 3
933
+ # p q.delete_min_locator #=> #<Depq::Locator: 1 (no queue)>
934
+ # p q.delete_min_locator #=> #<Depq::Locator: 2 (no queue)>
935
+ # p q.delete_min_locator #=> #<Depq::Locator: 3 (no queue)>
936
+ # p q.delete_min_locator #=> nil
937
937
  #
938
938
  def delete_min_locator
939
939
  return nil if empty?
940
940
  use_min
941
- loc = @mode.find_min_locator(self, @ary)
942
- @heapsize = @mode.delete_locator(self, @ary, loc)
941
+ loc = @mode.find_min_loc(self, @ary)
942
+ @heapsize = @mode.delete_loc(self, @ary, loc)
943
943
  loc
944
944
  end
945
945
 
@@ -949,14 +949,14 @@ class Depq
949
949
  # of the deleted element.
950
950
  # nil is returned if the queue is empty.
951
951
  #
952
- # pd = Depq.new
953
- # pd.insert "durian", 1
954
- # pd.insert "banana", 3
955
- # pd.insert "melon", 2
956
- # p pd.delete_min_priority #=> ["durian", 1]
957
- # p pd.delete_min_priority #=> ["melon", 2]
958
- # p pd.delete_min_priority #=> ["banana", 3]
959
- # p pd.delete_min_priority #=> nil
952
+ # q = Depq.new
953
+ # q.insert "durian", 1
954
+ # q.insert "banana", 3
955
+ # q.insert "melon", 2
956
+ # p q.delete_min_priority #=> ["durian", 1]
957
+ # p q.delete_min_priority #=> ["melon", 2]
958
+ # p q.delete_min_priority #=> ["banana", 3]
959
+ # p q.delete_min_priority #=> nil
960
960
  #
961
961
  def delete_min_priority
962
962
  loc = delete_min_locator
@@ -969,14 +969,14 @@ class Depq
969
969
  # This method returns the value of the deleted element.
970
970
  # nil is returned if the queue is empty.
971
971
  #
972
- # pd = Depq.new
973
- # pd.insert 3
974
- # pd.insert 1
975
- # pd.insert 2
976
- # p pd.delete_min #=> 1
977
- # p pd.delete_min #=> 2
978
- # p pd.delete_min #=> 3
979
- # p pd.delete_min #=> nil
972
+ # q = Depq.new
973
+ # q.insert 3
974
+ # q.insert 1
975
+ # q.insert 2
976
+ # p q.delete_min #=> 1
977
+ # p q.delete_min #=> 2
978
+ # p q.delete_min #=> 3
979
+ # p q.delete_min #=> nil
980
980
  #
981
981
  def delete_min
982
982
  loc = delete_min_locator
@@ -991,20 +991,20 @@ class Depq
991
991
  # This method returns the locator for the deleted element.
992
992
  # nil is returned if the queue is empty.
993
993
  #
994
- # pd = Depq.new
995
- # pd.insert 2
996
- # pd.insert 1
997
- # pd.insert 3
998
- # p pd.delete_max_locator #=> #<Depq::Locator: 3 (no queue)>
999
- # p pd.delete_max_locator #=> #<Depq::Locator: 2 (no queue)>
1000
- # p pd.delete_max_locator #=> #<Depq::Locator: 1 (no queue)>
1001
- # p pd.delete_max_locator #=> nil
994
+ # q = Depq.new
995
+ # q.insert 2
996
+ # q.insert 1
997
+ # q.insert 3
998
+ # p q.delete_max_locator #=> #<Depq::Locator: 3 (no queue)>
999
+ # p q.delete_max_locator #=> #<Depq::Locator: 2 (no queue)>
1000
+ # p q.delete_max_locator #=> #<Depq::Locator: 1 (no queue)>
1001
+ # p q.delete_max_locator #=> nil
1002
1002
  #
1003
1003
  def delete_max_locator
1004
1004
  return nil if empty?
1005
1005
  use_max
1006
- loc = @mode.find_max_locator(self, @ary)
1007
- @heapsize = @mode.delete_locator(self, @ary, loc)
1006
+ loc = @mode.find_max_loc(self, @ary)
1007
+ @heapsize = @mode.delete_loc(self, @ary, loc)
1008
1008
  loc
1009
1009
  end
1010
1010
 
@@ -1014,14 +1014,14 @@ class Depq
1014
1014
  # of the deleted element.
1015
1015
  # nil is returned if the queue is empty.
1016
1016
  #
1017
- # pd = Depq.new
1018
- # pd.insert "durian", 1
1019
- # pd.insert "banana", 3
1020
- # pd.insert "melon", 2
1021
- # p pd.delete_max_priority #=> ["banana", 3]
1022
- # p pd.delete_max_priority #=> ["melon", 2]
1023
- # p pd.delete_max_priority #=> ["durian", 1]
1024
- # p pd.delete_max_priority #=> nil
1017
+ # q = Depq.new
1018
+ # q.insert "durian", 1
1019
+ # q.insert "banana", 3
1020
+ # q.insert "melon", 2
1021
+ # p q.delete_max_priority #=> ["banana", 3]
1022
+ # p q.delete_max_priority #=> ["melon", 2]
1023
+ # p q.delete_max_priority #=> ["durian", 1]
1024
+ # p q.delete_max_priority #=> nil
1025
1025
  #
1026
1026
  def delete_max_priority
1027
1027
  loc = delete_max_locator
@@ -1034,14 +1034,14 @@ class Depq
1034
1034
  # This method returns the value of the deleted element.
1035
1035
  # nil is returned if the queue is empty.
1036
1036
  #
1037
- # pd = Depq.new
1038
- # pd.insert 3
1039
- # pd.insert 1
1040
- # pd.insert 2
1041
- # p pd.delete_max #=> 3
1042
- # p pd.delete_max #=> 2
1043
- # p pd.delete_max #=> 1
1044
- # p pd.delete_max #=> nil
1037
+ # q = Depq.new
1038
+ # q.insert 3
1039
+ # q.insert 1
1040
+ # q.insert 2
1041
+ # p q.delete_max #=> 3
1042
+ # p q.delete_max #=> 2
1043
+ # p q.delete_max #=> 1
1044
+ # p q.delete_max #=> nil
1045
1045
  #
1046
1046
  def delete_max
1047
1047
  loc = delete_max_locator
@@ -1055,14 +1055,14 @@ class Depq
1055
1055
  # This method returns the locator for the deleted element.
1056
1056
  # nil is returned if the queue is empty.
1057
1057
  #
1058
- # pd = Depq.new
1059
- # pd.insert 1
1060
- # pd.insert 4
1061
- # pd.insert 3
1062
- # p pd.delete_unspecified_locator #=> #<Depq::Locator: 3 (no queue)>
1063
- # p pd.delete_unspecified_locator #=> #<Depq::Locator: 4 (no queue)>
1064
- # p pd.delete_unspecified_locator #=> #<Depq::Locator: 1 (no queue)>
1065
- # p pd.delete_unspecified_locator #=> nil
1058
+ # q = Depq.new
1059
+ # q.insert 1
1060
+ # q.insert 4
1061
+ # q.insert 3
1062
+ # p q.delete_unspecified_locator #=> #<Depq::Locator: 3 (no queue)>
1063
+ # p q.delete_unspecified_locator #=> #<Depq::Locator: 4 (no queue)>
1064
+ # p q.delete_unspecified_locator #=> #<Depq::Locator: 1 (no queue)>
1065
+ # p q.delete_unspecified_locator #=> nil
1066
1066
  #
1067
1067
  def delete_unspecified_locator
1068
1068
  return nil if empty?
@@ -1077,14 +1077,14 @@ class Depq
1077
1077
  # of the deleted element.
1078
1078
  # nil is returned if the queue is empty.
1079
1079
  #
1080
- # pd = Depq.new
1081
- # pd.insert "durian", 1
1082
- # pd.insert "banana", 3
1083
- # pd.insert "melon", 2
1084
- # p pd.delete_unspecified_priority #=> ["melon", 2]
1085
- # p pd.delete_unspecified_priority #=> ["banana", 3]
1086
- # p pd.delete_unspecified_priority #=> ["durian", 1]
1087
- # p pd.delete_unspecified_priority #=> nil
1080
+ # q = Depq.new
1081
+ # q.insert "durian", 1
1082
+ # q.insert "banana", 3
1083
+ # q.insert "melon", 2
1084
+ # p q.delete_unspecified_priority #=> ["melon", 2]
1085
+ # p q.delete_unspecified_priority #=> ["banana", 3]
1086
+ # p q.delete_unspecified_priority #=> ["durian", 1]
1087
+ # p q.delete_unspecified_priority #=> nil
1088
1088
  #
1089
1089
  def delete_unspecified_priority
1090
1090
  loc = delete_unspecified_locator
@@ -1098,14 +1098,14 @@ class Depq
1098
1098
  # This method returns the value of the deleted element.
1099
1099
  # nil is returned if the queue is empty.
1100
1100
  #
1101
- # pd = Depq.new
1102
- # pd.insert 1
1103
- # pd.insert 4
1104
- # pd.insert 3
1105
- # p pd.delete_unspecified #=> 3
1106
- # p pd.delete_unspecified #=> 4
1107
- # p pd.delete_unspecified #=> 1
1108
- # p pd.delete_unspecified #=> nil
1101
+ # q = Depq.new
1102
+ # q.insert 1
1103
+ # q.insert 4
1104
+ # q.insert 3
1105
+ # p q.delete_unspecified #=> 3
1106
+ # p q.delete_unspecified #=> 4
1107
+ # p q.delete_unspecified #=> 1
1108
+ # p q.delete_unspecified #=> nil
1109
1109
  #
1110
1110
  def delete_unspecified
1111
1111
  loc = delete_unspecified_locator
@@ -1117,12 +1117,12 @@ class Depq
1117
1117
  #
1118
1118
  # The iteration order is unspecified.
1119
1119
  #
1120
- # pd = Depq.new
1121
- # pd.insert 3
1122
- # pd.insert 1
1123
- # pd.insert 2
1124
- # p pd.delete_min #=> 1
1125
- # pd.each_locator {|v|
1120
+ # q = Depq.new
1121
+ # q.insert 3
1122
+ # q.insert 1
1123
+ # q.insert 2
1124
+ # p q.delete_min #=> 1
1125
+ # q.each_locator {|v|
1126
1126
  # p v #=> #<Depq::Locator: 2>, #<Depq::Locator: 3>
1127
1127
  # }
1128
1128
  #
@@ -1135,11 +1135,11 @@ class Depq
1135
1135
 
1136
1136
  # iterate over the values and priorities in the queue.
1137
1137
  #
1138
- # pd = Depq.new
1139
- # pd.insert "durian", 1
1140
- # pd.insert "banana", 3
1141
- # pd.insert "melon", 2
1142
- # pd.each_with_priority {|val, priority|
1138
+ # q = Depq.new
1139
+ # q.insert "durian", 1
1140
+ # q.insert "banana", 3
1141
+ # q.insert "melon", 2
1142
+ # q.each_with_priority {|val, priority|
1143
1143
  # p [val, priority]
1144
1144
  # }
1145
1145
  # #=> ["durian", 1]
@@ -1157,12 +1157,12 @@ class Depq
1157
1157
  #
1158
1158
  # The iteration order is unspecified.
1159
1159
  #
1160
- # pd = Depq.new
1161
- # pd.insert 3
1162
- # pd.insert 1
1163
- # pd.insert 2
1164
- # p pd.delete_min #=> 1
1165
- # pd.each {|v|
1160
+ # q = Depq.new
1161
+ # q.insert 3
1162
+ # q.insert 1
1163
+ # q.insert 2
1164
+ # p q.delete_min #=> 1
1165
+ # q.each {|v|
1166
1166
  # p v #=> 2, 3
1167
1167
  # }
1168
1168
  #
@@ -1182,32 +1182,32 @@ class Depq
1182
1182
  def Depq.nlargest(n, iter)
1183
1183
  limit = (n * Math.log(1+n)).ceil
1184
1184
  limit = 1024 if limit < 1024
1185
- pd = Depq.new
1185
+ q = Depq.new
1186
1186
  threshold = nil
1187
1187
  iter.each {|v|
1188
- if pd.size < n
1189
- if pd.size == 0
1188
+ if q.size < n
1189
+ if q.size == 0
1190
1190
  threshold = v
1191
1191
  else
1192
1192
  threshold = v if (v <=> threshold) < 0
1193
1193
  end
1194
- pd.insert v
1194
+ q.insert v
1195
1195
  else
1196
1196
  if (v <=> threshold) > 0
1197
- pd.insert v
1198
- if limit < pd.size
1197
+ q.insert v
1198
+ if limit < q.size
1199
1199
  tmp = []
1200
- n.times { tmp << pd.delete_max }
1201
- pd.clear
1202
- pd.insert_all tmp
1200
+ n.times { tmp << q.delete_max }
1201
+ q.clear
1202
+ q.insert_all tmp
1203
1203
  threshold = tmp.last
1204
1204
  end
1205
1205
  end
1206
1206
  end
1207
1207
  }
1208
- n = pd.size if pd.size < n
1208
+ n = q.size if q.size < n
1209
1209
  a = []
1210
- n.times { a << pd.delete_max }
1210
+ n.times { a << q.delete_max }
1211
1211
  a.reverse!
1212
1212
  a
1213
1213
  end
@@ -1221,33 +1221,33 @@ class Depq
1221
1221
  def Depq.nsmallest(n, iter)
1222
1222
  limit = (n * Math.log(1+n)).ceil
1223
1223
  limit = 1024 if limit < 1024
1224
- pd = Depq.new
1224
+ q = Depq.new
1225
1225
  threshold = nil
1226
1226
  iter.each {|v|
1227
- if pd.size < n
1228
- if pd.size == 0
1227
+ if q.size < n
1228
+ if q.size == 0
1229
1229
  threshold = v
1230
1230
  else
1231
1231
  threshold = v if (v <=> threshold) > 0
1232
1232
  end
1233
- pd.insert v
1233
+ q.insert v
1234
1234
  else
1235
1235
  if (v <=> threshold) < 0
1236
- pd.insert v
1237
- if limit < pd.size
1236
+ q.insert v
1237
+ if limit < q.size
1238
1238
  tmp = []
1239
- n.times { tmp << pd.delete_min }
1240
- pd.clear
1241
- pd.insert_all tmp
1239
+ n.times { tmp << q.delete_min }
1240
+ q.clear
1241
+ q.insert_all tmp
1242
1242
  threshold = tmp.last
1243
1243
  end
1244
1244
  end
1245
1245
  end
1246
1246
  }
1247
- n = pd.size if pd.size < n
1247
+ n = q.size if q.size < n
1248
1248
  a = []
1249
1249
  n.times {
1250
- a << pd.delete_min
1250
+ a << q.delete_min
1251
1251
  }
1252
1252
  a
1253
1253
  end
@@ -1268,7 +1268,7 @@ class Depq
1268
1268
  # # 6
1269
1269
  #
1270
1270
  def Depq.merge(*iters, &b)
1271
- pd = Depq.new
1271
+ q = Depq.new
1272
1272
  iters.each {|enum|
1273
1273
  enum = enum.to_enum unless enum.kind_of? Enumerator
1274
1274
  begin
@@ -1276,18 +1276,18 @@ class Depq
1276
1276
  rescue StopIteration
1277
1277
  next
1278
1278
  end
1279
- pd.insert enum, val
1279
+ q.insert enum, val
1280
1280
  }
1281
1281
  loop = lambda {|y, meth|
1282
- until pd.empty?
1283
- loc = pd.find_min_locator
1282
+ until q.empty?
1283
+ loc = q.find_min_locator
1284
1284
  enum = loc.value
1285
1285
  val = loc.priority
1286
1286
  y.send meth, val
1287
1287
  begin
1288
1288
  val = enum.next
1289
1289
  rescue StopIteration
1290
- pd.delete_locator loc
1290
+ q.delete_locator loc
1291
1291
  next
1292
1292
  end
1293
1293
  loc.update enum, val
@@ -1330,15 +1330,6 @@ class Depq
1330
1330
  [locator, priority, subpriority]
1331
1331
  end
1332
1332
 
1333
- def each_entry(ary)
1334
- 0.upto(self.size-1) {|i|
1335
- ei = ary[i*ARY_SLICE_SIZE+0]
1336
- pi = ary[i*ARY_SLICE_SIZE+1]
1337
- si = ary[i*ARY_SLICE_SIZE+2]
1338
- yield ei, pi, si
1339
- }
1340
- end
1341
-
1342
1333
  def swap(ary, i, j)
1343
1334
  ei, pi, si = get_entry(ary, i)
1344
1335
  ej, pj, sj = get_entry(ary, j)
@@ -1352,40 +1343,40 @@ class Depq
1352
1343
  module SimpleHeap
1353
1344
  include HeapArray
1354
1345
 
1355
- def upheap(pd, ary, j)
1346
+ def upheap(q, ary, j)
1356
1347
  while true
1357
1348
  return if j <= 0
1358
1349
  i = (j-1) >> 1
1359
- return if upper?(pd, ary, i, j)
1350
+ return if upper?(q, ary, i, j)
1360
1351
  swap(ary, j, i)
1361
1352
  j = i
1362
1353
  end
1363
1354
  end
1364
1355
 
1365
- def downheap(pd, ary, i)
1356
+ def downheap(q, ary, i)
1366
1357
  while true
1367
1358
  j = i*2+1
1368
1359
  k = i*2+2
1369
1360
  return if size(ary) <= j
1370
1361
  if size(ary) == k
1371
- return if upper?(pd, ary, i, j)
1362
+ return if upper?(q, ary, i, j)
1372
1363
  swap(ary, i, j)
1373
1364
  i = j
1374
1365
  else
1375
- return if upper?(pd, ary, i, j) && upper?(pd, ary, i, k)
1376
- loc = upper?(pd, ary, j, k) ? j : k
1366
+ return if upper?(q, ary, i, j) && upper?(q, ary, i, k)
1367
+ loc = upper?(q, ary, j, k) ? j : k
1377
1368
  swap(ary, i, loc)
1378
1369
  i = loc
1379
1370
  end
1380
1371
  end
1381
1372
  end
1382
1373
 
1383
- def find_top_locator(pd, ary)
1374
+ def find_top_loc(q, ary)
1384
1375
  loc, _ = get_entry(ary, 0)
1385
1376
  loc
1386
1377
  end
1387
1378
 
1388
- def delete_locator(pd, ary, loc)
1379
+ def delete_loc(q, ary, loc)
1389
1380
  i = loc.send(:index)
1390
1381
  _, priority, subpriority = get_entry(ary, i)
1391
1382
  last = size(ary) - 1
@@ -1394,12 +1385,12 @@ class Depq
1394
1385
  if i != last
1395
1386
  set_entry(ary, i, el, pl, sl)
1396
1387
  el.send(:index=, i)
1397
- downheap(pd, ary, i)
1388
+ downheap(q, ary, i)
1398
1389
  end
1399
1390
  size(ary)
1400
1391
  end
1401
1392
 
1402
- def heapify(pd, ary, heapsize=0)
1393
+ def heapify(q, ary, heapsize=0)
1403
1394
  # compare number of data movements in worst case.
1404
1395
  # choose a way for less data movements.
1405
1396
  #
@@ -1435,11 +1426,11 @@ class Depq
1435
1426
  if currentsize - 1 < (h - 1) * (currentsize - heapsize + 1)
1436
1427
  n = (currentsize - 2) / 2
1437
1428
  n.downto(0) {|i|
1438
- downheap(pd, ary, i)
1429
+ downheap(q, ary, i)
1439
1430
  }
1440
1431
  else
1441
1432
  heapsize.upto(currentsize-1) {|i|
1442
- upheap(pd, ary, i)
1433
+ upheap(q, ary, i)
1443
1434
  }
1444
1435
  end
1445
1436
  currentsize
@@ -1451,27 +1442,27 @@ class Depq
1451
1442
  class << MinHeap
1452
1443
  include SimpleHeap
1453
1444
 
1454
- def upper?(pd, ary, i, j)
1445
+ def upper?(q, ary, i, j)
1455
1446
  ei, pi, si = get_entry(ary, i)
1456
1447
  ej, pj, sj = get_entry(ary, j)
1457
- pd.send(:compare_for_min, pi, si, pj, sj) <= 0
1448
+ q.send(:compare_for_min, pi, si, pj, sj) <= 0
1458
1449
  end
1459
1450
 
1460
- def update_priority(pd, ary, loc, priority, subpriority)
1451
+ def update_prio(q, ary, loc, priority, subpriority)
1461
1452
  i = loc.send(:index)
1462
1453
  ei, pi, si = get_entry(ary, i)
1463
- cmp = pd.send(:compare_for_min, pi, si, priority, subpriority)
1454
+ cmp = q.send(:compare_for_min, pi, si, priority, subpriority)
1464
1455
  set_entry(ary, i, ei, priority, subpriority)
1465
1456
  if cmp < 0
1466
1457
  # loc.priority < priority
1467
- downheap(pd, ary, i)
1458
+ downheap(q, ary, i)
1468
1459
  elsif cmp > 0
1469
1460
  # loc.priority > priority
1470
- upheap(pd, ary, i)
1461
+ upheap(q, ary, i)
1471
1462
  end
1472
1463
  end
1473
1464
 
1474
- alias find_min_locator find_top_locator
1465
+ alias find_min_loc find_top_loc
1475
1466
  end
1476
1467
 
1477
1468
  module MaxHeap
@@ -1479,28 +1470,28 @@ class Depq
1479
1470
  class << MaxHeap
1480
1471
  include SimpleHeap
1481
1472
 
1482
- def upper?(pd, ary, i, j)
1473
+ def upper?(q, ary, i, j)
1483
1474
  ei, pi, si = get_entry(ary, i)
1484
1475
  ej, pj, sj = get_entry(ary, j)
1485
- pd.send(:compare_for_max, pi, si, pj, sj) >= 0
1476
+ q.send(:compare_for_max, pi, si, pj, sj) >= 0
1486
1477
  end
1487
1478
 
1488
- def update_priority(pd, ary, loc, priority, subpriority)
1479
+ def update_prio(q, ary, loc, priority, subpriority)
1489
1480
  i = loc.send(:index)
1490
1481
  ei, pi, si = get_entry(ary, i)
1491
1482
  subpriority ||= si
1492
- cmp = pd.send(:compare_for_max, pi, si, priority, subpriority)
1483
+ cmp = q.send(:compare_for_max, pi, si, priority, subpriority)
1493
1484
  set_entry(ary, i, ei, priority, subpriority)
1494
1485
  if cmp < 0
1495
1486
  # loc.priority < priority
1496
- upheap(pd, ary, i)
1487
+ upheap(q, ary, i)
1497
1488
  elsif cmp > 0
1498
1489
  # loc.priority > priority
1499
- downheap(pd, ary, i)
1490
+ downheap(q, ary, i)
1500
1491
  end
1501
1492
  end
1502
1493
 
1503
- alias find_max_locator find_top_locator
1494
+ alias find_max_loc find_top_loc
1504
1495
  end
1505
1496
 
1506
1497
  module IntervalHeap
@@ -1520,23 +1511,23 @@ class Depq
1520
1511
  def child2_minside(i) i &= ~1; (i*2+4) & ~1 end
1521
1512
  def child2_maxside(i) i &= ~1; (i*2+4) | 1 end
1522
1513
 
1523
- def pcmp(pd, ary, i, j)
1514
+ def pcmp(q, ary, i, j)
1524
1515
  ei, pi, si = get_entry(ary, i)
1525
1516
  ej, pj, sj = get_entry(ary, j)
1526
- pd.compare_priority(pi, pj)
1517
+ q.compare_priority(pi, pj)
1527
1518
  end
1528
1519
 
1529
- def scmp(pd, ary, i, j)
1520
+ def scmp(q, ary, i, j)
1530
1521
  ei, pi, si = get_entry(ary, i)
1531
1522
  ej, pj, sj = get_entry(ary, j)
1532
1523
  si <=> sj
1533
1524
  end
1534
1525
 
1535
- def psame(pd, ary, i)
1536
- pcmp(pd, ary, minside(i), maxside(i)) == 0
1526
+ def psame(q, ary, i)
1527
+ pcmp(q, ary, minside(i), maxside(i)) == 0
1537
1528
  end
1538
1529
 
1539
- def travel(pd, ary, i, range, fix_subpriority)
1530
+ def travel(q, ary, i, range, fix_subpriority)
1540
1531
  while true
1541
1532
  j = yield i
1542
1533
  return i if !j
@@ -1545,7 +1536,7 @@ class Depq
1545
1536
  imin = minside(i)
1546
1537
  imax = maxside(i)
1547
1538
  if range.include?(imin) && range.include?(imax)
1548
- if pcmp(pd, ary, imin, imax) == 0 && scmp(pd, ary, imin, imax) > 0
1539
+ if pcmp(q, ary, imin, imax) == 0 && scmp(q, ary, imin, imax) > 0
1549
1540
  swap ary, imin, imax
1550
1541
  end
1551
1542
  end
@@ -1554,15 +1545,15 @@ class Depq
1554
1545
  end
1555
1546
  end
1556
1547
 
1557
- def upheap_minside(pd, ary, i, range)
1558
- travel(pd, ary, i, range, true) {|j|
1548
+ def upheap_minside(q, ary, i, range)
1549
+ travel(q, ary, i, range, true) {|j|
1559
1550
  if root?(j)
1560
1551
  nil
1561
1552
  elsif !range.include?(k = parent_minside(j))
1562
1553
  nil
1563
1554
  else
1564
- if pcmp(pd, ary, k, j) > 0
1565
- swap(ary, minside(k), maxside(k)) if psame(pd, ary, k)
1555
+ if pcmp(q, ary, k, j) > 0
1556
+ swap(ary, minside(k), maxside(k)) if psame(q, ary, k)
1566
1557
  k
1567
1558
  else
1568
1559
  nil
@@ -1571,14 +1562,14 @@ class Depq
1571
1562
  }
1572
1563
  end
1573
1564
 
1574
- def upheap_maxside(pd, ary, i, range)
1575
- travel(pd, ary, i, range, true) {|j|
1565
+ def upheap_maxside(q, ary, i, range)
1566
+ travel(q, ary, i, range, true) {|j|
1576
1567
  if root?(j)
1577
1568
  nil
1578
1569
  elsif !range.include?(k = parent_maxside(j))
1579
1570
  nil
1580
1571
  else
1581
- if pcmp(pd, ary, k, j) < 0
1572
+ if pcmp(q, ary, k, j) < 0
1582
1573
  k
1583
1574
  else
1584
1575
  nil
@@ -1587,8 +1578,8 @@ class Depq
1587
1578
  }
1588
1579
  end
1589
1580
 
1590
- def downheap_minside(pd, ary, i, range)
1591
- travel(pd, ary, i, range, true) {|j|
1581
+ def downheap_minside(q, ary, i, range)
1582
+ travel(q, ary, i, range, true) {|j|
1592
1583
  k1 = child1_minside(j)
1593
1584
  k2 = child2_minside(j)
1594
1585
  if !range.include?(k1)
@@ -1597,17 +1588,17 @@ class Depq
1597
1588
  if !range.include?(k2)
1598
1589
  k = k1
1599
1590
  else
1600
- if (pc = pcmp(pd, ary, k1, k2)) < 0
1591
+ if (pc = pcmp(q, ary, k1, k2)) < 0
1601
1592
  k = k1
1602
1593
  elsif pc > 0
1603
1594
  k = k2
1604
- elsif (sc = scmp(pd, ary, k1, k2)) <= 0
1595
+ elsif (sc = scmp(q, ary, k1, k2)) <= 0
1605
1596
  k = k1
1606
1597
  else
1607
1598
  k = k2
1608
1599
  end
1609
1600
  end
1610
- if (pc = pcmp(pd, ary, k, j)) < 0
1601
+ if (pc = pcmp(q, ary, k, j)) < 0
1611
1602
  k
1612
1603
  else
1613
1604
  nil
@@ -1616,29 +1607,29 @@ class Depq
1616
1607
  }
1617
1608
  end
1618
1609
 
1619
- def downheap_maxside(pd, ary, i, range)
1620
- travel(pd, ary, i, range, true) {|j|
1610
+ def downheap_maxside(q, ary, i, range)
1611
+ travel(q, ary, i, range, true) {|j|
1621
1612
  k1 = child1_maxside(j)
1622
1613
  k2 = child2_maxside(j)
1623
- k1 = minside(k1) if range.include?(k1) && psame(pd, ary, k1)
1624
- k2 = minside(k2) if range.include?(k2) && psame(pd, ary, k2)
1614
+ k1 = minside(k1) if range.include?(k1) && psame(q, ary, k1)
1615
+ k2 = minside(k2) if range.include?(k2) && psame(q, ary, k2)
1625
1616
  if !range.include?(k1)
1626
1617
  nil
1627
1618
  else
1628
1619
  if !range.include?(k2)
1629
1620
  k = k1
1630
1621
  else
1631
- if (pc = pcmp(pd, ary, k1, k2)) < 0
1622
+ if (pc = pcmp(q, ary, k1, k2)) < 0
1632
1623
  k = k2
1633
1624
  elsif pc > 0
1634
1625
  k = k1
1635
- elsif (sc = scmp(pd, ary, k1, k2)) <= 0
1626
+ elsif (sc = scmp(q, ary, k1, k2)) <= 0
1636
1627
  k = k1
1637
1628
  else
1638
1629
  k = k2
1639
1630
  end
1640
1631
  end
1641
- if (pc = pcmp(pd, ary, k, j)) > 0
1632
+ if (pc = pcmp(q, ary, k, j)) > 0
1642
1633
  swap(ary, minside(k), maxside(k)) if minside?(k)
1643
1634
  maxside(k)
1644
1635
  else
@@ -1648,27 +1639,25 @@ class Depq
1648
1639
  }
1649
1640
  end
1650
1641
 
1651
- def upheap_sub(pd, ary, i, range)
1652
- travel(pd, ary, i, range, false) {|j|
1642
+ def upheap_sub(q, ary, i, range)
1643
+ travel(q, ary, i, range, false) {|j|
1653
1644
  k = nil
1654
1645
  if minside?(j)
1655
- if range.include?(kk=parent_maxside(j)) && pcmp(pd, ary, j, kk) == 0
1646
+ if range.include?(kk=parent_maxside(j)) && pcmp(q, ary, j, kk) == 0
1656
1647
  k = kk
1657
- elsif range.include?(kk=parent_minside(j)) && pcmp(pd, ary, j, kk) == 0
1648
+ elsif range.include?(kk=parent_minside(j)) && pcmp(q, ary, j, kk) == 0
1658
1649
  k = kk
1659
1650
  end
1660
1651
  else
1661
- if range.include?(kk=minside(j)) && pcmp(pd, ary, j, kk) == 0
1652
+ if range.include?(kk=minside(j)) && pcmp(q, ary, j, kk) == 0
1662
1653
  k = kk
1663
- elsif range.include?(kk=parent_maxside(j)) && pcmp(pd, ary, j, kk) == 0
1654
+ elsif range.include?(kk=parent_maxside(j)) && pcmp(q, ary, j, kk) == 0
1664
1655
  k = kk
1665
1656
  end
1666
1657
  end
1667
1658
  if !k
1668
1659
  nil
1669
- elsif !range.include?(k)
1670
- nil
1671
- elsif scmp(pd, ary, k, j) > 0
1660
+ elsif scmp(q, ary, k, j) > 0
1672
1661
  k
1673
1662
  else
1674
1663
  nil
@@ -1676,34 +1665,34 @@ class Depq
1676
1665
  }
1677
1666
  end
1678
1667
 
1679
- def downheap_sub(pd, ary, i, range)
1680
- travel(pd, ary, i, range, false) {|j|
1668
+ def downheap_sub(q, ary, i, range)
1669
+ travel(q, ary, i, range, false) {|j|
1681
1670
  k1 = k2 = nil
1682
1671
  if minside?(j)
1683
- if range.include?(kk=maxside(j)) && pcmp(pd, ary, j, kk) == 0
1672
+ if range.include?(kk=maxside(j)) && pcmp(q, ary, j, kk) == 0
1684
1673
  k1 = kk
1685
1674
  else
1686
- k1 = kk if range.include?(kk=child1_minside(j)) && pcmp(pd, ary, j, kk) == 0
1687
- k2 = kk if range.include?(kk=child2_minside(j)) && pcmp(pd, ary, j, kk) == 0
1675
+ k1 = kk if range.include?(kk=child1_minside(j)) && pcmp(q, ary, j, kk) == 0
1676
+ k2 = kk if range.include?(kk=child2_minside(j)) && pcmp(q, ary, j, kk) == 0
1688
1677
  end
1689
1678
  else
1690
- if range.include?(kk=child1_minside(j)) && pcmp(pd, ary, j, kk) == 0
1679
+ if range.include?(kk=child1_minside(j)) && pcmp(q, ary, j, kk) == 0
1691
1680
  k1 = kk
1692
- elsif range.include?(kk=child1_maxside(j)) && pcmp(pd, ary, j, kk) == 0
1681
+ elsif range.include?(kk=child1_maxside(j)) && pcmp(q, ary, j, kk) == 0
1693
1682
  k1 = kk
1694
1683
  end
1695
- if range.include?(kk=child2_minside(j)) && pcmp(pd, ary, j, kk) == 0
1684
+ if range.include?(kk=child2_minside(j)) && pcmp(q, ary, j, kk) == 0
1696
1685
  k2 = kk
1697
- elsif range.include?(kk=child2_maxside(j)) && pcmp(pd, ary, j, kk) == 0
1686
+ elsif range.include?(kk=child2_maxside(j)) && pcmp(q, ary, j, kk) == 0
1698
1687
  k2 = kk
1699
1688
  end
1700
1689
  end
1701
1690
  if k1 && k2
1702
- k = scmp(pd, ary, k1, k2) > 0 ? k2 : k1
1691
+ k = scmp(q, ary, k1, k2) > 0 ? k2 : k1
1703
1692
  else
1704
1693
  k = k1 || k2
1705
1694
  end
1706
- if k && scmp(pd, ary, k, j) < 0
1695
+ if k && scmp(q, ary, k, j) < 0
1707
1696
  k
1708
1697
  else
1709
1698
  nil
@@ -1711,73 +1700,66 @@ class Depq
1711
1700
  }
1712
1701
  end
1713
1702
 
1714
- def adjust(pd, ary, i, range)
1703
+ def adjust(q, ary, i, range)
1715
1704
  if minside?(i)
1716
- j = upheap_minside(pd, ary, i, range)
1705
+ j = upheap_minside(q, ary, i, range)
1717
1706
  if i == j
1718
- i = downheap_minside(pd, ary, i, range)
1719
- if !range.include?(child1_minside(i)) && range.include?(j=maxside(i)) && pcmp(pd, ary, i, j) > 0
1707
+ i = downheap_minside(q, ary, i, range)
1708
+ if !range.include?(child1_minside(i)) && range.include?(j=maxside(i)) && pcmp(q, ary, i, j) > 0
1720
1709
  swap(ary, i, j)
1721
1710
  i = j
1722
1711
  end
1723
1712
  if maxside?(i) || !range.include?(maxside(i))
1724
- i = upheap_maxside(pd, ary, i, range)
1713
+ i = upheap_maxside(q, ary, i, range)
1725
1714
  end
1726
1715
  end
1727
1716
  else
1728
- j = upheap_maxside(pd, ary, i, range)
1717
+ j = upheap_maxside(q, ary, i, range)
1729
1718
  if i == j
1730
- i = downheap_maxside(pd, ary, i, range)
1719
+ i = downheap_maxside(q, ary, i, range)
1731
1720
  if !range.include?(child1_maxside(i))
1732
- if range.include?(j=child1_minside(i)) && pcmp(pd, ary, j, i) > 0
1721
+ if range.include?(j=child1_minside(i)) && pcmp(q, ary, j, i) > 0
1733
1722
  swap(ary, i, j)
1734
1723
  i = j
1735
- elsif range.include?(j=minside(i)) && pcmp(pd, ary, j, i) > 0
1724
+ elsif range.include?(j=minside(i)) && pcmp(q, ary, j, i) > 0
1736
1725
  swap(ary, i, j)
1737
1726
  i = j
1738
1727
  end
1739
1728
  end
1740
1729
  if minside?(i)
1741
- i = upheap_minside(pd, ary, i, range)
1730
+ i = upheap_minside(q, ary, i, range)
1742
1731
  end
1743
1732
  end
1744
1733
  end
1745
- i = upheap_sub(pd, ary, i, range)
1746
- downheap_sub(pd, ary, i, range)
1734
+ i = upheap_sub(q, ary, i, range)
1735
+ downheap_sub(q, ary, i, range)
1747
1736
  end
1748
1737
 
1749
- def update_priority(pd, ary, loc, prio, subprio)
1738
+ def update_prio(q, ary, loc, prio, subprio)
1750
1739
  i = loc.send(:index)
1751
1740
  ei, pi, si = get_entry(ary, i)
1752
1741
  subpriority ||= si
1753
1742
  set_entry(ary, i, ei, prio, subprio)
1754
1743
  range = 0...size(ary)
1755
- adjust(pd, ary, i, range)
1756
- end
1757
-
1758
- def insert_internal(pd, ary, loc, prio, subprio)
1759
- i = size(ary)
1760
- set_entry(ary, i, loc, prio, subprio)
1761
- range = 0...size(ary)
1762
- adjust(pd, ary, i, range)
1744
+ adjust(q, ary, i, range)
1763
1745
  end
1764
1746
 
1765
- def heapify(pd, ary, heapsize=0)
1747
+ def heapify(q, ary, heapsize=0)
1766
1748
  currentsize = size(ary)
1767
1749
  h = Math.log(currentsize+1)/Math.log(2)
1768
1750
  if currentsize - 1 < (h - 1) * (currentsize - heapsize + 1)
1769
1751
  (currentsize-1).downto(0) {|i|
1770
- adjust(pd, ary, i, i...currentsize)
1752
+ adjust(q, ary, i, i...currentsize)
1771
1753
  }
1772
1754
  else
1773
1755
  heapsize.upto(currentsize-1) {|i|
1774
- adjust(pd, ary, i, 0...(i+1))
1756
+ adjust(q, ary, i, 0...(i+1))
1775
1757
  }
1776
1758
  end
1777
1759
  currentsize
1778
1760
  end
1779
1761
 
1780
- def find_minmax_locator(pd, ary)
1762
+ def find_minmax_loc(q, ary)
1781
1763
  case size(ary)
1782
1764
  when 0
1783
1765
  [nil, nil]
@@ -1785,7 +1767,7 @@ class Depq
1785
1767
  e0, p0, s0 = get_entry(ary, 0)
1786
1768
  [e0, e0]
1787
1769
  else
1788
- if pcmp(pd, ary, 0, 1) == 0
1770
+ if pcmp(q, ary, 0, 1) == 0
1789
1771
  e0, p0, s0 = get_entry(ary, 0)
1790
1772
  [e0, e0]
1791
1773
  else
@@ -1796,15 +1778,15 @@ class Depq
1796
1778
  end
1797
1779
  end
1798
1780
 
1799
- def find_min_locator(pd, ary)
1800
- find_minmax_locator(pd, ary).first
1781
+ def find_min_loc(q, ary)
1782
+ find_minmax_loc(q, ary).first
1801
1783
  end
1802
1784
 
1803
- def find_max_locator(pd, ary)
1804
- find_minmax_locator(pd, ary).last
1785
+ def find_max_loc(q, ary)
1786
+ find_minmax_loc(q, ary).last
1805
1787
  end
1806
1788
 
1807
- def delete_locator(pd, ary, loc)
1789
+ def delete_loc(q, ary, loc)
1808
1790
  i = loc.send(:index)
1809
1791
  _, priority, subpriority = get_entry(ary, i)
1810
1792
  last = size(ary) - 1
@@ -1813,7 +1795,7 @@ class Depq
1813
1795
  if i != last
1814
1796
  set_entry(ary, i, el, pl, sl)
1815
1797
  el.send(:index=, i)
1816
- adjust(pd, ary, i, 0...last)
1798
+ adjust(q, ary, i, 0...last)
1817
1799
  end
1818
1800
  size(ary)
1819
1801
  end