문제

각 노드에 정수가있는 정수가있는 이진 트리가 주어집니다.나는 루트에서 잎의 모든 경로를 잎으로 찾을 수있는 효율적인 방법을 찾고 있습니다.나는 부서없이 솔루션을 찾고 있습니다 (즉, 정수는 0 일 수 있습니다).

이 생각을하는 방법에 대해 한 가지 방법은 나는 루트에서 시작하는 모든 가능한 부분 제품을 계산할 수 있습니다.즉, 각 노드는이 노드의 루트 업의 고유 경로의 제품을 저장합니다 (그러나 해당 특정 값에 저장된 정수를 제외하고).그런 다음 각 리프 노드에 대해 루트 노드의 경로를 곱슬하게 곱한 상태에서 루트 노드를 곱할 수 있습니다.주어진 노드에서 노드를 제품에 축적하기 전에 제품에 노드에 저장된 접두사 제품과 곱할 수 있습니다.

이 경로가 잠재적으로 많은 노드를 공유하기 때문에 루트로 각 경로를 루트로 방문 할 때 많은 중복 곱셈을하고있는 것처럼 느껴집니다.이렇게하는 더 빠른 방법이 있습니까?

도움이 되었습니까?

해결책

하나의 간단한 접근법 : 내부 노드 $ x $ 의 경우 $ p (x) $ 루트에서 $ x $ 로의 경로의 정수의 제품을 나타냅니다. $ q (x) $ < / span> root에서 $ x $ 에 대한 경로의 정수 중 하나의 모든 제품으로 얻을 수있는 정수 집합을 나타냅니다. 이제 $ p (x) $ $ q (x)를 계산하는 $ q (x)를 계산합니다. 각 노드 $ x $ 에 대해 $ . $ p (x), q (x) $ 에서 $ p (w), q (w)를 계산할 수 있습니다. ) $ , 여기서 $ w $ $ x $ 의 부모입니다. 점성 최악의 경우 실행 시간은 $ o (n ^ 2) $ 이됩니다. 알고리즘은 $ \ theta (n ^ 2) $ 다른 제품을 출력 해야하는 다른 제품이있을 수 있으므로 알고리즘이 더 좋습니다. 최소한 $ \ theta (n ^ 2) $ 을 적어도

에 최소한의 실행 시간이 필요합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 cs.stackexchange
scroll top