Форум программистов, компьютерный форум, киберфорум
Алгоритмы
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.62/26: Рейтинг темы: голосов - 26, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 18.09.2020
Сообщений: 10

Задача тысячелетия - Равенство классов P и NP

19.09.2020, 09:32. Показов 5533. Ответов 47
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Равенство классов P и NP.

Равны ли классы сложности P и NP?

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

Класс NP — это задачи, правильность ответа на которые можно быстро проверить. Например, задача о сумме. Предположим, что у вас есть монеты номиналом 2, 3, 5, 6 и 7 рублей, по одной каждого номинала, и вы хотите без сдачи оплатить покупку стоимостью 21 рубль. Можно ли набрать из данных монет сумму, равную 21?

В этой задаче для получения ответа нужно перебрать разные варианты, а чтобы доказать, что решения нет, - вообще перебрать все возможные варианты. Если количество монет увеличить на несколько порядков, решение выглядит совсем непрактичным. При этом результат проверить легко — просто сложить номиналы всех монет.

Суть «задачи тысячелетия» формулируется так: равны ли классы P и NP? Если легко проверить правильность решения задачи, может ли быть так же легко решить эту задачу? Большинство специалистов уверены, что ответ отрицательный. Однако доказать этого пока никто не смог. Если же вдруг окажется, что P = NP, то человечество ждет переворот в криптографии.

Это был отрывок из статьи для понимания задачи. Я хочу уточнить: если я найду алгоритм, при помощи которого смогу найти все варианты получения суммы 21, то это значит, что я решил задачу? Можно ли использовать алгоритм, написанный на каком-нибудь языке программирования, ну например на языке Pascal, или я должен использовать для решения этой задачи только формулы и т.д. из математики?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.09.2020, 09:32
Ответы с готовыми решениями:

Стройка тысячелетия
Здравствуйте, помогите с задачкой! Вавилонская башня – это легендарное библейское сооружение. Согласно преданию в начале времен (после...

Алгоритмы тысячелетия
В математике есть величайшие задачи, решение которых еще найдены, а есть ли подобные задачи в программировании? Ясно, что программирование...

I5-4670K vs i5-6600K Выбор тысячелетия)
Привет всем) Помогите выбрать,с максимальным запасом на будущее.

47
 Аватар для vantfiles
1018 / 1914 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
19.09.2020, 10:41
Лучший ответ Сообщение было отмечено aleksey_konstr как решение

Решение

Цитата Сообщение от aleksey_konstr Посмотреть сообщение
значит, что я решил задачу?
Нет. Суть в том, чтобы найти алгоритм нахождения набора монет равных в сумме N такой, чтобы по времени выполнения он был хотя бы равен алгоритму нахождения суммы таких монет. С бытовой точки зрения очевидно, что это невозможно, но вот доказать это пока не могут.

Цитата Сообщение от aleksey_konstr Посмотреть сообщение
ну например на языке Pascal
Можно на любом языке, поскольку существует понятие временной сложности алгоритма - в примере с монетками сложность
нахождения суммы будет O(n) -- а вот поиск набора в худшем случае O(n!)
1
698 / 574 / 75
Регистрация: 20.09.2014
Сообщений: 3,726
20.09.2020, 10:12
Лучший ответ Сообщение было отмечено aleksey_konstr как решение

Решение

Ваше заблуждение заключается в том, что нужно работать не с конкретными числами 2, 3, 5, 6, 7 и 21, а с числами m1, m2, ..., mk и N, т.е. решить задачу в общем виде.
Для частных случаев возможны простые решения, например, взять 30 монет с номиналом 1 рубль и из них сложить 21 рубль. Вот вам и P-алгоритм)))
0
 Аватар для vantfiles
1018 / 1914 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
20.09.2020, 10:41
Цитата Сообщение от Mikhaylo Посмотреть сообщение
простые решения
Тут есть, что порешать:

