用於圖論的操作有一個很好的C庫嗎?我特別需要計算有向圖的strongly connected components。我已經Ruby實現Tarjan's algorithm如下:用於圖形的C庫
def strongly_connected_components graph
@index, @stack, @indice, @lowlink, @scc = 0, [], {}, {}, []
@graph = graph
vertices(@graph).each{|v| strong_connect(v) unless @indice[v]}
@scc
end
def strong_connect v
@indice[v] = @index
@lowlink[v] = @index
@index += 1
@stack.push(v)
@graph.each do |vv, w|
next unless vv == v
if [email protected][w]
strong_connect(w)
@lowlink[v] = [@lowlink[v], @lowlink[w]].min
elsif @stack.include?(w)
@lowlink[v] = [@lowlink[v], @indice[w]].min
end
end
if @lowlink[v] == @indice[v]
i = @stack.index(v)
@scc.push(@stack[i..-1])
@stack = @stack[0...i]
end
end
,並與小圖的工作,但隨着圖形變得大了,它開始迴歸「堆棧級別太深」錯誤是由於方法strong_connect
的遞歸調用。我想我需要一個C庫並從Ruby訪問,其中編寫了主程序。
除了庫之外,在Ruby庫中使用它的任何建議都會有所幫助。
是否需要c?我被告知[Boost Graph Library](http://www.boost.org/doc/libs/1_49_0/libs/graph/doc/index.html)是如果你確定使用C++ 。 – Michael 2012-04-14 00:31:34
@Michael只要可以從Ruby調用就可以了。我只是不熟悉使用其他語言來擴展Ruby。你有什麼想法如何從Ruby調用它? – sawa 2012-04-14 00:35:41
對不起,我不知道。我幾乎沒有使用Ruby。 – Michael 2012-04-14 22:06:38