1) Existe um algoritmo melhor que o ingênuo O (| E |. | V |) para calcular o número de descendentes de cada vértice em um DAG?
2) Existe um algoritmo online para fazê-lo, assumindo que os nós sejam adicionados um por um e se conectem a um subconjunto não vazio dos nós existentes?
Contexto: Estou interessado no caso em que m = O (n), milhões de vértices, dezenas de milhões de arestas normalmente. Como alternativa, seria útil contar o número de descendentes que também são sumidouros.
Uma abordagem probabilística seria o hash min, como uma maneira de representar o conjunto de descendentes de cada nó. A união da estrutura min-hash é trivial e a cardinalidade da união pode ser estimada a partir do número de coincidências nos min-hashes.
No entanto, não tenho certeza de quão bem comportado isso seria ao propagar o DAG, intuitivamente, parece que os erros seriam compostos rapidamente.
Muito relacionado: /cstheory/553/what-bounds-can-be-put-on-counting-reachable-nodes-in-a-dag E, na verdade, uma duplicata de: https: // cstheory.stackexchange.com/questions/18787/what-is-the-fastest-deterministic-algorithm-for-incremental-dag-reachability