2013-07-27 2 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! который является нечестивым большим ... более 500 000 000 перестановок (фактический размер вывода может быть меньше 12 !, но он больше, чем просто экспоненциальный).

Итак, как я могу получить эти данные? Нужна ли мне новая система? Если да, то сколько пространства или ОЗУ мне нужно?

Или, есть ли какой-то трюк, который я могу использовать, чтобы разбить программу на управляемые куски?

+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 

Это займет около 68 ГБ памяти.

144 * 479001600 = 68,976,230,400 

Сохранение на диск занимает около 6 + ГБ. (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 -> a(), b -> b(), c -> c() ... и мне нужно быть способным чтобы прочитать его. bansi упомянул, что я могу писать прямо на диск, я не знаком с этими функциями, поэтому любые идеи о том, как я могу подойти к записи непосредственно на диск? –

+0

@JMarkInman, вы хотите написать 'abcdefghijkl' ...' lkjihgfedcba' на диск? – falsetru

Смежные вопросы