2

セグメント ツリーとクワッド ツリーに関連する問題を解決しています。セグメント ツリーでは、1D 配列を2 (2^1)セグメントに分割し、ベース ケースが到着するまでこれを再帰的に行うことに気付きました。同様に、クワッド ツリーでは、2D グリッドを各ステップで4 (2^2)のセグメントに分割します。これらの分割統治メカニズムはすべて、対数時間の複雑さを達成するためのものです。悪意はありません!

しかし、セグメント ツリーの 2 つの部分ではなく、配列を4 (4^1)以上の部分に分割しないのはなぜですか? グリッドを 4 つではなく16 (4^2)の部分に分割しないのはなぜですか? O(log(N))これらを行うことで、パフォーマンスを達成できますがloglog(N)(base 4) の方がlog(N)(base 2) よりも優れているため、パフォーマンスが向上します。

この場合、実装が少し難しいことはわかっています。メモリのオーバーヘッドの問題はありますか? それとも何か?

どこか間違っている場合は修正してください。ありがとう!

4

2 に答える 2

1

ログ 4 (N) = ログ 2 (N) / ログ 2 (4) = ログ 2 (N) / 2

一般に、時間の複雑さは両方とも O(logn) ですが、4 つのセグメントは 2 つのセグメントを維持するよりもはるかに困難です。実際、(acm/icpc では)2 つのセグメントは非常に簡単にコーディングでき、十分に機能します。

于 2014-08-04T13:48:06.420 に答える