Nano Hash - криптовалюты, майнинг, программирование

Алгоритм Дейкстры - сложность

У меня есть определенная проблема с пониманием сложности алгоритма Djisktra, и я надеюсь, что кто-то сможет меня исправить.

В качестве примера я взял полный граф с n вершинами.

Вы выбираете начальную вершину, скажем, a1, отмечаете ее, а затем вычисляете все веса n-1 на ребрах. На)

Вы выбираете самый маленький. Скажем, вершину a2 и отметим ее. На)

После этого вы вычисляете n-2 новых веса на ребрах и ищите следующую, еще не отмеченную вершину, чтобы добавить свой набор отмеченных вершин.

И так далее...

Алгоритм выполняется до тех пор, пока вы не отметите все вершины. Сложность: n-1 + n-2 + ... + n - (n - 1) = Binom (n, 2), который находится в O (n ^ 2), а не в O (n * ln (n)), что я хотеть.

Я много раз читал, что люди используют кучу для оптимизации, но до сих пор не понимаю, как избежать вычислений Binom (n, 2).

Я должен ошибаться в какой-то момент, но не вижу где.


  • Что такое n и почему вам нужно сделать что-то n раз в каждой вершине? 23.03.2016

Ответы:


1

Если у вас есть полный график, то, конечно, вы не можете сделать ничего лучше, чем O (n ^ 2) - потому что это размер вашего ввода.

Если у вас нет полного графа и вы храните свои ребра в списке смежности, тогда вы можете добиться большего. Вам все равно нужно смотреть на все свои ребра, но с приоритетной очередью вы можете управлять O (e + n log n), где e - количество ребер в вашем списке смежности.

23.03.2016
  • Ах хорошо. Это меня очень расстроило, потому что во всей литературе я читал только о вашем заявленном O (E + n + log n), и это меня действительно смутило. Я должен проверить, как используется приоритетная очередь. Спасибо за ваш ответ. 23.03.2016
  • Завершено или нет, вы все равно получите O (e + n log n). Просто, когда график завершен, e = n ^ 2, что дает O (n ^ 2 + n log n) = O (n ^ 2). 23.03.2016
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..