splaytree 0.1.0 → 0.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d251409b924ce93ff916bf31539babb39da6ff50
4
- data.tar.gz: 96ce8b423c24cc2cdc21d8e9a3afe04f89aaae78
3
+ metadata.gz: c63b99bb2fb5b4964f06f89b6d30ee8aec87b00a
4
+ data.tar.gz: b04a5e1d21bd39e3e0b5a237104b8c43f36811c6
5
5
  SHA512:
6
- metadata.gz: 9815b103c477f5fccde78d85fd48c00b89b13aa0162495fe53eeb843c96cb4bb36721d260d687ae35d41fbf2981e8a5f68fe452b5d46663f908d171a319da07a
7
- data.tar.gz: ac6a350fd0a2a98df6bf46dde19837c84fd8ed34499410629f3840bdb3b365896aacedd75971298423f052e020d93ddfb9f702386d582c693334be9fa349dbcb
6
+ metadata.gz: ddfb60c119269a6105ee7656aec1143dec67d465031f02df748981778703c781c3313d213fd927eb4222ec2e9b6d70a3c0eee1b78461057194ea486251612e52
7
+ data.tar.gz: cb55c77d73bfabed3183cf6281ec2453f2445ee3ce188a7f6b610a186a71de7db8e511cbbc9953e4e7faf8350a95022b555e5298eb19d9d1e099f3def02fef92
@@ -26,8 +26,8 @@ class Splaytree
26
26
  deleted
27
27
  end
28
28
 
29
- def has_duplicates?
30
- @duplicates.length > 0
29
+ def duplicates?
30
+ !@duplicates.empty?
31
31
  end
32
32
 
33
33
  def root?
@@ -67,18 +67,18 @@ class Splaytree
67
67
  self.parent = nil
68
68
  end
69
69
 
70
- if self.object_id == parent.left.object_id
71
- parent.set_left(self.right)
72
- self.set_right(parent)
70
+ if object_id == parent.left.object_id
71
+ parent.set_left(right)
72
+ set_right(parent)
73
73
  else
74
- parent.set_right(self.left)
75
- self.set_left(parent)
74
+ parent.set_right(left)
75
+ set_left(parent)
76
76
  end
77
77
  end
78
78
 
79
79
  def zigzig?
80
- (self.object_id == parent.left.object_id && parent.object_id == gparent.left.object_id) ||
81
- (self.object_id == parent.right.object_id && parent.object_id == gparent.right.object_id)
80
+ (object_id == parent.left.object_id && parent.object_id == gparent.left.object_id) ||
81
+ (object_id == parent.right.object_id && parent.object_id == gparent.right.object_id)
82
82
  end
83
83
 
84
84
  def to_s
@@ -94,9 +94,9 @@ class Splaytree
94
94
  [key, value]
95
95
  end
96
96
 
97
- def <=>(node)
98
- return unless node
99
- self.key <=> node.key
97
+ def <=>(other)
98
+ return unless other
99
+ key <=> other.key
100
100
  end
101
101
 
102
102
  end
@@ -1,3 +1,3 @@
1
1
  class Splaytree
2
- VERSION = "0.1.0"
2
+ VERSION = '0.2.0'
3
3
  end
data/lib/splaytree.rb CHANGED
@@ -4,23 +4,19 @@ require 'splaytree/node'
4
4
  class Splaytree
5
5
  include Enumerable
6
6
 
7
- attr_reader :root
7
+ attr_reader :root, :size
8
+ alias_method :length, :size
8
9
 
9
10
  def initialize
10
11
  @root = nil
11
12
  @size = 0
12
13
  end
13
14
 
14
- def size
15
- @size
16
- end
17
- alias_method :length, :size
18
-
19
15
  def empty?
20
16
  @root.nil?
21
17
  end
22
18
 
23
- def has_key?(key)
19
+ def key?(key)
24
20
  !!get(key)
25
21
  end
26
22
 
@@ -55,9 +51,7 @@ class Splaytree
55
51
  def min
56
52
  return if empty?
57
53
  node = @root
58
- while node.left
59
- node = node.left
60
- end
54
+ node = node.left while node.left
61
55
  splay(node)
62
56
  node.to_h
63
57
  end
@@ -65,9 +59,7 @@ class Splaytree
65
59
  def max
66
60
  return if empty?
67
61
  node = @root
68
- while node.right
69
- node = node.right
70
- end
62
+ node = node.right while node.right
71
63
  splay(node)
72
64
  node.to_h
73
65
  end
@@ -76,7 +68,7 @@ class Splaytree
76
68
  height_recursive(@root)
77
69
  end
