Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки


Правила форума


В этом разделе нельзя создавать новые темы.

Если Вы хотите задать новый вопрос, то не дописывайте его в существующую тему, а создайте новую в корневом разделе "Помогите решить/разобраться (М)".

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

Не ищите на этом форуме халяву, правила запрещают участникам публиковать готовые решения стандартных учебных задач. Автор вопроса обязан привести свои попытки решения и указать конкретные затруднения.

Обязательно просмотрите тему Правила данного раздела, иначе Ваша тема может быть удалена или перемещена в Карантин, а Вы так и не узнаете, почему.



Новая тема Ответить
 Как пронумеровать неупорядоченные выборки


06/07/14
14
Всем, привет!

Нужно пронумеровать неупорядоченные выборки. Например можно выбрать 2 карты из колоды 52 карты $C(n, k) = C(52, 2) = 1326 $-ю способами. Нужно теперь пронумеровать эти способы, т.е. по числу от 1 до 1326 получить 2 карты и по двум картам получить их номер от 1 до 1326.

Подскажите, в каком направлении двигаться.

Профиль
 Re: Как пронумеровать неупорядоченные выборки
Заслуженный участник


07/08/23
1863
Тут есть готовый алгоритм: http://www.e-maxx-ru.1gb.ru/algo/generating_combinations. Правда, он просто перечисляет сочетания в лексикографическом порядке. По идее, несложно напрямую вычислять сочетание по номеру и номер по сочетанию, если заранее посчитать кусок треугольника Паскаля.

Профиль
 Re: Как пронумеровать неупорядоченные выборки


05/09/16
14200
Пусть сочетания отсортированы лексикографически, то есть
Код:
N     K1 K2
1     01 02
2     01 03
3     01 04
4     01 05
5     01 06
...
841   21 32
842   21 33
843   21 34
844   21 35
...
1324  50 51
1325  50 52
1326  51 52

Пусть $n$ номер сочетания из списка выше.
Тогда номер первой карты
$c_1(n)=\left\lfloor52.5-\sqrt{0.25+2(1327-n)}\right\rfloor$
Номер второй карты
$c_2(n)=n+c_1(n)+\dfrac12(c_1(n)-53)(c_1(n)-52)-1326$
Наверняка там можно изящней записать всё.

Обратно (номер сочетания по входящим в него картам) тоже можно посчитать.
Сперва сортируем карты по возрастанию, т.е. если даны карты $x,y$ то $c_1=min(x,y)$ и $c_2=max(x,y)$
Ну дальше понятно: считаем смещение $r(c_1)=1327-\dfrac12(c_1-53)(c_1-52)$ где начинаются сочетания с первой картой, к нему прибавляем модуль разности т.е. $|x-y|$ получаем номер сочетания как $n(c_1,c_2)=1326-\dfrac12(c_1-53)(c_1-52)+c_2-c_1$

Ну это легко если сочетание из двух карт.
Если больше чем двух - думать надо. :mrgreen:
Но общая тема такая, что сортируем (нумеруем) сочетания в лексикографическом порядке, перед этим в самих сочетаниях сортируя карты по возрастанию.

Профиль
 Re: Как пронумеровать неупорядоченные выборки
Модератор
Аватара пользователя


11/01/06
5779
math123 в сообщении #1652464 писал(а):
Всем, привет!

Нужно пронумеровать неупорядоченные выборки. Например можно выбрать 2 карты из колоды 52 карты $C(n, k) = C(52, 2) = 1326 $-ю способами. Нужно теперь пронумеровать эти способы, т.е. по числу от 1 до 1326 получить 2 карты и по двум картам получить их номер от 1 до 1326.

Подскажите, в каком направлении двигаться.

См. например тут: https://www.rsdn.org/article/alg/Combine.xml#E5NAC

Профиль
Показать сообщения за:  Поле сортировки  
Новая тема Ответить  [ Сообщений: 4 ] 

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей



Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group