Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> Funkcja wybierająca największą wartość
impimp94
post
Post #1





Grupa: Zarejestrowani
Postów: 42
Pomógł: 0
Dołączył: 6.04.2009
Skąd: Warszawa

Ostrzeżenie: (10%)
X----


Witam!
Czy jest jakaś funckja w php, która umożliwi mi wybranie największej liczby np.: spośrud 5 liczb?
czy może musze robić to ręcznie i bardzo długo np.:
Kod
$a = 12;
$b = 3456;
$c = 6;
$d = 9887;
$e = 0;
if ($a > $b) {
// kod
}
// i tak dalej

Z góry dzięki za pomoc
Go to the top of the page
+Quote Post
Spawnm
post
Post #2





Grupa: Moderatorzy
Postów: 4 069
Pomógł: 497
Dołączył: 11.05.2007
Skąd: Warszawa




możesz dac wszystkie do tablicy i posortować dzięki czemu $tablica[0] = max
albo max" title="Zobacz w manualu PHP" target="_manual

z manuala:

  1. <?php
  2. $array = array(1, 2, 5, 7, 4);
  3. echo max($array); // 7
  4. ?>


Ten post edytował Spawnm 6.04.2009, 16:18:47
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #3





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


Taaa, sortowanie, przeciez to bez sensu skoro jest wlasnie max()


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
Spawnm
post
Post #4





Grupa: Moderatorzy
Postów: 4 069
Pomógł: 497
Dołączył: 11.05.2007
Skąd: Warszawa




no to przecież podałem tongue.gif

a to z sortowaniem uznajmy za ciekawostkę winksmiley.jpg
Go to the top of the page
+Quote Post
TomASS
post
Post #5





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

Ostrzeżenie: (0%)
-----


Cytat
Taaa, sortowanie, przeciez to bez sensu skoro jest wlasnie max()


Ta sama złożoność obliczeniowa - O(n) winksmiley.jpg

Ten post edytował TomASS 6.04.2009, 18:51:05


--------------------
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #6





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


Ta sama, czy zartujesz? smile.gif


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
TomASS
post
Post #7





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

Ostrzeżenie: (0%)
-----


Odpowiedz mi, bardzo proszę, na dwa pytania:
1. jaką złożoność ma sortowanie?
2. jaką złożoność ma max()?


--------------------
Go to the top of the page
+Quote Post
nospor
post
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




@TomASS jak jestes w stanie posortowac dane jedną iteracją to ty jestes normalnie gość winksmiley.jpg


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
TomASS
post
Post #9





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

Ostrzeżenie: (0%)
-----


Jestem w stanie posortować liczby całkowite (bo o takich tu mówię), jedną pętlą for...


--------------------
Go to the top of the page
+Quote Post
nospor
post
Post #10





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




no a w tej jednej petli sa kolejne.

No ale moge sie mylic, moze matematyka ruszyla do przodu przez te kilka lat wiec pokaz mi prosze ten kod smile.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
TomASS
post
Post #11





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

Ostrzeżenie: (0%)
-----


Proszę bardzo:
sortowanie kubełkowe


Albo inny pomysł:
Lecisz pętlą po całej tablicy i zapamiętujesz ile razy wystąpiła dana liczba. Potem już tylko wystarczy wyświetlić odpowiednią ilość liczb:
  1. <?php
  2. $arrDane = array();
  3. $iRozmiarTablicy = 30;
  4. /*
  5.  * Losowanie elementów
  6.  */
  7. for($i=0;$i<$iRozmiarTablicy;$i++){
  8.    $arrDane[]=rand(0,$iMaxValue);
  9. }
  10. /*
  11.  * Wyświetlenie nieposortowanej tabeli
  12.  */
  13. echo '<pre>';
  14.    print_r($arrDane);
  15. echo '</pre>';
  16.  
  17. /*
  18.  * Sortowanie tabeli
  19.  */
  20. for($i=0;$i<$iRozmiarTablicy;$i++){
  21.    $arrSort[$arrDane[$i]]++;
  22. }
  23. /*
  24.  * Wyświetlenie posortowanej tabeli
  25.  */
  26. echo '<pre>';
  27.    print_r($arrSort);
  28. echo '</pre>';
  29. ?>


