Сложность жадного алгоритма

Я создал жадный алгоритм, который решает проблему минимально-взвешенных гамильтоновых цепей. Алгоритм всегда выбирает самый дешевый край, если нет способа найти схему из текущего набора ребер, тогда алгоритм отбрасывает последний край и выбирает следующий самый дешевый. Я не уверен насчет сложности этого алгоритма, может кто-нибудь объяснить мне это Вот псевдокод

    HC(currentVertex,expandedVertices,path,sum,N)
    if size(expandedVertices)==N then
        print(path)
        return sum
    end if
    expandedVertices.add(currentVertex)
    vertices=getAdjacentNodes(expandedVertices)
    sort(vertices)
    for i=1 to size(vertices) do
        path.append(vertices[i])
        cost=HC(vertices[i],expandedVertices,path,sum+getEdgeCost(currentVertex,
           vertices[i]),N)
        if(cost>0) then
            break
        end if
        path.remove(vertices[i])
    expandedVertices.remove(currentVertex)
    return cost

1 ответ

Ваш алгоритм использует грубую силу, чтобы найти путь, поэтому максимальное время выполнения O(n!) (для полностью связного графа). Может быть только один возможный маршрут, последний, который вы проверите.

В большинстве реальных случаев этот алгоритм будет быстрее. На проблему обычно ссылается другое название: проблема коммивояжера. В Википедии есть список хороших алгоритмов и эвристик, которые работают быстрее, чем у вас.

Другие вопросы по тегам