• Nie Znaleziono Wyników

elementy-analizy_alg..>

N/A
N/A
Protected

Academic year: 2021

Share "elementy-analizy_alg..>"

Copied!
6
0
0

Pełen tekst

(1)

ELEMENTY ANALIZY ALGORYTMÓW

1. Każdy algorytm powinien wykazywać następujące cechy:

 poprawność – rozwiązuje zadany problem, dla którego go utworzono

 skończoność – realizuje program dla wszystkich danych

 złożoność i efektywność – rozwiązuje problem dobrze wykorzystując zasoby sprzętowe. 2. Poprawność:

 całkowita poprawność – dla wszystkich danych wejściowych obliczenia zostaną zakończone

 częściowa poprawność – dla wszystkich danych, dla których obliczenia się zakończą wyniki będą poprawne.

 dobra określoność – polecenia i operacje są zrozumiałe dla użytkownika i kolejność jest właściwie określona

 uniwersalność – związana jest z problemem, który algorytm rozwiązuje,

umożliwienie rozwiązania wszystkich zadań zgodnych ze specyfikacją problemu. Przykład: Analiza algorytmu iteracyjnie (wielokrotne powtarzanie) rozwiazującego

a wprowadź n

b zmiennej silnia nadaj wartość 1 c zmiennej i nada j wartość 1

d zmiennej silnia przypisz jej wartość pomnożoną przez i e zwiększ wartość i o 1

f jeżeli i > n idź do g, jeśli nie idź do d g wyprowadź wynik: silnia

Dla każdej wprowadzone danej wynik silnia spełnia warunek końcowy, dla wszystkich wprowadzonych danych obliczenia kończą się. Ewentualne przyszłe sygnalizowane przez program błędy będą konsekwencją tylko i wyłącznie złego zapisu w konkretnym języku programowania (składniowe, nie logiczne)

Implementacja w JavaScript: function Silnia_I(n) { wynik = 1; for (k = 1; k <= n; ++k) { wynik *= k; } return wynik; }

(2)

Zadanie. Sprawdź działanie algorytmu dla n = 5.

3. Skończoność algorytmu polega na tym, że algorytm gwarantuje rozwiązanie problemu w skończonej liczbie kroków. Poniższy algorytm ma za zadanie wypisać wszystkie liczby naturalne nieparzyste z zadanego przedziału:

podaj a podaj b

sprawdź nieparzystość a dopóki a parzyste wykonuj zwiększ wartość a o 2 wypisz a

Brakuje sprawdzenia nieparzystości a na początku. Pętla nie znajdując nieparzystego a będzie w nieskończoność dodawać 2. Należałoby po sprawdzeniu nieparzystości i uzyskaniu wartości logicznej 0 dodać jeden do bieżącej wartości a.

4. Zadanie: Podaj własny przykład błędnego, nieskończonego algorytmu.

5. Złożoność obliczeniowa algorytmu – zależy od liczby niezbędnych do ukończenia działania operacji. Zależy od wielkości zbioru danych, na jakich pracuje algorytm. Np. Wypisywanie elementów bez powtórzeń wymaga obok zdefiniowania samej tablicy wymaga kilku

kroków: wylosowanie, zaokrąglenia, sprawdzenia wartości logicznych wyrażeń, wypisanie. Podstawowe operacje to losowanie i porównanie. Zwiększenie ilości wymiarów tablicy spowoduje zwiększenie liczby kroków.

<script type="text/javascript"> <!-- <![CDATA[

ile = 6; // ile elementów losujemy

elementy = new Array( 'jeden', 'dwa', 'trzy', 'cztery', 'pięć', 'sześć', 'siedem', 'osiem', 'dziewięć', 'dziesięć' ); l=new Array(); for (i=0;i<ile;i++) { los = Math.round(Math.random()*(elementy.length-1)); jest = false;

for (j=0;j<l.length;j++) if (l[j]==los) jest=true; if (jest) i--; else l[i] = los;

}

for (i=0;i<ile;i++) document.write(elementy[l[i]]+" ");

(3)

// ]]> --> </script>

6. Zadanie: Powyższą implementację w JavaScript zapisz w postaci pseudojęzyka (jak w punkcie2).

7. Złożoność pamięciowa to wielkość pamięci niezbędna do wykonania, czyli wielkość pamięci zajmowana przez zmienne i pliki programu. Szczególnie obciążają pamięć

algorytmy rekurencyjne (odwołujące się do samej siebie). Dane są układane na stos (liniowa struktura danych, ww której dane są układane na „wierzch” i z niego pobierane. Wielkość zajmowanej pamięci zależy od głębokości rekurencji.

8. Efektywność algorytmu polega na tym, że rozwiązuje on dany problem w możliwie najmniejszej liczbie kroków, co przekłada się na czas, i przy najmniejszym obciążeniu pamięci. Ocenia się ją w praktyce. Dobrym przykładem może być przeszukiwanie zbioru liczb naturalnych w poszukiwaniu liczb pierwszych – podniesienie górnej granicy

wyszukiwania znacząco wpłynie na czas pracy, gdyż liczba operacji rośnie znacząco. 9. Przykłady algorytmów zawierających błędy – znajdź je:

 algorytm sprawdzający czy słowo jest palindromem: 1. znajdź ilość liter słowa n

2. sprawdź czy f (n) = f (1), gdzie f (n) to litera na n-tej pozycji

3. sprawdź czy dla każdego k < n/2 jest spełniony warunek: f (k) = f (n – k) 4. jeżeli 2 i 3 spełnione to jest to palindrom

 algorytm sortowania bąbelkowego:

1. wczytaj elementy do tablicy (jednowymiarowej) o rozmiarze n

2. dla wszystkich par sąsiednich elementów sprawdź czy t[i] > t[i-1] - jeśli nie zamień je miejscami

3. powtórz procedurę z punktu 2 n razy 4. wypisz posortowane elementy Przykład sortowania bąbelkowego w JavaScript

<html>

<head> </head> <body>

<input onclick="main()" type="button" value="Sortuj" name="B1"> <p id="t_out" style="TEXT-ALIGN: center">...</p>

(4)

<script language=javascript> var N = 20; // Liczebność zbioru. function main()

{

var d = new Array(N); var i,j,x,t;

//losowanie n liczb do tablicy

for(i = 0; i < N; i++) d[i] = Math.floor(Math.random() * 100); t = "Przed sortowaniem:<BR><BR>";

for(i = 0; i < N; i++) t += d[i] + " "; t += "<BR><BR>"; // sortowanie for(j = 0; j < N - 1; j++) for(i = 0; i < N - 1; i++) if(d[i] > d[i + 1]) {

x = d[i]; d[i] = d[i + 1]; d[i + 1] = x; };

// wyświetlenie wynik sortowania t += "Po sortowaniu:<BR><BR>"; for(i = 0; i < N; i++) t += d[i] + " ";

document.getElementById("t_out").innerHTML = t; }

</script> </body> </html>

(5)

Uwaga: Metoda GetElementById() daje dostęp do elementów dokumentu, zwraca jako wartość obiekt.

Kod JavaScript sprawdzający czy dane słowo jest palindromem: <html>

<head>

<script language=javascript> function sprawdz()

{

// odczytanie wprowadzonych danych var s = document.form1.wyraz.value; var i = 0; // numer pierwszego znaku

var j = s.length-1; // numer ostatniego znaku while(i<j)

{

if(s.charAt(i)!=s.charAt(j)) { // znaki różnią się

alert("Nie"); return; } // sprawdzamy dalej i++; j--; }

// sprawdzenie dobiegło pomyślnie do końca alert("Tak");

}

</script> </head>

(6)

<body>

<h1 align=center>Palindromy</h1> <center>

<form name=form1>

Podaj wyraz: <input type=text size=30 name=wyraz> <br><br>

<input type=button value="Sprawdź czy jest palindromem" onClick=sprawdz()> </form>

</center> </body> </html>

Cytaty

Powiązane dokumenty

Przyszłość ta związana jest, jak się wydaje, z możliwością zachowania idei swoistości ludzkiej świadomości, działania i praktyki (jako jawnych dla samych siebie),

Rzucamy dwiema kostkami. Niech zdarzenie A polega na tym, że suma wyników jest równa 4, a B - na tym, że przynajmniej na jednej kostce wypadła liczba parzysta. Z talii 52 kart

Rzucamy dwiema kostkami. Niech zdarzenie A polega na tym, że suma wyników jest równa 4, a B - na tym, że przynajmniej na jednej kostce wypadła liczba parzysta. Z talii 52 kart

Jedyne miejsca, gdzie będziemy używać algorytmu subtypowania to te, gdzie nie będziemy mieli wy- boru, bo inaczej type-checking zakończy się fiaskiem.. Jeżeli f jest typu t1 -&gt;

Projekt jest to przedsięwzięcie, na które składa się zespół czynności, które charakteryzują się tym, że mają:.. 

Na chwilę obecną należy zapoznad się materiałami cw03, cw04 to znaczy dokładnie przeczytad i przeliczyd wszystkie przykłady oraz wykonad zadania.. W sprawie zadao

Szczególnym przypadkiem wzoru Hendersona jest wzór Lewisa  Sargenta, który wykorzystuje się do obliczania potencjał membranowy dla elektrolitów 1:1, o takim samym

Dla uproszczenia implementacji proszę skorzystać z tablicy 10x10, w której skrajne wiersze i kolumny są wypełnione przez ‘c’.. Program powinien zwracać informacje