[Homework] C# Conditional Statements {12} Zero Subset
Страхотна задача.
Ето, който иска да почете малко повече по въпроса.
http://en.wikipedia.org/wiki/Subset_sum_problem
Тук представям рекурсивно решение. Пропуснал съм частта с въвеждането на числата от конзолата, за 5-та седмица, предполагам това е тренирано вече от всички.
Има още едно интересно решение, с разделяне на положителни и отрицателни числа, то е по-лесно за направа, при него интересното е самия алгоритъм и идеята с разделяне на въведените числа.
Ето рекурсивно решение : тук
Mod Edit: Моля, спазвайте правилата на форума.
Здравей,
В момента го гледам през телефона и ме съмнява , че има логическа грешка.
Няма как да го дебъгна в момента, но според това , което виждам :
int combinations = (int)Math.Pow(2, N);
.
.
.
for (int i = 1; i < combinations; i++)
Тук ти е до 2^N-1. Не успявам да видя, дали правиш нещо с останалата една комбинация.
По принцип кобинациите не са 32 ами 31, като целта е да се избегне случай, в който една от цифрите ти е всъщност желаната кобинация. В останалите 31 комбинации също влизат подобни случай но тях съм ги адресирал с една проверка за бройката на елементите в List накрая. Идеята е да се представят в броичен вид комбинациите и примерно комбинация 7 в броичен вид е 00111. Взимаме единиците и събираме числата на тези индекси и т.н. Не мисля, че ако всъщност си брой до 32 вместо до 31 ще ми даде грешно решение, но просто си преизползвам кода от решението на друг проблем :)
Тук вече е въпрос на преценка (или на условие).
Когато числото е равно на търсената сума, това пак си е subset с дължина 1-ца. Вече дали да влиза в решението си е въпрос на преценка.