Em um gráfico , fazemos o seguinte processo:
- Inicialmente, todos os nós em são incolores.
- Embora existam nós não coloridos em , cada nó não colorido faz o seguinte:
- Seleciona um número real aleatório e o envia a todos os seus vizinhos;
- Compara seu número com o número de seus vizinhos; se o seu número é estritamente menor, o vizinho pinta-se de vermelho e notifica todos os vizinhos.
- Se um vizinho ficar vermelho, esse nó se pintará de preto.
Por exemplo:
- Suponha que o gráfico seja um caminho: abcde.
- Suponha que os números na primeira etapa sejam: 1-2-0-3-4.
- Os nós a e c são pintados de vermelho; os nós ed são pintados de preto.
- Na segunda etapa, apenas o nó e permanece sem cor; é trivialmente mínimo, portanto se pinta de vermelho.
MINHA PERGUNTA É: qual é o número médio de etapas que esse processo executa antes de todos os nós serem coloridos?
Meu cálculo atual me leva a uma estimativa, o que parece bom demais para ser verdade. Aqui está o cálculo:
Considere um nó com vizinhos. A probabilidade de que será o menor entre seus vizinhos é . Se isso acontecer, entãoe todos os seus vizinhos serão coloridos. Portanto, o número esperado de vértices coloridos em cada etapa é por nó . Portanto, o número total esperado de vértices coloridos em cada etapa éentão em tempo em que todos os nós serão coloridos.
Se essa análise estiver errada (o que provavelmente é o caso), qual é o número real de etapas?
EDIT: Como observado por @JukkaSuomela, o algoritmo descrito acima é devido a Metivier et al, 2011 e é explicado e analisado nestas notas de aula . Eles provam que o tempo de execução é.
Mas ainda não estou convencido de que essa análise seja rigorosa. Em todos os gráficos que verifiquei, parece que o algoritmo termina em tempo esperado.
Minha pergunta é agora: qual é o pior gráfico em que esse algoritmo realmente exige passos em média?
fonte
Respostas:
Há um pequeno erro, a probabilidade dev ser mínimo é 1/(d+1) . Isso não muda nada, mas ainda vale a pena destacar.
O problema é que os eventos que você está somando não são disjuntos. Considere dois vértices que não são adjacentes, mas têm um vizinho em comum. Se ambos os vértices acabam sendo mínimos entre os vizinhos, o vizinho comum é contado como colorido duas vezes.
Precisamos examinar o que acontece em um vértice mais de perto. Vamos calcular a probabilidade (e, portanto, a expectativa da variável indicador) de um único vértice ficar colorido.
Suponha, para fins de análise, que o gráfico éd -regular e não contém triângulos ou quadrados. Vamos calcular a chance de um determinado vérticev se não ficar colorido. temd+1 possibilidades: o v pode ser o menor entre os vizinhos, v pode ser o segundo menor, o terceiro menor e assim por diante ... Não estamos interessados no caso de ser o menor, desde então fica colorido.
E sev é o segundo menor, existe um vértice menor. A probabilidade desse vértice ser menor entre seus vizinhos é1d (e assim v ficando colorido). A probabilidade de os vizinhos restantes serem menores entre os vizinhos é 0 (desdev é menor). A probabilidade total (dev não ficar colorido) neste gabinete é1d+1⋅d−1d .
E sev é o terceiro menor, existem dois vértices menores. A probabilidade deste caso é1d+1⋅(d−1d)2 .
Continuando assim, descobrimos que a probabilidade de quev se não conseguir é colorido1d+1Σdi=1(d−1d)i . A probabilidade de um determinado vértice ficar colorido é, portanto,1−1d+1Σdi=1(d−1d)i . Comod→∞ , a probabilidade se torna 1e≈0.368 .
Portanto, a probabilidade de um determinado vértice ficar colorido é uma constante; portanto, o número esperado de vértices coloridos no primeiro passo é realmenteO(n) .
Isso não torna o algoritmoO(1) . Supondo que a probabilidade permaneça constante (o que não é totalmente justificado, considerando que os nós ficam coloridos e não participam mais do algoritmo, o gráfico não permaneced -regular), no k -ésimo passo: haverá (na expectativa) (1e)kn nós não coloridos. A decadência é exponencial, então o algoritmo levaO(logn) passos.
Talvez alguém mais possa oferecer uma análise mais precisa, mas, pela minha argumentação, parece provável que o algoritmo sejaO(logn) .
fonte