Avatar billede tuba Nybegynder
21. oktober 2002 - 11:29 Der er 27 kommentarer og
1 løsning

største værdi i et array

jeg har et array der indeholder 3 værdier, heltal. Hvordan finder jeg den største værdi i arrayet ?
Avatar billede chries Nybegynder
21. oktober 2002 - 11:32 #1
iterer igennem og husker på det største tal du har mødt ?
Avatar billede dk_akj Nybegynder
21. oktober 2002 - 11:34 #2
lav en .sort på dit array, så har du den største værdi i sidste element.

//akj
Avatar billede erikjacobsen Ekspert
21. oktober 2002 - 11:34 #3
Absolut kun 3 vædier?

int max=a[0];
if (a[1]>max) max=a[1];
if (a[2]>max) max=a[2];
Avatar billede krukken Juniormester
21. oktober 2002 - 11:45 #4
Du sammenligner de tre tal! Start med at ligge de første tal over i en variabel X. Næste gang du sammenligner skal værdien kun ligges over i variavlen hvis den er større end den værdi osm allerede ligger i X! Tilsids har du så det højeste tal i arrayet!
Avatar billede disky Nybegynder
21. oktober 2002 - 11:47 #5
dk_aki
At sortere et array med kun 3 elementer er totalt overkill:

rubberglove:
Brug erik's løsning.
Avatar billede dk_akj Nybegynder
21. oktober 2002 - 11:49 #6
Overkill måske men det kan løses på en kodelinie og virker selvom der pludseligt er 4  eller flere elementer i array'et.

//akj
Avatar billede rj7971 Nybegynder
21. oktober 2002 - 12:06 #7
Disky... Da sort benytter en quicksort rutine vil dette som regel altid være hurtigst!
Avatar billede erikjacobsen Ekspert
21. oktober 2002 - 12:10 #8
En quicksort er meget langsommere end et lineært gennemløb, som
er tilstrækkeligt for at finde max. Altså: overkill.
Avatar billede dk_akj Nybegynder
21. oktober 2002 - 12:15 #9
Bare af nysgerrighed...
Hvor mange mili/micro/namo sekunder vil en .sort løsning være ift. alm sammenligning ??

//akj

Ps: Håber ikke jeg har startet en religionskrig :o)
Avatar billede erikjacobsen Ekspert
21. oktober 2002 - 12:18 #10
Overhovedet ikke. Det handler ikke om tro, men om fakta.
Og hastigheden afhænger af størrelsen af det pågældende array.
Da lineær søgning altid er hurtigst, er det omsonst at begynde
at sætte tal på.
Avatar billede rj7971 Nybegynder
21. oktober 2002 - 12:30 #11
Quicksort = n*log(n) performance
Gennemløb = n performance

Det er rigtig nok, men stadig væk skal der også tænkes på at man sommetider vil have mindste værdien af et array!

Denne godt findes i et smæk, men det kræver at du koder en del for at finde begge del. Hvis du ligger mindste og største værdi i to seperate funktioner vil du have 2 gennemløb på n performance, hvilket vil være dårligere end n*log(n) performance hvor du vil kunne finde begge elementer.

Efter du har sortere vil oxo kunne benytte en binær søgning til at finde en værdi i arrayet.
Avatar billede rj7971 Nybegynder
21. oktober 2002 - 12:31 #12
Sorry for mit dårlige dansk :-)
Avatar billede chries Nybegynder
21. oktober 2002 - 12:31 #13
nu er der ingen der tvinger dig til at lade være med at finde både max og min i et gennemløb
Avatar billede erikjacobsen Ekspert
21. oktober 2002 - 12:33 #14
Du har ikke ret, rj7971. At finde max og min er stadig markant
billigere end at sortere, uanset sorteringsmetode.
Avatar billede disky Nybegynder
21. oktober 2002 - 12:36 #15
rj7971:
Korrekt ved større talmængder, men startop tiden er stor for quicksort, den er også rekursiv (oftest) hvilket resulterer i stort forbrug af stack.

