ФорумПрограммированиеJavaScript → Вычисление комбинаций по факториалу

Вычисление комбинаций по факториалу

  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 12 мая 2009 г. 15:11, спустя 11 минут 13 секунд

    скрипт в студию
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 12 мая 2009 г. 15:13, спустя 1 минуту 41 секунду

    http://pyha.ru/forum/topic/2446.msg45056#msg45056
    Сапожник без сапог
  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 12 мая 2009 г. 15:15, спустя 2 минуты 5 секунд

    куль
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 12 мая 2009 г. 15:16, спустя 35 секунд


    куль
    можно и без массивов, но я люблю массивы.
    Сапожник без сапог
  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 12 мая 2009 г. 15:28, спустя 12 минут 26 секунд

    я люблю скорость
    если работает быстро (и код читабелен) то все ништяк
  • ghost

    Сообщения: 883 Репутация: N Группа: Джедаи

    Spritz 17 мая 2009 г. 12:38, спустя 4 дня 21 час 10 минут


    <?
    $data = array("Раз","Два","Три");

    $wdata = array_merge($data,$data);
    $count = count($data);

    $result = array();
    foreach($data as $i=>$v)
    {
    $c = $wdata;
    unset($c[$i],$c[$i+$count]);
    $c = array_values($c);

    for($j=0;$j<$count-1;$j++)
    {
    $return[] = $v."-".join("-",array_slice($c,$j,$count-1));
    }
    }

    echo join("\n",$return);


    ну и у мну пиздец код конечно, но как вариант может и пойдет :))

    имхо главное - прозрачность кода.

    Раз-Два-Три
    Раз-Три-Два
    Два-Раз-Три
    Два-Три-Раз
    Три-Раз-Два
    Три-Два-Раз



    код пойдёт только для 1,2,3
    для 1,2,3,4 - видим
    1 - 2 - 3 - 4
    1 - 3 - 4 - 2
    1 - 4 - 2 - 3
    2 - 1 - 3 - 4
    2 - 3 - 4 - 1
    2 - 4 - 1 - 3
    3 - 1 - 2 - 4
    3 - 2 - 4 - 1
    3 - 4 - 1 - 2
    4 - 1 - 2 - 3
    4 - 2 - 3 - 1
    4 - 3 - 1 - 2

    очевидно комбинации 1-2-4-3 нет, и еще нескольких
  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 17 мая 2009 г. 12:53, спустя 14 минут 7 секунд

    ghost, кул! никто больше похоже не проверял
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 17 мая 2009 г. 13:10, спустя 17 минут 7 секунд

    ghost, понимаешь, эдво такие результаты и просил. мне то похуй что генерить
    Сапожник без сапог
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 17 мая 2009 г. 13:10, спустя 20 секунд

    Мне надо, например из 3-х слов
    Цитата:
    раз, два, три


    составить комбинации
    Цитата:
    раз-два-три
    раз-три-два
    два-раз-три
    два-три-раз
    три-раз-два
    три-два-раз
    Сапожник без сапог
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 17 мая 2009 г. 13:11, спустя 42 секунды

    <?
    $data = array("Раз","Два","Три");

    $wdata = array_merge($data,$data);
    $count = count($data);

    $result = array();
    foreach($data as $i=>$v)
    {
    for($j=0;$j<$count;$j++)
    {
    $return[] = $v."-".join("-",array_slice($wdata,$j,$count-1));
    }
    }

    echo join("\n",$return);


    -1 убери из второго фора + ансет вытри и будет тебе как ты говоришь :)
    Сапожник без сапог
  • ghost

    Сообщения: 883 Репутация: N Группа: Джедаи

    Spritz 17 мая 2009 г. 13:21, спустя 10 минут 6 секунд

    не, не будет.. тут либо рекурсию нужно, либо лишние циклы.. универсальной формулы в комбинаторике нет, и 2-я циклами ( множество размерности n^2) всех перестановок (множество размерности n!) ты не получишь
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 17 мая 2009 г. 13:30, спустя 8 минут 59 секунд

    ghost, ты права наверно
    Сапожник без сапог
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 17 мая 2009 г. 13:30, спустя 19 секунд

    думать не хочется, устал за сегодня уже)))

    может завтра вернусь покопать эту тему)
    Сапожник без сапог
  • ghost

    Сообщения: 883 Репутация: N Группа: Джедаи

    Spritz 17 мая 2009 г. 14:25, спустя 54 минуты 58 секунд

    че тут думать? тут трясти надо :)

    <?php
    $arr = array(1, 2, 3, 4, 5);

    function shift($arr, $str) {
    $rez = '';
    if (count($arr)==1) return $str.($str ? ' - ' : '').array_shift($arr)."<br />";
    foreach ($arr as $key=>$val) {
    $arr1 = $arr;
    unset($arr1[$key]);
    $str1 = $str.($str ? ' - ' : '').$val;
    $rez .= shift($arr1, $str1);
    }
    return $rez;
    }
    $rez = shift($arr, '');
    print $rez;
    ?>
  • ghost

    Сообщения: 883 Репутация: N Группа: Джедаи

    Spritz 17 мая 2009 г. 15:03, спустя 38 минут 9 секунд


    не, не будет.. тут либо рекурсию нужно, либо лишние циклы.. универсальной формулы в комбинаторике нет, и 2-я циклами ( множество размерности n^2) всех перестановок (множество размерности n!) ты не получишь

    да, пардон, не размерности а мощности. размерность это из другой оперы)

Пожалуйста, авторизуйтесь, чтобы написать комментарий!