2013-07-27 35 views
-4

我的主要目標是從我的研究計劃中獲得這個程序的結果,所以即使有人有這樣一個可以下載的排列集合的現成數據庫,這對我在這裏的任務也是有幫助的。運行此程序需要什麼硬件?

這就是說,如果我能自己生成它,那對我所做的事會有好處。

計劃:

import itertools 
set=['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l'] 
perm=list(itertools.permutations(set, 12)) 
print perm 

我遇到的問題是硬件問題。

我的硬件規格如下:

imac 27in late 2012 
Mac OSX Mountain Lion 
8GB 1600MHz DDR3 RAM 
Intel 3.4GHz i7 
1TB HD with a bit more than 50% free space. 

消息我收到的時候我嘗試運行的程序是,有沒有足夠的內存啓動盤上保持程序的開放,它要求我強制退出程序。它凍結,然後我必須修復我的權限後,硬重啓,讓一切再次平穩運行,所以:

我不建議按原樣運行此程序來測試它,除非您已經知道您的系統可以處理它。

但是,我的估計是,這個程序輸出一個列表(我認爲)大小爲12!這是不合規格的......超過5億個排列(輸出的實際大小可能小於12!,但它遠大於指數)。

那麼,我怎樣才能得到這些數據呢?我需要一個新的系統嗎?如果是這樣,我需要多少空間或RAM?

或者,是否有一些技巧可以用來將程序分成可管理的塊?

+0

你打算如何處理排列,想存儲在什麼地方? – Karthikeyan

+2

爲什麼將它轉換爲列表?爲什麼不把它作爲一個迭代器? –

+0

@Karthikeyan我想存儲它,並且在其上找到並替換類型算法。他們實際上是NP完全問題的線性時間子例程的飼料。我有一個假設,當把這個置換集應用於一個NP完全問題的變量組時,將允許在P. –

回答

3

根據以下測試,每個元素(12個元素元組)大約需要144個字節。 (Window 7 64bit,Python 2.7.5)

>>> import sys 
>>> sys.getsizeof(('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l')) 
144 

排列會生成12!元素。

>>> reduce(lambda a,b:a*b, range(1,12+1)) # 12! 
479001600 

這將需要大約68GB的內存。

144 * 479001600 = 68,976,230,400 

保存到磁盤,大約需要6 + GB。 (13 * 479001600 = 6,227,020,800)(換行符爲1字節)

import itertools 

with open('permutations.txt', 'wb') as f: 
    f.writelines(''.join(xs) + '\n' for xs in itertools.permutations('abcdefghijkl')) 
+2

聽起來像http://downloadmoreram.com/的工作。 –

+0

感謝您的精確度,但它不能解決我的排列和存儲問題。我需要遍歷集合,以便我可以找到並替換,使得 - > a(),b - > b(),c - > c()...和我需要能夠閱讀它。 bansi提到我可以直接寫入磁盤,我不熟悉這些功能,所以我有什麼想法可以直接寫入磁盤? –

+0

@JMarkInman,你想寫'abcdefghijkl' ...'lkjihgfedcba'到磁盤嗎? – falsetru

相關問題