Funkcja zwracająca wszystkie podzbiory tablicy (zbiór potęgowy)

0

Witam, jestem kompletnym nowicjuszem jeśli chodzi o programowanie w Delphi, i próbuję rozwiązać pewne zadanie, mianowicie napisać funkcję która dla danej tablicy wypisze wszystkie podzbiory, czyli dla tablicy: [1, 2, 3] poda 1], [2], [3], [1, 2], [1, 3], [2, 3], [1, 2, 3 (w dowolnej kolejności). Docelowo program ma dla każdej tablicy w tablicy znajdować wszystkie permutacje, ale na razie szukam rozwiązania pierwszego problemu. Proszę o pomoc w miarę możliwości.

0

Najpierw pokaż co już sam stworzyłeś, wtedy na pewno ktoś pomoże.

0

Jedyne co mam to funkcję w pythonie która działa i wykonuje zadanie:

def list_powerset(lst):
    result = [[]]
    for x in lst:
        result += [subset + [x] for subset in result]
    result.pop(0)
    return result

Próbuję to zaimplementować w delphi ale nie mam ani kawałka sensownego kodu który by coś robił, z językiem nie miałem nigdy styczności i nie wiem czy na ten sposób jest to w ogóle możliwe, czy trzeba to zrobić inaczej.

0

W sumie można by to podciągnąć pod Brute Force - poczytaj;

Próbuję to zaimplementować w delphi ale nie mam ani kawałka sensownego kodu który by coś robił

No i dobrze, przynajmniej się czegoś nauczysz a nie przekleisz gotowca;

z językiem nie miałem nigdy styczności i nie wiem czy na ten sposób jest to w ogóle możliwe, czy trzeba to zrobić inaczej.

A czy w ogóle zrobiłeś coś co chociaż próbuje rozwiązać to zadanie? Tak samo raczej tego nie zrobisz, wszystko zależy od tego w jakim IDE to piszesz, choćby ze względu na pętlę for .. in;


Poczytaj cokolwiek o jakichkolwiek algorytmach a większość z nich dopasujesz pod swój program; Tutaj masz stary wątek: http://4programmers.net/Forum/Archiwum/29298-algorytmika_Permutacje - coś na ten temat można się dowiedzieć; Oczywiście ciekawszym sposobem byłoby napisać algorytm wykorzystujący rekurencję, ale jak to mówią: nie każdy ma tą część mózgu do rekurencji (czy wskaźników, wątków...);

0
var 
    i, k, n: integer;
    x:array[0..100] of integer;
begin
    n:=5;
    x[1]:=1; k:=1;
    while k <> 0 do begin
        for i:=1 to k do 
            write(x[i], #32);
        writeln;
        if x[k] = n then begin
            dec(k); inc(x[k])
        end else begin
            inc(k); x[k]:= x[k-1] + 1
        end
    end
end. 
0
furious programming napisał(a):

ale jak to mówią: nie każdy ma część mózgu do rekurencji (czy wskaźników, wątków...);

Jak to mówią - nie każdy ma część mózgu do ortografii... :D

1 użytkowników online, w tym zalogowanych: 0, gości: 1