pairing_heap 3.0.0 → 3.1.0
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 +4 -4
- data/.github/workflows/main.yml +1 -1
- data/Gemfile.lock +38 -21
- data/README.md +244 -353
- data/Rakefile +2 -0
- data/lib/pairing_heap/version.rb +1 -1
- data/lib/pairing_heap.rb +32 -2
- data/pairing_heap.gemspec +3 -10
- metadata +8 -7
data/Rakefile
CHANGED
data/lib/pairing_heap/version.rb
CHANGED
data/lib/pairing_heap.rb
CHANGED
@@ -191,8 +191,8 @@ module PairingHeap
|
|
191
191
|
end
|
192
192
|
|
193
193
|
node.priority = priority
|
194
|
-
return if node.parent.nil?
|
195
|
-
return if @order[node.parent.priority, node.priority]
|
194
|
+
return self if node.parent.nil?
|
195
|
+
return self if @order[node.parent.priority, node.priority]
|
196
196
|
|
197
197
|
node.remove_from_parents_list!
|
198
198
|
@root = meld(node, @root)
|
@@ -425,6 +425,27 @@ module PairingHeap
|
|
425
425
|
NodeVisitor.visit_node(@root) { |x| yield [x.elem, x.priority] }
|
426
426
|
end
|
427
427
|
|
428
|
+
# Merges provided heap
|
429
|
+
# Time Complexity: O(1)
|
430
|
+
# @param other SimplePairingHeap to be merged
|
431
|
+
# @return [self]
|
432
|
+
# @raise [ArgumentError] if the provided argument is self
|
433
|
+
# @note This method modifies the argument
|
434
|
+
def merge(other)
|
435
|
+
if equal?(other)
|
436
|
+
raise ArgumentError, "Cannot merge with itself"
|
437
|
+
end
|
438
|
+
other_root = other.root
|
439
|
+
@root = if @root
|
440
|
+
other_root ? meld(@root, other_root) : @root
|
441
|
+
else
|
442
|
+
other_root
|
443
|
+
end
|
444
|
+
@size += other.size
|
445
|
+
other.clear!
|
446
|
+
self
|
447
|
+
end
|
448
|
+
|
428
449
|
private
|
429
450
|
|
430
451
|
include MergePairs
|
@@ -441,6 +462,15 @@ module PairingHeap
|
|
441
462
|
parent.subheaps = child
|
442
463
|
parent
|
443
464
|
end
|
465
|
+
|
466
|
+
protected
|
467
|
+
|
468
|
+
attr_reader :root
|
469
|
+
|
470
|
+
def clear!
|
471
|
+
@root = nil
|
472
|
+
@size = 0
|
473
|
+
end
|
444
474
|
end
|
445
475
|
|
446
476
|
# Priority queue where the smallest priority is the most prioritary
|
data/pairing_heap.gemspec
CHANGED
@@ -17,9 +17,8 @@ Gem::Specification.new do |spec|
|
|
17
17
|
spec.metadata["homepage_uri"] = spec.homepage
|
18
18
|
spec.metadata["source_code_uri"] = spec.homepage
|
19
19
|
spec.metadata["documentation_uri"] = "https://rubydoc.info/gems/pairing_heap"
|
20
|
+
spec.metadata["rubygems_mfa_required"] = "true"
|
20
21
|
|
21
|
-
# Specify which files should be added to the gem when it is released.
|
22
|
-
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
23
22
|
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
24
23
|
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{\A(?:test|spec|features)/}) }
|
25
24
|
end
|
@@ -27,14 +26,8 @@ Gem::Specification.new do |spec|
|
|
27
26
|
spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
|
28
27
|
spec.require_paths = ["lib"]
|
29
28
|
|
30
|
-
|
31
|
-
# spec.add_dependency "example-gem", "~> 1.0"
|
32
|
-
|
33
|
-
spec.add_development_dependency "minitest", "~> 5.0"
|
29
|
+
spec.add_development_dependency "minitest", "~> 5.21"
|
34
30
|
spec.add_development_dependency "rake", "~> 13.0"
|
35
31
|
spec.add_development_dependency "simplecov", "~> 0.22.0"
|
36
|
-
spec.add_development_dependency "standard", "~> 1.
|
37
|
-
|
38
|
-
# For more information and examples about making a new gem, checkout our
|
39
|
-
# guide at: https://bundler.io/guides/creating_gem.html
|
32
|
+
spec.add_development_dependency "standard", "~> 1.31"
|
40
33
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pairing_heap
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Marcin Henryk Bartkowiak
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-02-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: minitest
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '5.
|
19
|
+
version: '5.21'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '5.
|
26
|
+
version: '5.21'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -58,14 +58,14 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '1.
|
61
|
+
version: '1.31'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '1.
|
68
|
+
version: '1.31'
|
69
69
|
description: Performant priority queue in pure ruby with support for changing priority
|
70
70
|
using pairing heap data structure
|
71
71
|
email:
|
@@ -94,6 +94,7 @@ metadata:
|
|
94
94
|
homepage_uri: https://github.com/mhib/pairing_heap
|
95
95
|
source_code_uri: https://github.com/mhib/pairing_heap
|
96
96
|
documentation_uri: https://rubydoc.info/gems/pairing_heap
|
97
|
+
rubygems_mfa_required: 'true'
|
97
98
|
post_install_message:
|
98
99
|
rdoc_options: []
|
99
100
|
require_paths:
|
@@ -109,7 +110,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
109
110
|
- !ruby/object:Gem::Version
|
110
111
|
version: '0'
|
111
112
|
requirements: []
|
112
|
-
rubygems_version: 3.
|
113
|
+
rubygems_version: 3.5.3
|
113
114
|
signing_key:
|
114
115
|
specification_version: 4
|
115
116
|
summary: Performant priority queue in pure ruby with support for changing priority
|