--------------------
Go to the top of the page
+Quote Post
nospor
post
Post #12





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Proszę bardzo:
sortowanie kubełkowe

Cytat
Jest on najczęściej stosowany, gdy liczby w zadanym przedziale są rozłożone jednostajnie, ma on wówczas złożoność Θ(n). W przypadku ogólnym pesymistyczna złożoność obliczeniowa tego algorytmu wynosi O(n2).

Poza tym nawet w przypadku optymalnym nie jest to tylko jedna iteracja.
Wyliczenie max to jest jedna iteracja niezaleznie czy to jest przypadek optymalny czy nie

Cytat
Albo inny pomysł:
Lecisz pętlą po całej tablicy i zapamiętujesz ile razy wystąpiła dana liczba. Potem już tylko wystarczy wyświetlić odpowiednią ilość liczb:
blinksmiley.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
shazarre
post
Post #13





Grupa: Zarejestrowani
Postów: 8
Pomógł: 1
Dołączył: 9.08.2008

Ostrzeżenie: (0%)
-----


Podejrzewam, że teraz wszyscy czytający ten temat próbują rozkminić co takiego TomASS wymyślił, ale ja Wam mogę z całą pewnością oznajmić, iż nasze (a przynajmniej większości) rozumienie sortowania mija się zdecydowanie z jego własnym. smile.gif
Go to the top of the page
+Quote Post
TomASS
post
Post #14





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

Ostrzeżenie: (0%)
-----


Drogi kolego shazarre.
Cytat
Podejrzewam, że teraz wszyscy czytający ten temat próbują rozkminić

Ja z kolei podejrzewam, że nawet nie zadałeś sobie trudu aby zrozumieć to co napisałem. Nie winię Cię jednak za to - ale nie mierz wszystkich swoją miarą.

Cytat
co takiego TomASS wymyślił

Nie ja to wymyśliłem. Podejrzewam, że wymyślił to twórca wspaniałej książki o algorytmach - Pan Thomas (zbieżność imion?) Cormen. Algorytm "Counting Sort" jest szeroko opisywany np. tutaj (jeśli wolisz czytać po polsku, to proszę bardzo).

Kod w C++ masz tutaj. Nie widzę nigdzie zagnieżdżonych pętli. Złożoność obliczeniowa jest O(n) (dobra, niech będzie O(n+k), zmienna nie ma tutaj znaczenia). Natomiast tutaj masz aplet Javy pokazujący jak to działa.

Cytat
ale ja Wam mogę z całą pewnością oznajmić

Widać jaką miałeś pewność - swoje "widzimisie".

Cytat
nasze (a przynajmniej większości) rozumienie sortowania mija się zdecydowanie z jego własnym

Tak - jakie to jest sortowanie rozumiane przez "większość"? Ja np. mogę zgodzić się z takim pojęciem:

"Sortowanie – jeden z podstawowych problemów informatyki. Polega na uporządkowaniu zbioru danych względem pewnych cech charakterystycznych każdego elementu tego zbioru. Szczególnym przypadkiem jest sortowanie względem wartości każdego elementu, np. sortowanie liczb, słów itp.

Algorytmy sortowania są stosowane w celu uporządkowania danych, umożliwieniu stosowania wydajniejszych algorytmów (np. wyszukiwania) i prezentacji danych w sposób czytelniejszy dla człowieka."


I to właśnie robię algorytmem Counting Sort, mało tego - żąda tego (pośrednio) autor wątku - posortowania i wybór ostatniego/pierwszego elementu. Chciałbym poznać Twoje (większości?) rozumienie słowa "sortowanie".

Wczytując się w niuanse tego algorytmu, znaleźć można zmienną o wartości największego elementu:
  1. <?php
  2. $k = max($tablica);
  3. ?>


