rgraph 0.0.14 → 0.0.15

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4c4d3fdd3c5cedd1f8ea3f6f12ac4cfc35ced188
4
- data.tar.gz: b9ee2affd0263db5ec94a3bf395d5569ee8ece85
3
+ metadata.gz: a8b930efb8ed11c31dacaee01435737d719d91dd
4
+ data.tar.gz: 86ba6f3a3c0985a29da1c0819c4fd99af9803c5d
5
5
  SHA512:
6
- metadata.gz: 7723113a6c7b319dd3dadae64511d8d0c623832f588ce40f418da526df01a81cb052d509fd89550638ad2554c89cc64e02632cda004f73892d88410601e7e158
7
- data.tar.gz: 86883eca3a63e40d83d3cd1c2e2eb326347e8585a39b75bd555f31c56d44e2ca152da0aab91097e0dcc540b903efe656b745eb422c33e62a5410c6780924f92b
6
+ metadata.gz: d073c066a225bc4bb874739bffcec43715410d8ef8b1cddececc47807650c8edf12bcf515216e466a51a8c6e1ceb08ace176c48f5f34d1c988807edb8abe7ad7
7
+ data.tar.gz: 0d3490d9524aca751f01cc92ddeb7f9bc95e5117d46d9644197221ecb5c33432025b0debf83d470f734816f37a0daf5844c58b58b06da1fc15e3d37274fecced
data/lib/rgraph/graph.rb CHANGED
@@ -100,20 +100,26 @@ class Graph
100
100
 
101
101
  def shortest_paths(args = {})
102
102
  multiples = args[:multiples] || false
103
+ giant = args[:giant] || false
104
+
103
105
  @shortest_paths = []
104
106
 
105
107
  distances
108
+ giant_component
109
+
110
+ nodes = giant ? @giant_component : @nodes
106
111
 
107
- 0.upto(@nodes.size - 1).each do |i|
108
- (i + 1).upto(@nodes.size - 1).each do |j|
109
- @shortest_paths += shortest_path(i, j, multiples)
112
+ 0.upto(nodes.size - 1).each do |i|
113
+ (i + 1).upto(nodes.size - 1).each do |j|
114
+ @shortest_paths += shortest_path(i, j, multiples, giant)
110
115
  end
111
116
  end
112
117
 
113
118
  @shortest_paths
114
119
  end
115
120
 
116
- def shortest_path(i, j, multiples = false)
121
+ def shortest_path(i, j, multiples = false, giant = false)
122
+ nodes = giant ? @giant_component : @nodes
117
123
 
118
124
  return [] if @distance[i][j] == @infinity
119
125
 
@@ -141,8 +147,9 @@ class Graph
141
147
  out
142
148
  end
143
149
 
144
- def between(i)
145
- shortest_paths(multiples: true)
150
+ def between(i, args = {})
151
+ giant = args[:giant] || false
152
+ shortest_paths(multiples: true, giant: giant)
146
153
 
147
154
  n = @shortest_paths.select{|c| c[1..-2].include?(i)}.size.to_f
148
155
  m = @shortest_paths.size.to_f
@@ -151,11 +158,12 @@ class Graph
151
158
 
152
159
  def betweenness(args = {})
153
160
  cumulative = args[:cumulative] || false
161
+ giant = args[:giant] || false
154
162
 
155
163
  #If we ask cumulative, normalized must be true
156
164
  normalized = args[:normalized] || cumulative || false
157
165
 
158
- bts = 0.upto(@nodes.size - 1).map { |i| between(i) }
166
+ bts = 0.upto(@nodes.size - 1).map { |i| between(i, args) }
159
167
 
160
168
  if normalized
161
169
  max = bts.max
@@ -227,6 +235,17 @@ class Graph
227
235
  @components
228
236
  end
229
237
 
238
+ def giant_component
239
+ components unless @components
240
+
241
+ @giant_component = []
242
+ @components.each do |c|
243
+ @giant_component = c if c.size > @giant_component.size
244
+ end
245
+
246
+ @giant_component
247
+ end
248
+
230
249
  private
231
250
 
232
251
  def step_page_rank(d = 0.85, e = 0.01)
@@ -1,3 +1,3 @@
1
1
  module Rgraph
2
- VERSION = '0.0.14'
2
+ VERSION = '0.0.15'
3
3
  end
@@ -158,6 +158,17 @@ describe Graph do
158
158
  expect(g.shortest_paths.count).to eq(6)
159
159
  expect(g.shortest_paths(multiples: true).count).to eq(8)
160
160
  end
161
+ it "calculates the betweenness of the giant component" do
162
+ g = Graph.new_from_string("source,target\n1,2\n2,3\n3,4\n5,6")
163
+ expect(g.between(0, giant: true)).to eq(0 / 6.0)
164
+ expect(g.between(1, giant: true)).to eq(2 / 6.0)
165
+ expect(g.between(2, giant: true)).to eq(2 / 6.0)
166
+ expect(g.between(3, giant: true)).to eq(0 / 6.0)
167
+ expect(g.between(4, giant: true)).to eq(0.0)
168
+ expect(g.between(5, giant: true)).to eq(0.0)
169
+ expect(g.betweenness(giant: true)).to eq([0, 1 / 3.0, 1 / 3.0, 0, 0, 0])
170
+ end
171
+
161
172
  it "calculates the betweenness of a single node" do
162
173
  expect(subject.between(0)).to eq(0 / 18.0)
163
174
  expect(subject.between(1)).to eq(2 / 18.0)
@@ -199,6 +210,10 @@ describe Graph do
199
210
  g = Graph.new_from_string("source,target\n1,2\n3,4")
200
211
  expect(g.components).to eq([g.nodes[0..1], g.nodes[2..3]])
201
212
  end
213
+ it "sets the giant component" do
214
+ g = Graph.new_from_string("source,target\n1,2\n2,3\n4,5")
215
+ expect(g.giant_component.size).to eq(3)
216
+ end
202
217
  it "calculates clustering of a single node" do
203
218
  nodes = subject.nodes.sort{|a,b| a.id <=> b.id}
204
219
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rgraph
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.14
4
+ version: 0.0.15
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lucas Aride Moulin