2013-10-08 9 views
1

빠른 선택 기능을위한 코드를 개발했지만 중앙값을 인쇄하지 않는 것 같습니다.Python- Quickselect 함수가 중간 값을 찾습니다.

L = ['70', '120', '170', '200'] 
:

Offices 70 
MedicalOffice 120 
PostOffice 170 
Mall 200 

그것은리스트로 수입됩니다 : 내가 파일 이름에 대한 주요 기능 프롬프트가 다음 숫자의리스트로 txt 파일이 그것을 분할 있음을 가져 이는 txt 파일입니다

quickselect 함수를 실행하면 경과 시간이 1.9083486328125e-06과 같이 매번 바뀌는 홀수가됩니다. 먼저 어떤 시간 값이 밀리 초입니까? 함수가 피벗을 실행하고 반환 할 때 그것은이 밖으로 뱉어 :

>>> main() 
Enter a filename: Input.txt 
['70', '120', '170', '200'] 
Time: 1.9073486328125e-06 
200 

가 작동하지 않는 이유는 누군가가 말해 줄래? 이 코드입니다 :

import time 

start_time = 0 

def quickSelect(L, k): 
    start_time = time.time() 
    if len(L) != 0: 
     pivot = L[(len(L)//2)] 
     smallerList = [] 
    for i in L: 
     if i<pivot: 
      smallerList.append(i) 
    largerList=[] 
    for i in L: 
     if i>pivot: 
      largerList.append(i) 
    m=len(smallerList) 
    count=len(L)-len(smallerList)-len(largerList) 
    if k >= m and k < m + count: 
     end_time = time.time() 
     print("Time: ", end_time - start_time) 
     return pivot 
    elif m > k: 
     return quickSelect(smallerList, k) 
    else: 
     return quickSelect(largerList, k - m - count) 
def main(): 

    dataFilename = input('Enter a filename: ') 

    dataFile = open(dataFilename) 
    L = [] 
    for inputLine in dataFile: 
     splittext = inputLine.split() 
     place = splittext[0] 
     locations = splittext[1] 
     L += [locations] 
    print(L) 
    print(quickSelect(L, len(L)//2)) 
+0

봐를 사용해보십시오'당신이 200''이 – WolframH

답변

1

time() 방법은 float로서 시대부터 경과 된 초를 반환합니다. , 특히 시작 시간에서 초 단위로 경과 시간을 인쇄하려면 start_time = time.time()을 설정해야합니다. 그런 다음 time.time() - start_time의 차이를 사용하여 경과 시간을 초 단위로 확인할 수 있습니다.

함수가 중간 값을 출력하지 않는 이유에 대해서는 먼저 quickSelect에 정수 목록을 전달했는지 확인해야합니다. 지금은 문자열 목록을 전달하는 것처럼 보입니다. 따라서 quickSelect에있는 비교는 정수 대신 문자열 쌍 사이에 있습니다. `분류 (L) 결과에

L.append(int(locations)) 
+0

괜찮아 감사 :-) 평균 인 이유 ''알아 싶지만 할 경우 당신이 알고에게 코드를 선택하지 않는 이유 중앙값? – user123456789101112

+0

데이터를 정수로 변환해야한다고 생각합니다. 위의 업데이트 된 답변을 참조하십시오. – mdml

+0

많은 도움을 주셔서 감사합니다. 프로그래밍에 익숙하지 않고 가장 작은 것이 모든 것을 어떻게 바꿔 놓을까요? – user123456789101112