78
70
 
79
- def get_with_duplicates(key)
71
+ def duplicates(key)
80
72
  return if empty?
81
73
  get(key)
82
74
  return if @root.key != key
@@ -99,7 +91,7 @@ class Splaytree
99
91
  break if node.right.nil?
100
92
  node = node.right
101
93
  else
102
- fail
94
+ raise TypeError, 'Keys should be comparable!'
103
95
  end
104
96
  end
105
97
  splay(node)
@@ -118,25 +110,25 @@ class Splaytree
118
110
  node.add_duplicate!(value)
119
111
  break
120
112
  when -1
121
- if !current.left
113
+ unless current.left
122
114
  current.set_left(node)
123
115
  break
124
116
  end
125
117
  current = current.left
126
118
  when 1
127
- if !current.right
119
+ unless current.right
128
120
  current.set_right(node)
129
121
  break
130
122
  end
131
123
  current = current.right
132
124
  else
133
- fail
125
+ raise TypeError, 'Keys should be comparable!'
134
126
  end
135
127
  end
136
128
  end
137
129
  splay(node)
138
130
  @size += 1
139
- return true
131
+ true
140
132
  end
141
133
  alias_method :[]=, :insert
142
134
 
@@ -145,14 +137,14 @@ class Splaytree
145
137
  get(key)
146
138
  return false if @root.key != key
147
139
  @root.value = value
148
- return true
140
+ true
149
141
  end
150
142
 
151
143
  def remove(key)
152
144
  return if empty?
153
145
  get(key)
154
146
  return if @root.key != key
155
- if @root.has_duplicates?
147
+ if @root.duplicates?
156
148
  deleted = @root.remove_duplicate!
157
149
  else
158
150
  deleted = @root.value
@@ -177,7 +169,7 @@ class Splaytree
177
169
  end
178
170
 
179
171
  def each
180
- return if self.empty?
172
+ return if empty?
181
173
  stack = []
182
174
  node = @root
183
175
  loop do
@@ -196,11 +188,11 @@ class Splaytree
196
188
  end
197
189
  end
198
190
 
199
- def each_key(&block)
191
+ def each_key
200
192
  each { |node| yield node.key }
201
193
  end
202
194
 
203
- def each_value(&block)
195
+ def each_value
204
196
  each { |node| yield node.value }
205
197
  end
206
198
 
@@ -215,8 +207,14 @@ class Splaytree
215
207
  def report
216
208
  return if empty?
217
209
  result = []
218
- each_with_index do |node, index|
219
- result << { node: node.key, parent: node.parent&.key, left: node.left&.key, right: node.right&.key }
210
+ each do |node|
211
+ item = {
212
+ node: node.key,
213
+ parent: node.parent && node.parent.key,
214
+ left: node.left && node.left.key,
215
+ right: node.right && node.right.key
216
+ }
217
+ result << item
220
218
  end
221
219
  result
222
220
  end
@@ -226,11 +224,7 @@ class Splaytree
226
224
  def get_one_higher_of_root
227
225
  return if @root.right.nil?
228
226
  node = @root.right
229
- while node.left do
230
- if node.left
231
- node = node.left
232
- end
233
- end
227
+ node = node.left while node.left
234
228
  splay(node)
235
229
  node.to_h
236
230
  end
@@ -238,9 +232,7 @@ class Splaytree
238
232
  def get_one_lower_of_root
239
233
  return if @root.left.nil?
240
234
  node = @root.left
241
- while node.right do
242
- node = node.right
243
- end
235
+ node = node.right while node.right
244
236
  splay(node)
245
237
  node.to_h
246
238
  end
@@ -254,7 +246,7 @@ class Splaytree
254
246
  end
255
247
 
256
248
  def splay(node)
257
- while !node.root? do
249
+ until node.root?
258
250
  parent = node.parent
259
251
  if parent.root?
260
252
  node.rotate
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: splaytree
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Artur Babagulyyev
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-05-22 00:00:00.000000000 Z
11
+ date: 2017-05-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -80,9 +80,11 @@ dependencies:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: '1.1'
83
- description: A splay tree is a self-adjusting binary search tree with the additional
84
- property that recently accessed elements are quick to access again. It performs
85
- basic operations such as insertion, look-up and removal in O(log n) amortized time.
83
+ description: |-
84
+ Splay tree is an efficient implementation of a balanced
85
+ binary search tree that takes advantage of locality
86
+ in the keys used in incoming lookup requests.
87
+ For many applications, there is excellent key locality.
86
88
  email:
87
89
  - artur.babagulyyev@gmail.com
88
90
  executables: []