Forresten er quicksorts tidskomplextitet kun n*log(n) normalt, i værste tilfælde er den n^2 (når data ligger i perfekt omvendt rækkefølge)

En gennemløb med en komplexitet på O(n) er ALTID hurtigere end quicksort !

dk_aji:
Man skal ikke bruge en smart sorteringsalgoritme når man kun har 3 data, en dygtig programmør vælger værktøj efter problemstilling.
Hvis man senere skal finde max værdi i 100000 elementer er gennemløb stadigvæk det hurtigste :)
Avatar billede dk_akj Nybegynder
21. oktober 2002 - 12:38 #16
Oki, så har jeg da også lært noget idag :o)
Avatar billede tuba Nybegynder
21. oktober 2002 - 12:51 #17
dvs at jeg skal bruge erikjakobsens model :

int max=a[0];
if (a[1]>max) max=a[1];
if (a[2]>max) max=a[2];

cool nok med lidt diskussion... poster du et svar
Avatar billede erikjacobsen Ekspert
21. oktober 2002 - 12:55 #18
Mig - nej. Jeg samler ikke på ligegyldige point.
Avatar billede rj7971 Nybegynder
21. oktober 2002 - 13:00 #19
disky:
Taget fra JDK dokumentationen:
The sorting algorithm is a tuned quicksort, adapted from Jon L. Bentley and M. Douglas McIlroy's "Engineering a Sort Function", Software-Practice and Experience, Vol. 23(11) P. 1249-1265 (November 1993). This algorithm offers n*log(n) performance on many data sets that cause other quicksorts to degrade to quadratic performance.

Det vil dog sige at den også kan rygge ned i n^2 men dette sker sjældent!
Avatar billede erikjacobsen Ekspert
21. oktober 2002 - 13:05 #20
Men, rj, uagtet dette er denne sortering langt dårligere end et
enkelt lineært gennemløb - eller 2.
Avatar billede arne_v Ekspert
21. oktober 2002 - 13:29 #21
"vil du have 2 gennemløb på n performance, hvilket vil
være dårligere end n*log(n)" er noget sludder.

To O(n) algoritmer giver stadig en O(n) algoritme.
Avatar billede rj7971 Nybegynder
21. oktober 2002 - 13:33 #22
Arne:
to O(n) algoritner = O(2n) algoritme
Avatar billede arne_v Ekspert
21. oktober 2002 - 13:37 #23
" i værste tilfælde er den n^2 (når data ligger i perfekt
omvendt rækkefølge)" gælder ikke quicksort generelt men
kun quicksort med første eller sidste element som pivot
element.

(hvorfor de fleste vel tager midterste element som pivot element)
Avatar billede arne_v Ekspert
21. oktober 2002 - 13:39 #24
rj7971:
Der er ikke noget der hedder en O(2n) algoritme.
O(n) betyder at tid er proportilnal med n (og det "er"
2n også).
Avatar billede rj7971 Nybegynder
21. oktober 2002 - 13:39 #25
Sorry Arne, jeg har lige skrevet noget pjat..... Sorry.... Det er min fejl...

Men jeg vil stadig sige at hvis man har to gennemløb af n performance
altså n + n, vil en n*log(n) være teoretisk hurtigere
Avatar billede erikjacobsen Ekspert
21. oktober 2002 - 13:43 #26
Nej, rj, log(n) er større end 2 for alle interessante n. For små n gælder
n*log(n) jo alligevel ikke.
Avatar billede arne_v Ekspert
21. oktober 2002 - 13:44 #27
Nej.

n              2*n        n*log10(n)
1                2                0
10              20            10
100          200            200
1000        2000          3000
1000000 2000000    6000000
Avatar billede tuba Nybegynder
27. juli 2003 - 15:04 #28
lukket
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester