11
這生成Segmentation Fault: 11
,我不知道爲什麼。Python分割錯誤?
之前,我到了,這裏是代碼:
import numpy.random as nprnd
import heapq
import sys
sys.setrecursionlimit(10**6)
def rlist(size, limit_low, limit_high):
for _ in xrange(size):
yield nprnd.randint(limit_low, limit_high)
def iterator_mergesort(iterator, size):
return heapq.merge(
iterator_mergesort(
(iterator.__next__ for _ in xrange(size/2)), size/2),
iterator_mergesort(
iterator, size - (size/2))
)
def test():
size = 10**3
randomiterator = rlist(size, 0, size)
sortediterator = iterator_mergesort(randomiterator, size)
assert sortediterator == sorted(randomiterator)
if __name__ == '__main__':
test()
基本上,它只是對迭代器和發電機的表達,而不是在名單工作的工作,以便在任何時間,以儘量減少內存佔用一個合併。這沒什麼特別的,並且使用heapq.merge()內置方法來合併迭代器,所以當所有事情都打破時,我感到非常驚訝。
快速運行代碼給Segmentation Fault: 11
和一個錯誤窗口告訴我python已經崩潰。我不知道在哪裏看或如何調試這個,所以任何幫助將不勝感激。
通常情況下,只有當你內存不足或者你正在使用的C模塊中有一個錯誤時,纔會在python中獲得段錯誤。 [這個問題](http://stackoverflow.com/questions/10035541/what-causes-a-python-segmentation-fault)可能對你有用。 – rnorris
哦,我現在覺得很愚蠢,我忘記在mergesort中粘住一個基本案例,所以增加遞歸限制會打破所有事情。 – reem
@sortfiend - 如果您發現問題,您應該將其寫爲[簡短回答並接受它](http://meta.stackoverflow.com/help/self-answer),而不是將標題編輯爲說「已解決」。這樣,這篇文章將會更好的用StackOverflow的算法,你可能會在這裏和那裏累積更多的upvotes :) – Michael0x2a