2011-08-24 3 views
1

방안 A. 미국 우편 번호를 32,000 개까지 줄 수있는 우편 번호 서버를 작성했습니다. 각 우편 번호에는 연관된 lat-long이 있습니다. 우편 번호가 2 개있는 경우 위도 경도를 사용하여 우편 번호 사이의 거리를 찾을 수 있습니다.우편 번호 간의 온도 차이 계산시

Prop B. 나는 또한 200 개 이상의 우편 번호를 입력 할 수있는 기상 서버를 작성했으며 각 우편 코드의 온도를 뱉어 냈다.

사람이 Zip 온도가 T라고 알려줍니다. 온도가 T입니다. Z가 at least 10 degrees cooler 인 곳에서 Z에서 가장 가까운 곳은 무엇입니까?

그래서 거리에서 정렬 된 Z에서 200 개의 우편 번호 목록을 가져옵니다 (Prop A 사용). 나는 그것을 B에게 먹이고 200 도의 기온을 얻는다. 10 도가 더 낮은 곳이 없다면 다음 200 개의 우편 번호를 얻고 완료 될 때까지 반복하십시오.

문제 : 이것은 매우 비효율적이며 무차별적인 것으로 보입니다. 나는 실종 된 물리학 통찰력이 있다고 느낍니다. 북쪽으로 가면 기온이 서늘 해지고, 남쪽으로 가면 &이 뜨거워지는 것은 아닙니다. 방향이 도움이되지 않습니다. 고도는 아마도 (산보다 계곡보다 차갑습니다)하지만 고도에 맞추어 진 우편 번호 데이터는 찾기 어렵습니다.

혹시 더 똑똑한 방법을 생각해도 될까요? 어떤 제안도 감사합니다. 참고 : 날씨 데이터가 비쌉니다. 날씨 서버를 몇 번만 밟을 수 있으며 매번 200 개의 기온을 낼 수 있습니다. (otoh, 두 개의 우편 번호 사이의 거리는 미리 계산 된 상수입니다.)

답변

0

모든 우편 번호를 이진 정렬하고 모든 우편 번호를 사용자 우편 번호보다 낮게 잡으면됩니다 정렬 된 목록에서 해당 하위 집합에 대해 거리에 대해 동일한 작업을 수행합니다. 이것은 합리적으로 빠를 것입니다 - 바이너리 정렬은 log (n)입니다. 그래서 당신은 일종의 자신을 죽이지 않을 것입니다.

0

나는 이것이 물리 문제는 아니지만 물리학 (또는 적어도 수학)의 통찰력이 실제로 작용할 수 있다는 의견에 물리 포럼에서 동의합니다. 날씨 데이터를 저렴하게 얻을 수 있다면 데이터 세트를 설정하고 분석을 한 번 수행하여 검색을 안내 할 수 있습니다.

특히 각 위치의 온도를 동시에 기록하십시오. 그런 다음 각 위치에 대해 각 연속 우편 번호에 대한 온도 변화를 계산하고이를 상대 좌표 (즉, 인접한 우편 번호에 대한 방향)와 연결하고 온도에 따라 정렬 된이 목록을 저장하십시오. 누군가가 쿼리 zip을 입력하면 알고리즘은 목록의 맨 위에있는 zip으로 시작하여 아래로 진행합니다. 만족스럽지 못한 대답이 스택에 추가됩니다. 인접한 zip 중 어느 것도 기준 (이 경우 10도 쿨러)을 충족시키지 않으면 알고리즘은 알고리즘을 반복하는 새로운 스택을 통해 작업을 시작합니다.

저는 훌륭한 프로그래머가 아니므로 코드를주지는 않겠지 만, 이것은 이것이 무차별 대항력 검색보다 온도 맵의 자연스러운 윤곽을 "따르고"근접성에서 우선 순위를 유지할 것이라고 생각합니다 결과의. 여러 개의 동시 온도 측정을 사용하여 초기 데이터 세트를 설정하면 성능을 높이기 위해 평균 시간을 측정 할 수 있습니다.

0

이것은 stackoverflow에 가장 좋습니다.

데이터베이스를 결합하십시오.

abs (lat-lat_o) + abs (long-long_0) < 2.00 및 임시 < temp_0 - 10을 입력하십시오.이 쿼리는 서버의 인덱싱을 이용합니다.

결과가 없으면 2.00을 여러 번 반복하십시오.

결과가 발견되면 가장 가까운 것을 찾으십시오. 가장 가까운 것이 경계 상자의 가장 가까운 가장자리보다 먼 경우 해당 항목을 저장하고 2.000을 그 거리로 늘려 그 중 하나가 더 가까운 지 확인하십시오.

저울, 데이터베이스를 효율적으로 사용합니다.