За последние 24 часа нас посетили 22469 программистов и 1057 роботов. Сейчас ищут 650 программистов ...

Комбинаторика решает =)

Тема в разделе "Прочее", создана пользователем Elkaz, 28 ноя 2008.

  1. ShamahN

    ShamahN Активный пользователь

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    Я, честно говоря, не пойму задание. Нужно вывести все возможные варианты элементов массива? или только посчитать их количество? с повторениями, без повторений?
     
  2. ShamahN

    ShamahN Активный пользователь

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
  3. блудный сын

    блудный сын Активный пользователь

    С нами с:
    18 июн 2008
    Сообщения:
    632
    Симпатии:
    0
    А Elkaz говорит что все умные люди поняли задачу :) Так что нам с Вами в этой теме делать нечего :)
     
  4. ShamahN

    ShamahN Активный пользователь

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    блудный сын, ага... пошли пить пиво! пускай сами себе моск ломают. :) я ссылку дал. Пусть спасибо скажут!
     
  5. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Я понял только потому, что он в аське мне объяснил.
    Т.е.
    a
    b
    c
    d
    aa
    ab
    ac
    ad
    ba
    bb
    bc
    ...
     
  6. ShamahN

    ShamahN Активный пользователь

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    сразу видно, вчера была пятница. От объяснений становится еще непонятнее. Меня в заблужнения вводит факториал. Это, насколько я помню, перестановки без повторений. Сейчас попробую сформулировать, а Вы только скажите, верно я понял или нет. Есть массив (а, б, в)
    нужно получить:

    ааа
    ааб
    аав
    аба
    абб
    абв
    ава
    авб
    авв
    баа
    баб
    бав
    бба
    ббб
    ббв
    бва
    бвб
    бвв
    ваа
    ваб
    вав
    вба
    вбб
    вбв
    вва
    ввб
    ввв
    так или нет?
    Второй вопрос: элементов в таких наборах должно быть сколько??????? 3?? меньше или равно три??любое количество! :)
     
  7. ShamahN

    ShamahN Активный пользователь

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    все.. в общем, хватайте ссылку которую дал... изменяйте немного последний вариант скрипта (нужно добавить внешний цикл по количеству элементов) и радуйтесь жизни!
    Все... жена зовет кушать :)
     
  8. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Верно, но + к этому должны быть помимо тройных комбинаций еще двойные и одинарные.

    В твоем случае должно быть 3^1 + 3^2 + 3^3 = 39

    Так я уже выложил рабочий вариант.
     
  9. ShamahN

    ShamahN Активный пользователь

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    Kreker, аа.. :) тогда - закрыть тему!!
    суббота это сильно....
     
  10. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    Да, с 26 символами, конечно, не потягаться =)
    Хочу купить один из последних интеловских серверов за сколько-то там миллионов долларов)))))))))))
     
  11. kostyl

    kostyl Guest

  12. S.t.A.M.

    S.t.A.M. Активный пользователь

    С нами с:
    10 сен 2007
    Сообщения:
    1.041
    Симпатии:
    0
    На сколько я помню формула такая: кол-во символов возведенная в степень возможных значений символа.
    Т.е. просто 3^3 т.е. = 27! Это подтверждает листинг из первого поста!

    ну и вдогонку: двоичная система это два [2]значения бита: 0 или 1. 1 байт - это восемь бит [8] максимальное десятизначное число для байта = 2^8 = 256!
    так вот тоже самое и для других систем исчисления.
     
  13. S.t.A.M.

    S.t.A.M. Активный пользователь

    С нами с:
    10 сен 2007
    Сообщения:
    1.041
    Симпатии:
    0
    а факториал насколько я помню это вообще другое! Я еще в школе не смог добиться от математички нафиг он нужен!
    А именно: !5 (факториал 5-ти)... или так: 5! кароче уже не помню где ставится знак "!"
    !5 = 1*2*3*4*5 = 120
     
  14. блудный сын

    блудный сын Активный пользователь

    С нами с:
    18 июн 2008
    Сообщения:
    632
    Симпатии:
    0
    Смифно :) Правильно его ставить после числа. Без факториала в комбинаторике никуда. А в школьных программах он может не использоваться, поэтому училка и динамила.
     
  15. S.t.A.M.

    S.t.A.M. Активный пользователь

    С нами с:
    10 сен 2007
    Сообщения:
    1.041
    Симпатии:
    0
    у меня алиби - я актер! :-D
     
  16. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    S.t.A.M.
    Все верно, но это для случая, когда числа будут трехзначными.
    Код (Text):
    1. 111 121 131 211 221 231 311 321 331
    2. 112 122 132 212 222 232 311 322 332
    3. 113 123 133 213 223 233 313 323 333
    А тут у нас числа бывают и двухзначными, и однозначными:
    Код (Text):
    1.  
    2. Array
    3. (
    4.     [0] => 1
    5.     [1] => 2
    6.     [2] => 3
    7.     [3] => 11
    8.     [4] => 12
    9.     [5] => 13
    10.     [6] => 21
    11.     [7] => 22
    12.     [8] => 23
    13.     [9] => 31
    14.     [10] => 32
    15.     [11] => 33
    16.     [12] => 111
    17.     [13] => 112
    18.     [14] => 113
    19.     [15] => 121
    20.     [16] => 122
    21.     [17] => 123
    22.     [18] => 131
    23.     [19] => 132
    24.     [20] => 133
    25.     [21] => 211
    26.     [22] => 212
    27.     [23] => 213
    28.     [24] => 221
    29.     [25] => 222
    30.     [26] => 223
    31.     [27] => 231
    32.     [28] => 232
    33.     [29] => 233
    34.     [30] => 311
    35.     [31] => 312
    36.     [32] => 313
    37.     [33] => 321
    38.     [34] => 322
    39.     [35] => 323
    40.     [36] => 331
    41.     [37] => 332
    42.     [38] => 333
    43. )
    Факториал часто применяется в смачных формулах из разных областей наук.
     
  17. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Для тех, кто забыл: http://www.nsu.ru/mmf/tvims/chernova/tv/lec/node3.html

    Автора интересовало: Выбор с возвращением и с учётом порядка
    Так что да, это кол-во элементов в степени кол-ва выбранных, другими словами из описания:
    Теорема 4. Общее количество различных наборов при выборе k элементов из n с возвращением и с учётом порядка равняется n^k.
     
  18. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
  19. Ligren

    Ligren Новичок

    С нами с:
    29 сен 2020
    Сообщения:
    3
    Симпатии:
    0
    Тема старая, а проблемы актуальные. Взял код из темы, и модернизировал. Жор памяти огромный, но хотя бы удалось минимизировать

    По скорости тоже есть улучшения
    time: 0.002428 sec
    Memory: 4 mb

    PHP:
    1. ini_set('memory_limit', '-1'); // Уберём ограничения по памяти
    2. set_time_limit(0); // Уберём лимит времени
    3.  
    4. $usage = memory_get_usage(true);
    5.  
    6. $currentArrOrig = ['a', 'b', 'c', 'd', 'e', 'g'];
    7.  
    8. $listAllOut = $currentArrOrig; // Массив вывода
    9. $currentArr = $currentArrOrig; // Текущий массив
    10.  
    11. $m = microtime(1); // Возьмём метку времени запуска
    12.  
    13. $size = count($currentArrOrig);
    14. for ($count = 2; $count <= $size; $count++) {
    15.   $newArr = []; // На каждую итерацию по новой
    16.   foreach($currentArr as $gg) { // возьмём текущий, и дополним следующими
    17.   for ($x = 0; $x < $size; $x++) {
    18.   $newArr[] = $gg . $currentArrOrig[$x]; // дополняем оригинальными
    19.   }
    20.   }
    21.   $listAllOut = array_merge($listAllOut, $newArr); // Если убрать, то жор уйдёт
    22.  
    23.   $currentArr = $newArr; // Обновим текущий массив
    24. }
    25. $time= sprintf('time: %f sec', microtime(1) - $m);
    26.  
    27. print_r($listAllOut );
    28.  
    29. echo $time, PHP_EOL, 'Memory: ', convert(memory_get_usage(true) - $usage);
    30.  
    31.  
    32.  
    33.  
    34. function convert($size)
    35. {
    36.   $unit=array('b','kb','mb','gb','tb','pb');
    37.   return @round($size/pow(1024,($i=floor(log($size,1024)))),2).' '.$unit[$i];
    38. }
     
  20. dcc0

    dcc0 Активный пользователь

    С нами с:
    27 июн 2014
    Сообщения:
    209
    Симпатии:
    4
    У автора или размещения с повторением или сочетания с повторением. Судя по объяснению
    Kreker- это размещения. Есть два варианта (как минимум) их порождения.
    Ссылка на мою же статью, где есть код и того, и другого алгоритма:
    https://habr.com/ru/post/311934/
     
  21. dcc0

    dcc0 Активный пользователь

    С нами с:
    27 июн 2014
    Сообщения:
    209
    Симпатии:
    4
    Не стоит гадать. Избавимся от конспирологии, теории заговоров и мыслях о расшифровке секретных кодов.
    Вся переборная комбинаторика связана в первую очередь с шахматами, во вторую очередь с поиском символьных комбинаций, что может быть применимо в поисковых задачах и расшифровке, допустим, какой-либо древней алфавитной, слоговой, иероглифической письменности.