본문 바로가기
파이썬

파이썬 Python Quicksort 런타임 오류 : 최대 재귀 깊이 (cmp)가 초과되었습니다.

by º기록 2020. 12. 11.
반응형


그런 다음 이름을 '이름'이라는 목록에 저장하고 이름에 포함 된 글자 수, 목록의 시작 부분에 짧은 이름, 끝에 긴 이름을 기준으로 목록을 정렬합니다.

목록을 정렬하기 위해 quicksort를 사용했지만 실행하면 다음 오류가 표시됩니다.

C:\Python27\python.exe C:/Users/Lenovo/Desktop/Anagrams/Main.py
Traceback (most recent call last):
  File "C:/Users/Lenovo/Desktop/Anagrams/Main.py", line 25, in <module>
    names = quicksort(names)
  File "C:/Users/Lenovo/Desktop/Anagrams/Main.py", line 8, in quicksort
    greater = quicksort([x for x in list[1:] if not lessThan(x, pivot)])
  File "C:/Users/Lenovo/Desktop/Anagrams/Main.py", line 7, in quicksort
    lesser = quicksort([x for x in list[1:] if lessThan(x, pivot)])
  File "C:/Users/Lenovo/Desktop/Anagrams/Main.py", line 8, in quicksort
    greater = quicksort([x for x in list[1:] if not lessThan(x, pivot)])
  File "C:/Users/Lenovo/Desktop/Anagrams/Main.py", line 7, in quicksort
    lesser = quicksort([x for x in list[1:] if lessThan(x, pivot)])
# [.... many lines elided ...]
  File "C:/Users/Lenovo/Desktop/Anagrams/Main.py", line 8, in quicksort
    greater = quicksort([x for x in list[1:] if not lessThan(x, pivot)])
  File "C:/Users/Lenovo/Desktop/Anagrams/Main.py", line 8, in quicksort
    greater = quicksort([x for x in list[1:] if not lessThan(x, pivot)])
  File "C:/Users/Lenovo/Desktop/Anagrams/Main.py", line 7, in quicksort
    lesser = quicksort([x for x in list[1:] if lessThan(x, pivot)])
  File "C:/Users/Lenovo/Desktop/Anagrams/Main.py", line 3, in quicksort
    if list == []:
RuntimeError: maximum recursion depth exceeded in cmp


빠른 정렬 기능을 테스트했으며 일반 목록 (예 : list = [ 'Alice', 'Bob,'Carl ','Derp '])에서 작동하지만'이름 '을 정렬하려고하면 작동하지 않습니다.

내 코드는 다음과 같습니다.

def quicksort(list):
    """Quicksort using list comprehensions"""
    if list == []:
        return []
    else:
        pivot = list[0]
        lesser = quicksort([x for x in list[1:] if lessThan(x, pivot)])
        greater = quicksort([x for x in list[1:] if not lessThan(x, pivot)])
        return lesser + [pivot] + greater

def lessThan(a, b):
    return len(a) < len(b)

#'''
input = open('Names.txt', 'r')
output = open('Names Arranged By Length.txt', 'w')

names = []

for line in input:
    line = line.translate(None, '\n')
    names.append(line)


names = quicksort(names)

for i in names:
    print i
    output.write(i)
    output.write('\n')

print 'Count: ', len(names)


input.close()
output.close()
#'''

내 코드에 어떤 문제가 있으며 어떻게 수정합니까?

 

해결 방법

 

단순히 재귀 한계에 도달했습니다. 이름 목록이 Python의 제한된 재귀 기능에 비해 너무 큽니다. Quicksort는 그렇지 않으면 잘 작동합니다.



names = sorted(names, key=len)

이렇게하면 가장 짧은 이름부터 길이별로 이름이 정렬됩니다.

 

참조 페이지 https://stackoverflow.com/questions/25105541

 

 

반응형

댓글