图表的C库

时间:2012-04-14 00:14:59

标签: c ruby directed-acyclic-graphs ruby-c-extension

图形理论操作是否有一个好的C库?我特别需要计算有向图的strongly connected components。我在Ruby中实现了Tarjan's algorithm,如下所示:

    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 !@indice[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库中使用它的建议都是有帮助的。

3 个答案:

答案 0 :(得分:2)

我遇到了igraph图书馆。它是用C语言编写的,包含Ruby,Python和R的包装器。对于你来说,这意味着你可以在Ruby的基础上享受C的速度。

答案 1 :(得分:1)

Ruby Graph Library (RGL)(用Ruby编写)是一个需要考虑的选项。

答案 2 :(得分:0)

在 C++ 中有 CXXGraph,这是一个用于图形操作和算法的仅头文件库。