[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Алгоритм вывода всех комбинаций события C n по k
Страницы: 1, 2
winrol
Нужен алгоритм который бы выводил комбинации n по k. (Без повторов) Например k=2,n=3,numbers=123; Результат: 12 13 23. Тоесть что б без повторов 23 и 32 - одно и тоже. k=3, n=4,numbers=1234; 123 124 134 234. Может кто-то делал подобное или есть какие-то мысли, буду благодарен.

_____________
Заработай легко - много видов проверенного заработка, как Wap та и Web.
Ramzes_Ra
это можно банально на php сделать с помощью if else или foreach.. я подобную штуку делал для рассчёта футбольных матчей на весь сезон, по нажатию одной кнопки у меня все 30 туров рассчитывались, матчи без повторов 1 дома, 1 на выезде у каждой команды
SDV
Цитата (Ramzes_Ra @ 3.09.2013 - 22:36)
это можно банально на php сделать с помощью if else или foreach.. я подобную штуку делал для рассчёта футбольных матчей на весь сезон, по нажатию одной кнопки у меня все 30 туров рассчитывались, матчи без повторов 1 дома, 1 на выезде у каждой команды

раз все так просто то что не напишешь как ты сделал?
winrol
Говорю же что k может быть огромным и numbers тоже, то тут придется много цыклов, не вариант.

_____________
Заработай легко - много видов проверенного заработка, как Wap та и Web.
winrol
n - это количество чисел, да оно там не сильно играет роль. Главное k и numbers тоесть комбинации длиной k из numbers , то есть 4-значние комбинации из 6-значных данных, - это как пример 1234, 1235, 1236 и т.д. k и numbers могут быть разными. Думаю в сторону рекурсии. как-то увеличивать предыдущее значение +1 и смещатся к 0-му елементу строки. ТОесть numbers-123 k=2, сначала идем сначала: 12, увеличиваем с конца 13, если дошли до конца 3- последнее, то идем к началу и увеличиваем 1на +1 то есть 23. Как-от так. хз короче, это все лишь мысли.

_____________
Заработай легко - много видов проверенного заработка, как Wap та и Web.
Ramzes_Ra
Цитата (SDV @ 3.09.2013 - 22:43)
Цитата (Ramzes_Ra @ 3.09.2013 - 22:36)
это можно банально на php сделать с помощью if else или foreach.. я подобную штуку делал для рассчёта футбольных матчей на весь сезон, по нажатию одной кнопки у меня все 30 туров рассчитывались, матчи без повторов 1 дома, 1 на выезде у каждой команды

раз все так просто то что не напишешь как ты сделал?

Это интеллектуальный труд.
Я не говорю что это просто. Я говорю, что это можно делать простыми методами, используя самые банальные знания.
Но кроме знаний нужно усердие и время, так как это не быстро написать подобный скрипт, нужно голову включить и уметь оперировать своими знаниями.
winrol
Ну так я прошу о помощи, 2 головы лучше чем одна.

_____________
Заработай легко - много видов проверенного заработка, как Wap та и Web.
Ramzes_Ra
Цитата (winrol @ 3.09.2013 - 22:59)
Ну так я прошу о помощи, 2 головы лучше чем одна.

Эх, а я спать хотел))) Сейчас набросаю, только подумать надо..
Ramzes_Ra
Цитата
k=3, n=4,numbers=1234; 123 124 134 234

а количество генерируемых чисел максимально возможное разное? или тоже определено?
winrol
k, numbers - могут быть разными, max k-15, max n(16), тоесть 16 чисел, но говорю 16 циклов не оч хороший вариант.

_____________
Заработай легко - много видов проверенного заработка, как Wap та и Web.
alted
Эх, я думал, сначала, что все макс. возможно уникальные нужно найти... Набросал примерно, наверное как то так. Причем, можно даже строку задать, а не число. ( должна подойти, тем более, если значения не должны быть макс. возможно кол-ва и уникальными).


$k = 3;
$a = '123456656t';



$a1 = $a.$a;

for ($i=0; $i<strlen($a); $i++) {
$b[$i] = substr($a1, $i, 1);//все цифры
}

foreach ($b as $edin) {//перебираем по 1-й
for ($i=0; $i<strlen($a); $i++) {
$p[$k][] = $edin.substr($a1, $i, $k-1);//захватываем в т.ч. и 1-ю цифру
}
}


foreach ($p[$k] as $ed) {//делаем уник
for ($i=0; $i<strlen($ed); $i++) {
$str[$i] = (int)substr($ed, $i, 1);//все цифры
}

asort ($str);

$strn = null;
foreach ($str as $zn_c) {
$strn .= $zn_c;//все цифры
}

$d[$k][$ed] = $strn;
}

$d[$k] = array_unique($d[$k]);//удаляем неуникальные значения// все!

print_r($d); //в ключах массива все уник. числа...
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.