Вопросы с тегами [permutation]

1

голосов
1

ответ
50

Просмотры

Получить все возможные комбинации строки генерируются из символов ASCII между двумя числами

Мне нужна простой яваскрипт функция, которая принимает 3 вход 1- начального значения ASCII-2- конечного значения ASCII, длина 3- Строки Функции будет цикл от начального значения, чтобы конечное значения до тех пор, пока длина была сделана. Так, например, начало - 65 - конец 67 длина- 2 Хочу все комбинации (длина 2) ASCII из [65, 66, 67], что [ «А», «В», «С»] Я хотел бы, выход как AA AB AC BB BA BC CA CB CC
murtuza hussain
1

голосов
1

ответ
99

Просмотры

Все перестановки в диапазоне с параметрами

Я пытаюсь найти эффективный алгоритм для решения следующей задачи. Дайте диапазон чисел от 1..N и некоторых произвольных чисел К и М, найти все возможные перестановки в заданном диапазоне. Где К представляет собой число элементов, и М представляет собой минимальное расстояние между элементами. Итак, давайте рассмотрим пример: массив = 1,2,3,4,5,6,7,8 К = 2 М = 2, так что выход тогда будет (3,5) (3,6) (4,6 ), так что вы можете увидеть, как увеличивается сложность, если K и M становится все больше. Приветствия.
hasskell
1

голосов
0

ответ
74

Просмотры

Черный ящик комбинаторной оптимизации над перестановок

Я решении общих проблем оптимизации черный ящик, как: х *: Р (х) -> мин, где х являются перестановками длины N (N = 50, например, так перебор не представляется возможным). Целевая функция F (X) представляет автономный компьютерный код и х представляет собой конфигурацию комплексной системы с ответом, имитируемой F (х). Я узнал, что в этом случае я могу использовать много эвристических методов. Но большинство из этих методов всегда использовать какое-то локальный поиск, которые требуют подходящего расстояния метрики в пространстве поиска (пространство перестановок х в моем случае). Под подходящего расстоянием метрики Я имею в виду метрику, которые выполняют свойство «локальность», например, малое изменение перестановки х произвести небольшое изменение целевой функции F (X). В моем случае не известно, любое подходящее расстояние метрику с этим свойством, поэтому любой вид локального поиска почти случайный поиск. У меня есть несколько вопросов: Есть ли какие-либо доступны эвристические черный ящик комбинаторные методы оптимизации, которая не использует локальный поиск и / или любое расстояние метрики в пространстве поиска? Мне нужно преодолеть низкий «локальность» проблемы или просто тот факт, что любое подходящее расстояние метрики в пространстве поиска неизвестна. Является ли свойство «местонахождение» действительно настолько ограничены в комбинаторной оптимизации в целом? Может быть, я что-то пропустил ..., но большинство из реального мира черного ящика комбинаторной задачи имеет низкую или очень низкую «локальность» в связи с тем, что показатели расстояния общих перестановок (Хэмминг, Кендал и т.д.) не являются подходящие метрики в целом. Есть ли общий способ, как найти подходящее расстояние метрики в пространстве поиска, чтобы удовлетворить по крайней мере, примерно " с (Оценка распределения алгоритмов), например. Основная причина этого вопроса, какие виды оптимизации эвристики, пригодны для решения такого рода проблем.
michal
1

голосов
1

ответ
30

Просмотры

перестановка для строки не работает для массива целых чисел

