powered by simpleCommunicator - 2.0.18     © 2024 Programmizd 02
Map
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Решение NP-сложных задач за полиномиальное время
25 сообщений из 136, страница 1 из 6
Решение NP-сложных задач за полиномиальное время
    #40102572
Фотография Верблюд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Собственно сабж.

исходники на гитхабе: https://github.com/gromas/polysat
видео на ютубе:
YouTube Video
...
Рейтинг: 0 / 0
Решение NP-сложных задач за полиномиальное время
    #40102582
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Верблюд,

непонятно что он под асимптотикой понимает
асимптотика будет от размера числа или от количества битов
...
Рейтинг: 0 / 0
Решение NP-сложных задач за полиномиальное время
    #40102618
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Верблюд,

на видео несколько оговорок, надо "сочетания из N по 3" вместо "сочетания из 3 по N"
...
Рейтинг: 0 / 0
Решение NP-сложных задач за полиномиальное время
    #40102623
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Верблюд,

на слайде забыл поделить на 6

С(3, N) = N! / ((N-3)! 3!) = N * (N-1) * (N-2) / 6
...
Рейтинг: 0 / 0
Решение NP-сложных задач за полиномиальное время
    #40102649
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Верблюд,

Непонятно, откуда следует, что после первичного устранения конфликтов "решение существует всегда".
Ведь после назначения значений неконфликтующим переменным мы снова получаем задачу, которую надо решать.
А если там будет кофликт, то придется делать новые назначения и т.д.
Т.е. задача будет оставаться нерешенной все время, пока мы будем получать конфликты при назначениях.
И в худшем случае нам придется сделать все возможные назначения.
...
Рейтинг: 0 / 0
Решение NP-сложных задач за полиномиальное время
    #40102655
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)
Верблюд,

непонятно что он под асимптотикой понимает
асимптотика будет от размера числа или от количества битов


В данном случае это одно и тоже: N булевских переменных = N бит
...
Рейтинг: 0 / 0
Решение NP-сложных задач за полиномиальное время
    #40102657
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr Sharahov,

а проект смотрели?
...
Рейтинг: 0 / 0
Решение NP-сложных задач за полиномиальное время
    #40102660
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)
Aleksandr Sharahov,

а проект смотрели?


нет, не смотрел,
судя по видео, он не доделан до конца
...
Рейтинг: 0 / 0
Решение NP-сложных задач за полиномиальное время
    #40102728
Фотография Верблюд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr Sharahov
kealon(Ruslan)
Aleksandr Sharahov,

а проект смотрели?


нет, не смотрел,
судя по видео, он не доделан до конца


Не доделан до all-3-sat. Просто 3-sat он решает.
...
Рейтинг: 0 / 0
Решение NP-сложных задач за полиномиальное время
    #40102733
Фотография Верблюд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr Sharahov
Верблюд,

на видео несколько оговорок, надо "сочетания из N по 3" вместо "сочетания из 3 по N"



Спасибо. От волнения это.
...
Рейтинг: 0 / 0
Решение NP-сложных задач за полиномиальное время
    #40102738
Фотография Верблюд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr Sharahov
Верблюд,

Непонятно, откуда следует, что после первичного устранения конфликтов "решение существует всегда".
Ведь после назначения значений неконфликтующим переменным мы снова получаем задачу, которую надо решать.
А если там будет кофликт, то придется делать новые назначения и т.д.
Т.е. задача будет оставаться нерешенной все время, пока мы будем получать конфликты при назначениях.
И в худшем случае нам придется сделать все возможные назначения.


У нас состояния в точке стыковки двух веток согласованы в обе стороны. По крайней мере до следующего уровня ветвления дерева. Если в процессе прохода от одного уровня ветвления до следующего маска поменялась, то следующее состояние будет полностью согласовано с обеими частями ветки выше очередной точки ветвления
...
Рейтинг: 0 / 0
Решение NP-сложных задач за полиномиальное время
    #40102749
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Верблюд
Aleksandr Sharahov
Верблюд,

