Задачка по комбинаторике. Сделать SQL запрос или алгоритм. @ DeForum.ru
DeДверь  
Логин:  
Пароль:  
  Автологин  
   
Разместить рекламу
Письмо админу
Правила | FAQ | *Поиск | Наша команда | Регистрация | Вход
 
 
 Страница 1 из 1 [ Сообщений: 7 ] 
*   Список форумов / Начинка и техника / Программирование для WWW » ответить » создать топик « | »
Автор Сообщение
AlexShop Муж.
участник
34
Сообщения: 1866
Зарегистрирован: 17.02.04
Заголовок сообщения: Задачка по комбинаторике. Сделать SQL запрос или алгоритм.
Сообщение Добавлено: 7 Март 2009, 20:14:48 
Есть таблица индексов(id) и их значений(value), к примеру:
Код:
id|value
--+-------
1 | a
1 | b
2 | c
2 | d
2 | e
3 | f

В таблицу могут добавляться новые пары, например: 1-f, 1-h, 4-a, 4-b.

Задача: найти все возможные комбинации значений (value).
Условие: в комбинации индексы должны быть уникальными.

Пример 1:
Комбинация a,c,f является верной. Если заменить value на id то получим: 1,2,3 (индексы являются уникальными).

Пример 2:
Комбинация a,b,f является не верной. Если заменить value на id то получим: 1,1,3 (индексы не являются уникальными).

Для простоты предлагаю использовать: псевдо-язык, SQL запросы или диаграммы.
Или просто подскажите ссылки на похожие задачи и алгоритмы. :beer:

_________________
Тот, кто задает вопрос, глупец в течение пяти минут, тот, кто его не задает, глупец всю свою жизнь. (Китайская поговорка)
Crazy Муж.
Модератор
107
Сообщения: 14561
Зарегистрирован: 23.12.01
Откуда: Moscow
Сообщение Добавлено: 7 Март 2009, 20:25:18 
И в чем, собственно, проблема? Не устраивает очевидное решение сложности O(n!) ?
AlexShop Муж.
участник
34
Сообщения: 1866
Зарегистрирован: 17.02.04
Сообщение Добавлено: 7 Март 2009, 20:36:20 
Crazy,
я в этом ничего не понимаю. Незнаю что значит "О" :lamer:

_________________
Тот, кто задает вопрос, глупец в течение пяти минут, тот, кто его не задает, глупец всю свою жизнь. (Китайская поговорка)
Crazy Муж.
Модератор
107
Сообщения: 14561
Зарегистрирован: 23.12.01
Откуда: Moscow
Сообщение Добавлено: 7 Март 2009, 20:56:31 

AlexShop писал(а):
см. Big O Notation

AlexShop Муж.
участник
34
Сообщения: 1866
Зарегистрирован: 17.02.04
Заголовок сообщения: Re: Задачка по комбинаторике. Сделать SQL запрос или алгоритм.
Сообщение Добавлено: 7 Март 2009, 21:34:14 
Crazy,
да я помню про это, но не был уверен что это то самое "O" :)

Над решением еще работаю (или есть где в интернете стандартное решение?)

_________________
Тот, кто задает вопрос, глупец в течение пяти минут, тот, кто его не задает, глупец всю свою жизнь. (Китайская поговорка)
Crazy Муж.
Модератор
107
Сообщения: 14561
Зарегистрирован: 23.12.01
Откуда: Moscow
Сообщение Добавлено: 7 Март 2009, 22:39:05 
AlexShop, решение -- полный перебор. Никакого rocket science. Единственная эвристика -- перебирать индексы и для каждой комбинации перебирать подстановки значений.
AlexShop Муж.
участник
34
Сообщения: 1866
Зарегистрирован: 17.02.04
Заголовок сообщения: Re: Задачка по комбинаторике. Сделать SQL запрос или алгоритм.
Сообщение Добавлено: 9 Март 2009, 07:26:11 
Вот что получилось:
Код:
function permutations($arrays, $i = 0, $combination = array())
{
    global $result;
    if (! isset($arrays[$i])) {$result[] = $combination;}
   
    foreach((array) $arrays[$i] as $value):
        $combination[$i] = $value;
        permutations($arrays, $i + 1, $combination);
    endforeach;
}
   
// ТЕСТИРОВАНИЕ
// Можно использовать любой 2-х мерный массив
$arrays = array
(
    array('a', 'b', 'c'),
    array('1', '2', '3'),
    array('A', 'B')
);
   
permutations($arrays);
print_r($result);
Аналогичная задача, только вместо таблицы я использовал двух-мерный PHP массив.
Задача та же: найти все возможные комбинации, взяв по одному элементу из каждого суб-массива.

Единственное, пока не удалось избавиться от глобальной переменной.
Думаю все организовать в класс и глобальная переменная будет свойством класса.

_________________
Тот, кто задает вопрос, глупец в течение пяти минут, тот, кто его не задает, глупец всю свою жизнь. (Китайская поговорка)
*   Список форумов / Начинка и техника / Программирование для WWW « | » » ответить » создать топик
 Страница 1 из 1 [ Сообщений: 7 ] 
Показать сообщения за:   Поле сортировки  
Найти:
Перейти:  
Уровень доступа: Вы не можете начинать темы. Вы не можете отвечать на сообщения. Вы не можете редактировать свои сообщения. Вы не можете удалять свои сообщения. Вы не можете добавлять вложения.
cron


ООО ДеФорум
При использовании материалов сайта ссылка на DeForum.ru — обязательна.
Проект Павла Батурина ©2001-2077; // Powered by phpBB © 2013 phpBB Group
Rambler's Top100