Поэтому у меня есть рабочий код строки завивки ниже общественный статический список myperm (String S) {Список л = новый ArrayList (); mypermImpl ( "", S, L); вернуться л; } государственной статической силы mypermImpl (String встроенный, Струнные другой, Список л) {если (other.length () == 0) {l.add (встроенный); } Для (INT I = 0; я
Joe Bloom
1

голосов
2

ответ
55

Просмотры

PLSQL - обновление перестановки

Я хотел бы anonymise имен в большой таблице. Для этого я хотел бы переставить эти имена. Как я могу это сделать? Я попробовал следующее обновление (выберите t.id, t.name, t.nr, r.id, r.name, r.nr из (выберите идентификатор, название, RowNum номер факс от человека) T внутреннего соединения (выберите идентификатор, имя , ROWNUM NR из (выберите идентификатор, название от лица порядке DBMS_RANDOM.VALUE)) R = T.nr на R.nr) установить t.name = r.name; Выбрать часть работает нормально, но не обновление части. Любая идея?
user1753180
1

голосов
1

ответ
106

Просмотры

Самая большая Перестановка в к шагам (R),

У меня есть проблема, где я хотел бы заменить 2 числа в наборе Шифрование до «к» -кратного таким образом, что каждый раз, когда они включены, я получаю наибольшую возможную перестановку и напечатать это после того, как к-свопы. Например, при к = 2, для множества (1,4,2,5,3,3) в 1 шаге я бы подкачки (1,5) для создания (5,4,2,1,3,3). На шаге 2 я бы поменять (2,3) для создания (5,4,3,1,3,2). Если после п <к (е) точки мы уже имеем самую большую перестановку, например, (5,4,3,3,2,1), то мы останавливаемся. До сих пор это то, что у меня есть: х
Tony Hellmuth
-1

голосов
0

ответ
13

Просмотры

Как отобразить весь кортеж, список и / или строки с определенными элементами в определенный пользователем индекс?

Я пытался заставить питон, чтобы отобразить что-либо из строк, списков, кортежей и т.д., если указанная строка содержит определенные элементы в определенном индексе. Например, предположим, что мне нужно найти строку с X количеством элементов в его известных индексов. При минимальной одном из этих строк имеют элементы в известных индексах Я ищу. Иными словами, я пытаюсь выяснить способ в Python, который будет отображать всю строку, содержащую элементы и ее индексы, которые я уже знаю. Я уже знаю, как несколько сращивания, добавить, расширить и показать некоторые элементы, но они, кажется, что они не являются правильными инструментами для отображения всей строки / списка вместо только лишь элемента. Я изучаю Python 2.6 и 2.7 в течение 3 недель, и я застрял на этой проблеме на некоторое время. Здесь индексы элементов я уже знаю, в этом порядке. Индекс-1 = 1 Индекс Индекс 3 = 2 5 = 6 и так далее .. ввода пользователя а = вход () [X, 1, 2, Х, 6, 7, 4, Х, Х] Ь = вход () [ X, X, X, X, X, X] с = вход () [X, X, X, X, X, X] так далее ... Столько, сколько мне нравится .... Покажите одну строку в его Совокупность из X количества списков / кортежей / и т.д.. Которые содержат по меньшей определенного пользователь позиций этих элементы. Индекс-1 = 1 Индекс 3 = 2 Индекс 5 = 6 [Х, 1, 2, Х, 6, 7, 4, X, X]
Travis Wells
1

голосов
1

ответ
107

Просмотры

Создание перестановок из столбцов в dataframe

Привет У меня есть dataframe следующим образом: И хотел бы создать dataframe с 2 столбцами: Writer1 Writer2, в котором перечислены все перестановки писателей песенного экс: для песни 03 Bonnie & Clyde писатели: Принц, Tupac Shakur, Jay- Z, Тайрон Wrice и Kanye West были вовлечены. Мой dataframe поэтому должен выглядеть следующим образом: Writer1 Writer2 Prince Tupac Shakur Prince Jay-Z Prince Тайрон Wrice Prince Kanye West Тупак S Jay-Z Тупак S Тайрон Wrice Тупак S Kanye West Jay-Z Тайрон Wrice Jay-Z Kanye West Тайрон Kanye West Любая идея как я могу это сделать пожалуйста?
joe borg
1

голосов
1

ответ
19

Просмотры

trouble generating permutations

I'm trying to generate permutations given an array of distinct integers in Java, can't figure out what's wrong with my solution. I know there are hundreds of solutions online for this, but I'm trying to do it using a specific approach that makes sense to me (rather than trying to memorize someone else's algorithm). My logic is, given {1, 2, 3, 4}, I should loop through and recursively print 1 + permute({2, 3, 4}) 2 + permute({1, 3, 4}) 3 + permute({1, 2, 4}) 4 + permute({1, 2, 3}) So basically add the current element to result, and recursively call permute on the remaining elements. However I'm not getting the right results and I can't figure out why, I've been staring at the code for hours. class Solution { public List permute(int[] nums) { ArrayList result = new ArrayList(); ArrayList tmp = new ArrayList(); getPerm(nums.length, nums, tmp, result); return result; } private void getPerm(int n, int[] a, ArrayList tmp, ArrayList result){ // System.out.println("Calling on array " + Arrays.toString(a)); // System.out.println("tmp is " + tmp.toString()); // System.out.println("n is " + n); if(n == 0){ ArrayList toAdd = new ArrayList(tmp); result.add(toAdd); tmp.clear(); // tmp = new ArrayList(); return; } for(int i = 0; i < n; i++){ tmp.add(a[i]); int[] b = new int[n-1]; int k = 0; int j = 0; while(k
stickersskeletal
1

голосов
2

ответ
71

Просмотры

R: Матрица Комбинация с определенным количеством значений

Я хочу, чтобы все комбинации моей матрицы. Ex. двоичный 5 х 5 матрица, где у меня только две 1 строки (смотри ниже) COM 1: 1 1 0 0 0 1 1 0 0 0 1 1 0 0 0 1 1 0 0 0 1 1 0 0 0 Com 2: 1 0 1 0 0 1 1 0 0 0 1 1 0 0 0 1 1 0 0 0 1 1 0 0 0. , , Com: 0 0 0 1 1 0 0 0 1 1 0 0 0 1 1 0 0 0 1 1 0 0 0 1 1 Я попытался с помощью комбинирования пакета в R, но не смог найти решение.
JHKI
1

голосов
0

ответ
14

Просмотры

Превосходное хеширование для перестановок

Рассмотрим следующий список подстановок {0,1,2,3,4,5,6, *, *, *}, как генерируется с обычным возвратов: Индекс перестановку 1. 0123456 *** 2. 012345 * 6 ** 3 . 012345 ** 6 * 4. 012345 *** 6 5. 0123465 *** ... 60480. *** 6543210 Является ли это O (1) функция, которая для любой перестановки возвращает индекс перестановки в?
icecream notebook
1

голосов
5

ответ
862

Просмотры

Перестановка объектов ArrayList

У меня есть ArrayList, который содержит некоторые объекты и я должен получить перестановку, что объекты? Как я могу это сделать? Предположим, что MyList является ArrayList, который содержит 4 объекта. ArrayList MyList = новый ArrayList (); myList.Add (1); myList.Add (2); myList.Add (3); myList.Add (4); так ArrayList отсчет 4, так что я хочу 4! = 24 Я хочу 24 перестановок, что объекты. Как я могу сделать это в C # .Please помочь мне. Спасибо!
Anjana
1

голосов
4

ответ
149

Просмотры

перегруппировки массива данных без использования временного массива

Как я могу изменить массив, если я знаю, куда поместить каждый элемент в массиве без использования временного массива? Я думаю, это что-то делать с циклической перестановкой, но я не могу понять, как они могут быть связаны друг с другом. Wiki страница кажется неуместным для меня (http://en.wikipedia.org/wiki/Cyclic_permutation)
bfaskiplar
1

голосов
1

ответ
3.2k

Просмотры

Найти все комбинации передовых критериев фильтрации

Я искал обширно и нашел много информации о перестановках, но я не могу придумать хороший способ, чтобы приспособить их. Его разочарование, потому что я не думаю, что ответ в том, что трудно, но я не могу попасть на моем собственном. Я пытаюсь преобразовать диапазон ячеек, содержащих критерии выбора в диапазоне, который Расширенный фильтр может читать. Диапазон критериев выбора выглядит следующим образом: проблема, Расширенный фильтр оценивает каждую строку как отдельный набор фильтров. Логика выглядит примерно так: [просыпаются и Бобом кошки и земли да] ИЛИ [спящая И вылазка И собака И земля И да] ИЛИ ... ИЛИ [Martha]. Это способ Расширенный фильтр должен работать, но мне нужно работать, как Автофильтр, где я пройти через каждое поле и проверить каждый критерий фильтра. Логика должна выглядеть следующим образом: [Бодрствовать или спать] и [боб ИЛИ вылазка ИЛИ джордж ИЛИ Марфа] И [кошки или собаки или птицы] и [земля] и [в живых] После прочтения документации и нескольких форумов, единственный способ сделать это, я могу найти в генерируют на отдельных строках каждой комбинации критериев отбора возможных. Новый модельный ряд критериев отбора должен выглядеть следующим образом: Я проверил это вручную настройки выбора диапазона критериев, и она работает правильно, но я не могу понять код, чтобы автоматизировать его. Вот что я сделал до сих пор - это начинается нормально, но вскоре начинает повторять и отсутствие определенных перестановок: Если UBOUND (NumRows)> 1 Тогда С Таблицах ( «Fltr») .Range (.Cells (4, 1), .Cells (4, UBOUND (NumRows))) Copy Destination: =. Рабочие листы ( "afltr") Range ( "A1") End With '. Определить количество строк, необходимых для Advanced фильтра numPermute = NumRows (1) Для dstCol = 2 Для UBOUND (NumRows) numPermute = numPermute * NumRows (dstCol) Следующая dstCol «Копировать все перестановки в расширенный фильтр для dstCol = 1 Для UBOUND (NumRows) Если thisRow> NumRows (dstCol) Тогда thisRow = 2 Для thisGrp = 1 NumRows (dstCol) andSpltPos = 1 Для numRepeat = 1 Чтобы numPermute / NumRows (dstCol) sbstFltrItms = Таблицы ( "FLTR"). Клетки (4 + thisGrp, dstCol) .value «MOD проблема? Рабочие листы ( "afltr"). Клетки (thisRow, dstCol).
l85m
1

голосов
1

ответ
386

Просмотры

Общее число различных перестановок массива, в котором относительный порядок элементов в двух непересекающихся подмассивах остаются постоянным

Дайте массив целых чисел. Например, = {1,2,20,19} Пусть два непересекающиеся суб-массивы быть {1,2} и {20,19}. Есть 5 таких перестановок, в которых '1' всегда предшествует '2' и '20' всегда предшествует '19' и таковы: {1, 2, 20, 19} {1, 20, 2, 19} {1 , 20, 19, 2} {20, 1, 19, 2} {20, 19, 1, 2} Мой вопрос: Учитывая массив, а [1 ... N + M] размер = п + т. Найти количество перестановок, в которых относительный порядок элементов в двух суб-массивов A [1..n] и [п + 1..n + M] остается тем же самым.
Abhinav Chauhan
1

голосов
1

ответ
223

Просмотры

Permutations with a starting index

Я генерация довольно большой набор перестановок массива для моего алгоритма: argeArray.permutation (permSize) делать | пермь | # Сделать что-то с конца пермского Теперь я работаю, чтобы обновить приложение, чтобы иметь возможность продолжать в индексе, где он был остановлен. После недолгих поисков я не нашел альтернативный способ перестановки, которая имеет начальный индекс (чтобы быть в состоянии пропустить 0..startIndex). Затем я нашел метод падения (), который способен отсечкой первого числа элементов перестановки перечислителя: STARTINDEX = 3000000000 # пропустить первый 3 миллиарда комбинаций argeArray.permutation (permSize) .drop (STARTINDEX) делать | завивку | # Есть ли что-то с конца пермского Но эксперименты показали, что это создает полный набор комбинаций, который не является очень эффективным, так как требует много и много памяти ... Даже когда это просто необходимо, чтобы пропустить первые 3 миллиарда комбинаций ... Другим решением является пропустить алгоритм пока STARTINDEX не будет достигнут: STARTINDEX = 3000000000 # пропустить первые 3 миллиарда комбинаций argeArray.permutation (permSize) .with_index () делать | завивка, индекс | следующий, если индекс <STARTINDEX # Пропустить до STARTINDEX достигается # Есть ли что-то с конца завивка недостатком является то, что есть 3 миллиарда комбинаций испытано перед алгоритм (наконец-то) начинает работать (и расточительно продолжает проверку того, достигнуто ли STARTINDEX) Существуют ли какие-либо другие (более эффективные) решения этой проблемы? Для того, чтобы быть каким-то образом сказать перестановку (), чтобы пропустить первоначальное количество комбинаций? (Предполагая, что он всегда использует один и тот же порядок) STARTINDEX = 3000000000 # пропустить первые 3 миллиарда комбинаций argeArray.permutation (permSize) .with_index () | сделать завивку, индекс | следующий, если индекс <STARTINDEX # Пропустить до STARTINDEX достигается # Есть ли что-то с конца завивка недостатком является то, что есть 3 миллиарда комбинаций испытано перед алгоритм (наконец-то) начинает работать (и расточительно продолжает проверку того, достигнуто ли STARTINDEX) Существуют ли какие-либо другие (более эффективные) решения этой проблемы? Для того, чтобы быть каким-то образом сказать перестановку (), чтобы пропустить первоначальное количество комбинаций? (Предполагая, что он всегда использует один и тот же порядок) STARTINDEX = 3000000000 # пропустить первые 3 миллиарда комбинаций argeArray.permutation (permSize) .with_index () | сделать завивку, индекс | следующий, если индекс <STARTINDEX # Пропустить до STARTINDEX достигается # Есть ли что-то с конца завивка недостатком является то, что есть 3 миллиарда комбинаций испытано перед алгоритм (наконец-то) начинает работать (и расточительно продолжает проверку того, достигнуто ли STARTINDEX) Существуют ли какие-либо другие (более эффективные) решения этой проблемы? Для того, чтобы быть каким-то образом сказать перестановку (), чтобы пропустить первоначальное количество комбинаций? (Предполагая, что он всегда использует один и тот же порядок) STARTINDEX # Пропустить до STARTINDEX достигается # Есть что-то с концом завивки недостатком является то, что есть 3 миллиарда комбинаций испытаны перед алгоритмом (наконец-то) начинает работать (и расточительно продолжает проверку того, достигнут ли STARTINDEX) Есть какое-либо другое (более эффективное) решения Эта проблема? Для того, чтобы быть каким-то образом сказать перестановку (), чтобы пропустить первоначальное количество комбинаций? (Предполагая, что он всегда использует один и тот же порядок) STARTINDEX # Пропустить до STARTINDEX достигается # Есть что-то с концом завивки недостатком является то, что есть 3 миллиарда комбинаций испытаны перед алгоритмом (наконец-то) начинает работать (и расточительно продолжает проверку того, достигнут ли STARTINDEX) Есть какое-либо другое (более эффективное) решения Эта проблема? Для того, чтобы быть каким-то образом сказать перестановку (), чтобы пропустить первоначальное количество комбинаций? (Предполагая, что он всегда использует один и тот же порядок)
Veger
1

голосов
2

ответ
267

Просмотры

SQL - How to identify permutations of multiple key values

Thank you for reviewing. I'm in desperate need of help and having trouble even being clear on the question below... Using SQL 2008 I have a table set up with five columns. Data effectively looks like this: column1 column2 column3 column4 column5 T1 N1 A1 L1 S1 T1 N2 A2 L2 S4 T1 N2 A3 L2 S2 T1 N2 A1 L2 S4 T2 N6 A3 L3 S2 T2 N7 A3 L3 S4 T2 N7 A3 L4 S4 ... For records that have the same column1 value, I want to identify each unique permutation of column2 through column5. I want to answer questions like this: Case 1 How many records exist where column1 is the same value and column2 is the same value and column3 is the same value and column4 is the same value and column5 is different then Case 2 column1 is the same value and column2 is the same value and column3 is the same value and column4 is different and column5 is the same value then Case 3 column1 is the same value and column2 is the same value and column3 is the same value and column4 is different and column5 is different and so on. Thanks!
chris suit
1

голосов
1

ответ
451

Просмотры

Generate all permutations possible by deletion

Мне нужно создать все уникальные перестановки, которые возможны путем удаления одного или несколько БОЛЬШИХ символов строки, в то время как маленькие символы остаются нетронутыми. Пример входных данных: AalAADBdBBDkCeCCA Теперь нужно генерировать все перестановки, которые возможны путем удаления одного BIG символа один или несколько раз, комбинируя удаление от 1 до п BIG символов, каждый из которых удалены от 0 до т раз (п = число прямых символов ввода , м = количество вхождений символа). оставляя маленькие символы нетронутого Я заинтересован только в уникальных перестановках, то есть, если второй или третий (ИСПРАВЛЕНО! первоначально я написал первым и вторым) А удаляются не имеет никакого значения. Конечно, однако имеет значение, если первый или последний А удаляется. Примеры перестановок: AalAADBdBBDkCeCCA // оригинальный вход также рассчитывает как перестановки AalAADBdBB kCeCCA // последняя D удалена alAAD dBBDkCeCCA // первый А и В первом удалены Аал D dBBDkCeC A // второй и третий снимаемого, первый и последний B C удален Я использую Guava, в дело это помогает. Простое решение Java будет также хорошо. Я также хотел бы быть интересно, если есть название для такого рода перестановки и некоторые математики, давая формуляра общее количество уникальных перестановок, поэтому можно проверить результат алгоритм перестановки (по крайней мере, с точки зрения правильного количества перестановок). Пример является пониженной проблемой, то можно предположить, что вход уже доступен в виде списка символов или любой другой предварительно разобранный формат вместо объединенной строки. Спасибо за любой намек на это! Обновление: Я думаю, я нашел решение, прием обратной связи. Идея: Индексы Extract (положение) каждый BIG характера. Поместите их в набор, создать набор мощности P этого множества. Это дает все перестановки возможных удалений (в том числе дубликатов, например, 1,2 и 2,1, и если 1 = 2 = же BIG характер)
stefan.at.wpf
1

голосов
1

ответ
140

Просмотры

Unique Permutations of a list(why won't this work)? [closed]

Я искал способ, чтобы получить все уникальные перестановки в списке групп из 3. Я нашел много исходного кода для загрузки и сложных алгоритмов. В конце концов я просто придумал мой собственный код, который, кажется, работает. Может кто-то пожалуйста, скажите мне, почему следующее не является хорошей идеей. Я предполагаю, что там должна быть что-то я с видом из-за все комплексные решения, которые я нашел и мой кажется слишком простым. Комбинации вар = от А в образцах из Ь в образцах из С в образцах, где (строка) a.sample! = (строка) b.sample && (строка) a.sample! = (строка) c.sample && (строка) б .Sample! = (строка) c.sample выбрать новый ранг {образец = a.sample, sampleb = b.sample, samplec = c.sample}; Еогеасп (вар комбо в комбинациях) {строка [] = {Aut combo.sample, combo.sampleb, combo.samplec}; Array.sort (AUT); combo.sample = Aut [0]; combo.sampleb = Aut [1]; combo.samplec = Aut [2]; l.Add (комбинированный); } NoDupes = от п в л п группы по новым {n.sample, n.sampleb, n.samplec} в г выбрать новый ранг {образец = g.Key.sample, sampleb = g.Key.sampleb, samplec = г. Key.samplec};
user2525463
1

голосов
1

ответ
413

Просмотры

перестановка данных и случайное моделирование для chisq испытания на R

Я новичок в R, и я пытаюсь сравнить таблицу наблюдаемых значений с одним из ожидаемых значений и рассчитать chisq. Как часть моего назначения, мне нужно сравнить ожидаемую таблицу значений с набором 999 таблиц, которые я создал с помощью случайных перестановок из наблюдаемых значений. Мне нужно вычислить значение chisq для каждой таблицы (NSIM = 999), а затем построить гистограмму всех значений chisq наряду с фактическим chisq из наблюдаемых данных. Здесь пока данные и коды, которые я использую:> Выживание = таблица (титанический [с ( «КЛАСС», «ВЫЖИЛ»)])> Выживание ВЫЖИЛ CLASS нет да первого 122 203 второй 167 118 третьего 528 178 Экипаж 673 212> Ожидается не ожидается, = (выживание) #library (epitools)> ожидаемый ВЫЖИЛ CLASS нет да первого 220,0136 104,98637 второго 192,9350 92,06497 третьего 477,9373 228,06270 экипаж 599,1140 285.
Dbal
1

голосов
2

ответ
501

Просмотры

Все три словосочетания (в том же порядке) из строки

Скажем, у нас есть строка со словами: 1 2 3 4 5 Я хочу все комбинации из трех слов, но порядок не может измениться. Строка может быть от 4 слов до 7 слов длины. Не больше, как было бы слишком много комбинаций. Таким образом, результат для примера 1 2 3 4 5 будет массив со строками: 1 2 3 1 2 4 1 2 5 1 3 4 1 3 5 1 4 5 2 3 4 2 3 5 2 4 5 3 4 5 I» ве думал об этом некоторое время. Одна идея состояла в том, чтобы превратить его в массив, сгенерировать двоичный код для количества слов, и если это 1, то это показывает слово и в противном случае он не (так что вы получите что-нибудь от 11100 до 00111). Но это, вероятно, не является оптимальным. Скорость имеет значение в данном случае, как можно было сделать десятки тысяч раз в течение нескольких минут.
Rick
1

голосов
1

ответ
108

Просмотры

Generating permutations of values for each slot

OK, I must be struggling with something stupid here (new to Scala), in which case apologies if it is something trivial. I have a class Action which takes a name (irrelevant for the problem) and a list parameters. Each parameter has a set of possible values, and I want to generate the full list of possible arguments for the parameters of the Action. I have been trying to use a for-comprehension but rather than filling in all arguments, I am getting combinations with just one value replaced. My code looks something like this (I simplified it just to illustrate the problem): case class ParamType(name: String) { def matchesType(that: ParamType): Boolean = this.name == that.name } sealed abstract class Param (paramType : ParamType) case class VarParam(parameter : String, paramType : ParamType) extends Param (paramType) case class ValueArg(name : String, paramType : ParamType) extends Param(paramType) case class Action(name: String, params: List[Param]) { def possibleActions(possibleValues : Set[ValueArg]) : Set[Action] = for { parameter pt}) argument = 0) Action(name, parameters.updated(i, argument) } } object tester { def main(args: Array[String]) { val possibleValues = Set[ValueArg](new ValueArg("a1", new ParamType("Atype")), new ValueArg("a2", new ParamType("Atype")), new ValueArg("a3", new ParamType("Atype")), new ValueArg("b1", new ParamType("Btype")), new ValueArg("b2", new ParamType("Btype")), new ValueArg("b3", new ParamType("Btype")), new ValueArg("c1", new ParamType("Ctype")), new ValueArg("c2", new ParamType("Ctype")), new ValueArg("c3", new ParamType("Ctype"))) val action1 = new Action("action1", List[Param](new VarParam("A", new ParamType("Atype")), new VarParam("B", new ParamType("Btype")), new VarParam("C", new ParamType("Ctype")))) val possibleActions = action1.possibleActions(possibleValues) println(possibleActions) } } The function replaceParam just returns an action with the parameter replaced by the argument. So if I have action1 with parameters A, B, C, each of which can take {a1, a2, a3}, {b1, b2, b3} and {c1, c2, c3} (assume they are of the same type), I am ending up with: action1(a1, B, C) , action1(A, b1, C), action1(A, B, c1), action1(a2, B, C) etc. But what I want is: action1(a1, b1, c1), action1(a1, b1, c2), action1(a2, b1, c1) etc. What is the most elegant way to achieve this?
jbx
1

голосов
1

ответ
53

Просмотры

issues with creating all permutations of array options

Не уверен, что я здесь отсутствует, пытаясь создать новый массив со всеми возможными вариантами размера и цвета массивов, когда оба присутствуют. Используется это в качестве руководства: https://stackoverflow.com/a/5227021/2964789. Желаемый результат должен быть: Black-L, Black-M, Black-S, Black-XL, черный-XXL, Редль, Red-M, красно-S, Red-XL, Red-XXL требует "Капибара / DSL" требуют "таблица" требуют "FileUtils" требует "открытого URI" включают водосвинку :: DSL Capybara.run_server = ложь Capybara.default_driver =: селен Capybara.default_selector =: XPath Spreadsheet.client_encoding = 'UTF-8' визит «Http: // www.example.com/sexy-women-pencil-dress-see-through-mesh-stripes-backless-bodycon-slim-party-clubwear-g0376.html "если page.has_selector? (" // дд [1] / / выберите [содержит (@name, 'варианты'
jcuwaz
1

голосов
1

ответ
2.6k

Просмотры

Использование динамического программирования для подсчета числа перестановок

У меня есть строка A длины N. Я должен найти количество строк (B) длины N, которые имеют M (M
SHB
1

голосов
3

ответ
1.1k

Просмотры

Перестановки некоторых цифр в Java

Я понимаю, что перестановки в язык программирования очень часто задают вопрос, однако я чувствую, что мой вопрос является своего рода уникальным. Я получил ввод определенной длины целого числа N и хранить каждую цифру в массиве, где индекс массива хранит число раз, что цифра встречается в N. Теперь я хочу, чтобы проверить, если некоторые функции справедливо со всеми перестановками оригинала N в длина без начальных нулей. Пример: Int [] цифры = новый INT [10]; Строка N = "12345675533789025"; для (символ C: n.toCharArray ()) цифры [с-'0' ] ++; для (Long F: allPermutationsOf (цифры)) если (someCondition (е)) System.out.println (е); предварительное условие для следующего кода является то, что N должен быть меньше, чем 2 ^ 64-1 (Лонг максимального значения.) Вопрос заключается в том, как бы я принять все перестановки массива цифр и возвращать Long [] или длинный [] без использования какой-то Объединение строк? Есть ли способ, чтобы вернуть длинный [] с помощью всех перестановок цифр [] в «Integer объем вещей» или, вернее, с использованием только целочисленной арифметики?
Will Sherwood
1

голосов
1

ответ
1k

Просмотры

Поиск перестановок в параллельном пути

Как вы можете написать программу, которая находит все перестановки последовательности параллельно пути ?? Чтобы быть более точным, я пишу программу, чтобы найти все возможные графики для курсов студент хочет брать. Скажем, студент хочет взять CC101 и CC102. Есть 3 учителей, которые учат CC101 (CC101.A, CC101.B, ...) и 2, которые учат CC102. Комбинации будет [CC101.A, CC102.A] [CC101.A, CC102.B] [CC101.B, CC102.A] [...] [CC101.C, CC102.B] (конечно, увольняя те, где классы сталкиваются / происходят в то же время). Путь я в настоящее время обработки это с рекурсивной функцией, которая по существу выглядит следующим образом: частные списка расписания {получить; набор;} общественные FindSchedules (курс [] курсы) {FindSchedules (новый Sched (), курсы, 0); вернуться this.Schedules; } Частная пустота FindSchedules (Расписание Sched, курс [] курсы, ИНТ courseIndex) {если (я> = courses.length) {// класс свойство this.Schedules.Add (sched.Clone ()); } Еогеасп (вар класс в курсах [courseIndex] .Classes) {если (sched.ConflictsWith (класс) продолжаются; sched.Add (класс); FindSchedules (Sched, курсы, courseIndex +1) sched.remove (класс);}} Это на самом деле работает довольно хорошо, но для большего числа курсов с большим количеством классов, он может начать строить. (количество возможных комбинаций Курсы [0] .Classes.Count * Курсы [1] .Classes.Count *. .. * Курсы [N] .Classes.Count) что мне было интересно, если есть способ, чтобы заставить его работать параллельно. Я думал, что я мог бы, возможно, сделать Task.Run (() => FindSchedules (sched.Clone (), курсы, courseIndex +1)) ;, но, очевидно, я не хотел бы, чтобы все вызовы, как, что, только первые несколько из них, а затем их дочерние вызовы регулярные рекурсивные вызовы. Есть ли существующая стратегия алгоритма для этого? Спасибо!
Francisco Noriega
1

голосов
2

ответ
498

Просмотры

Перестановки: Ускорить, предсказывать и / или многопоточного

Я работаю над алгоритмом, который должен BruteForce N испытаний последовательно. Перестановка испытаний имеет важное значение для исхода. Проблеме: Если применить некоторые правила, мне нужно, чтобы быть в состоянии ограничить комбинаторное пространство поиска. Например: Перестановка «1,2,3» предоставляет следующие тесты бесполезны. Так что не нужны перестановки, как «1,2,3,4» или «1,2,3,5» и т.д. больше. Так что я написал код, чтобы сделать перестановки сам, но I'ts медленно. Что я могу сделать, чтобы сделать этот код быстрее? Или есть пакет там я пропустил? Должен ли я осуществить это в C сам? Есть простой способ распараллелить это? Есть простой способ предсказать Nth перестановки? (Это было бы аккуратно, чтобы осуществить параллельные вычисления легкого пути;) Большое спасибо! Марк # Пример permu.with.check. # 02.05.2014;
Marc
1

голосов
1

ответ
1.7k

Просмотры

Как написать рекурсивный метод перестановки, которая принимает 2 Интс

Мне нужно написать метод, который делает п! / (№) !. Это было бы легко сделать в цикле, но я не могу понять это рекурсивно. Вот мой код до сих пор. открытые статические INT ПЕРЕСТ (Int N, Int г) {если (г == 0) {возвращают 0; } Иначе, если (г == 1) {возвращение п; } Еще {возвращение п * ПЕРЕСТ (п, г-1) / ПЕРЕСТ (п, г-1); }} Я не уверен, как настроить возвращение.
aeipownu
1

голосов
1

ответ
203

Просмотры

Find all permutation of a string with certain position unchanged

Дана строка слов, скажем, «OhMy», держать заглавную букву фиксированной (без изменений), но мы можем изменить положение буквы нижнего регистра. Вывод всех возможных перестановок. например. учитывая "OhMy" он должен вывести [ "OhMy", "OyMh"] Вот что я сделал: публичный статический список Перестановка (String s) {список Рез = новый ArrayList (); если (s == NULL || s.length () == 0) {вернуться Рез; } StringBuilder путь = новый StringBuilder (с); Список кандидатов = новый ArrayList (); Положение List = новый ArrayList (); для (INT I = 0; г <s.length (); я ++) {символ с = s.charAt (я); если (Character.isAlphabetic (с) && Character.isLowerCase (с)) {candidates.add (с); position.add (я); }} Boolean [] = произошел новый логический [candidates.size ()]; хелперы (Рез, путь, кандидаты, должность, 0); вернуться Рез; } Государственной статической силы помощник (Список Рез, StringBuilder путь, кандидатов Список позиция Список, Int индекса) {если (индекс == position.size ()) {res.add (path.toString ()); вернуть ; } Для (INT I = индекс; г <position.size (); я ++) {для (Int J = 0, J <candidates.size (); j ++) {path.setCharAt (position.get (I), кандидаты. получить (к)); символ с = candidates.remove (J); помощник (Рез, путь, кандидаты, должность, индекс + 1); candidates.add (к, с); }}} Для ввода «ABC» это будет иметь результат [Abc, Acb, Acc, Acb] По существу, внешний контур итерация все возможные позиции, внутренний цикл пробует все возможные кандидаты на каждом возможном положении. Я не знаю, почему он имеет дублей Ли «Acc, Acb» вернуться Рез; } Государственной статической силы помощник (Список Рез, StringBuilder путь, кандидатов Список позиция Список, Int индекса) {если (индекс == position.size ()) {res.add (path.toString ()); вернуть ; } Для (INT I = индекс; г <position.size (); я ++) {для (Int J = 0, J <candidates.size (); j ++) {path.setCharAt (position.get (I), кандидаты. получить (к)); символ с = candidates.remove (J); помощник (Рез, путь, кандидаты, должность, индекс + 1); candidates.add (к, с); }}} Для ввода «ABC» это будет иметь результат [Abc, Acb, Acc, Acb] По существу, внешний контур итерация все возможные позиции, внутренний цикл пробует все возможные кандидаты на каждом возможном положении. Я не знаю, почему он имеет дублей Ли «Acc, Acb» вернуться Рез; } Государственной статической силы помощник (Список Рез, StringBuilder путь, кандидатов Список позиция Список, Int индекса) {если (индекс == position.size ()) {res.add (path.toString ()); вернуть ; } Для (INT I = индекс; г <position.size (); я ++) {для (Int J = 0, J <candidates.size (); j ++) {path.setCharAt (position.get (I), кандидаты. получить (к)); символ с = candidates.remove (J); помощник (Рез, путь, кандидаты, должность, индекс + 1); candidates.add (к, с); }}} Для ввода «ABC» это будет иметь результат [Abc, Acb, Acc, Acb] По существу, внешний контур итерация все возможные позиции, внутренний цикл пробует все возможные кандидаты на каждом возможном положении. Я не знаю, почему он имеет дублей Ли «Acc, Acb» StringBuilder путь, Список кандидатов, позиции списка, Int индекса) {если (индекс == position.size ()) {res.add (path.toString ()); вернуть ; } Для (INT I = индекс; г <position.size (); я ++) {для (Int J = 0, J <candidates.size (); j ++) {path.setCharAt (position.get (I), кандидаты. получить (к)); символ с = candidates.remove (J); помощник (Рез, путь, кандидаты, должность, индекс + 1); candidates.add (к, с); }}} Для ввода «ABC» это будет иметь результат [Abc, Acb, Acc, Acb] По существу, внешний контур итерация все возможные позиции, внутренний цикл пробует все возможные кандидаты на каждом возможном положении. Я не знаю, почему он имеет дублей Ли «Acc, Acb» StringBuilder путь, Список кандидатов, позиции списка, Int индекса) {если (индекс == position.size ()) {res.add (path.toString ()); вернуть ; } Для (INT I = индекс; г <position.size (); я ++) {для (Int J = 0, J <candidates.size (); j ++) {path.setCharAt (position.get (I), кандидаты. получить (к)); символ с = candidates.remove (J); помощник (Рез, путь, кандидаты, должность, индекс + 1); candidates.add (к, с); }}} Для ввода «ABC» это будет иметь результат [Abc, Acb, Acc, Acb] По существу, внешний контур итерация все возможные позиции, внутренний цикл пробует все возможные кандидаты на каждом возможном положении. Я не знаю, почему он имеет дублей Ли «Acc, Acb» размер ()) {res.add (path.toString ()); вернуть ; } Для (INT I = индекс; г <position.size (); я ++) {для (Int J = 0, J <candidates.size (); j ++) {path.setCharAt (position.get (I), кандидаты. получить (к)); символ с = candidates.remove (J); помощник (Рез, путь, кандидаты, должность, индекс + 1); candidates.add (к, с); }}} Для ввода «ABC» это будет иметь результат [Abc, Acb, Acc, Acb] По существу, внешний контур итерация все возможные позиции, внутренний цикл пробует все возможные кандидаты на каждом возможном положении. Я не знаю, почему он имеет дублей Ли «Acc, Acb» размер ()) {res.add (path.toString ()); вернуть ; } Для (INT I = индекс; г <position.size (); я ++) {для (Int J = 0, J <candidates.size (); j ++) {path.setCharAt (position.get (I), кандидаты. получить (к)); символ с = candidates.remove (J); помощник (Рез, путь, кандидаты, должность, индекс + 1); candidates.add (к, с); }}} Для ввода «ABC» это будет иметь результат [Abc, Acb, Acc, Acb] По существу, внешний контур итерация все возможные позиции, внутренний цикл пробует все возможные кандидаты на каждом возможном положении. Я не знаю, почему он имеет дублей Ли «Acc, Acb» получить (я), candidates.get (J)); символ с = candidates.remove (J); помощник (Рез, путь, кандидаты, должность, индекс + 1); candidates.add (к, с); }}} Для ввода «ABC» это будет иметь результат [Abc, Acb, Acc, Acb] По существу, внешний контур итерация все возможные позиции, внутренний цикл пробует все возможные кандидаты на каждом возможном положении. Я не знаю, почему он имеет дублей Ли «Acc, Acb» получить (я), candidates.get (J)); символ с = candidates.remove (J); помощник (Рез, путь, кандидаты, должность, индекс + 1); candidates.add (к, с); }}} Для ввода «ABC» это будет иметь результат [Abc, Acb, Acc, Acb] По существу, внешний контур итерация все возможные позиции, внутренний цикл пробует все возможные кандидаты на каждом возможном положении. Я не знаю, почему он имеет дублей Ли «Acc, Acb»
Mighty_L
1

голосов
2

ответ
280

Просмотры

Уникальные комбинации бисерного колье [дублировать]

Этот вопрос уже есть ответ здесь: Сформировать все возможные комбинации элементов некоторых векторов (декартово произведение) 4 ответов Так что я пишу программу, чтобы определить уникальные комбинации бисерного ожерелья, но я не могу показаться, чтобы получить его право. Правила не могут иметь один и тот же ожерелье вперед и назад, и вы не можете иметь то же самое ожерелье с одной буртик скользил вокруг другого конца. Я приложил несколько фотографий, чтобы разъяснение. Я написал код для него, и я думал, что достиг того, что я пытался сделать, но это не работает должным образом. п = [1 2 3 4 2 4]; % Зеленый = 1% синего = 2% желтый = 3% красный = 4 р = перманент (п); всего = макс (размер (р)); для г = 1: макс (размер (р)) Q = р; д (я) = []; для J = 1: макс (размер (д)), если IsEqual (р (I), fliplr (д (J))) = общая общая - 1; ElseIf IsEqual (р (я), circshift (д (J), [1,1])) = общая общая - 1; ElseIf IsEqual (р (я), circshift (д (к), [длина (д (к)) - 1, длина (д (к)) - 1])) = общая общая - 1; конец дисп (всего) конец конец Логически, это имеет смысл для меня, но я мог бы быть просто сумасшедшим.
Tony
1