Непонятно, откуда следует, что после первичного устранения конфликтов "решение существует всегда".
Ведь после назначения значений неконфликтующим переменным мы снова получаем задачу, которую надо решать.
А если там будет кофликт, то придется делать новые назначения и т.д.
Т.е. задача будет оставаться нерешенной все время, пока мы будем получать конфликты при назначениях.
И в худшем случае нам придется сделать все возможные назначения.


У нас состояния в точке стыковки двух веток согласованы в обе стороны. По крайней мере до следующего уровня ветвления дерева. Если в процессе прохода от одного уровня ветвления до следующего маска поменялась, то следующее состояние будет полностью согласовано с обеими частями ветки выше очередной точки ветвления


Речь не о том, что согласовано или нет, а о том, как долго придется ходить и согласовывать.

Если грубо.
У нас матрешка, а у нее в самом конце может оказаться баба-яга.
На вопрос, что в конце не ответишь, пока всю матрешку не разберешь.
Но у нас в каждой матрешке не одна матрешка предыдущего уровня, а 100. И так на каждом уровне.
Переходя на предыдущий уровень по одной ветке, мы не особенно понижаем сложность задачи.
И чтобы ответить на вопрос, есть ли там хоть одна баба-яга, может потребоваться очень много проб.
...
Рейтинг: 0 / 0
Решение NP-сложных задач за полиномиальное время
    #40102760
Фотография Верблюд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr Sharahov
Верблюд
пропущено...


У нас состояния в точке стыковки двух веток согласованы в обе стороны. По крайней мере до следующего уровня ветвления дерева. Если в процессе прохода от одного уровня ветвления до следующего маска поменялась, то следующее состояние будет полностью согласовано с обеими частями ветки выше очередной точки ветвления


Речь не о том, что согласовано или нет, а о том, как долго придется ходить и согласовывать.

Если грубо.
У нас матрешка, а у нее в самом конце может оказаться баба-яга.
На вопрос, что в конце не ответишь, пока всю матрешку не разберешь.
Но у нас в каждой матрешке не одна матрешка предыдущего уровня, а 100. И так на каждом уровне.
Переходя на предыдущий уровень по одной ветке, мы не особенно понижаем сложность задачи.
И чтобы ответить на вопрос, есть ли там хоть одна баба-яга, может потребоваться очень много проб.


Объясню. Вот ты взял одно состояние и построил по нему часть решения. Неразрешенные биты соответствуют той части пространства решений, которое мы выберем при разветвлении. При этом в каждой итерации по новому состоянию заполнится как минимум один бит маски. То есть общее число итераций не может превышать n*n^3. При этом если учесть, что для построения следующего бита нам нужны только те состояния, в которых один бит соответствует текущему набору переменных и один не соответствует, то ходить мы будем не n*n^3, а n*n^2 максимум. Ну и для выгрузки всех возможных решений нам надо просто хранить маску до последнего ветвления и после получения одного решения, продолжать с того места, где было предыдущее ветвление
...
Рейтинг: 0 / 0
Решение NP-сложных задач за полиномиальное время
    #40102763
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Верблюд,

а если взять какую-то более понятную и практическую задачу как объяснение?

я правильно понимаю, что в самом начале составляются все комбинации булевых троек? O(N^3)
а вот на чём дальше получаются отсечки, непонятно
...
Рейтинг: 0 / 0
Решение NP-сложных задач за полиномиальное время
    #40102771
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Верблюд
Aleksandr Sharahov
пропущено...


нет, не смотрел,
судя по видео, он не доделан до конца


Не доделан до all-3-sat. Просто 3-sat он решает.


Нужно решить за полиномиальное время.

Насколько я понял, у вас в цикле делается:
1) отбросить противоречивые тройки за полиномиальное время
2) если найдено 1 решение - выход положительный
3) если на данном уровне проверены все вложенные ветки - возврат к предыдущему состоянию
4) если возможно, рекурсивно сформировать новую ветку, назначив значение для Xi,Xj 1<=i,j<=n, и перейти к шагу 1
5) если невозможно сформировать новую ветку - выход отрицательный

