Size: a a a

2020 November 08

ИС

Иван Смирнов... in pro.algorithms
Alexander Maltsev
Переслано от Alexander Maltsev
Вопрос не по питону, а скорее по алгоритмам. Есть два множества - кредиторы и должники. Сумма долгов равна сумме всех выданных кредитов. Должнику наплевать кому возвращать долг, кредитору безразлично, от кого именно он получит назад свои деньги. Как минимизировать число транзакций?
Это NP-hard через сведение subset sum. Если кредиторов всего два, а должников n, то за n транзакций можно тогда и только тогда, когда множество должников имеет подмножество с данной суммой.
источник

A

Andrey in pro.algorithms
Иван Смирнов
Это NP-hard через сведение subset sum. Если кредиторов всего два, а должников n, то за n транзакций можно тогда и только тогда, когда множество должников имеет подмножество с данной суммой.
Ну вот да, тоже о subset sum подумал
источник

A

Andrey in pro.algorithms
А на практике NP-задачи решают SAT-солверами?
источник

ИС

Иван Смирнов... in pro.algorithms
По-всякому. К sat часто сводить очень дорого, поэтому для многих задач есть свои солверы. Плюс ещё часто сводят к целочисленным линейным программам - сведение часто линейного размера, а ЦЛП умеют решать достаточно эффективно.
источник

ИС

Иван Смирнов... in pro.algorithms
Для вариаций рюкзака есть много самостоятельных солверов, хотя по моему опыту тут народ идёт в сторону bin packing скорее. Это вроде о том же, но есть тонкости.
источник

ИС

Иван Смирнов... in pro.algorithms
В or tools от гугла есть много интересного.
источник

@N

@urandon Nikita Khom... in pro.algorithms
Alexander Maltsev
Переслано от Alexander Maltsev
Вопрос не по питону, а скорее по алгоритмам. Есть два множества - кредиторы и должники. Сумма долгов равна сумме всех выданных кредитов. Должнику наплевать кому возвращать долг, кредитору безразлично, от кого именно он получит назад свои деньги. Как минимизировать число транзакций?
Тогда получается, что граф — полный двудольный, раз всем пофиг кому что отправлять, лишь бы баланс сходился?
источник

AM

Alexander Maltsev in pro.algorithms
@urandon Nikita Khomutov
Тогда получается, что граф — полный двудольный, раз всем пофиг кому что отправлять, лишь бы баланс сходился?
Да
источник

A

Aragaer in pro.algorithms
ну тогда теоретически кредиторы могут отправлять другим кредиторам, а должники другим должникам.
источник

@N

@urandon Nikita Khom... in pro.algorithms
Aragaer
ну тогда теоретически кредиторы могут отправлять другим кредиторам, а должники другим должникам.
Или даже так, да
источник

A

Aragaer in pro.algorithms
есть ли требование, что каждая транзакция должна иметь хоть какое-то отношение к размеру задолженности?
источник

MK

Matwey Kornilov in pro.algorithms
Alexander Maltsev
Переслано от Alexander Maltsev
Вопрос не по питону, а скорее по алгоритмам. Есть два множества - кредиторы и должники. Сумма долгов равна сумме всех выданных кредитов. Должнику наплевать кому возвращать долг, кредитору безразлично, от кого именно он получит назад свои деньги. Как минимизировать число транзакций?
Кажется в банковской среде это называется клиринг
источник

A

Aragaer in pro.algorithms
собственно можно просто сделать количество транзакций равным числу всех участников-1. Все должники сливают одному, он раскидывает по кредиторам. Победа.
источник

A

Aragaer in pro.algorithms
вообще, для любого подмножества с нулевой суммой, можно его изолировать и там внутри не более чем размер множества -1 транзакций.
источник

ИС

Иван Смирнов... in pro.algorithms
Aragaer
собственно можно просто сделать количество транзакций равным числу всех участников-1. Все должники сливают одному, он раскидывает по кредиторам. Победа.
Так всегда можно, но иногда можно лучше.
источник

ИС

Иван Смирнов... in pro.algorithms
И вопрос как раз в том, на какое максимальное число подмножеств с нулевой суммой можно разбить.
источник

@N

@urandon Nikita Khom... in pro.algorithms
Иван Смирнов
И вопрос как раз в том, на какое максимальное число подмножеств с нулевой суммой можно разбить.
+
источник

ИС

Иван Смирнов... in pro.algorithms
Ответ - это n минус их число.
источник

A

Aragaer in pro.algorithms
и тогда ответ это надо разбить все множество на как можно большее число подмножеств с нулевой суммой
источник

A

Aragaer in pro.algorithms
ага
источник