Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поиск подмножества строк матрицы 
:(
    Опции темы
Vitkaz
Дата 13.11.2009, 08:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



  Привет! Подскажите пожалуйста алгоритм для нахождения подмножества строк матрицы, чья сумма является 0-вектором (mod 2).
PM MAIL   Вверх
esperanto
Дата 13.11.2009, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Перебором

Перебераешь все двойки векторов

Потом все тройки векторов

И так далее
--------------------
B.Sc ->M.Sc.->Microsoft SDE-> (Ph.D. student + Intel SDE + psyсhology B.A) - > Skype SDET
PM MAIL   Вверх
Vitkaz
Дата 13.11.2009, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(esperanto @ 13.11.2009,  13:52)
Перебором

Перебераешь все двойки векторов

Потом все тройки векторов

И так далее

А это не будет полным перебором ? Возможно я ошибаюсь, но по-моему этот алгоритм носит экспоненциальную сложность. Может существует более быстрый алгоритм. 
PM MAIL   Вверх
maxim1000
Дата 13.11.2009, 22:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

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



можно попробовать посмотреть процедуру Гаусса
если до конца добираемся - значит, матрица невырожденная, и никакая комбинация не даст нуля
если нет - значит, обнаружили линейно зависимое подмножество, из которого можно выбирать слагаемые для нулевой суммы


--------------------
qqq
PM WWW   Вверх
esperanto
Дата 13.11.2009, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(Vitkaz @ 13.11.2009,  14:53)
Цитата(esperanto @ 13.11.2009,  13:52)
Перебором

Перебераешь все двойки векторов

Потом все тройки векторов

И так далее

А это не будет полным перебором ? Возможно я ошибаюсь, но по-моему этот алгоритм носит экспоненциальную сложность. Может существует более быстрый алгоритм.


А количество решений разве не может быть эспоненциальным?
Конечно может. Возьмите все строки одинаковые. Тогда будет экспоненциальное количествое решений. И для их распечатывания понадобиться экспоненциальное время

Это сообщение отредактировал(а) esperanto - 13.11.2009, 23:18
--------------------
B.Sc ->M.Sc.->Microsoft SDE-> (Ph.D. student + Intel SDE + psyсhology B.A) - > Skype SDET
PM MAIL   Вверх
maxim1000
Дата 14.11.2009, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

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



для вывода всех решений, конечно, понадобится экспоненциальное время, а вот одно, похоже, можно найти за O(n^3):

можно попробовать немного модифицированную процедуру Гаусса:
  • находим вектор у которого раньше всего начинаются единицы, перемещаем его на первую строчку (меняем с первой строчкой для простоты)
  • если есть несколько таких векторов, то добавляем этот выбранный вектор к каждому из них
  • повторяем эту операцию, исключая из рассмотрения первый вектор

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


--------------------
qqq
PM WWW   Вверх
Vitkaz
Дата 14.11.2009, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



     Спасибо за высказанные идеи. Буду разбираться. Может кто-то ещё что-нибудь может посоветовать, пишите свом мысли, буду очень рад.  smile 

Цитата

А количество решений разве не может быть эспоненциальным?
Конечно может. Возьмите все строки одинаковые. Тогда будет экспоненциальное количествое решений. И для их распечатывания понадобиться экспоненциальное время


     Ничего не имею против, просто думаю, что может существует более эффективный алгоритм.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

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


 




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


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

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