Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Funkcja wybierająca największą wartość
Forum PHP.pl > Forum > PHP
impimp94
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
Spawnm
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. ?>
dr_bonzo
Taaa, sortowanie, przeciez to bez sensu skoro jest wlasnie max()
Spawnm
no to przecież podałem tongue.gif

a to z sortowaniem uznajmy za ciekawostkę winksmiley.jpg
TomASS
Cytat
Taaa, sortowanie, przeciez to bez sensu skoro jest wlasnie max()


Ta sama złożoność obliczeniowa - O(n) winksmiley.jpg
dr_bonzo
Ta sama, czy zartujesz? smile.gif
TomASS
Odpowiedz mi, bardzo proszę, na dwa pytania:
1. jaką złożoność ma sortowanie?
2. jaką złożoność ma max()?
nospor
@TomASS jak jestes w stanie posortowac dane jedną iteracją to ty jestes normalnie gość winksmiley.jpg
TomASS
Jestem w stanie posortować liczby całkowite (bo o takich tu mówię), jedną pętlą for...
nospor
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
TomASS
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. ?>
nospor
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
shazarre
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
TomASS
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
krowal
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.
TomASS
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
dr_bonzo
@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.
TomASS
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).
nospor
@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
TomASS
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)
Spawnm
posortować jedną pętlą raczej się nie da , ale wybrać największą wartość bez problemu , a o tym temat smile.gif
TomASS
Cytat
posortować jedną pętlą raczej się nie da , ale wybrać największą wartość bez problemu , a o tym temat

masz rację: główny temat tak
ja jednak zapoczątkowałem dyskusję na temat:
Cytat
Ta sama złożoność obliczeniowa - O(n)


Komentarz przy max():
Cytat
ries at vantwisk dot nl
09-Nov-2008 02:36:
I had several occasions that using max is a lot slower then using a if/then/else construct. Be sure to check this in your routines!

Ries


czyli coś w tym jest. Nie koniecznie musi być tylko jedna pętla.
nospor
tak, zaczales, ale skonczyles tekstem do mnie:
Cytat
jedną pętlą for...

winksmiley.jpg

No ale skonczmy juz, bo odchodzimy od tematu
Kocurro
TomASS - pokazałem właśnie w pracy Twoje posty w tym wątku profesorowi co wykłada algorytmy. Jeszcze nigdy nie widziałem by tak głośno się śmiał. W tym co tutaj napisałeś popełniłeś tyle błędów, że rzadko, który student potrafi tak namotać w pojedynczym zadaniu smile.gif

Bez obrazy - po prostu chciałeś coś udowodnić i Ci się nie udało (sam też często tak mam - ale przynajmniej wtedy można się pośmiać biggrin.gif )

Pozdrawiam,
Łukasz
TomASS
Cytat
TomASS - pokazałem właśnie w pracy Twoje posty profesorowi co wykłada algorytmy.

Ta - już biegłeś do profesora - bez urazy - pewnie na Uniwerku? Zapytaj się jego czy czytał Cormen'a - bo to jest właśnie algorytm z jego książki (sam sobie go nie wymyśliłem) i wyraźnie jest napisane O(n).

Dowiedziałem się o tym algorytmie podczas dyskusji z doktorem na laboratorium (wybacz, że nie z profesorem na wykładzie), na temat:

ktoś rzucił, że należy stosować standardowe funkcje STL z algorithm, a nie wymyślać własne, bo one są do tego stworzone, długo nad tym ludzie myśleli i na pewno są najlepsze jakie wymyślono. Zrobiliśmy eksperyment i znaleźliśmy czysty kod funkcji sort(), okazało się, że są dwie zagnieżdżone pętle - złożoność O(n^2). W Cormenie natomiast doczytaliśmy, że sortowanie liczb całkowitych da się w O(n) - napisaliśmy funkcję, policzyliśmy złożoność i okazało się, że tak - O(n) i rzeczywiście nie należy wszędzie, bezmyślnie, stosować gotowych funkcji bo nie zawsze są optymalne dla danego zadania.


Cytat
Jeszcze nigdy nie widziałem by tak głośno się śmiał.

Na zdrowie - niczego to nie dowodzi.
Cytat
W tym co tutaj napisałeś popełniłeś tyle błędów, że rzadko, który student potrafi tak namotać w pojedynczym zadaniu
Masz jakiś przykład czy puste słowa?

Cytat
Bez obrazy - po prostu chciałeś coś udowodnić i Ci się nie udało

umiesz odpowiedzieć - co chciałem udowodnić?

@nospor:
skoczył to shazarre, mierząc Was jego miarą.
dr_bonzo
Cytat(TomASS @ 7.04.2009, 09:23:16 ) *
Jasno napisałem już w pierwszym/drugim poście:

Trzecim... wystarczy policzyc

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

Zgadza sie, ale nie napisales jeszcze ze myslisz o sortowaniu TYLKO liczb calkowitych.



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

A ja przeciez nie zaprzeczam, ze kubelkowe ma O(n).



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


No i jedna iteracja to jedna petla for - w kubelkowym masz ich wiecej niz jedna,
chociaz to nadal ma zlozonosc O(n)




Cytat
przypominam, że O(k*n) = O(n), gdzie k jest dowolną, ale skończoną wartością

AFAIK to k musi byc stałą, np. algorytm wykonuje zawsze 10 petli for == O( 10 * n ) == O(n)
ale masz zlozonosc/algorytmu pseudowielomianowe gdzie niby tez masz O(B*n) ale B jest np. najwieksza
liczba w zbiorze na ktorym operujesz.
Bo n tez jest skonczona wartoscia, a O( n * n ) to O (n^2) a nie O(n), nie? smile.gif


Cytat
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.

Chodzilo mi tylko o to ze problem glowny z topiku jest rozwiazywany przez pierwszy krok tego algorytmu sortowania.
A ze zlozonosc ma nadal O(n) to nie przecze.


@nospor
Cytat
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

Ta sama zlozonosc algorytmu to nie to samo co "zrobic tak samo szybko jak ona" smile.gif
W tej teorii 100 petli for (po wszystkich elementach ktore sortujemy) ma taka sama zlozonosc co jedna - a przeciez wiadomo ze jedna sie wykona szybciej od 100 (powiedzmy puste przebiegi - zeby nie bylo niedomowien)

smile.gif
nospor
Cytat
Ta sama zlozonosc algorytmu to nie to samo co "zrobic tak samo szybko jak ona"
hihi, ale ja nie czepiam sie zlozonosci, ale tego jego tekstu:
Cytat
jedna petla for...

winksmiley.jpg
TomASS
@dr_bonzo
Widzisz jak się rozumiemy smile.gif
Zgadzam się z Tobą - dzięki za poświęcenie czasu.

Masz rację jest to pseudowielomianowa złożoność - formalisto smile.gif

P.S.
Z tym nieodpowiadaniem na moje dwa pierwsze pytania to był niezły wybieg smile.gif

@nospor:
tak jak pisałem - niefortunnie użyłem tutaj zwrotu "jedną pętlą"


konkluzja taka, że nie wszystkie funkcje stworzone przez autorów bibliotek działają najszybciej jak to możliwe.
Cytat
W tej teorii 100 petli for (po wszystkich elementach ktore sortujemy) ma taka sama zlozonosc co jedna - a przeciez wiadomo ze jedna sie wykona szybciej od 100 (powiedzmy puste przebiegi - zeby nie bylo niedomowien)

Czyli może warto napisać samodzielnie funkcję max pod konkretny problem? Może w funkcji max są nadmiarowe elementy dla szczególnych przypadków?
Kocurro
TomASS - nie biegłem a sam przyszedł do pokoju w którym pracuję.

Cytat
Dowiedziałem się o tym algorytmie podczas dyskusji z doktorem na laboratorium (wybacz, że nie z profesorem na wykładzie), na temat:


No właśnie - wiesz, że gdzieś dzwonią (bo powiedział Ci o tym prowadzący laboratorium) ale nie wiesz gdzie.

Cytat
umiesz odpowiedzieć - co chciałem udowodnić?


Chyba sam nie wiesz co chciałeś udowodnić smile.gif

W zasadzie - może i miałbyś rację. Ale rację trzeba umieć też przedstawić i obronić. Tobie się to nie udało, czytając Twoje kolejne posty coraz bardziej zmieniałeś zdanie itp. I właśnie z tego śmiał się profesor.

Bo to, że zawsze są rozwiązania dotyczące konkretnego problemu, które są lepsze od rozwiązań ogólnie stosowanych wie każde dziecko smile.gif

Z tego co ja tutaj widzę - nie obroniłeś swojej tezy.

Pozdrawiam,
Łukasz

--- edit ---

Cytat
Czyli może warto napisać samodzielnie funkcję max pod konkretny problem? Może w funkcji max są nadmiarowe elementy dla szczególnych przypadków?


To jest oczywista oczywistość, że coś pisane pod konkretny problem jeśli jest dobrze napisane, będzie o wiele lepsze od rozwiązań ogólnych. I co do tego to się z Tobą w zupełności zgadzam.
dr_bonzo
TomASS:
Cytat
Masz rację jest to pseudowielomianowa złożoność - formalisto

