Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> генератор имен. нужен алгоритм 
:(
    Опции темы
lancelot555
Дата 22.1.2009, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 19.2.2005

Репутация: нет
Всего: нет



Входные данные:  Массив слов...

на выходе нужно получить все возможные комбинации этих слов с заданной сложностью(кол-во слов, которое может быть в комбинации)
Перебором не хотелось бы делать..  Есть ли какие то алгоритмы для этого? 
Вроде как кол-во возможных вариантов комбинаций для сложности 1 равно кол-ву слов факториал..
а если сложность выше?

--------------------
Hи что так не поpтит цель, как попадание! =)
PM MAIL   Вверх
masp
Дата 22.1.2009, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 22.2.2007

Репутация: нет
Всего: 2



я толком ничего не понял ... можно поподробнее
как вы будете имена генерить ?

PM MAIL ICQ   Вверх
lancelot555
Дата 22.1.2009, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 19.2.2005

Репутация: нет
Всего: нет



наверно смутило слово имен...

входные данные:

1.      hello
         motor
         car
         light

2.      2

1 это массив слов, 2ое сложность..

нужно получить на выходе все комбинации слов складывая их попарно...   т.е. hello-motor  car-motor и т.д.  ( вроде их кол-во будет N! )
Сложность может быть любой.. например если 3 :
должно быть на выходе hello-motor-car    motor-car-hello     car-motor-hello  и т.п.  тут уже кучи вариантов...




Это сообщение отредактировал(а) lancelot555 - 22.1.2009, 17:30
--------------------
Hи что так не поpтит цель, как попадание! =)
PM MAIL   Вверх
Jamon
Дата 22.1.2009, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 1.9.2007

Репутация: нет
Всего: нет



думаю, можно сделать дерево:

на первом уровне у нас n входных элементов
на втором - к каждому элементу из первого уровня привязываются все остальные элементы, кроме него самого (т.к., по всей видимости, в комбинации не должно быть повторов).

Далее нужно определится: hello-world и world-hello - это одна и та же комбинация или нет. В зависимости от этого нужно добавить фильтры при построени очередного уровня (чтобы фильтровать повторы - если считается, что это одинаковые комбинации).

Сложность в данном случае - число уровней, соответственно, нужно делать алгоритм рекурсивным.

Затем для построения коллекции самих комбинаций нужно будет обойти все ветки дерева.

А чтобы посчитать число комбинаций, это вроде в теорвере называется выборки - там должна быть формула.
PM MAIL   Вверх
bars80080
Дата 22.1.2009, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



была уже такая тема, один товарищ её обозвал комбинаторикой. только ему нужен был пример с символами, думаю не сложно будет переделать на слова:

Код
<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 = 3;

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

var_dump($a);

?>
</pre>

PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0459 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.