https://en.wikipedia.org/wiki/... e_problems
0
0 / 0 / 0
Регистрация: 18.09.2020
Сообщений: 10
20.09.2020, 17:37  [ТС]
Да, теперь я понял - если моя программа найдёт набор монет, которые в сумме будут давать нужное число и это будет сделано быстрее, чем человек успеет посчитать сумму этих монет, значит я смог решить эту задачу. Большое спасибо.
0
698 / 574 / 75
Регистрация: 20.09.2014
Сообщений: 3,726
21.09.2020, 18:14
Не решайте задачу тысячелетия, пожалуйста!)))
0
Заблокирован
22.09.2020, 10:57
Цитата Сообщение от aleksey_konstr Посмотреть сообщение
В этой задаче для получения ответа нужно перебрать разные варианты, а чтобы доказать, что решения нет, - вообще перебрать все возможные варианты. Если количество монет увеличить на несколько порядков, решение выглядит совсем непрактичным. При этом результат проверить легко — просто сложить номиналы всех монет.
не надо ничего перебирать.

21 - (2 + 3 + 5+ 6 + 7) = - 2 надо исключить двойку, чтобы набрать без сдачи
21 - (1 + 3 + 5 + 6) = -1 исключить единицу.
21 − (1 + 4 + 5 + 6 + 7) = -2 Такого числа в списке слагаемых нет, что что исключать нечего и решения не имеет.
7 - (1+2+4+5) = -5
7 - (2+2+4+5) = -6 - решения не имеет.
0
 Аватар для vantfiles
1018 / 1914 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
22.09.2020, 11:49
Цитата Сообщение от sodda Посмотреть сообщение
не надо ничего перебирать.
Наберите 21 рупь следующими номиналами: { 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 }
0
Заблокирован
22.09.2020, 11:55
Цитата Сообщение от vantfiles Посмотреть сообщение
Наберите 21 рупь следующими номиналами: { 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 }
работает до десятки среди слогаемых. поле десятки показывает сколько из суммы нужно вычесть, чтобы насчитать без сдачи.
если измять 10 и 11 из этого списка, то выйдет 115.
Но это зависит от числа - четное или нечетное и есть ли единицы среди слагаемых.
нужно искать и вычленять закономерности
0
 Аватар для vantfiles
1018 / 1914 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
22.09.2020, 12:02
Цитата Сообщение от sodda Посмотреть сообщение
нужно искать
а это и есть - перебор
0
Заблокирован
22.09.2020, 12:04
Цитата Сообщение от vantfiles Посмотреть сообщение
а это и есть - перебор
нет, это не перебор. перебор - это когда ты перебираешь все варианты сложения, чтобы понять.
а это вычленение закономерностей, которое от перебора как раз спасает.
0
 Аватар для vantfiles
1018 / 1914 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
22.09.2020, 12:10
Цитата Сообщение от sodda Посмотреть сообщение
вычленение закономерностей
В случайно сгенерированном множестве? Увольте.
0
Заблокирован
22.09.2020, 12:14
Цитата Сообщение от vantfiles Посмотреть сообщение
а это и есть - перебор
например 25 - (1+2+5+9+17+3) = -12. берем из этого ряда слагаемых 9+3 и убираем. и получаем 25.
но если мы сделаем 25 - (2+2+5+19) = -3 Очевидно, что мы тройку никак убрать не можем.
однако если 24 - (2+2+5+19) = -4 то уже можем. видим зависимость от четности числа и возвращаемого значения.

Добавлено через 53 секунды
Цитата Сообщение от vantfiles Посмотреть сообщение
В случайно сгенерированном множестве? Увольте.
до конкретного предела пожалуй. хотя бы до ста.
а дальше уже дальше думать)
0
 Аватар для vantfiles
1018 / 1914 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
22.09.2020, 12:16
Цитата Сообщение от sodda Посмотреть сообщение
например 25 - (1+2+5+9+17+3) = -12. берем из этого ряда слагаемых 9+3 и убираем. и получаем 25.
А вы это алгоритмически то опишите, как и откуда взялись эти числа 9+3...
0
Заблокирован
22.09.2020, 12:18
Цитата Сообщение от vantfiles Посмотреть сообщение
А вы это алгоритмически то опишите, как и откуда взялись эти числа 9+3...
если среди слагаемых есть такие, которые в сумме дают 12.
0
Модератор
Эксперт функциональных языков программирования
3136 / 2283 / 469
Регистрация: 26.03.2015
Сообщений: 8,886
22.09.2020, 12:23
Цитата Сообщение от sodda Посмотреть сообщение
не надо ничего перебирать.
21 - (2 + 3 + 5+ 6 + 7) = - 2 надо исключить двойку, чтобы набрать без сдачи
Есть две задачи одинаковой сложности:

