Форум программистов, компьютерный форум, киберфорум
Алгоритмы
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
 Аватар для alhaos
1929 / 545 / 154
Регистрация: 20.02.2019
Сообщений: 2,663
Записей в блоге: 65

Перебор возможных вариантов выборки из массива

15.04.2021, 15:01. Показов 1081. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите пожалуйста, алгоритм генерации всех возможных выборов [n] элементов из массива в [m] элементов.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.04.2021, 15:01
Ответы с готовыми решениями:

Перебор вариантов возможных ошибок с помощью модифицированного кода Хемминга
Как такое можно сделать? Например для таких данных: Исходное слово X=1001 модифицированная проверочная таблица Хемминга: ...

Перебор всех возможных сумм массива
Добрый день. Есть задача написать процедуру на вход которой будет подаваться двумерный массив рандомной размерности. Требуется вывести все...

Перебор всех возможных вариантов массива
Добрый день. У меня такая задача, имеется два массива одинаковой размерности. Мне заведомо известно, что при правильной расстановке строк в...

5
Модератор
Эксперт функциональных языков программирования
3134 / 2281 / 469
Регистрация: 26.03.2015
Сообщений: 8,877
15.04.2021, 15:52
Делаете массив размера m для выбранных индексов.

Для получения следующего выбора:
Для всех разрядов:
Пытаемся увеличить на 1 текущий индекс. (Каждый индекс не должен превышать следующий).
Если удалось, то увеличиваем и возвращаем Истина
Если не удалось, то сбрасываем в начальное значение indexes[i] = i и переходим к следующему.
Если нельзя перейти к следующему, то возвращаем Ложь.

Например, так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
bool Next(int[] indexes, int maxIndex)
{
    int i = 0;
    while(i < indexes.Length - 1)
    {
        if(++indexes[i] < indexes[i + 1])
            return true;
        indexes[i] = i++;
    }
 
    return ++indexes[i] < maxIndex;
}
Функцию можно использовать в цикле
C#
1
do {} while(Next(indexes, m));
1
698 / 572 / 75
Регистрация: 20.09.2014
Сообщений: 3,700
15.04.2021, 20:23
Комбинаторика задает уточняющие вопросы:
1. Элементы в m-массиве повторяются?
2. Порядок элементов в выборе важен?

В зависимости от ответа на эти вопросы, даются формулы вычисления числа сочетаний, перестановок, размещений с повторением или без. Всего 6 формул и соответственно алгоритмов перебора.

Еще есть вопрос комбинаторики: "А есть ли выбор?", этот вопрос эквивалентен вопросу "m != n?". На этот вопрос в условии задачи есть ответ, на первые два - нет.
Алгоритмы искать у Д. Кнута.
0
 Аватар для alhaos
1929 / 545 / 154
Регистрация: 20.02.2019
Сообщений: 2,663
Записей в блоге: 65
15.04.2021, 20:55  [ТС]
В массиве элемента не повторяются, порядок выбранных элементов важен.

Добавлено через 2 минуты
n < m

Добавлено через 32 секунды
Shamil1, спасибо, буду вникать
0
698 / 572 / 75
Регистрация: 20.09.2014
Сообщений: 3,700
15.04.2021, 21:14
Тогда ваш случай - размещения без повторений, число элементов A(n, m) = n! / (n - m)! Алгоритмы размещений без повторений в интернете можно найти.
1
 Аватар для alhaos
1929 / 545 / 154
Регистрация: 20.02.2019
Сообщений: 2,663
Записей в блоге: 65
16.04.2021, 06:19  [ТС]
Mikhaylo, Благодарю за пояснения.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.04.2021, 06:19
Помогаю со студенческими работами здесь

Перебор всех возможных вариантов
Предположим, у меня есть список spisok = Как вывести все возможнеы комбинации длиной 3, те xxx xxy xxu .... zzz

Перебор всех возможных вариантов
Доброго всем дня! Есть задача: На вход дается строка из символов '0' '1' и '2' длиной не более 50. Нужно изменить число 0 на 1...

Перебор всех возможных вариантов в масиве
Доброй ночи. Столкнулся с проблемой нужно перебрать ВСЕ варианты (для упрощения) массива. Для примера массив (динамический)...

Перебор всех возможных вариантов (рекурсивно)
Не буду вникать в суть программы. Предположим у меня есть архивы с точками, мне нужно выбрать минимальную комбинацию, этих архивов что бы...

Перебор всех возможных вариантов фильтров
Всем привет, в общем задача следующая: Есть файлик excel в нём может быть более 1000 строк и порядка 30 столбцов (кол-во столбцов всегда...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
YAFU@home — распределённые вычисления для математики. На CPU
Programma_Boinc 20.01.2026
YAFU@home — распределённые вычисления для математики. На CPU YAFU@home — это BOINC-проект, который занимается факторизацией больших чисел и исследованием aliquot-последовательностей. Звучит. . .
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru