2016-09-11 3 views
-4

저는 병합 알고리즘이 매우 빠릅니다 : 현재 목록 사이에 알려지지 않은 단어를 확인하도록 설정되어 있습니다. 이 함수는 일반적인 단어를 검사합니다. 단어가 vocab 또는 wds에 있는지 또는 함수를 제대로 이해하지 못했는지 확인하기 위해 함수를 변경해야합니다. 특정 줄의 내용에 대한 주석이 좋습니다.병합 정렬 알고리즘

DEF find_unknowns_merge_pattern (Vocab에서, WDS)

result = [] 
xi = 0 
yi = 0 

while True: 
    if xi >= len(vocab): 
     result.extend(wds[yi:]) 
     return result 

    if yi >= len(wds): 
     return result 

    if vocab[xi] == wds[yi]: # Good, word exists in vocab 
     yi += 1 

    elif vocab[xi] < wds[yi]: # Move past this vocab word, 
     xi += 1 

    else:      # Got word that is not in vocab 
     result.append(wds[yi]) 
     yi += 1 

데프 검사 (bigger_vocab, book_words)

both = [ ] 
     for words in bigger_vocab: 
      for people in book_words: 
       if words == people: 
        words.split() 
        both.append(words) 

    return both 

문제 내 병합 알고리즘 0.08 걸리는 반면가 적어도 5 초 정도이다. 이 함수를 호출하여이 함수를 더 빠르게 만들 수있는 방법은 무엇입니까?

+0

질문이 명확하지 않습니다. 귀하의 "병합 알고리즘"은 파이썬인가요? 'check()'의 목적은 무엇입니까? 병합 알고리즘을 호출하려고 시도한 이유는 무엇이며 작동하지 않는 이유는 무엇입니까? 'check()'를 원하는 출력과 실제 출력으로 호출하는 예제를 제공하십시오. 더 나은 질문을하려면 [최소한의 완전하고 검증 가능한 예제를 만드는 방법] (http://stackoverflow.com/help/mcve)을 참조하십시오. –

+0

예 파이썬에서 현재 무엇을하는지는 특정 목록에없는 단어를 반환합니다. 변경 방법을 모르기 때문에 작동하지 않습니다. –

+0

여분의 혼란을 피하기 위해 4-8 줄을 줄입니다. 또한 "내 병합 알고리즘"에 대해서도 언급하고 있으므로 해당 코드도 공유하십시오. 마지막으로 몇 가지 실행 시간 테스트에 대해 이야기하고 있으므로 입력 한 내용을 보여주십시오 (설명 된 동작은 재현 가능해야 도움이됩니다). – YakovL

답변

0

bigger_vocab 및 book_words에 나타나는 단어를 찾으려고합니까? 일치하는 경우 :

both = list(set(bigger_vocab).intersection(book_words)) 
+0

o 솔루션을 올바르게 만들었습니다. 그런 다음 두 단어 중 어느 것이 맞는지 확인하기 위해 비슷한 일을한다고 가정합니다. –

+0

그들은 새 기능을 쓰지 않고 병합 함수 자체를 수정해야한다고 말했다. –