私はCourseraのオンラインコース「アルゴリズム:設計と分析、パート1」を受講しており、2回目の宿題を完了しました。しかし、私がそれをしている間、私はpythonランタイムエラーによって引き起こされる現象を説明することができません。
ソリューションコードを配布することになっていないので、抜粋をいくつか書きます。
def quick_sort_count (arr, index, median=False):
# SOME OPERATIONS
......
# Termination
if len(arr)==0 or len(arr)==1:
return arr, 0
........
arr[:i-1], t1 = quick_sort_count(arr[:i-1], index, median)
arr[i:], t2 = quick_sort_count(arr[i:], index, median)
return arr, len(arr)+t1+t2-1
プログラムは、10,000の一意の番号を持つデータファイルを分析し、クイックソートにある「比較」の数を計算する必要があります。質問には3つの部分が含まれます。比較のピボットとして最初の要素を使用する。最後のものを使用します。そして「中央値」のものを使用します。
奇妙な部分は、どちらかの質問を個別に実行することで正しい答えを得ることができるということです。しかし、次のような関数で3つすべてをまとめて実行することはできません。
def main():
# READING THE FILE
......
_,result1 = quick_sort_count(arr1, 0)
_,result2 = quick_sort_count(arr2, -1)
_,result3 = quick_sort_count(arr3, 0, True)
そうした場合、「RuntimeError:最大再帰深度を超えました」が発生します。何か好きなもの
....
arr[:i-1], t1 = quick_sort_count(arr[:i-1], index, median)
File "/Users/c/algorithm/quick_sort.py", line 43, in quick_sort_count
arr[:i-1], t1 = quick_sort_count(arr[:i-1], index, median)
File "/Users/c/algorithm/quick_sort.py", line 43, in quick_sort_count
arr[:i-1], t1 = quick_sort_count(arr[:i-1], index, median)
File "/Users/c/algorithm/quick_sort.py", line 43, in quick_sort_count
arr[:i-1], t1 = quick_sort_count(arr[:i-1], index, median)
File "/Users/c/algorithm/quick_sort.py", line 43, in quick_sort_count
arr[:i-1], t1 = quick_sort_count(arr[:i-1], index, median)
File "/Users/c/algorithm/quick_sort.py", line 33, in quick_sort_count
arr = swap(arr, index, 0)
RuntimeError: maximum recursion depth exceeded
「スワップ」は、arr[index]とarr[0]の位置を変更する単純な操作です。これは、2番目の質問の要件です。「最後の要素をピボット要素として使用し、前に最初の要素にスワップします。並べ替え」。
そして、再帰制限をさらに増やすと
import sys
sys.setrecursionlimit(100000)
そうすると、2番目と3番目の質問の答えが間違ってしまいます。
なぜこれが起こるのか誰かに教えてもらえますか?どうもありがとう!