Un algoritmo exacto es como esto,
inicio de las hojas y crear gráficos disjuntos (de hecho todos son K1), en cada paso encontrar al padre de este hojas, y fusionarlas en nuevo árbol, en cada paso si el nodo x
tiene r
niño conocido y grado de nodo es j
tal que j = r+1
, sólo tiene un nodo que no está en nodo hijo de x
es padre del nodo actual en este caso se dice nodo x
es nice
, de lo contrario, hay algún niño tales que el subárbol enraizado relacionado de ellos no está construido, en este caso decimos que el nodo x
es bad
.
Así que en cada paso conecte nice
nodos a su elemento primario relacionado, y es obvio que cada paso lleva sum of {degree of parent nice nodes}
también en cada paso tiene al menos un nodo agradable (porque empieza desde la hoja), Entonces el algoritmo es O (n) , y se hará por completo, pero para encontrar el nodo que debe eliminarse, de hecho, en cada paso se requiere verificar el tamaño de una lista puestaint (listas de subárboles), esto se puede hacer en O (1) en construcción, también si el tamaño de la lista es igual o mayor que n/2, luego seleccione el nodo agradable relacionado. (de hecho, encuentra el nodo agradable en la lista mínima que satisface esta condición).
Lo obvio es que si es posible dividir el árbol en buena forma (cada parte tiene como máximo n/2 nodos) puede hacerlo mediante este algoritmo, pero si no es así (de hecho, no puede dividirlo en dos o más parte del tamaño más pequeño que n/2) esto le da una buena aproximación para ello. Además, como puede ver, no hay ninguna suposición en el árbol de entrada.
nota: No sé si es posible tener un árbol tal que es imposible dividirlo en algunas partes de tamaño más pequeño que n/2 quitando un nodo.
No entiendo, si elimina 'H' obtiene 9 subárboles! – Shahbaz
Sí, lo siento por no ser claro aquí, puedo obtener muchos subárboles, pero no quiero que uno sea más grande que la mitad del gráfico para asegurarme de que solo hago un conteo logarítmico de pasos de división. – Listing
Una cosa más, ¿cómo pones "el árbol debe dividirse lo más posible" en un valor computable? – Shahbaz