Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

проблема с комбинаторикой... ;-)

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Математика
Предыдущая тема :: Следующая тема  
Автор Сообщение
МАКСИМ.



Зарегистрирован: 03.03.2006
Сообщения: 9
Откуда: СПб

СообщениеДобавлено: Пт Мар 03 2006 03:13    Заголовок сообщения: проблема с комбинаторикой... ;-) Ответить с цитатой

Приветствую всех!
у меня есть проблема в создании алгоритма.
кто может мне помочь с какой задачкой?!

дан массив А[n] = { x[1],x[2],..x[i]..,x[n] },
где X[1] - 1-й элемент в массиве,
X[i] - i-й элемент в массиве,
.........................................
n - кол-во натур. чисел.

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

А то я уже бьюсь ЦЕЛЫЙ месяц!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
beliy



Зарегистрирован: 10.12.2004
Сообщения: 124
Откуда: Москва

СообщениеДобавлено: Пт Мар 03 2006 18:01    Заголовок сообщения: Ответить с цитатой

самое простое на вскидку:
знаете как карты "бутербродом" перемешивают?
разделяем входной массив на 2 половины:

Код:
a1 = {x[1]..x[n/2-1]} a1 = {x[n/2]..x[n]}

и создаем выходной массив, пихая в него поочередно элементы из каждого массива, т.e.:

Код:
output  = {x[n/2], x[1], x[n/2 +1], x[2], ..... , x[n], x[n/2 - 1]}
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
GREA



Зарегистрирован: 14.05.2003
Сообщения: 758
Откуда: Новосибирск

СообщениеДобавлено: Вс Мар 05 2006 00:55    Заголовок сообщения: Ответить с цитатой

Периодически буду повторяться комбинации, думаю, таким способом

Самые простые способы перетасовки. Надежные но очень тупые или не оптимальные по скорости:
1)
Взять первое число массива i=0. Выбрать случайно число 0<=С<n (возможно совпадет с i). Поменять местами i-ый и C-ый элемент. Повторить
(можно делать прям в текущем массиве)

На всякий случай можно сделать несколько итераций, хотя и одной вроде хватит для полноценного перемешивания.


2)
(нужен второй - выходной, пустой в начале массив)
Выбрать случайно место для первого элемента в выходном массиве и скопировать его туда. Далее - выбрать случайно место для второго элемента (кроме занятых уже мест), и повторять, пока не скопируем все элементы в выходной массив.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Aragaer



Зарегистрирован: 28.03.2005
Сообщения: 164

СообщениеДобавлено: Вс Мар 05 2006 05:02    Заголовок сообщения: Ответить с цитатой

"линейно-конгруэнтный" метод:
Выбрать число C, взаимнопростое с длиной массива и произвольное число N1. После чего i-й элемент поместить в ячейку номер C*i+N1 mod N (N - длина массива).
_________________
Open your eyes.
And Awaken.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
dipsy



Зарегистрирован: 26.01.2005
Сообщения: 424
Откуда: Н. Новгород

СообщениеДобавлено: Пн Мар 06 2006 15:03    Заголовок сообщения: Ответить с цитатой

Надо написать рекурентную функцию для n элементов.
Для двух элементов, - можно перечислить рукамии.

Для трёх и более элементов, - берём первый элемент, - ставим на первое место, остальные перемешиваем.
Берём второй, ставим на первое место, - остальные n-1 перемешиваем.
Ну и т.д. Сколько бы элементов мы не взяли, - теоретически мы можем это всё перемешать.

Ни одна комбинация не повторится.
Другое дело, - то что кол-во вычислений здесь растёт как n! ( даже ещё быстрее, но это не важно ), - а значит это решение будет считаться плохим для компьютера, - т.к. надо, чтобы кол-во вычислений росло как n^2 в худшем случае.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
grf



Зарегистрирован: 05.04.2005
Сообщения: 1242
Откуда: Москва

СообщениеДобавлено: Вт Мар 07 2006 13:57    Заголовок сообщения: Ответить с цитатой

Количество комбинаций ограничено.
Тебе необходимо перебрать все комбинации или некоторое число их?
Или необходимо создать вид случайной комбинации, когда на первый взгляд комбинации разные, но они могут повторяться, например возмем четыре числа:
1 2 3 4
2 3 4 1 х
3 2 4 1
2 3 4 1 х
4 3 1 2
2 3 1 4
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
GREA



Зарегистрирован: 14.05.2003
Сообщения: 758
Откуда: Новосибирск

СообщениеДобавлено: Пт Мар 10 2006 11:48    Заголовок сообщения: Ответить с цитатой

Aragaer писал(а):
"линейно-конгруэнтный" метод:
Выбрать число C, взаимнопростое с длиной массива и произвольное число N1. После чего i-й элемент поместить в ячейку номер C*i+N1 mod N (N - длина массива).

Возможны коллизии
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Математика Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...