Tenemos un árbol binario perfecto en 2^k-1 nodos. Cada nodo del árbol está marcado con probabilidad 1/2, y un nodo está marcado o no está marcado. Queremos encontrar un nodo marcado y devolverlo. Nuestro algoritmo es el siguiente
procedure find(v);
if (v is marked)
print(v)
else if (v is not a leaf)
v1 is the left child of v
v2 is the right child of v
find(v1) ( recursive call )
find(v2) ( recursive call )
Así que el algoritmo básicamente comienza desde arriba. Busca hacia abajo en el árbol de una manera de profundidad primero, y devuelve al menos un nodo marcado si hay alguno. Tenga en cuenta que el algoritmo puede fácilmente devolver múltiples nodos marcados.
Ahora lo que quiero hacer es decir algo sobre el número esperado de nodos que el algoritmo considerará en un árbol aleatorio (1/2 probabilidad de marcar nodos), cuando el algoritmo se ejecuta en la raíz del árbol.