Как мы можем классифицировать различные алгоритмы? - PullRequest
2 голосов
/ 12 декабря 2010

Как мы можем классифицировать различные алгоритмы?

Я слышал различные названия: алгоритмы «разделяй и властвуй», детерминированные алгоритмы, вероятностные алгоритмы, алгоритмы на месте и т.

Они формируют какую-либо иерархию классификации?

Пожалуйста, предоставьте мне любую ссылку.

Ответы [ 5 ]

7 голосов
/ 16 декабря 2010

Существует несколько различных классификаций алгоритмов:

Как они решают проблемы

Классические алгоритмы:

Не классические:

Но эти алгоритмы являются детерминированными или недетерминированными средствами для каждого прогона на конкретномна входе они получат один и тот же результат (детерминированный) или другой результат (недетерминированный).

Также у этих алгоритмов слишком много разных проблем, и в каждой из проблем используется гибрид всех алгоритмов, например, TSP в евклидовом графе.может быть аппроксимирован с помощью алгоритмов DFS и графа, и случайного блуждания, .... иATSP (TSP в асимметричных графах) можно аппроксимировать комбинацией линейного программирования и некоторых алгоритмов продвинутых графов.

Но существует известная классификация проблем, и мы можем расширить ее на алгоритмы, которые по времени сложны (также память, но в наши дни память не имеет значения как время):

  • P
  • NP
  • NPC
  • NPC сильный
  • NP Hard
  • co-NP
  • ...
2 голосов
/ 16 декабря 2010

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

Некоторые подробности приведены здесь - http://www.scriptol.com/programming/algorithms-classification.php

2 голосов
/ 16 декабря 2010

Вы можете взглянуть на хранилище алгоритма Stony Brook . Это классификация алгоритмов, основанная на ее целях.

1 голос
/ 21 декабря 2010

Существует огромное количество схем классификации алгоритмов, некоторые более полезные, чем другие (для примера очень глупой схемы, рассмотрите возможность классификации по контрольной сумме описания алгоритма!), И это является следствием того, что классификации не так уж и много фундаментальное свойство алгоритмов, а не то, что мы знаем о них. Классификация знаний очень сложна и имеет тенденцию приводить ко многим пересекающимся классификациям; Вся область построения таких классификаций называется онтологией. (Забавно, слово «онтология» также прикреплено к машиночитаемым схемам классификации на таких языках, как OWL.)

Таким образом, остается открытым вопрос, существует ли полезная иерархия классификаций, и вдвойне, если есть полезная иерархия, когда речь заходит об алгоритмах. Я подозреваю , что ответ «не совсем», и призываю вас проявлять гибкость, когда дело доходит до классификации вещей.

1 голос
/ 16 декабря 2010

Вы можете классифицировать алгоритмы по своему желанию, так как это лучше всего подходит для ваших целей.Предложенная вами классификация контуров, которая классифицирует алгоритмы в соответствии с их схемой, выглядит хорошо.Другим подходом будет классифицировать их по назначению: сортировка, поиск, умножение и т. Д. Другой подход может классифицировать их по сложности: O (1), O (n), O (log n), O (n ).3 ) и т. Д. Каждый отдельный алгоритм, который вы хотите классифицировать, будет вписываться в любую из этих схем классификации.

Вы можете определить иерархическую схему классификации, если вам это нужно: сортировка / случайные входы, сортировка /почти отсортированные входы, сортировка / почти несортированные входы.

Но не существует единой правильной или неправильной схемы классификации для алгоритмов, то, что вы выберете, должно зависеть от того, что вы намереваетесь делать с ним.1008 * Что касается веб-ссылок, я оставлю их другим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...