Откуда следует, что алгоритм работает полиномиальное время, если рекурсия никуда не делась?
...
Рейтинг: 0 / 0
Решение NP-сложных задач за полиномиальное время
    #40102772
Фотография Верблюд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)
Верблюд,

а если взять какую-то более понятную и практическую задачу как объяснение?

я правильно понимаю, что в самом начале составляются все комбинации булевых троек? O(N^3)
а вот на чём дальше получаются отсечки, непонятно


1. Сначала создается массив комбинаций троек по N
2. Затем накатывается КНФ, состояния, которые описаны в КНФ удаляются (обнуляются биты)
3. Затем идет цикл по каждому биту, представляющему собой некоторое состояние трёх переменных и для него делается расчет решения, то есть проверяется, что ни одно другое состояние из одного или двух битов не противоречит ему. Если получаем противоречие - сбрасываем конфликтный бит и смотрим следующие. Цикл заканчивается, если больше нет состояний в одном сочетании (байт равен 0) или если в предыдущей итерации не было удалено ни одного состояния.
...
Рейтинг: 0 / 0
Решение NP-сложных задач за полиномиальное время
    #40102773
Фотография Верблюд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr Sharahov
Верблюд
пропущено...


Не доделан до all-3-sat. Просто 3-sat он решает.


Нужно решить за полиномиальное время.

Насколько я понял, у вас в цикле делается:
1) отбросить противоречивые тройки за полиномиальное время
2) если найдено 1 решение - выход положительный
3) если на данном уровне проверены все вложенные ветки - возврат к предыдущему состоянию
4) если возможно, рекурсивно сформировать новую ветку, назначив значение для Xi, 1<=i<=n, и перейти к шагу 1
5) если невозможно сформировать новую ветку - выход отрицательный

Откуда следует, что алгоритм работает полиномиальное время, если рекурсия никуда не делась?


выше написал. там нет рекурсии
...
Рейтинг: 0 / 0
Решение NP-сложных задач за полиномиальное время
    #40102776
Фотография Верблюд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Верблюд
Aleksandr Sharahov
пропущено...


Нужно решить за полиномиальное время.

Насколько я понял, у вас в цикле делается:
1) отбросить противоречивые тройки за полиномиальное время
2) если найдено 1 решение - выход положительный
3) если на данном уровне проверены все вложенные ветки - возврат к предыдущему состоянию
4) если возможно, рекурсивно сформировать новую ветку, назначив значение для Xi, 1<=i<=n, и перейти к шагу 1
5) если невозможно сформировать новую ветку - выход отрицательный

Откуда следует, что алгоритм работает полиномиальное время, если рекурсия никуда не делась?


выше написал. там нет рекурсии


1. расчет совместимости состояния: за одну итерацию по маске у нас получается или меняется как минимум один бит в маске, или мы получаем противоречие. максимум итераций n - маска размером n. если противоречий и изменений в маске нет, выходим.
2. расчет происходит по всем состояниям: за одну итерацию мы или удаляем хотя бы одно состояние или выходим с сообщением SAT.
Тут нет никаких рекурсий. п.1 выполняется максимум за n^4, п.2 - максимум n^6. один вложен в другой, суммарное время n^10. Но учитывая мою статистику по нескольким десяткам тысяч различных CNF цикл из п.2 завершается уже на 4-5 итерации, n^3 там не знаю на какой случай, надо видимо специально такой придумывать.
...
Рейтинг: 0 / 0
Решение NP-сложных задач за полиномиальное время
    #40102796
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролики не смотрю.
Для начала неплохо увидеть, относится ли название темы к каждой NP-сложной или только к некоторым?
Если к некоторым, имеется ли возможность из постановки задачи сделать вывод о подпадании задачи под тему топика?
Надеюсь, что задача на 1лимон$ подпадает?
...
Рейтинг: 0 / 0
Решение NP-сложных задач за полиномиальное время
    #40102801
