Регистрация
Регистрация Поиск Сообщество  
CGM > Всякая всячина > Игра вообще
Опции темы

Математика. Генерация номера сочетания по самому сочетанию.

Важные объявления
Старый 06.12.2004, 10:04     TS Старый   #1 (permalink)
Ветеран
 
Аватар для Mariner
 
Регистрация: 12.02.2004
Адрес: Россия, УРФО
Сообщений: 1,399
Приветствую!

Использую немного измененный алгоритм генерации сочетаний, приведенный на
[Зарегистрироваться?]

Теперь интересует обратная задача.
Т.е. по виду сочетания, определить его номер.

Или другими словами. Необходим алгоритм нумерации сочетаний.
Пример.
С(13,5)=1287
Генерацию сочетаний начинаем с (1,2,3,4,5). У него будет номер 1.
Какой номер будет у сочетания (1,2,3,4,10)?
__________________
Mariner

Западное полушарие Марса рассечено на протяжении 4 000 км вдоль экватора рифтовыми долинами Маринер - крупнейшим поясом разломов на планете.
Mariner вне форума      
Старый 06.12.2004, 13:29   #2 (permalink)
Увлечённый
 
Регистрация: 13.02.2004
Адрес: Moscow
Сообщений: 556
Привет,

Всего C(13;5) комбинаций.
Имеем X(i1,i2,i3,i4,i5) комбинацию.

Формула для индекса комбинации:
C (13; 5) - C (13 - i1 + 1; 5) +
+ C (13 - i1; 4) - C (13 - i2 + 1; 4) +
+ C (13 - i2; 3) - C (13 - i3 + 1; 3) +
+ C (13 - i3; 2) - C (13 - i4 + 1; 2) +
+ C (13 - i4; 1) - C (13 - i5 + 1; 1) + 1

Массив C(13;5) должен быть предопределён заранее.

Удачи,
Jack Daw
Jack Daw вне форума      
Старый 06.12.2004, 13:32   #3 (permalink)
Бессмертный
 
Аватар для Grey
 
Регистрация: 30.04.2004
Сообщений: 3,612
Делал что-то подобное лет 20 назад (увлекался спортлото ). А тебе зачем, если не секрет?
__________________
Arthur Grey
Grey вне форума      
Старый 06.12.2004, 14:14     TS Старый   #4 (permalink)
Ветеран
 
Аватар для Mariner
 
Регистрация: 12.02.2004
Адрес: Россия, УРФО
Сообщений: 1,399
Приветствую!

2 JackDaw

Огромное спасибо за формулу!

Еще бы ссылочку на источник с теорией, для полного понимания.

Нашел пока только вот это
[Зарегистрироваться?] tions1-2004
но пока не смог разобраться в определении num().
__________________
Mariner

Западное полушарие Марса рассечено на протяжении 4 000 км вдоль экватора рифтовыми долинами Маринер - крупнейшим поясом разломов на планете.
Mariner вне форума      
Старый 06.12.2004, 14:16     TS Старый   #5 (permalink)
Ветеран
 
Аватар для Mariner
 
Регистрация: 12.02.2004
Адрес: Россия, УРФО
Сообщений: 1,399
Приветствую!

2 Grey
Цитата:
Сообщение от Цитата:
Делал что-то подобное лет 20 назад (увлекался спортлото Smile). А тебе зачем, если не секрет?
Унифицировать процедуру сжатия по мастям для анализа покерных ракладов.
__________________
Mariner

Западное полушарие Марса рассечено на протяжении 4 000 км вдоль экватора рифтовыми долинами Маринер - крупнейшим поясом разломов на планете.
Mariner вне форума      
Старый 06.12.2004, 15:22   #6 (permalink)
Увлечённый
 
Регистрация: 13.02.2004
Адрес: Moscow
Сообщений: 556
Привет, Mariner.

Боюсь, ссылку на теорию дать не смогу, так как формулу выводил сам, когда занимал подобными вопросами.

Основная идея: определить сдвиг индекса от начала, последовательно для i1, i2, итд.

Последовательность рассуждений.
Всего С(X;Y) кобминаций.

Когда значение i1 меняется с 1 на 2, то остаются такие комбинации:
2 3 4 5 6
2 3 4 5 7
.............
9 10 11 12 13
Иными словами, С(X-1;Y)

Когда значение i1 меняется 3, то остаются такие комбинации:
3 4 5 6 7
3 4 5 6 8
.............
9 10 11 12 13
Иными словами, С(X-2;Y)
Заметим, что из исходного числа элементов X вычитается значение i1-1

Итак, чтобы определить сдвиг индекса по значению первого элемента, надо из общего числа комбинаций вычесть оставшиеся
С(X;Y) + С(X - i1 + 1;Y)

Далее находим сдвиг индекса по значению второго элемента.
Отбросим все значения меньше i1, уберем 1 столбец.
. 4 5 6 7
. 4 5 6 8
.............
. 10 11 12 13
Исходные условия такие же, как и для 1-го элемента, только вместо X используем (X - i1), вместо i1 используем (i2-i1), a вместо Y используем (Y - 1),
Подставляем в формулу
С(X - i1;Y-1) + С((X -i1) - (i2-i1) + 1;Y-1) = С(X - i1;Y-1) + С(X - i2 + 1;Y-1) 'произвели сокращение в формуле

Аналогично находим сдвиг для 3, 4 и 5 элемента.
Итого:
С(X;Y) + С(X - i1 + 1;Y) +
+ С(X - i1;Y-1) + С(X - i2 + 1;Y-1) +
+ С(X - i2;Y-2) + С(X - i3 + 1;Y-2) +
+ ,,,,
+ С(X - i(y-1); 1) + С(X - i(y) + 1; 1) + 1

Удачи,
Jack Daw

P.S. Кстати, протестируй формулу на своих значениях, всё-таки давно её выводил, мало ли что.
Jack Daw вне форума      

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Генерация колоды в онлайне Yura Блэкджек 3 11.05.2011 22:38
Вопрос по сочетанию стат AF\WTSD\W$SD diman000 Безлимитный холдем средних и высоких бай-инов 4 27.02.2010 07:01
С каких пор можно править рейтинг самому себе. dyoma О жизни форума 5 01.10.2009 15:07
есть ли смысл становится самому себе аффилейтом? proplay Около покерного стола 28 22.08.2009 00:09
Спам от моего ICQ номера Fedoskin Программное обеспечение 8 11.06.2009 18:44



Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Выкл.
Pingbacks are Выкл.
Refbacks are Выкл.

Быстрый переход
Правила форумов CGM Контакты Справка Обратная связь CGM.ru Архив Вверх Главная
 
Использование материалов сайта разрешено только при наличии активной ссылки на источник.
Все права на картинки и тексты принадлежат Информационному агентству CGM и их ПАРТНЕРАМ. Политика конфидециальности
CGM.ru на Youtube CGM.ru на Google+ CGM.ru в Twitter CGM.ru на Facebook CGM.ru в vKontakte CGM.ru в Instagram

В сотрудничестве с Pokeroff.ru
Текущее время: 07:35. Часовой пояс GMT +3.
Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, vBulletin Solutions, Inc. Перевод: zCarot