Гость
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Решение NP-сложных задач за полиномиальное время / 25 сообщений из 136, страница 1 из 6
07.10.2021, 10:05
    #40102572
Верблюд
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Решение NP-сложных задач за полиномиальное время
Собственно сабж.

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

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

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

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

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

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

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


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

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

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


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

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


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


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

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



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

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


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

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


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


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

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


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


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

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


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

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

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


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


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


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

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

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

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

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


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


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


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

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

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


выше написал. там нет рекурсии
...
Рейтинг: 0 / 0
07.10.2021, 16:04
    #40102776
Верблюд
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Решение NP-сложных задач за полиномиальное время
Верблюд
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
07.10.2021, 16:50
    #40102796
exp98
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Решение NP-сложных задач за полиномиальное время
Ролики не смотрю.
Для начала неплохо увидеть, относится ли название темы к каждой NP-сложной или только к некоторым?
Если к некоторым, имеется ли возможность из постановки задачи сделать вывод о подпадании задачи под тему топика?
Надеюсь, что задача на 1лимон$ подпадает?
...
Рейтинг: 0 / 0
07.10.2021, 16:56
    #40102801
Верблюд
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Решение NP-сложных задач за полиномиальное время
exp98
Ролики не смотрю.
Для начала неплохо увидеть, относится ли название темы к каждой NP-сложной или только к некоторым?
Если к некоторым, имеется ли возможность из постановки задачи сделать вывод о подпадании задачи под тему топика?
Надеюсь, что задача на 1лимон$ подпадает?


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

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


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


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


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

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

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

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

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

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


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

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


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