Prezentowane materiały są przeznaczone dla uczniów szkół ponadgimnazjalnych Autor artykułu: mgr Jerzy Wałaszek |
©2014 mgr
Jerzy Wałaszek
|
Zadanie znajdowania elementu maksymalnego lub minimalnego jest typowym
zadaniem wyszukiwania, które rozwiązujemy przy pomocy algorytmu wyszukiwania
liniowego. Za tymczasowy maksymalny (minimalny)
element przyjmujemy pierwszy element zbioru. Następnie element tymczasowy
porównujemy z kolejnymi elementami. Jeśli któryś z porównywanych elementów
jest większy
(mniejszy) od elementu tymczasowego, to za nowy
tymczasowy element maksymalny (minimalny)
przyjmujemy porównywany element zbioru. Gdy cały zbiór zostanie
przeglądnięty, w elemencie tymczasowym otrzymamy element maksymalny
(minimalny) w zbiorze.
Poniżej podajemy algorytm wyszukiwania max. Wyszukiwanie min wykonuje się identycznie, zmianie ulega tylko warunek porównujący element tymczasowy z elementem zbioru w kroku K03.
Algorytm wyszukiwania elementu maksymalnego w zbiorzeWejście
Wyjście:tmax – wartość elementu maksymalnego. Zmienne pomocnicze
Lista kroków:
Czasami zależy nam nie tylko na wartości elementu maksymalnego (minimalnego), lecz również na jego pozycji w zbiorze. W tym przypadku musimy, oprócz wartości samego elementu maksymalnego (minimalnego), zapamiętywać jego pozycję, którą na końcu zwracamy jako wynik pracy algorytmu.
Algorytm wyszukiwania pozycji elementu maksymalnego w zbiorzeWejście
Wyjście:pmax – pozycja (indeks)
elementu maksymalnego Zmienne pomocnicze
Lista kroków:
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Ćwiczenia
Dany jest zbiór liczb (pierwsza liczba określa liczbę
elementów):
390 -2250 -7552 -4064 410 5962 6322 7079 4722 -608 9078 -2298 -5421 3009 -8412 4516 1466 330 9176 6659 5201 -8953 -3400 -8677 9568 5363 518 8663 -522 -6287 -8246 3441 -7882 -1176 6717 -2035 -9981 6657 -7370 2711 5098 8257 2966 -4485 9298 -3258 4530 3240 9349 -8542 5988 -2587 5116 4152 2928 7919 9516 8569 -553 1624 8562 -1058 6431 8288 3808 932 -450 -2383 -410 9418 -2039 -4996 3680 3914 -9441 4438 1250 3257 3988 -3247 4323 1407 -1633 1530 2605 6006 4131 -1323 7233 -2301 3358 -8613 -9685 -9834 3892 -8592 2506 -62 -8679 5573 -485 -3429 1601 -399 -5717 9491 5352 8558 8281 2515 7425 -8299 -7282 1306 -9728 -2759 317 472 2119 -1402 2296 3688 -1519 9366 -1544 5264 -6624 2423 9450 2233 9575 2079 -2533 -6483 -840 -213 -6685 -3501 -4757 -2309 5522 4780 8627 -4850 3451 8971 65 1277 -125 7255 7893 4792 712 2465 -86 3779 -8782 6885 2141 5839 8475 9825 -9279 5881 9022 1495 4260 -732 5313 -5789 831 149 8770 3387 1089 -3726 804 8906 6041 1627 1879 -3637 -2298 9253 5545 -1658 2687 8569 272 -947 6529 2735 -1230 -3052 9405 8682 7035 -718 1310 3858 4636 5818 4348 1045 5572 7513 5698 -868 6113 5070 2592 -7988 5906 875 9648 -1149 -4780 623 1769 8944 9034 -3905 2598 -7089 7657 -2712 3604 4522 -9430 7030 -1730 8719 1005 8434 -4807 -8783 7981 -8898 -2480 8193 -5624 880 -4883 2953 -9492 -3056 1548 8109 -9247 -7469 6528 6912 7129 9876 1026 -25 6744 3990 2302 7633 -2333 9658 6652 -5038 5035 4161 2704 3 1495 2241 -991 -2726 -2348 904 5114 3465 -6788 3794 306 6424 1287 9515 7964 4673 1460 868 -2257 720 8534 4117 -2189 -3720 5344 7927 -9552 276 -1137 9023 -2153 -6462 -2182 1019 5102 7840 3354 7469 1245 1060 -9478 -3511 3610 -1923 5790 8174 9781 1228 6836 -7386 6691 -5951 892 -1346 7915 -11 9590 5669 8274 -4469 -1712 5734 -8472 -9082 -1299 1668 -5713 3466 7029 4056 -2352 7282 -2081 7628 -5604 9461 -1409 -2667 -2685 -5928 8112 6195 -9097 977 -5728 -887 -738 -446 5375 9788 -1542 8177 8934 9228 1817 8040 1032 -2349 -4163 911 -5958 833 4553 6636 2626 -7116 4688 7382 9377 5272 1374 -8035 -1952 -8701 -1341 -4293 8957 -146 -3260 -5738 6643 -2509 8416
Napisz programy, które w tym zbiorze znajdą:
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Jednoczesne wyszukiwanie max i minJeśli do wyszukiwania elementu max i min zastosujemy standardowy algorytm, to otrzymamy: Wejście
Wyjście:tmax – wartość elementu maksymalnego. Zmienne pomocnicze
Zastanówmy się, czy można uzyskać lepszy wynik. Algorytm porównuje każdy
element zbioru z Wyobraźmy sobie, iż ze zbioru bierzemy parę 2 elementów i porównujemy je ze sobą. Element większy nie może być minimalnym, zatem nie musimy go już porównywać z tmin. Wystarczy porównanie z tmax. To samo dotyczy elementu mniejszego – porównujemy go tylko z tmin. Otrzymujemy zysk – poprzednio dwa elementy wymagały wykonania 4 porównań (każdy z tmin i tmax). Teraz mamy:
Jedno porównanie dwóch elementów, które rozdzieli je na
element mniejszy i element większy.
Daje to 3 porównania zamiast 4. Ponieważ ze zbioru pobieramy po dwa kolejne elementy, to ich liczba musi być parzysta. Jeśli zbiór ma nieparzystą liczbę elementów, to po prostu dublujemy ostatni element i dostaniemy parzystą liczbę elementów. Porównanie pary elementów dzieli zbiór na dwa podzbiory – zbiór elementów większych i mniejszych. W podzbiorze elementów większych szukamy elementu maksymalnego, a w podzbiorze elementów mniejszych szukamy minimalnego. Ponieważ ich liczebność jest o połowę mniejsza od liczebności zbioru wejściowego, to wykonamy mniej operacji porównań. Metoda rozwiązywania problemów przez podział na mniejsze części w informatyce nosi nazwę Dziel i Zwyciężaj (ang. Divide and Conquer). Dzięki niej często udaje się zmniejszyć złożoność obliczeniową wielu algorytmów.
Algorytm jednoczesnego wyszukiwania max i min w zbiorzeWejście
Wyjście:tmax – wartość elementu maksymalnego. Zmienne pomocnicze
Lista kroków:
|
I Liceum Ogólnokształcące |
Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl
W artykułach serwisu są używane cookies. Jeśli nie chcesz ich otrzymywać,
zablokuj je w swojej przeglądarce.
Informacje dodatkowe