Фотография Верблюд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98
Ролики не смотрю.
Для начала неплохо увидеть, относится ли название темы к каждой NP-сложной или только к некоторым?
Если к некоторым, имеется ли возможность из постановки задачи сделать вывод о подпадании задачи под тему топика?
Надеюсь, что задача на 1лимон$ подпадает?


попадает. прорешано уже несколько десятков тысяч различных cnf из интернетов, решены все. на миллион не рассчитываю - пусть в зад себе запихают, бюрократы сраные
...
Рейтинг: 0 / 0
Решение NP-сложных задач за полиномиальное время
    #40102809
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98,

тынц
...
Рейтинг: 0 / 0
Решение NP-сложных задач за полиномиальное время
    #40102867
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Верблюд
Верблюд
пропущено...


выше написал. там нет рекурсии


1. расчет совместимости состояния: за одну итерацию по маске у нас получается или меняется как минимум один бит в маске, или мы получаем противоречие. максимум итераций n - маска размером n. если противоречий и изменений в маске нет, выходим.
2. расчет происходит по всем состояниям: за одну итерацию мы или удаляем хотя бы одно состояние или выходим с сообщением SAT.
Тут нет никаких рекурсий. п.1 выполняется максимум за n^4, п.2 - максимум n^6. один вложен в другой, суммарное время n^10. Но учитывая мою статистику по нескольким десяткам тысяч различных CNF цикл из п.2 завершается уже на 4-5 итерации, n^3 там не знаю на какой случай, надо видимо специально такой придумывать.


Мне не ясен переход на следующий шаг алгоритма, после того как обнаружили, что очередная итерация ничего не меняет.
Также неясно, почему не потребуется откат: ведь мы можем не угадать значение переменной и узнать об этом не сразу.
Хорошо бы увидеть все на примере N=6..8 переменных.
А еще лучше строгое доказательство, со всеми определениями (что есть состояние, что есть маска, как и когда они меняются).
...
Рейтинг: 0 / 0
Решение NP-сложных задач за полиномиальное время
    #40102872
Фотография Верблюд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr Sharahov,

Да, я понял. Строгое доказательство будет. Начал писать функцию, возвращающую все возможные результаты решения и похоже всё оно так и есть как я говорил, последовательно переключая состояния дерева мы за n^3 итераций точно приходим к следующему решению. То есть массив, оставшийся после алгоритма голосования содержит не просто все неконфликтующие друг с другом состояния, он содержит суперпозицию всех возможных решений и ни одного который не подходит под наш КНФ.
...
Рейтинг: 0 / 0
Решение NP-сложных задач за полиномиальное время
    #40102874
Фотография Верблюд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr Sharahov

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

А мы и не пытаемся угадывать значение переменной. Если для какой-то переменной не существует однозначного назначения, мы оставляем её в суперпозиции состояний. Из этого как раз и следует тот факт, что если на очередной итерации маска не изменилась, мы просто заканчиваем работу и говорим, что состояние согласовано.
...
Рейтинг: 0 / 0
Решение NP-сложных задач за полиномиальное время
    #40102876
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Верблюд
Aleksandr Sharahov

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

А мы и не пытаемся угадывать значение переменной. Если для какой-то переменной не существует однозначного назначения, мы оставляем её в суперпозиции состояний. Из этого как раз и следует тот факт, что если на очередной итерации маска не изменилась, мы просто заканчиваем работу и говорим, что состояние согласовано.


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

Вот, допустим, определили несколько переменных, а все остальные не можем назначить, что тогда делаем?
...
Рейтинг: 0 / 0
25 сообщений из 136, страница 1 из 6
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Решение NP-сложных задач за полиномиальное время
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (1): Анонимы (1)
Читали форум (1): Анонимы (1)
Пользователи онлайн (11): Анонимы (8), Google Bot, Yandex Bot 1 мин., Bing Bot 1 мин.
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]