這不是我緊急需要的問題,更是一個挑戰(zhàn)性的問題,所以不要整日花在那些家伙上。我在2000年左右建立了一個約會網(wǎng)站(早已消失),其中一項挑戰(zhàn)是計算用戶之間的距離,以便我們可以在X英里半徑內顯示您的“匹配項”。僅給出以下數(shù)據(jù)庫架構,僅說明問題:用戶表UserId用戶名ZipCode郵政編碼表郵政編碼緯度經(jīng)度將USER和ZIPCODE連接到USER.ZipCode = ZIPCODE.ZipCode。您將采用哪種方法來回答以下問題:在距給定用戶的郵政編碼X英里以內的郵政編碼中居住著哪些其他用戶。我們使用了2000年的人口普查數(shù)據(jù),其中包含郵政編碼表以及它們的近似緯度和經(jīng)度。我們還使用Haversine公式來計算球體上任意兩個點之間的距離。至少對我們來說,問題是,我們還是19歲的大學生,實際上成為了如何有效地計算和/存儲所有成員到所有其他成員的距離的問題。一種方法(我們使用的一種方法)是導入所有數(shù)據(jù)并計算從每個郵政編碼到每個其他郵政編碼的距離。然后,您將存儲結果并為其編制索引。就像是:SELECT User.UserIdFROM ZipCode AS MyZipCode INNER JOIN ZipDistance ON MyZipCode.ZipCode = ZipDistance.MyZipCode INNER JOIN ZipCode AS TheirZipCode ON ZipDistance.OtherZipCode = TheirZipCode.ZipCode INNER JOIN User AS User ON TheirZipCode.ZipCode = User.ZipCodeWHERE ( MyZipCode.ZipCode = 75044 ) AND ( ZipDistance.Distance < 50 )當然,問題在于ZipDistance表中將包含很多行。這不是完全不可行的,但確實很大。另外,它還需要對整個數(shù)據(jù)集進行完整的準備工作,這也不是無法管理的,但不一定是令人滿意的。無論如何,我想知道你們中的某些大師會采取什么樣的方法。另外,我認為這是程序員經(jīng)常要解決的常見問題,尤其是當您考慮算法上相似的問題時。我對一個徹底的解決方案感興趣,該解決方案在所有方面都至少包含提示,以確??焖儆行У赝瓿纱巳蝿铡Vx謝!
計算郵政編碼與用戶之間的距離。
qq_笑_17
2019-12-25 15:07:02