Formalizm, nieformalizm - mi chodzi o precyzje wypowiedzi - myslisz o jednym (sortowaniu liczb calkowitym), mowisz o drugim (ogolnie o sortowaniu) i sie dziwisz ze zle cie rozumiemy (twoje mysli). Wmawiasz nam jeszcze ze od *poczatku* mowiles o sortowaniu liczb calkowitych - tylko zauwaz kiedy zaczalem sie twoich wypowiedzi czepiac, przed pierwszym slowem "calkowite".
edit: Chodzilo mi tez tutaj o precyzje okreslenia wartosci k w O (n * k ) - bo to zmienia postac rzeczy....

Cytat
Z tym nieodpowiadaniem na moje dwa pierwsze pytania to był niezły wybieg


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

Te czy jakie?

=======
edit2:
Cytat
konkluzja taka, że nie wszystkie funkcje stworzone przez autorów bibliotek działają najszybciej jak to możliwe.

Bo maja byc najlepsze dla przecietnych problemow. Chyba do sorta nie wlozysz
if ( tablica_za_wiera_tylko_integery_z_dosyc_malego_przedzialu )
{
uzyj_kubelkowatego($tablica)
}
else
{
qsort()
}

zazwyczaj qsort wszystkim wystarcza, jak musisz miec super wydajnosc sortowania intow to sobie to zoptymalizujesz,
wezmiesz np. sortowanie kubelkowe

Cytat
tak jak pisałem - niefortunnie użyłem tutaj zwrotu "jedną pętlą"

Precyzja precyzja precyzja wypowiedzi, w matematyce/algorytmach TRZEBA sie precyzyjnie wypowiadac, inaczej zmieniasz sens
krowal
Aby zakończyć temat napiszę funkcję do znajdywania max liczby z tablicy, i uwaga... zrobię to JEDNĄ iteracją tongue.gif
  1. <?php
  2. $max = null;
  3. foreach($array as $value){
  4.  $max = ($value > $max) ? $value : $max;
  5. }
  6. ?>
Spawnm
Krowal to co napisałeś jest oczywiste, ale
rozmowa się toczyła na temat sortowania .
dr_bonzo
krowal: a co jak mam liczby array( -1, -100, -10, -5 ) ?
krowal
Kurde bonzo, zasiałeś ziarno niepewności i musiałem sprawdzić, oczywiście otrzymasz -1 ze swojego zbioru smile.gif

Edit:
@Spawnm, tak wiem, że o sortowaniu, nawet coś tam napisałem wcześniej, ale ta dyskusja teraz polega na cytowaniu każdego zdania przedmówcy i odbijaniu piłeczki, imo to już nie dyskusja smile.gif
dr_bonzo
krowal: chodzilo mi o to ze
-2 > null da ci false, i na koniec $max bedzie NULLem.

Ale, wtf, bo wlasnie to zwraca TRUE, przez co skrypt zadziala prawidlowo, a przyjalem ze NULL zostanie skonwertowany do 0.
A dodatkowo obslgua nulla nie jest konsekwentna jak w SQLu, gdzie kazde porownanie z NULLem daje false.

  1. <?php
  2. var_dump( -1 < null );
  3. var_dump( -1 > null );
  4. var_dump( -1 + null );
  5. ?>


daje
Kod
bool(false)
bool(true)
int(-1)


kocham php...

sorki za zamieszanie
krowal
Nooo.. żeby inne języki się nie gniewały to można zrobić tak:
  1. <?php
  2. foreach($array as $value){
  3.  $max = isset($max) ? ($value > $max) ? $value : $max : $value;
  4. }
  5. ?>

winksmiley.jpg
phpion
Cytat(krowal @ 7.04.2009, 19:40:52 ) *
Aby zakończyć temat napiszę funkcję do znajdywania max liczby z tablicy, i uwaga... zrobię to JEDNĄ iteracją tongue.gif
  1. <?php
  2. $max = null;
  3. foreach($array as $value){
  4.  $max = ($value > $max) ? $value : $max;
  5. }
  6. ?>

Dla ścisłości: nie zrobisz tego jedną iteracją tylko jedną pętlą. W skrócie można stwierdzić, że iteracja to pojedynczy "przebieg" pętli, a twój kod będzie wykonywał tyle iteracji ile jest elementów w tablicy.
krowal
I pozamiatane smile.gif Faktycznie racja, w szale pisania postów zapomniało się o znaczeniu słów.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.