Czy to jest wariacja bez powtorzeń?

0

Mam jakis tam kod, ktory wypluwa mi nastepujacy ciag liczb:

2, 2, 2, 2, 2, 3, 5, 7, 11, 11, 11, 21

musze znalezc teraz wszystkie mozliwe iloczyny z powyzszego ciagu dajace rozne wyniki. Czyli 2 x 2 moze byc tylko 1 raz mimo, ze fizycznie moznaby tu bylo miec troche mozliwosci (moglbym brac rozne "2" z tego ciagu, ale to zabronione, bo zawsze dostane 4). Tak samo z 2 x 2 x 2.

0

Wariacja bez powtórzeń to taki ciąg którego wyrazy składają się z różnych elementów. Ważna jest kolejność elementów i fakt, że elementy nie mogą się powtarzać. Natomiast Ty masz znaleźć wszystkie mozliwe iloczyny z powyzszego ciagu dajace rozne wyniki. to np. 23, 25 itd, czyli takie iloczyny, których wyniki się nie powtarzają, nie interesuje Cie co przez co przemnażasz, tylko wynik. To jest bardziej iloczyn wszystkich możliwych kombinacji (warto pamiętać, że jeżeli chodzi o kombinacje to 2 i 3 to nie to samo co 3 i 2, ale w tym wypadku to samo bo wynik jest identyczny).

Zadanie z wariacjami bez powtórzeń mogłoby brzmieć tak, żeby wyznaczyć z tego zbioru wariacje bez powtórzeń i przedstawić wynik przemnożenia przez siebie skladników (?) poszczególnych wariacji. Np. 23; 25; 27; 711; 117; 32; i pozniej 23 = 6; 25=10 itd.

Ja to tak rozumiem, oczywiscie moge sie mylic, bo nie znam dokladnie terminow matematycznych.

0

Jest ladna funkcja w MATLAB-ie "nchoosek", ale wlasnie tutaj nie zdaje calkiem tematu, bo ona liczy kombinacje, ale nie "iloczyn" kombinacji.
Moznaby ja zastosowac ale wtedy nalezy odejmowac wlasnie te wyniki, ktore daja ten sam iloczyn wg jakiejs metody/algorytmu, ktorego jeszcze nie opracowalem. na pewno wazna jest ilosc tych samych liczb. Inna sprawa to taka, ze liczenie tego na piechote albo sprawdzanie wszystkich mozliwych iloczynow typu: "1" - wez ta liczbe, "0" - nie bierz z tego powyzszego ciagu (i nastepnie wybranie unikalnych wynikow iloczynow) nie zdaje sprawdzianu przynajmniej w matlabie, moze w c++/javie, by to wyliczane bylo szybko, ale nie tutaj.

0

Hmmm... możesz wygenereować wszystkie kombinacje za pomocą http://www.mathworks.com/help/stats/combnk.html następnie za pomocą http://www.mathworks.com/help/matlab/ref/prod.html wymnożyć rzędami(nie wiem czy nie musisz transponować), a jeszcze później za pomocą http://www.mathworks.com/help/matlab/ref/unique.html wybrać tylko te elementy które się nie powtarzają. Jeżeli potrzebujesz ilosci wystąpień każdego wyniku, zainteresuj się http://www.mathworks.com/help/matlab/ref/histc.html a jeżeli nie to małe przyspieszenie(szczególnie dla danych które podałeś) uzyskasz jeżeli przed rozpoczęciem użyjesz dodatkowe unique na danych wejściowych. Żle zrozumiałem, poszukam innej funkcji :D
Jednak warto spróbować tak jak pisałem, nie mam matlaba żeby sprawdzić, ale spróbuj jako drugi argument do combnk wektor 1:v.length, a jak nie, w pętli wygeneruj wszystkie możliwości...

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