1

提案 A. 米国の 32,000 の郵便番号を提供する郵便番号サーバーを作成しました。各郵便番号には、緯度と経度が関連付けられています。2 つの郵便番号が与えられた場合、緯度と経度を使用してそれらの間の距離を見つけることができます。

提案 B. また、最大 200 の郵便番号を入力できる気象サーバーも作成し、それらの郵便番号ごとに気温を出力します。

郵便番号は Z、気温は T だと言う人がいます。彼は私に、Z から最も近く、少なくとも 10 度低い場所はどこですか?と尋ねました。

そのため、距離でソートされた Z から 200 の郵便番号のリストを取得します (プロップ A を使用)。それを B に供給し、200 の温度を取得します。どれも 10 度低い場合は、次の 200 の郵便番号を取得し、完了するまで繰り返します。

問題: これは非常に非効率的で力ずくの方法のようです。私が見逃している物理学の洞察があると感じています。北に行くと気温が下がり、南に行くと気温が上がるとは限りません。したがって、方向は役に立ちません。標高はおそらくそうですが (山は谷よりも涼しい)、標高をキーにした郵便番号データを見つけるのは困難です。

これについてもっと賢い方法を考えてもらえますか?任意の提案をいただければ幸いです。注: 気象データは高価です。気象サーバーにアクセスできるのは数回だけで、一度に取得できる気温は 200 までです。(おっと、任意の 2 つの郵便番号間の距離は事前に計算された定数であり、それを取得するためのコストはありません。)

4

3 に答える 3

0

これはスタックオーバーフローに最適です。

データベースを結合します。

abs(lat-lat_o) + abs(long-long_0) < 2.00 AND temp < temp_0 - 10 というクエリを作成します。このクエリは、サーバーでのインデックス作成を利用します。

結果が得られない場合は、2.00 を倍数ずつ増やして繰り返します。

結果が得られた場合、最も近いものを見つけます。最も近いものがバウンディング ボックスの最も近いエッジよりも遠い場合は、そのエントリを保存し、その距離まで 2.000 を増やして、それらのいずれかが近いかどうかを確認します。

スケーリングし、データベースを効率的に使用します。

于 2011-08-24T22:25:14.083 に答える
0

すべての郵便番号をバイナリソートし、ソートされたリストでユーザーの郵便番号よりも低いすべての郵便番号を取得してから、そのサブセットで距離について同じことを行うことで、これを行うことができます。これはかなり速いはずです-バイナリソートはlog(n)であるため、ソートで自分自身を殺すことはありません.

于 2011-08-24T20:10:48.403 に答える
0

これは物理の問題ではないという物理フォーラムのコメントに同意しますが、物理学 (または少なくとも数学) からのいくつかの洞察が適切である可能性があります。気象データを安価に入手できる場合は、データセットをセットアップして、一度分析を実行して検索をガイドできる場合があります。

具体的には、各場所の温度を同時に記録します。次に、場所ごとに、隣接する郵便番号ごとの温度変化を計算し、それを相対座標 (つまり、隣接する郵便番号への方向) に関連付けて、このリストを温度順に保存します。誰かがクエリの zip を入力すると、アルゴリズムはリストの一番上にある zip から開始し、それから下に向かって動作します。不十分な回答はそれぞれスタックに追加されます。隣接する zip のいずれも基準を満たしていない場合 (この場合は 10 度低い温度)、アルゴリズムは、アルゴリズムを繰り返して新しいスタックを処理し始めます。

私は素晴らしいプログラマーではないので、コードを提供しませんが、これは力ずくの検索よりも温度マップの自然な等高線を「たどり」、結果の近接性を優先するように思えます。いくつかの同時温度測定値を使用して初期データセットを設定する場合、それらを時間平均してパフォーマンスを向上させることができます。

于 2011-08-24T20:27:11.847 に答える