Можно ли набрать из монет {2, 3, 5, 6, 7} сумму, равную 21?
Можно ли набрать из монет {2, 3, 5, 6, 7} сумму, равную (2 + 3 + 5 + 6 + 7 - 21)?

Обе решаются перебором, но для одной из них перебор может быть существенно меньше из-за быстрого отсечения. Можно ли набрать 2 из {2, 3, 5, 6, 7}? Как только сумма больше 2, вариант отсекается. То есть, отсекается почти всё. Повезло в данном конкретном случае.
0
Заблокирован
22.09.2020, 12:29
Цитата Сообщение от Shamil1 Посмотреть сообщение
Можно ли набрать из монет {2, 3, 5, 6, 7} сумму, равную (2 + 3 + 5 + 6 + 7 - 21)?
у нас есть монеты номиналом -21?

Добавлено через 3 минуты
Цитата Сообщение от Shamil1 Посмотреть сообщение
Можно ли набрать из монет {2, 3, 5, 6, 7} сумму, равную (2 + 3 + 5 + 6 + 7 - 21)?
Говорю, что можно, если убрать цифры 21 и 2.
21 + (2 + 3 + 5 + 6 + 7 − 21) = 23
0
Модератор
Эксперт функциональных языков программирования
3136 / 2283 / 469
Регистрация: 26.03.2015
Сообщений: 8,886
22.09.2020, 12:30
Цитата Сообщение от sodda Посмотреть сообщение
если среди слагаемых есть такие, которые в сумме дают 12.
Вы это перебором нашли.

Когда сумма, которую надо набрать близка к 0 или к сумме всех имеющихся монет, то количество вариантов, которые нужно перебрать и проверить, сильно уменьшается.
Когда мы говорим о "задаче тысячелетия", нас интересует решение в общем виде - для любых входных данных.
0
 Аватар для vantfiles
1018 / 1914 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
22.09.2020, 12:30
Цитата Сообщение от sodda Посмотреть сообщение
у нас есть монеты номиналом -21?
Ну не совсем монета, а ценная бумага, называется вексель.
0
Заблокирован
22.09.2020, 12:33
Цитата Сообщение от vantfiles Посмотреть сообщение
Ну не совсем монета, а ценная бумага, называется вексель.
Задача была про монеты. А вексель - это воздух. Долговое обязательство.

Добавлено через 1 минуту
Цитата Сообщение от Shamil1 Посмотреть сообщение
Вы это перебором нашли.
нет. это нашел одним действием.
оно не всегда работает в одном ключе, если среди слагаемых есть цифры больше десятки, но действие одно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.09.2020, 12:33
Помогаю со студенческими работами здесь

Докажите равенство треугольников APD и AKB, и равенство углов BOP и BAD
BK и DP-высоты ромба ABCD, проведённые из вершин тупых углов соответственно на стороны AD и AB. Прямые BK и DP пересекаются в точке O....

Очень нужно подсчитать определитель на равенство/не равенство нулю
Здравствуйте. Мне очень нужно подсчитать данный определитель на равенство (или не равенство нулю), подскажите пожалуйста как мне его...

Задача: для целых значений I, J, K, L найдите N первых четверок чисел, чтобы выполнялось равенство: i^3-j^3=(k^2+l^2)^2
Никак не могу решить, потому что не подступиться к задаче. Программу вполне по силам написать, да только не представляю, с чего начинать...

Задача с применением классов
Здравствуйте! Из классов должна состоять прога. Надо чтобы было 2 класса, комплексных и дробей. в каждый класс должно входить 3 операции -...

Задача на использование классов
Добрый вечер форумчане! Мне задали написать программку, вот условие: Поля дaнных клаccа должны быть зaкрытыми, а доступ к ним должен...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru