Strona 1 z 1

Kombinacje bez powtórzeń

: pt sty 27, 2023 8:48 pm
autor: JedenGość
Próbuję stworzyć formuły podające konkretną LISTĘ wszystkich kombinacji bez powtórzeń.

Przykład: mamy zbiór 8 elementów: A, B, C, D, E, F, G, H.
Ile będzie kombinacji, jakbyśmy chcieli stworzyć mniejsze zbiory składające się z 3 elementów, np.
ABC
ABD
ABE
itd.
funkcja KOMBINACJE(8;3) daje szybką odpowiedź, że tych kombinacji będzie 56.

Ok. Tylko, że ja potrzebuję pełną listę ABC, ABD, itd.

Znalazłem ciekawy filmik na youtubie:
https://www.youtube.com/watch?v=KTS4vY0 ... xcel.iAdam

Trochę to wszystko skomplikowane, ale ogarniam. Jest tylko inny problem.

W LO CALC nie widzę funkcji FILTRUJ, SORTUJ, UNIKATOWE. Są, czy ich nie ma?

Bez nich to rozwiązanie nie ma racji bytu.

A może jest jakieś inne?

Re: Kombinacje bez powtórzeń

: pt sty 27, 2023 9:46 pm
autor: Jan_J
Nie ma funkcji sortującej, nie ma funkcji filtrującej, nie ma funkcji usuwalącej duplikaty.
Są operacje edycyjne (menu) umożliwiające ich przeprowadzenie.

Wypisanie wszystkich kombinacji jest zadaniem o rozwiązaniu rekurencyjnym. Liczba kombinacji k-elementowych z puli n-elementowej wynosi (n po k) = n! / (k! (n-k)!). To jest liczba PODZBIORÓW; jeśli zależy Ci na liczbie ciągów, musisz to pomnożyć przez liczbę możliwych ustawień, czyli k! n! / (k! (n-k)!) = n! / (n-k)! = n (n-1) ... (n-k+1). W kombinatoryce taki ciąg nazywa się wariacją.

Włączanie do biblioteki funkcji generatora ciągu ciągów (tak!) o tej długości nie jest pierwszą potrzebą. Uważam prywatnie, że w innych arkuszach pojawiła się ona raczej jako element wojny marketingowej, niż jako odpowiedź na realne zapotrzebowanie.

Natomiast jak najbardziej da się to opisać funkcją programistyczną; w Calcu: makrem. Tego
https://stackoverflow.com/questions/464 ... s-elements
da się użyć wprost w makrze Calca (choć wymaga to pewnej wprawy). Natomiast bez makra, interpretator Pythona masz dostępny bez instalacji online np. w w3schools.

Bezpośrednio podzbiory te (nie ciągi) konstruowałbym następująco. Przykład dotyczy kombinacji (nie wariacji) 8 po 3, ale zasada jest ogólna i łatwo się programuje. Powyższe odwołania do stackoverflow dają rybę (funkcję generującą podobny efekt) a nie wędkę (oprogramowanie pomysłu).

Kod: Zaznacz cały

z puli 8 (ABCDEFGH) wybieram 3
ABCDEFGH
00000000
wybieram pierwszy element
10000000
01000000
00100000
00010000
00001000
00000100  dalej nie ma sensu bo nie będzie się dało wybrać dwu innych
Teraz dla każdego z pierwszych wybranych wybieram drugi element:
12000000
10200000
10020000
10002000
10000200
10000020
01200000
01020000
01002000
01000200
01000020
00120000
00102000
00100200
00100020
00012000
00010200
00010020
00001200
00001020
00000120 
W trzecim kroku dla każdego z wariantów ustalę możliwe pozycje trzeciego elementu. Nie chce mi się tego pisać.

Re: Kombinacje bez powtórzeń

: sob sty 28, 2023 1:59 am
autor: Rafkus
Ciekawy problem, jest tak jak napisał:
Jan_J pisze: pt sty 27, 2023 9:46 pm Nie ma funkcji sortującej, nie ma funkcji filtrującej, nie ma funkcji usuwalącej duplikaty.
Co do funkcji UNIKATOWE to zapraszam tutaj: funkcja UNIKALNE, z jej fragmentu można by zrobić funkcję SORTUJĄCĄ... Zamiast funkcji filtrującej dałoby radę radę wykorzystać ponownie funkcję UNIKALNE w mniej więcej taki sposób:

Kod: Zaznacz cały

