Односвязные и многосвязные множества участников многостороннего взаимозачета.

Автор приносит извинения перед теми читателями – бухгалтерами, многих из которых вероятно отпугивают такие математические термины, как множество, подмножество, граф, односвязный граф, многосвязный граф и т.д. Как вы сможете убедиться, если пересилите себя и продолжите чтение, ничего особо сложного в этой премудрости нет. В то же время я прошу прощения у программистов, которым многое (а может быть даже все) из того, о чем будет речь идти ниже, хорошо знакомо.

Так как статья предназначена и для программистов, и для не программистов (даже в основном для не программистов, а для бухгалтеров, экономистов, топ – менеджеров, предпринимателей), то работу алгоритма, я буду объяснять на числовом примере. Для тех программистов, которые захотят реализовать этот алгоритм на 1С, этот числовой пример может явиться отладочными данными.

Пусть некоторое количество лиц (юридических или физических – для рассмотрения работы алгоритма неважно) решили провести многосторонний взаимозачет своих дебиторских и кредиторских задолженностей друг другу. Они собрались все вместе, и каждый представил список своих дебиторских и кредиторских задолженностей. Все числовые данные в этом примере произвольные. На основе этих данных был составлен общий список всех участников многостороннего взаимозачета и составлена таблица задолженностей – кто кому и сколько должен. Пусть оказалось, что общее количество участников – 22 (А1, А2, А3, … А22), а общее количество задолженностей – 26. Эти задолженности представлены в таблице 1.

Табл. 1

Дебитор Кредитор Задолженность
А1 А6
А2 А21
А3 А19
А4 А17
А4 А22
А5 А12
А5 А16
А6 А10
А7 А13
А8 А17
А8 А20
А9 А18
А9 А5
А9 А21
А10 А1
А11 А7
А11 А15
А14 А16
А15 А22
А16 А9
А19 А11
А19 А13
А20 А4
А20 А7
А20 А15
А21 А5

Итак, имеется множество участников многостороннего взаимозачетав количестве 22-х участников. Кроме того, имеется множество задолженностей в количестве 26. Все эти 26 задолженностей являются дебиторскими для участников, фигурирующих в колонке под наименованием «Дебиторы» и эти же 26 задолженностей являются кредиторскими, для участников, наименования которых приведены в колонке озаглавленной «Кредиторы».

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

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

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

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



Наши рекомендации