otóż, funkcja max() (jak nospor słusznie zauważył: "Wyliczenie max to jest jedna iteracja niezaleznie czy to jest przypadek optymalny czy nie") również działa w czasie O(n) co nie wpływa w żaden sposób na jakość algorytmu (przypominam, że O(k*n) = O(n), gdzie k jest dowolną, ale skończoną wartością).

Aby jeszcze bardziej zobrazować Ci działanie tego algorytmu, pokusiłem się o napisanie go w PHP:

  1. <?php
  2. function countSortTomass($arrToSort){
  3.    $arrSorted = array();
  4.    $k = max($arrToSort);
  5.    $length = count($arrToSort)-1;
  6.    
  7.    $arrTmp = array();
  8.    for ($i=0;$i<=$k;$i++){
  9.        $arrTmp[$i]=0;
  10.    }
  11.    
  12.    for ($i=0;$i<=$length;$i++){
  13.        $arrTmp[$arrToSort[$i]]++;
  14.        $arrSorted[]=0;
  15.    }
  16.    
  17.    for ($i=1;$i<=$k;$i++){
  18.        $arrTmp[$i] = $arrTmp[$i] + $arrTmp[$i-1];
  19.    }
  20.    
  21.    for ($i=$length;$i>=0;$i--){
  22.        $arrSorted[$arrTmp[$arrToSort[$i]]-1]=$arrToSort[$i];
  23.         $arrTmp[$arrToSort[$i]]--;
  24.    }
  25.    return $arrSorted;
  26. }
  27.  
  28. $arrayToSorting = array(1,7,6,10,7,1,5,7,10,3);
  29. $sorted = countSortTomass($arrayToSorting);
  30. echo '<pre>';
  31.    print_r($sorted);
  32. echo '</pre>';
  33. ?>


Nie ma żadnych pętli zagnieżdżonych. Złożoność obliczeniowa to O(n) (dla formalistów O(n+k)).

Kluczowym momentem jest zliczanie elementów:
  1. <?php
  2. for ($i=0;$i<=$length;$i++){
  3.        $arrTmp[$arrToSort[$i]]++;
  4. }
  5. ?>

o którym pisałem wcześniej, lecz kolega shazarre nie raczył tego zagłębić.

odpalając
  1. <?php
  2. $arrayToSorting = array(12,3456,6,9887,0);
  3. $sorted = countSortTomass($arrayToSorting);
  4. echo '<pre>';
  5.    print_r($sorted);
  6. echo '</pre>';
  7. ?>

Także uzyskamy prawidłowy wynik (jak chciał autor postu) w czasie porównywalnym (przy nieskończonej ilości danych w takim samym czasie) co max() czyli O(n) smile.gif

Ten post edytował TomASS 6.04.2009, 23:18:29


--------------------
Go to the top of the page
+Quote Post
krowal
post
Post #15





Grupa: Zarejestrowani
Postów: 561
Pomógł: 72
Dołączył: 15.11.2006

Ostrzeżenie: (0%)
-----


No ale generalnie dyskusja zaczęła się od tego żeby udowodnić że sortowanie da się zrobić JEDNĄ iteracją.
Cytat
TomASSJ: estem w stanie posortować liczby całkowite (bo o takich tu mówię), jedną pętlą for...

Jak widać nie jesteś w stanie smile.gif
Poza tym sortowanie przez zliczanie to nie jest szczyt szczytów jeśli chodzi o przydatność algorytmu bo niestety jak każdy z algorytmów sortowania ten też ma swoje wady. Faktycznie wydajny jest, ale tylko w określonych sytuacjach.


--------------------
Nawet świnka może wejść na drzewo kiedy jest chwalona :)
Go to the top of the page
+Quote Post
TomASS
post
Post #16





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

Ostrzeżenie: (0%)
-----


Po pierwsze:
Cytat
Ta sama, czy zartujesz?

Sytuacja zaczęła się od tego, że twierdziłem, że sortowanie liczb całkowitych ma taką samą złożoność obliczeniową jak max() - co jak widać udowodniłem i nie żartowałem smile.gif

Po drugie:

Cytat
1. @TomASS jak jestes w stanie posortowac dane jedną iteracją to ty jestes normalnie gość
2. no a w tej jednej petli sa kolejne.

Umiem jedną iteracją.
Sortowanie właściwe to jedna pętla - bez żadnych zgłębień kolejnych pętli - jest to robione tak jak max w JEDNEJ itereacji. Reszta forów jest tylko do "znośnej" prezentacji wyników. Po za tym, okej, nawet jakby było 100 forów pod sobą to i tak złożoność obliczeniowa byłaby O(100n) czyli O(n). Ale faktycznie, zwrot że "tylko" jedną mogę posortować nie był przeze mnie idealnie trafiony.

Po trzecie:
Cytat
Poza tym sortowanie przez zliczanie to nie jest szczyt szczytów jeśli chodzi o przydatność algorytmu bo niestety jak każdy z algorytmów sortowania ten też ma swoje wady.

Dla liczb całkowitych ma najlepszą złożoność obliczeniową i jest szczytem szyczytów - znasz algorytm sortowania o lepszej złożoności (nawet z tymi wadami - o których wspomniałem)?

Po czwarte:
Cytat
Faktycznie wydajny jest, ale tylko w określonych sytuacjach.

To zaznaczyłem na samym początku, że chodzi o liczby całkowite, dodatkowo zmienia klucze i jest niestabilny - ale w tym przykładzie nie przeszkadza to niczemu.


Po piąte:
Dzięki za odpowiedzieć - jak widać shazarre podczas gdy nie mógł "rozkminić" stwierdził, że nikt z Was nie doczyta tego, ani nie zrozumie (albo zrozumie na opak) - na szczęście się mylił, co krowal udowodnił smile.gif

Ten post edytował TomASS 7.04.2009, 07:31:56


--------------------
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #17





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


@TomASS:
Cytat
To zaznaczyłem na samym początku, że chodzi o liczby całkowite, dodatkowo zmienia klucze i jest niestabilny - ale w tym przykładzie nie przeszkadza to niczemu.

No wlasnie nie na poczatku...


Cytat
Ta sama złożoność obliczeniowa - O(n)
-> wprowadzasz zamieszanie - nie informujesz ze myslales o sortowaniu tylko liczb calkowitych

Cytat
Odpowiedz mi, bardzo proszę, na dwa pytania:

1. jaką złożoność ma sortowanie?

2. jaką złożoność ma max()?


1. a ktory algorytm?questionmark.gif
zalezy od algorytmu i mozliwosci jego zastosowania od O(n), O(nlog(n)), O(n^2) i w gore
2. O(n), ale i tak bedzie w praktyce szybsze niz jakiekolwiek sortowanie, i mniej pamieci zuzyje niz kubelkowe

Takze, twoje wypowiedzi byly niejasne, niepelne i sie czepiasz ze my sie ich czepiamy.


edit: pozatym Counting Sort:
Cytat
A summary of the algorithm is as follows.
1. Find the highest and lowest elements of the set
- LOL, rzeczywiscie przydatny algorytm do tego konkretnego problemu.

Ten post edytował dr_bonzo 7.04.2009, 08:09:19


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
TomASS
post
Post #18





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

Ostrzeżenie: (0%)
-----


Cytat
wprowadzasz zamieszanie - nie informujesz ze myslales o sortowaniu tylko liczb calkowitych

Jasno napisałem już w pierwszym/drugim poście:
Cytat
liczby całkowite (bo o takich tu mówię)


Cytat
1. a ktory algorytm?

Zazwyczaj pyta się o minimalną złożoność - nie o maksymalną.

TomASS (pierwszy post): Ta sama złożoność obliczeniowa - O(n)
dr_bonzo: Ta sama, czy zartujesz?

TomASS:
1. jaką złożoność ma sortowanie?
2. jaką złożoność ma max()?

Dalej twierdzę, że dla liczb całkowitych mają takie same złożoności.




Cytat
O(n), O(nlog(n)), O(n^2)

nawet O(n^n) albo nawet O(!n^!n) i co z tego? Minimalna dla liczb całkowitych to taka sama jak dla max().

Cytat
O(n), ale i tak bedzie w praktyce szybsze niz jakiekolwiek sortowanie, i mniej pamieci zuzyje niz kubelkowe

Nie mówię o praktyce tylko o złożoności.

Cytat
Takze, twoje wypowiedzi byly niejasne

Bo nie doczytałeś. Mam całą teorię wyłożyć?
Cytat
niepelne

Książkę musiałbym napisać. Dałem linki, powiedziałem jak metody się nazywają - czego chcieć więcej? Później jak krowie na rowie musiałem dać przykłady w różnych językach, aplety itd. aby niektórzy zrozumieli.

Cytat
i sie czepiasz ze my sie ich czepiamy.

Czepiam się, jak ktoś nie doczyta/nie zrozumie i się czepia smile.gif

Cytat
A summary of the algorithm is as follows.
1. Find the highest and lowest elements of the set

I co z tego, jaki to ma wpływ na złożoność - żaden - nadal jest O(n) i jest robione sortowanie w jednej iteracji.

Cytat
- LOL, rzeczywiscie przydatny algorytm do tego konkretnego problemu.


Okej - niech będzie tak jak pisałem O(4n+O(max())+k).

Ten post edytował TomASS 7.04.2009, 08:27:13


--------------------
Go to the top of the page
+Quote Post
nospor
post
Post #19





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




@TomASS w funkcji countSortTomass() korzystasz z max():
$k = max($arrToSort);

no, i tyle w temacie z mojej strony winksmiley.jpg

Napisales mi ze jestes w stanie posortowac jedną iteracją a nie jestes. na dodatek by posortowac uzywasz funkcji, co do której pisales ze jestes w stanie zrobic tak samo szybko jak ona winksmiley.jpg

Podsumowując temat:
do wyliczenia wartosci maksymalnej uzywa sie algorytmu do wyliczenia wartosci maksymalnej a nie sortowania smile.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
TomASS
post
Post #20





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

Ostrzeżenie: (0%)
-----


Cytat
@TomASS w funkcji countSortTomass() korzystasz z max():
$k = max($arrToSort);

Się pytam - i co z tego? Tak zgadza się, coś co używa max() musi być wolniejsze niż samo max() - to oczywiste, ale może mieć tą samą złożoność obliczeniową.

Cytat
a to z sortowaniem uznajmy za ciekawostkę

i w kategorii ciekawostki to traktuję
Cytat
do wyliczenia wartosci maksymalnej uzywa sie algorytmu do wyliczenia wartosci maksymalnej a nie sortowania

oczywiście, że do wartości maksymalnej służy funkcja max(), nigdzie nie twierdziłem inaczej.

Cytat
o do której pisales ze jestes w stanie zrobic tak samo szybko jak ona

Nie pisałem, że tak samo szybko, tylko mają taką samą złożoność (jest różnica pomiędzy szybkością a złożonością)

Cytat
Napisales mi ze jestes w stanie posortowac jedną iteracją a nie jestes

Jedną iteracją miałem na myśli, bez pętli zagnieżdżonych, Ty zresztą też:
Cytat
no a w tej jednej petli sa kolejne.

i nie ma pętli w pętli. A jesteś pewien, że w max() nie ma kilku pętli pod sobą (dla różnych argumentów)?

podsumowując:
Cytat
do wyliczenia wartosci maksymalnej uzywa sie algorytmu do wyliczenia wartosci maksymalnej a nie sortowania

a do tego (cytat z mojego pierwszego postu) sortowanie liczb całkowitych i max() to:
Cytat
Ta sama złożoność obliczeniowa - O(n)


Ten post edytował TomASS 7.04.2009, 08:59:09


--------------------
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 07:22