2016-04-13 4 views
0

インタビューの質問最適化:長方形の最小の矩形の中に点を見つけます。 O(n)とが、さらなる

を考えると数十億、任意の点P(x、y)は

に答えを達成するための簡単な方法がありますが重複最小面積の長方形を見つけることを各矩形を順番に処理することによってO(n)時間がかかるが、それをさらに最適化するために、多数の矩形配列を提供する。

私の最善のアプローチは、各矩形をチェックし、その点が内側かどうかを確認し、面積を計算し、現在の最小面積と比較することです。これは1回のパスで行うことができます。私はすべての長方形をチェックする必要がない他の方法を考え出すことはできません

答えて

2

は、その後、R-treeデータ構造は、おそらくあなたは完全な質問を言っていないすべての矩形

1

もちろん、すべての四角形を少なくとも1回は処理する必要があります。しかし、最初のパスを賢明に使うと、後で複数の検索を高速化できます。

K-d treeまたはQuadtreeに長方形を挿入します。あなたは多くのポイントクエリと同じ長方形のセットを使用する場合は

1

をチェックせずに、与えられた点が含まれているものを四角形知ることができます。今のところどのように立っているので、あなたのソリューションは最適です。

各矩形を通過して実際にポイントをカバーしているかどうかをチェックし、そのエリアを計算する必要があるかどうかは関係ありません。 に1つの質問と答える必要があるため、何らかの方法で前処理する必要はありません。

前処理は、今後多くの同様の質問に回答する必要がある場合にのみ意味を持ちます。

+0

私は全く同意します。しかし、私はインタビュアーが、多くのクエリでうまくいく解決策を考えると思うと思います。私は、後続のすべてのクエリをLogNまたはO(n)未満にする高価な前処理パスの取引を見ることができることを望むと思います。だから私は最高の答えは、 "1つの検索のみ、O(n)は最高です"と言うことです。複数のクエリの場合、k-treeや他のデータ構造を使うことができます " – Pinhead

関連する問題