= UNIKALNE(JEŻELI( (kolumnaE<>kolumnaF)*(kolumnaE<>kolumnaG)*(kolumnaF<>kolumnaG); kolumnaH; "")
Nawiązuję do 15 minuty i 54 sekundy tamtego filmiku.

PS. https://www.youtube.com/watch?v=BSrcMDVTDZ4 <--- Dalsza część "twojego" filmiku w którym pisze własne procedury do wypisana wszystkich wariacji i kombinacji.

Re: Kombinacje bez powtórzeń

: sob sty 28, 2023 8:37 pm
autor: JedenGość
Panowie, dziękuję za podpowiedzi.

Niestety nie znam się na makrach i VBA. Miałem nadzieję, że można to ogarnąć zwykłymi formułami.

Pozostaje mi zajrzeć na Udemy i zainwestować w jakiś dobry kurs VBA i Pythona.

Re: Kombinacje bez powtórzeń

: sob sty 28, 2023 11:33 pm
autor: Jan_J
@Rafkus
miałem na myśli jedynie standardowe funkcje w bibliotece.

Re: Kombinacje bez powtórzeń

: ndz sty 29, 2023 12:58 pm
autor: Jermor
JedenGość pisze: sob sty 28, 2023 8:37 pm ... zainwestować w jakiś dobry kurs VBA ...
Jeśli pracujesz z LibreOffice albo Apache OpenOffice, to musisz wiedzieć, że Basic (taki sam) dla tych pakietów różni się od VBA (Visual Basic for Application) dla pakietu Microsoftu. Główne różnice dotyczą dostępu do danych w dokumentach.
O tym, jak napisać własne funkcje w Basicu naszego forum napisałem tu: https://yestok.pl/lbo/y61.php a nieco więcej o Basicu, tu: https://yestok.pl/lbo/y64.php. Może się przyda?

Re: Kombinacje bez powtórzeń

: ndz sty 29, 2023 2:34 pm
autor: Rafkus
JedenGość pisze: pt sty 27, 2023 8:48 pm A może jest jakieś inne?
Zamiast funkcji SORTUJ do poukładania wartości od najmniejszej do największej można by wykorzystać funkcję MIN.K, ale uwaga: jest ona przeznaczona tylko dla LICZB. Dlatego zamiana LICZB na LITERY musiałaby się odbyć dopiero po "posortowaniu" pierwszych wyników. Załóżmy, że mamy zbiór liczb: 8; 4; 4; 2. W wyniku działania tej funkcji otrzymamy:

Kod: Zaznacz cały

=MIN.K(zbiór; 1)	===>	2
=MIN.K(zbiór; 2)	===>	4
=MIN.K(zbiór; 3)	===>	4
=MIN.K(zbiór; 4)	===>	8
=MIN.K(zbiór; 5)	===>	błąd, bo zbiór ma tylko 4 elementy
Lub w postaci macierzowej:

Kod: Zaznacz cały

{=MIN.K(zbiór; {1.2.3.4})}	===>	otrzymamy tablicę: (2.4.4.8)
Zamiast funkcji UNIKATOWE można tutaj posłużyć się formułą macierzową znajdującą unikaty. Sposób jej stworzenia został opisany na blogu: http://przepis-na-lo.pl/2013/11/unikato ... ie-danych/ oraz tutaj. Z moich doświadczeń wynika, że formuła ta dobrze się sprawdza przy niewielkich zbiorach danych. Przy dużych ilościach danych(testowałem ją dla ponad 1000) obciążenie procesora było już odczuwalne. Dlatego też napisałem sobie własną funkcję (proponowałem ją nieco wcześniej).

Zamiast funkcji FILTRUJĄCEJ, to również można wykorzystać formułę wyszukującą unikaty.

W dołączonym pliku, bazując na pokazanym filmie, przedstawiam to samo rozwiązanie ale wykorzystując przedstawione dostępne funkcje - BEZ MAKR. Wyniki są widoczne tylko w LibreOffice, ze względu na funkcję łączącą tekst w pewnym zakresie, której to nie ma w AOO. Przy odrobinie chęci, można je dostosować do AOO.

Re: Kombinacje bez powtórzeń

: wt sty 31, 2023 7:32 pm
autor: JedenGość
Jermor, dziękuję za linki do Twoich artykułów. Ta lektura na pewno się przyda. Co do excela, to nie widzę problemu, aby pracować na tym oprogramowaniu. Do LO skłania mnie to forum i pomoc, jaką na nim uzyskałem / uzyskuję.

Rafkus, dziękuję za Twoją solucję. Powoli ją ogarniam. Prawdopodobnie będzie przydatna.