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

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

    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

person ro.Loon    schedule 19.12.2016    source источник


Ответы (1)


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

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

person Filip Haglund    schedule 19.12.2016