Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Как сделать генератор комбинаций?


Автор: kolombo777 3.12.2008, 16:00
Как сделать генератор комбинаций?
Есть такая наука - комбинаторика.
Есть строка: chars4generation = "as";
Есть число (тип int): generation_length = 2;
Строка chars4generation - это символы для генерации комбинаций.
Число generation_length - это длина генерируемой комбинации.
В этом примере должно быть так:
aa
as
sa
ss
Как сделать такой алгоритм?

Автор: Sunvas 4.12.2008, 12:13
Рекурсивно. Берешь сначала первую букву и спариваешь ее со всеми остальными. Потому вторую и т.д. При этом generation_length - это будет глубина рекурсии..

Автор: Dima 2015 4.12.2008, 14:22
Sunvas, а написать могешь?

Автор: bars80080 4.12.2008, 15:51
ну, Sunvas, ответил на вопрос "как?", а что до самого кода:

Код

<pre>
<?php
function combi($w, $len, $b = '') {
    if($len < 0) $len = 0;
    $sl = strlen($w);
    $nlen = $len - 1;
    for($i = 0; $i < $sl; $i++) {
        $s = substr($w, $i, 1);
        if($nlen > 0) { 
            $a = combi($w, $nlen, $b.$s); $c = count($a);
            for($j = 0; $j < $c; $j++) { $r[] = $a[$j]; }}
        else { $r[$i] = $b.$s; }}
    return $r;
}


$ch = 'abc';
$len = 2;

$a = combi($ch, $len);

var_dump($a);

?>
</pre>

Автор: Dima 2015 4.12.2008, 17:49
Зверюги... я чет посидел вчера, и так с ходу и не придумалось :(

Наверно туповат... )))

Автор: Sunvas 4.12.2008, 18:12
Цитата(Dima 2015 @  4.12.2008,  14:22 Найти цитируемый пост)
Sunvas, а написать могешь?

http://forum.vingrad.ru/forum/topic-113874/anchor-entry883003/30.html
Когда-то писал для делфи.. Возьми за основу smile

Автор: Dima 2015 4.12.2008, 19:25
Sunvas, хы, пасиб smile Правда я искренне надеюсь что смогу сам осилить, я вроде как шарю... более-менее. Просто щас голова забита до ужаса, оперативки не хватает блин.. учеба, работа, еще вот взял на себя смелость свой проект вести smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)