2012-04-09 87 views
2

我正在尋找這樣做的社區轉租廣告網站,但理論上算法將類似的任何本地搜索。如何根據區域的人口密度計算地圖搜索的動態默認半徑?

搜索區域越少,搜索的默認半徑就越高。另一方面,人口密度高的地區應該具有較低的默認半徑以保持局部相關性。

這可能是一個數學問題,而不是編程問題,但代碼非常受歡迎。到目前爲止,我已經計算出每個城鎮或村莊15英里範圍內的轉租金額,並將其作爲密度的近似值保存在數據庫中。我打算用這個數字來找出有人在搜索城鎮或村莊時搜索多遠。

要測試任何提議的解決方案,我拿出了一些近似數字,我希望算法提出。如果在一個點的15英里範圍內有很多轉租,比如30k,我會希望搜索的默認半徑大約爲3英里。如果只有很少的發言1或2,則默認半徑應該高達25英里,如果周圍沒有地方,默認半徑應該更高。一個約1k轉租的中檔區域的默認半徑爲15英里。這些只是一些例子,密度會隨着數據庫中數量的增加而縮小或縮小。

Population -> Default search radius 
0   -> very high (~60 miles or more) 
1   -> 25 miles 
1k   -> 15 miles 
30k  -> 3 miles 

上午我在正確的方向前進?對於以代碼爲中心的答案,Python或PHP將是首選。

謝謝

+1

嗯,也許是一種k點均值聚類算法,點之間的距離負密度加權點? – 2012-04-09 22:26:39

回答

1

一個合理的辦法是定義區域,使它們含有相同數量的人,然後將有大約相同數量的每個區域的酒店式公寓。

在數學上這樣寫:

N = total number of people within a region 
d = population density of the region (taken to be what you list as population) 
A = Area of region 
R = Radius of the region A 

所以,N = d*A = d*pi*R*R,我們希望N是恆定的,所以R = K*sqrt(1/D),其中K是選擇符合你的號碼,或約500英里的常數。然後,

30K -> 2.9 miles 
1K -> 16 miles 
    1 -> 500 miles 

所以它適用於前兩種,雖然沒有1人口的極端情況下(但目前尚不清楚,1確實是需要考慮的一個重要的情況下,而不是一個特殊的情況下,所有的這擁有)。無論如何,我認爲這種方法有一定意義,至少可以考慮一些事情。

+0

這真的很好,美麗的想法。 – 2012-04-10 00:19:28

+1

只是一個旁註,如果其他人想在Python 2.x中使用它:不要忘記'1/float(D)',因爲該部門將無法按預期工作 – 2012-04-10 02:49:21