C библиотека для графиков

Есть ли хорошая библиотека C для теоретико-графовых манипуляций? Мне особенно нужно рассчитать сильно связанные компоненты ориентированного графа. Я реализовал алгоритм Тарьяна в Ruby следующим образом:

    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

и он работал с маленькими графами, но по мере того, как граф рос, он начал возвращать ошибки "stack level too deep" из-за рекурсивного вызова метода strong_connect. Думаю, мне нужна библиотека C и доступ к ней из Ruby, на котором написана основная программа.

В дополнение к библиотеке, любое предложение по использованию этого в библиотеке Ruby будет полезным.


person sawa    schedule 14.04.2012    source источник
comment
Это должно быть с? Мне сказали, что библиотека Boost Graph это то, что нужно, если вы хорошо разбираетесь в C++.   -  person Michael    schedule 14.04.2012
comment
@Michael Это нормально, если его можно вызвать из Ruby. Я просто не знаком с расширением Ruby с помощью других языков. У вас есть идеи, как это вызвать из Ruby?   -  person sawa    schedule 14.04.2012
comment
Извините, понятия не имею. Я вообще почти не использовал Ruby.   -  person Michael    schedule 15.04.2012


Ответы (3)


Я наткнулся на библиотеку igraph. Он написан на C и имеет оболочки для Ruby, Python и R. Для вас это означает, что вы можете наслаждаться скоростью C с комфортом Ruby.

person Yaakov Belch    schedule 14.06.2012

Библиотека Ruby Graph (RGL) (написанная на Ruby) — один из вариантов, который стоит рассмотреть.

person Jeremiah Willcock    schedule 14.04.2012
comment
Есть ли у вас какие-либо представления о масштабируемости этой библиотеки? Поскольку я реализовал тот же алгоритм на Ruby и столкнулся с проблемой, меня беспокоит, что эта библиотека тоже написана на Ruby. Возможно, есть способ избежать проблем, которые у меня были. Я не знаю. - person sawa; 14.04.2012
comment
@sawa: я не знаю о его масштабируемости. - person Jeremiah Willcock; 14.04.2012

В C++ есть библиотека CXXGraph, которая содержит только заголовки для работа с графиками и алгоритмы.

person Zig Razor    schedule 05.07.2021