![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 190 Pomógł: 2 Dołączył: 30.11.2009 Ostrzeżenie: (10%) ![]() ![]() |
witam, poszukuje skryptu/algorytmu ktory z jakiejs tablicy ktora zawiera integery wszystkie kombinacje bez powtorzen
np $tab[a] = 1; $tab[b] = 2; $tab[c] = 3; wszystkie kombinacje to 123 213 321 312 231 i moze jeszcze pare |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 898 Pomógł: 80 Dołączył: 31.05.2008 Ostrzeżenie: (20%) ![]() ![]() |
http://pl.wikipedia.org/wiki/Kombinacja_be...%C3%B3rze%C5%84
n/c @edit a nawet http://pl.wikipedia.org/wiki/Wariacja_bez_...%C3%B3rze%C5%84 Ten post edytował cojack 5.07.2010, 00:25:09 -------------------- cojack blog - mój blog (na jakiś czas off).
"jak czegoś nie wiem, to nie myślę że wiem" - moja domena |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 66 Pomógł: 1 Dołączył: 22.06.2009 Skąd: Londyn, UK Ostrzeżenie: (0%) ![]() ![]() |
10 sekund szukania w google
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 150 Pomógł: 3 Dołączył: 13.04.2010 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Set... Mój post jaki linkujesz tyczy wariacji z powtórzeniami. Nie kombinacji z powtórzeniami. A patrząc co chce autor to ma to być wariacja, ale bez powtórzeń (ważna kolejność, nie może się powtarzać element). Jak najprościej zrobić ją? Algorytm:
1. Weź tablicę liczb i usuń duplikaty ( no chyba, że może być kilka wystąpień tej samej liczby, ale wątpię, bo to spowoduje wystąpienie duplikatów w wyniku! ) 2. W pętli przesuwaj się po wszystkich elementach tablicy 3. Zastosuj (ilość_elementów-2) takich pętli pomniejszonych o element pętli wyższego rzędu. Jak to miałoby wyglądać? tablica = (2,4,7,9) Pętla_1 (2,4,7,9) Bierzesz 2, Pętla_2 (4,7,9) Bierzesz 4, Pętla_3 (7,9) Z tego dostaniesz liczby 2,4,7,9 i 2,4,9,7 Zmienia się Pętla_2, która wskazuje teraz nie na 4, ale 7. Pętla_3 też się zmienia! Zawiera bowiem (4,9) Mamy więc 2,7,4,9 i 2,7,9,4 Znowu zmiana w Petla_2 z 7 na 9 i po raz kolejny Pętla_3 zmiany uwidacznia (4,7) Mamy 2,9,4,7 i 2,9,7,4 Zarówno Pętla 2 i 3 doszły do ostatnich elementów, więc zmiana w Pętla_1, z 2 na 4. Lec tak dalej a sam zauważysz jak to ma działać ![]() ![]() -------------------- Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
|
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 898 Pomógł: 80 Dołączył: 31.05.2008 Ostrzeżenie: (20%) ![]() ![]() |
Co Wy nawet do wzoru nie potraficie podstawić liczb?
takie trudne? -------------------- cojack blog - mój blog (na jakiś czas off).
"jak czegoś nie wiem, to nie myślę że wiem" - moja domena |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Cytat Co Wy nawet do wzoru nie potraficie podstawić liczb? Eee.. a wiesz jaka jest różnica pomiędzy obliczeniem ilości tych wariacji, a wygenerowaniem ich?
|
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 898 Pomógł: 80 Dołączył: 31.05.2008 Ostrzeżenie: (20%) ![]() ![]() |
Nie ma.
@EDIT a jednak jest ;D Ten post edytował cojack 6.07.2010, 08:03:09 -------------------- cojack blog - mój blog (na jakiś czas off).
"jak czegoś nie wiem, to nie myślę że wiem" - moja domena |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 253 Pomógł: 31 Dołączył: 30.03.2009 Skąd: Szczecin Ostrzeżenie: (0%) ![]() ![]() |
człowieku, to nie są kombinacje, to są permutacje.
|
|
|
![]()
Post
#10
|
|
![]() Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
To ja po kilku postach naszkicuję szybko algorytm:
1. Weź tablicę i usuń duplikaty. 2. Jeśli tablica ma jakieś elementy weź ją i ustaw ją do przechodzenia w pętli 3. Jeśli tablica ma 1 element wyświetl elementy ze znajdujących się "wyżej" pętli i ten element oraz wróć do pętli wyższego rzędu i przesuń licznik na kolejny element 3. Jeśli ma więcej elementów, tablicę pomniejsz o wybrany element 4. Pomniejszona tablica jest pętlą kolejnego rzędu, czyli wracamy do kroku 2. Można to optymalizować jak ja zasugerowałem, czyli gdy tablica ma już tylko 2 elementy, to wyświetlamy wszystkie wcześniejsze a owe dwa elementy tylko zamieniamy miejscami w wynikach. Z jednej rekurencji wtedy spadamy dodając 2 wyniki w tym przebiegu. -------------------- Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
|
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 253 Pomógł: 31 Dołączył: 30.03.2009 Skąd: Szczecin Ostrzeżenie: (0%) ![]() ![]() |
szkic niezbyt ambitnego sposobu wypisywania wszystkich permutacji zbioru np:{a,b,c,d,e,...}
w tablicy t1 umieszczamy w t1[1] element a , t1[1]=a pobieramy następny element ->b , i w nowej tablicy t2 wpisujemy w t2[1] łańcuch ba czyli: t2[1] = ba a w t2[2] łańcuch ab czyli: t2[2] = ab --------------------------------------------------------------------------------------------------------------------------------- teraz manewry łańcuchem na elemencie t2[1] = ba pobieramy element c w wpisujemy do tablicy t1 t1[1]=cba t1[2]=bca t1[3]=bac podobnie robimy to z t2[2] = ab t1[4]=cab t1[5]=acb t1[6]=abc -------------------------------------------------------------------------------------------------------------------- wykorzystując poprzednie dane z tablicy t1 i pobierając następny element d mamy: (teraz dane wprowadzamy ponownie do tablicy t2) t1[1]=cba daje nam t2[1]=dcba t2[2]=cdba t2[3]=cbda t2[4]=cbad -------------------------------------------------------------------------------------------------------- t1[2]=bca daje nam t2[5]=dbca t2[6]=bdca t2[7]=bcda t2[8]=bcad -------------------------------------------------------------------------------------------------------- itd dla t1[3] ,...,t1[6] ================================================================= przy pobraniu następnego elementu ->e dane będą wpisywane do tablicy t1 a wydłużane będą łańcuchy tablicy t2 pozdrawiam. |
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 4 655 Pomógł: 556 Dołączył: 17.03.2009 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Masz tutaj dwie metody:
Jednak z góry piszę, że nie są one optymalne. permutation będzie działało najprawdopodobniej szybciej od permutation_r - albo przynajmniej mniej pamięci zje. Ten post edytował fifi209 7.07.2010, 21:03:53 -------------------- Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 13.06.2025 - 00:21 |