В чем разница между require () и library ()?

Если вы поместите цикл в случайное пятно в дереве, DFS будет стремиться к циклу, когда он покрыт примерно половиной дерева, а в половине случаев он будет уже пройден там, где идет цикл, а половина времени (и будет находить его в среднем по половине остальной части дерева), поэтому он будет оценивать в среднем около 0,5 * 0,5 + 0,5 * 0,75 = 0,625 дерева.

Если вы разместите цикл в случайном месте в дереве, BFS будет стремиться поражать цикл только тогда, когда он оценивает слой дерева на этой глубине. Таким образом, вам обычно приходится оценивать листья балансного двоичного дерева, что обычно приводит к оценке большего количества дерева. В частности, 3/4 времени по крайней мере одна из двух ссылок появляется в листьях дерева, и в этих случаях вы должны оценивать в среднем 3/4 дерева (если есть одна ссылка) или 7 / 8 дерева (если их два), поэтому вы уже ожидаете поиска 1/2 * 3/4 ​​+ 1/4 * 7/8 = (7 + 12) / 32 = 21/32 = 0.656 ... дерева, даже не добавляя затраты на поиск дерева с циклом, добавленным от листовых узлов.

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

503
задан David Arenburg 27 October 2015 в 09:48
поделиться