Оценка Кнута [1], [2] является точечной оценкой , которая нацелена на количество узлов в произвольном конечном дереве без необходимости проходить через все узлы и даже если дерево не сбалансировано , Оценка Кнута является примером объективной оценки; ожидаемое значение оценки Кнута будет числом узлов в дереве. С учетом вышесказанного оценка Кнута может иметь большую дисперсию, если рассматриваемое дерево не сбалансировано, но в вашем случае, поскольку каждый узел будет иметь около N дочерних элементов, я не думаю, что дисперсия оценки Кнута должна быть слишком большой. Эта оценка особенно полезна, когда кто-то пытается измерить количество времени, которое потребуется, чтобы выполнить поиск методом грубой силы.
Для следующих функций мы будем предполагать, что все деревья представлены в виде списков списков.
Например, []
обозначает дерево с одним узлом, а [[],[[],[]]]
обозначает дерево с 5 узлами и 3 листьями (узлы в дереве находятся в однозначном соответствии с левыми скобками). Следующие функции написаны на языке GAP.
Функция simpleestimate
выдает на выходе оценку количества узлов в дереве tree
. Идея simpleestimate
заключается в том, что мы случайным образом выбираем путь x_0, x_1, ..., x_n от корня x_0 дерева до листа x_n. Предположим, что у x_i есть преемники a_i. Тогда simpleestimate
вернет 1 + a_1 + a_1 * a_2 + ... + a_1 * a_2 *… * a_n.
point:=tree; prod:=1; count:=1; list:=[];
while Length(point)>0 do prod:=prod*Length(point); count:=count+prod; point:=Random(point); od;
return count; end;
Функция estimate
просто выдаст среднее арифметическое оценок, полученных при многократном применении функции simpleestimate(tree)
samplesize
.
estimate:=function(samplesize,tree) local count,i;
count:=0;
for i in [1..samplesize] do count:=count+simpleestimate(tree); od;
return Float(count/samplesize); end;
Пример: simpleestimate([[[],[[],[]]],[[[],[]],[]]]);
возвращает 15
в то время как
estimate(10000,[[[],[[],[]]],[[[],[]],[]]]);
возвращает 10.9608
(а дерево на самом деле имеет 11 узлов).
Оценка размера дерева поиска.
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.129.5569&rep=rep1&type=pdf
Оценка эффективности программ возврата. Дональд Э. Кнут
http://www.ams.org/journals/mcom/1975-29-129/S0025-5718-1975-0373371-6/S0025-5718-1975-0373371-6.pdf