2013-04-10 5 views
1

Я ищу для создания упорядоченной перестановки для больших чисел, то есть 37P10 (перестановки для 37 размера 10). Я использую combinat пакет, permn() функция для этой цели, но она не работает более чем на 10 номеров. Кроме того, я не могу создать перестановку разных размеров, как описано выше в примере.Упорядоченные перестановки

Кроме того, я объединять эти перестановки в матрицу с помощью функции do.call(rbind,). Любой любой пакет на R-языке, который может быть использован для этой цели, пожалуйста?

+3

'37P10' является' 1264020397516800', это ** LOT ** перестановки, и это тоже упорядочено. Я сомневаюсь, что вы можете сделать это любым тривиальным образом на любой простой настройке рабочего стола. –

+0

@geektrader это очень важно для меня, пожалуйста, помогите. – Zaheer

+0

@geektrader Я хочу сделать некоторые важные комбинации из них, если есть какой-либо метод, тогда я могу сделать свою работу очень легко и быстро, иначе ..... – Zaheer

ответ

5

То, о чем вы просили, просто не может быть сделано. Вы просите сгенерировать и сохранить замену 1.22e15 (или 4.81e15 с заменой) на 10 номеров. Даже если каждый номер был только одним байтом, вам понадобится 10 миллионов ГБ ОЗУ.

В моем пакете LSPM я использую функцию LSPM:::.nPri, чтобы сгенерировать определенную перестановку на основе ее лексически упорядоченного индекса. Вы не сможете перебирать каждые перестановку в разумные сроки, поэтому я предлагаю вам взять образец всех возможных перестановок.

Обратите внимание, что приведенный выше код не будет работать для nPr (37,10) из-за точности вопросов с таким большим количеством, но он должен работать как хорошая отправная точка.

+0

спасибо. Пожалуйста, посоветуйте мне. Можно ли написать функцию в R, которая возвращает только один набор перестановок за раз, а затем перезаписать следующий набор на нем итеративно и так далее ...? – Zaheer

3

Почти невозможно создать так много перестановок на обычном компьютере.

Оперативные расчеты (37 P 10) является 1264020397516800. Чтобы сохранить это множество целых чисел, вам понадобится 1264020397516800 x 64 бит. То есть 8.09×10^7 Gb (gigabits) или 10^7 Gigabytes. Затем для хранения актуальной информации о перестановках вам понадобится еще больше «памяти» либо в ОЗУ, либо в Harddisk.

Я думаю, что лучшей стратегией было бы написать функцию перестановки, создать упорядоченную перестановку последовательно и выполнить итеративный анализ без создания всех возможных перестановок.

+0

благодарит много за ценный ответ, и я полностью понимаю, что я должен делать дальше, пожалуйста, можете ли вы помочь мне сделать заказную функцию перестановки? – Zaheer

+3

мне не ясно из описания до сих пор случайная выборка перестановок (вероятность получения двух идентичных перестановок исчезающе мала) не будет одинаково хорошо использоваться для этой цели, а 'sample()' очень проста. –

+0

@BenBolker Я использовал эту функцию, но после около часа не удалось вернуть требуемый набор чисел. Любой один или несколько наборов из всех возможных наборов подстановок порядка могут удовлетворять моему требуемому условию. – Zaheer

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