голосов
2

ответ
581

Просмотры

Перестановка с помощью ArrayList для печати размером 10 на консоли

Я написал простой код на случайной перестановки в диапазоне от 1 до 10 с помощью ArrayList. Как я могу сделать ArrayList в моем файле SmartPermutationGenerator напечатать результат по размеру 10 в консоли, чтобы получить выход, как показано ниже: Я не хочу этот вывод: Случайные массивы, используя смарт-Force: 4 8 8 1 8 4 10 8 4 1 7 8 4 1 10 5 8 4 1 10 7 2 8 4 1 10 7 5 9 8 4 1 10 7 5 2 6 8 4 1 10 7 5 2 9 3 8 4 1 10 7 5 2 9 6 Я хочу этот выход вместо : Случайные массивы с помощью смарт-Force: 8 4 8 1 8 4 10 8 4 1 7 8 4 1 10 5 8 4 1 10 7 2 8 4 1 10 7 5 9 8 4 1 10 7 5 2 6 8 4 1 10 7 5 2 9 8 3 4 1 10 7 5 2 6 9 следует ограничивать решение с использованием только ArrayList, не нужно использовать рекурсию. Это мой файл SmartPermutationGenerator импорт java.util.ArrayList; импорт java.util.Random; общественный класс SmartPermutationGenerator {частного размера INT; частный Случайный ранд = новый Random (); общественного SmartPermutationGenerator () {this.size = 10; } Общественного ArrayList nextPermutation () {ArrayList, неиспользованный = новый ArrayList (); для (INT I = 0; я <размер; я ++) // цикл для элемента в массиве {unused.add (г + 1); } ArrayList завивка = новый ArrayList (); для (INT = 0; к <размер; K ++) // цикл для случайного числа от 1 до 10 {INT = rand.nextInt поз (unused.size ()); perm.add (unused.get (позы)); unused.remove (позы); System.out.print (perm.get (к) + ",«); для (Int J = 0; J <к; j ++) {System.out.print (perm.get (к) + ",«); // Цикл для перестановки 10 раз //System.out.println (); }} Вернуть завивку; }} Это мой файл BrutePermutationGenerator импорт java.util.Random; общественный класс BrutePermutationGenerator {частного ИНТ [] Num = новый INT [10]; общественного ИНТ [] nextPermutation () {Random ранд = новый Random (); для (Int J = 0; J <10; j ++) // цикл для перестановки 10 раз {для (INT I = 0; г <10; я ++) // цикл для случайного числа от 1 до 10 {INT низкий уровень = 1; INT высокий = 10; INT Диапазон = высокий - низкий + 1; INT R = rand.nextInt (диапазон); Num [I] = Num [г]; Num [г] = I; } Для (INT I = 0; я <10; я ++) // цикл для элемента в массиве {System.out.print (Num [I] + 1 + "«); } System.out.println (); } Вернуть Num; }} Это мой основной файл PermutationGeneratorViewer общественного класса PermutationGeneratorViewer {государственной статической силы основных (String [] арг) {BrutePermutationGenerator скотина = новый BrutePermutationGenerator (); SmartPermutationGenerator смарт = новый SmartPermutationGenerator (); System.out.println ( "\ п" + "Случайные матрицы с использованием Brute Force:"); brute.nextPermutation (); System.out.println ( "\ п" + "Случайные матрицы с использованием смарт-Force:"); smart.nextPermutation (); }} SmartPermutationGenerator смарт = новый SmartPermutationGenerator (); System.out.println ( "\ п" + "Случайные матрицы с использованием Brute Force:"); brute.nextPermutation (); System.out.println ( "\ п" + "Случайные матрицы с использованием смарт-Force:"); smart.nextPermutation (); }} SmartPermutationGenerator смарт = новый SmartPermutationGenerator (); System.out.println ( "\ п" + "Случайные матрицы с использованием Brute Force:"); brute.nextPermutation (); System.out.println ( "\ п" + "Случайные матрицы с использованием смарт-Force:"); smart.nextPermutation (); }}
niese
1

голосов
2

ответ
492

Просмотры

MATLAB 2D не randperm без какого цикла

Хочу сделать 2D массив случайных перестановок, где каждая строка может содержать ряд, который был создан в предыдущей строке. Но не может быть тот же номер в той же строке. Есть в любом случае, чтобы сделать следующий код не для цикла? а = (1: 100); б = нули (размер (а, 2), 4); для г = 1: размер (а, 2) г = randperm (размер (а, 2), 4); б (я, :) = г; конец
William Collishaw
1

голосов
1

ответ
772

Просмотры

Перестановки в Python без повторений

Я работаю над программой, которая получает список в качестве входных данных от пользователя и предполагается печатать все перестановки списка. дело в том, что выходе я получаю с повторением чисел из списка, так это технически не очень перестановки. Как можно избежать этого? (Обратите внимание, что если пользователь вводит один и тот же номер дважды в списке, это не будет считаться повторением), поэтому в основном я не могу повторить тот же показатель в каждой комбинации. NB: Я не разрешен использовать встроенные функции перестановок. Это то, что я сделал до сих пор: Защиту перестановка (Numberlist, массив, место): если (место == Len (Numberlist)): печать массив еще: я = 0, а (I <LEN (Numberlist)): массив. добавление (Numberlist [I]) перестановку (Numberlist, массив, место + 1) array.pop () = I + 1 DEF Scanlist (): Numberlist = []; число = вход () #keep сканирование чисел для списка в то время как (число! = 0): numberList.append (число) число = вход () возвращает Numberlist перестановка (Scanlist (), [], 0) выход на 1- 3 0, например: [1, 1, 1] [1, 1, 2] [1, 1, 3] [1, 2, 1] [1, 2, 2] [1, 2, 3] [1, 3, 1] [1, 3, 2] [1, 3, 3] [2, 1, 1] [2, 1, 2] [2, 1, 3] [2, 2, 1] [2, 2 , 2] [2, 2, 3] [2, 3, 1] [2, 3, 2] [2, 3, 3] [3, 1, 1] [3, 1, 2] [3, 1, 3] [3, 2, 1] [3, 2, 2] [3, 2, 3] [3, 3, 1] [3, 3, 2] [3, 3, благодаря 3].
Ryan
1

голосов
2

ответ
714

Просмотры

игры Расписание SQL генерирующего настольный футбол (в переменной 2-человек команды и все возможные игры)

Хорошо, я хотел бы спросить вас о чем-то похож на вопрос: Cross Join без повторяющихся комбинаций у меня есть 8 игроков в настольный футбол. Мы хотим играть все возможные комбинации игры. Таким образом, для создания всех возможных команд (2 игрока) я могу использовать это решение (по-моему 28 команд правильно): выбрать отличный случай, когда a.id
lomasz
-1

голосов
0

ответ
14

Просмотры

Алгоритм, чтобы найти все различные суммы из списка номеров

Ввод пробы: 4 6 4 3 2 2 1 1 Первого число = В общей сложности, Т = Второй номер Количество чисел, S После S число = Значение чисел. (Повторение может произойти, вход дается в невозрастанию порядке) Моя работа состоит в том, чтобы найти все «различные суммы» с использованием номеров из списка, которые добавляют до T. Таким образом, пример вывода для данного входа будет: 4 3 + 1 2 +2 2 + 1 + 1 Моя мысль была идти по списку 1 на 1, и найти все комбинации ряда с различным числом, вплоть до размера списка чисел - # чисел уже оценили. Вы можете создать список из каждой комбинации и добавить список в HashSet из списков (HashSet для предотвращения дубликатов). Таким образом, вы бы проверить для всех 1, 2, 3, 4, 5 и 6-размерных комбинаций, чтобы пойти с 4 первого Тогда все 1, 2, 3, 4, 5 комбинаций размеров идти с 3, игнорируя 4 Тогда все 1, 2, 3, 4 размера комбинации идти с 2, игнорируя 4 и 3 и т.д. Я не уверен, если этот алгоритм действительно эффективен у меня трудное время и с реализацией этого алгоритма. Я не могу обернуть мою голову вокруг, как мертвую структуру таким образом, чтобы получить желаемые комбинации.
And I Am
1

голосов
2

ответ
659

Просмотры

Generate permutations of characters in arrays - JavaScript

Я работаю на функцию JavaScript, который будет генерировать перестановки вложенного массива (назовем его вход). Я хочу сделать это таким образом, что длина перестановок будет иметь input.length. Таким образом, данный вход переменная = [[ "0", "5", "9"], [ "2", "3"], [ "0", "5", "4"]]; Я ищу, чтобы генерировать перестановки длины 3, содержащий любой из [ «0», «5», «9»] в качестве первого символа, любой из [ «2», «3»] в качестве второго символа и т.д. Моего Основная задача состоит в том, я не понимаю рекурсии достаточно хорошо, чтобы применить его к проблеме. Я понимаю, что общий принцип, и может пройти через заданную функцию для того, чтобы понять, как он ведет себя (очевидно, более сложная функция, тем больше он принимает меня, чтобы понять это. Когда я не могу обернуть свой ум вокруг функции, я использую липкие заметки и карту каждый вызов, используя отдельную записку на стене. Таким образом, я могу легко представить себе картину и, как правило, наступив через пару звонков мое понимание становится гораздо лучше). Однако, если бы я написать ту же самую функцию, что я в состоянии понять, что путь, я бы, вероятно, бороться. Так что я нашел функцию, которая генерирует перестановку простой строки с целью изменить его таким образом, так что он обрабатывает вложенный массив и генерирует нужный выход. вар перестановки = []; Функция doPerm (ул, обр) {если (TypeOf (строка) == 'строка') = str.split ул ( ''); если (str.length == 0) permutations.push (arr.join ( '')); для (вар я = 0; я <str.length; я ++) {вар х = str.splice (я, 1); arr.push (х); doPerm (ул, обр); arr.pop (); str.splice (я, 0, х); }} Модификация будет добавить еще один уровень поверх существующей функции (как из того, что я представляю себе «отдых» переменная должна быть сама перестановку). Тем не менее, я уверен, что есть способ, чтобы упростить задачу. Любое руководство или возможные решения этого будут оценены.
Patrick
1

голосов
1

ответ
549

Просмотры

Finding all possible permutations with a sum constraint and a redundancy option? (MATLAB)

У меня была следующая проблема в виду: Существует гипотетическая почитается музыкант, который вышел в отставку. Музыкант получает роялти чеки за их прошлые записи, время от времени. Музыкант чека роялти всегда бывает, как: $ 1, $ 5, $ 8, $ 12, $ 17, $ 20, $ 42, $ 100, или $ 200 Это означает, что музыкант получает только роялти чеки в количествах, указанных выше. Мне было интересно, как бы я идти о вычислении общего числа возможных путей музыкант может получить оплаченные накопить $ 1000? Есть некоторые ограничения / разрешенные предположения в этой задаче. К ним относятся: (1) Там нет ограничения на общей сумме «сдержки» музыкант может получить, чтобы получить $ 1000. Например, музыкант может получить 1000 $ 1 чеки, 5 $ 200 проверок, или 10 $ 20 проверок и 4 $ 200 чеков, и т.д. и т.п. (2) В (1) следует, вы можете получить кратные любых проверок (на самом деле, сумма всех особых вариантов проверки составляет $ 405, что делает это условие необходимо, чтобы накопить $ 1000). (3) вопросы заказа. Получение оплаты $ 200, $ 200, $ 100, $ 100, $ 100, $ 100, $ 100 и $ 100 это другая "решение", чем $ 100, $ 100, $ 100, $ 100, $ 100, $ 100, $ 200 и $ 200, который также отличается "решение" чем $ 200, $ 100, $ 100, $ 200, $ 100, $ 100, $ 100, $ 100, несмотря на то, оба раствора содержат 6 $ 100 чеков и 2 $ 200 чеков. Помните, музыкант получает деньги чеки «время от времени», поэтому порядок проверки приема делает для возможности различных решений (подстановок). Я заинтересован в поиске только общее количество решений, чтобы решить эту проблему с заданными возможностями проверки, не печатает их. Это мой подход до сих пор: Определение переменных, представляющих возможности проверки (напр. x1 = 1, x2 = 5, х3 = 8, и т.д. и т.п.) инкорпорировать некоторые, если-то заявление, которое проверяет, если множество кратных x1, x2, x3, ... хп равна 1000 Если это произойдет, добавьте 1 до некоторых переменного счетчика После того как все итерации исчерпаны / любые петли границ закончены, отобразить значение счетчика. Тем не менее, я не знаю, как включить x1, x2, x3 и их перестановки в данном уравнении, и я не знаю, как решить такое уравнение.
Alvin Nunez
1

голосов
1

ответ
194

Просмотры

Найти общее количество уникальных перестановок полукокса []?

Так что я работаю над небольшим проектом, и я хочу написать метод, который вычисляет общее количество возможных уникальных перестановок полукокса []. Формула для этого было бы п! / Возможные дубликаты Значение, если у меня было слово ириски было бы 6! / (2! * 2!) Как есть всего 6 букв и 2 дублирующие буквы, каждый показывают дважды. Мой первый вопрос там, кажется, не является стандартным методом для вычисления факториала. Кроме того, единственный способ, которым я могу думать, чтобы выяснить возможные дубликаты, чтобы просмотреть весь массив и отслеживать, сколько раз каждая буква появляется. Есть ли лучше / более эффективный способ сделать это? Все, что мне нужно просто как возвращение является общим количеством возможных уникальных перестановок.
Ahley
1

голосов
2

ответ
98

Просмотры

рекурсивный алгоритм печатать данный дисплей?

Я работаю над проблемой, касающейся рекурсии. Я должен пройти в два Интсе в функцию, которые представляют собой ряд N объектов и значений М, что я должен найти все перестановки. Я также дал образец того, что вывод должен выглядеть недействительных perm_rec_1 (Int N, Int nr_values) и на выходе это, как предполагается печатать в: Вызывается: perm_rec_1 (3, 2); 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1 Я понимаю понятие рекурсии с помощью функции подкачки, чтобы изменить порядки строк, чтобы найти все перестановки строки, но Я уверен в том, как применить его здесь, или если она даже может. Похоже, что изменения массива путем изменения конца массива, увеличивая элемент одного до nr_vals-1. любая помощь будет оценена, и спасибо за ваше время.
JustaRedShirt
1

голосов
1

ответ
503

Просмотры

Dynamic Nested for loop using recursion (All Permutations)

I was trying to implement something like this. I have bunch of lists. Each list has certain numbers. A - 1,2,3 B - 4,5 C - 6,7,8 I want to find all permutations of A, B, C list That is: 1,4,6 1,4,7 1,4,8 1,5,6 1,5,7 1,5,8 2,4,6 and so on... I could have done this using for loop, but the number of lists are not static. So I tried using recursion. Here is what I tried: Calling : nested(number_of_lists,0, array list of array, current_permutation); And the function: static void nested(int depth, int index, ArrayList< ArrayList > list, ArrayList curr) { if(depth==0) { ArrayList x = new ArrayList(); int i; for( i=0;i
Jay Patel

Просмотр дополнительных вопросов