mpath_graph 0.0.3 → 0.0.4

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: d7b6e50d3b2aba78f3916fe417dbb9652e6c028d
4
- data.tar.gz: 4e65ecd1d69aa8b692183050da44819dc63a7e56
3
+ metadata.gz: d8a5503ae715087d19084692a16bbec0e69e2253
4
+ data.tar.gz: 541cfae204b640553c6237e23938eecb7b3a29c9
5
5
  SHA512:
6
- metadata.gz: da13ccac14270b6e38af0cc5130dee05e97cf7a627b4db0a7eddd03b643b83331ede683346e1a8cb9ffaa32af039e12d23682760c5b1d9e5a74c7aabd81acb50
7
- data.tar.gz: 2664b8ee4407f970234e452f968cc041fbe21be8cc02e763fdf67d62b5fd88a26c8b83125850bf1bdb19c5a75ea1f8eadcdcf42dc291cf25b8c8a14d3d83f101
6
+ metadata.gz: 44fdf9724d60e0467483dd98026b2b6416e208378b721eed0bb65aee077916f7f6b5ae6bd4e6d0e44766edd401c441d4154b89e6ffd2c88fc855eac0331d9cde
7
+ data.tar.gz: f5377c43f9aedb4e1ef4720cf07a01251eac237f9b52dd4a004ee1cf502d31e0e9fef605f5623417ab06dac28d4bd753ad7f13d9f9c4b325e4b100c6a211a8dc
data/lib/mpath_graph.rb CHANGED
@@ -191,6 +191,83 @@ module MPathGraph
191
191
  end
192
192
 
193
193
  module OddHole
194
+ def self.equivalents(hole)
195
+ perms = [hole.reverse]
196
+ tmp = Array.new hole
197
+
198
+ (hole.size-1).times do
199
+ tmp << tmp.shift
200
+ perms << Array.new(tmp)
201
+ perms << Array.new(tmp.reverse)
202
+ end
203
+
204
+ perms
205
+ end
206
+
207
+ def self.rw_search(edges, options = {})
208
+ options[:holes_limit] ||= 0
209
+ holes_found = []
210
+ options[:worm_size] ||= 5
211
+ return nil if edges.size < options[:worm_size]
212
+
213
+ prng = Random.new
214
+ rnd_idx = prng.rand(edges.size)
215
+ options[:initial_vertex] ||= edges[rnd_idx][rnd_idx%2]
216
+ worm = [options[:initial_vertex]]
217
+
218
+ while worm.size < options[:worm_size]
219
+ return nil if worm.empty?
220
+
221
+ neighbors = MPathGraph::find_neighbors(worm.last, edges)
222
+ neighbors = neighbors - worm
223
+
224
+ if neighbors.empty?
225
+ worm.pop
226
+ next
227
+ else
228
+ rnd_idx = prng.rand(neighbors.size)
229
+ worm << neighbors[rnd_idx]
230
+ neighbors = nil
231
+
232
+ if worm.size == options[:worm_size]
233
+ if is_an_odd_hole?(worm, edges, options[:worm_size])
234
+ # Check if current hole is also found
235
+ repeated = false
236
+ holes_found.each do |h|
237
+ if worm == h
238
+ repeated = true
239
+ break
240
+ end
241
+
242
+ equivalents(h).each do |e|
243
+ if worm == e
244
+ repeated = true
245
+ break
246
+ end
247
+ end
248
+ break if repeated
249
+ end
250
+
251
+ # Add to found list if not found yet
252
+ unless repeated
253
+ holes_found << worm
254
+ if options[:holes_limit] > 0 && holes_found.size == options[:holes_limit]
255
+ return holes_found
256
+ end
257
+ end
258
+
259
+ # Leave only first element in worm
260
+ worm = [worm.last]
261
+ next
262
+ else
263
+ worm.shift
264
+ next
265
+ end
266
+ end
267
+ end
268
+ end
269
+ end
270
+
194
271
  def self.rw_search_first(edges, options = {})
195
272
  options[:worm_size] ||= 5
196
273
  return nil if edges.size < options[:worm_size]
@@ -1,3 +1,3 @@
1
1
  module MPathGraph
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
@@ -9,6 +9,7 @@ class TestMPathGraphOddHole < MiniTest::Unit::TestCase
9
9
  @oh5_e = [[1,2],[1,5],[2,3],[3,4],[4,5]]
10
10
  @oh7_e = [[1,2],[1,7],[2,3],[3,4],[4,5],[5,6],[6,7]]
11
11
  @g = [[1,2],[1,5],[2,3],[3,4],[4,5]]
12
+ @doble_c5 = [[0,6],[0,9],[1,2],[1,5],[1,6],[2,3],[3,4],[4,5],[6,7],[7,8],[8,9]]
12
13
  end
13
14
 
14
15
  def test_is_an_odd_hole?
@@ -32,5 +33,18 @@ class TestMPathGraphOddHole < MiniTest::Unit::TestCase
32
33
  def test_rw_search_first
33
34
  computed = MPathGraph::OddHole::rw_search_first(@g)
34
35
  assert_equal [1,2,3,4,5], computed.sort
36
+
37
+ def test_rw_search
38
+ found = MPathGraph::OddHole::rw_search(@doble_c5, holes_limit: 2)
39
+ assert_equal 2, found.size
40
+ end
41
+
42
+ def test_equivalents
43
+ hole = [1,2,3,4,5]
44
+ exp = [[5,4,3,2,1],[2,3,4,5,1],[1,5,4,3,2],[3,4,5,1,2],[2,1,5,4,3],
45
+ [4,5,1,2,3],[3,2,1,5,4],[5,1,2,3,4],[4,3,2,1,5]]
46
+ result = MPathGraph::OddHole::equivalents(hole)
47
+ assert_same exp.size, result.size
48
+ assert [], exp-result
35
49
  end
36
50
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mpath_graph
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Israel Buitron