Algodat Repetitorium - Mitschrift vom 12.06.02 - Informatik

Werbung
Mit schrift zum AlgoDat Rep. 12- 06- 2002
Creat ed by Am an At r i
Algodat Repet it orium - Mit schrift vom 12.06.02
ver1.1
Gegeben sei ein Feld A=
< 4,2,17,…,10> ; die Er m it t lung des Dat ensat zes an einer
best im m t en Posit ion im Feld erfolgt in konst ant er Zeit .
z.B.: A[ 1] = 4 , A[ 2] = 2 , A[ n] = 10
Zum Suchen nach einem best im m t en Elem ent im Feld A:
Suchalgor it hm en:
,WHUDWLYH9DULDQWHGHUOLQHDUHQ6XFKH
A l go r i t hm u s 1 :
Suche(A,n,k)
//A ist das Feld, n Anzahl der Daten im Feld, k die gesuchte
Zahl
{
für i= 1,…..,n
{
if A[i] == k
return (i)
// liefert die Position des gesuchten Elements
zurück
}
return FEHLER;
//falls nix gefunden wurde -> Fehler retournieren
}
%HVFKUHLEXQJ Man übergibt der Prozedur / Met hode “ Suche“ die Par am et er Feld A, die
Länge n des Feldes ( = in unser em Bsp.: Anzahl der Zahlen) , und die gesucht e Zahl N.
Der Algor it hm us geht nun von der HUVWHQ Zahl des Feldes bis zur QWHQ und v ergleicht
sie m it der zu suchenden Zahl N. St im m en beide über ein so, w ird der Feldindex L ( also die
Posit ion von k im Feld A) ret our niert . I st nun unser e Für - Schleife am Ende angelangt
( spr ich i= n) und es w urde noch im m er nicht s gefunden, liefert das Program m einen
Fehler wert zur ück d.h. N befindet sich gar nicht im Feld A.
$QDO\VH
des obigen Algor it hm us:
BEST CASE: 1 Schr it t ( die Zahl, die ich suche, st eht gleich am Anfang des Felds)
WORST CASE: n Schr it t e - ich finde Zahl als let zt es Elem ent im Feld oder gar nicht
AVG CASE:
Q
2
Schr it t e: - im Durchschnit t ist die Zahl in der Mit t e des Felds
+LQZHLV I m obigen Algor it hm us m uss das Feld A NI CHT sort iert sein. Da j a sow ieso
j edes Elem ent überpr üft wird. Bei den unt en folgenden Algor it hm en ist vorauszuset zen,
dass das Feld sort iert ist !
A l go r i t hm u s 2 :
I t erat iv e Version der
YHUEHVVHUWHQOLQHDUHQ6XFKH
:
Feld A. Man erm it t elt die Mit t e P des Feldes
%HVFKUHLEXQJ Gegeben sei ein sort iert es
und überpr üft , ob es sich beim Dat ensat z an dieser Posit ion um das gesucht e Elem ent
handelt . I st dies der Fall, so gibt der Algor it hm us P zur ück und st oppt , falls nicht , so
schaut das Program m , ob k k leiner oder gr ößer als A[ m ] ist , und VXFKW OLQHDU ( siehe
Seit e 1 von 7
Mit schrift zum AlgoDat Rep. 12- 06- 2002
Algor it hm us 1) ent w eder in der erst en Hälft e oder in der zweit en.( s.Abb.1) Vort eil
gegenüber Algo1 : Man m uss j et zt nicht m ehr das kom plet t e, sonder n nur das halbe Feld
durchsuchen. Also m ax .
Q
 2  Schr it t e für die Suche.
 
Beispiel: A = < 1,2,4,8,9,10,26> . Gesucht wird die Zahl k = 10. Da k größer 4 ( = A[ m ] ) ist
erpar ich m ir die Suche in der erst en Hälft e und st öber e nur im Feld < 8,9,10,26> .
…oder die andere
Entweder 1.Hälfte...
Abb.1
A l go r i t hm u s 2 :
verbesserte_lineare_Suche(A,n,k)
{
m:=
Q
2 ;
 
if (k == A[m])
return (m);
// Falls die gesuchte Zahl genau in der Mitte ist…
// liefere die Position m zurück
else if (k < A[m])
{
für i = 1,…,m-1
// suche in der ersten Hälfte
{
if (A[i] == k)
return (i);
}
}
else
{
für i = m+1,…,n
{
if (A[i] == k)
//...sonst suche in der 2ten Hälfe
return (i);
}
}
return FEHLER;
// ist k nicht in A enthalten Æ Fehler!
}
L a u f ze i t -A n a l y s e :
BEST CASE: 1 Schr it t – das Elem ent ist genau die Mit t e des Feldes also k= A[ m ]
Q
 4  Schr it t e - k befindet sich in der Mit t e einer HÄLFTE des Feldes
 
Q
WORST CASE: ~   Schr it t e – k befindet sich am ENDE einer HÄLFTE des Feldes.
2
AVG CASE: ~
Seit e 2 von 7
Mit schrift zum AlgoDat Rep. 12- 06- 2002
I dee der ELQlUHQ6XFKH:
Während bei der „ verbessert en Linear en Suche“ die einzelnen Hälft en w ieder um linear
durchsucht wurden, wir d bei der binären Suche, das Feld zw eiget eilt wird, geschaut , ob
das Elem ent in der linken oder r echt en Hälft e sein könnt e, ( Abb. 2) und diese Hälft e
wiederum get eilt , et c. und dieser Prozess wir d solange fort geset zt , bis das gesucht e
Elem ent gefunden wur de oder die Hälft en nicht m ehr t eilbar sind ( Æ k ist nicht in A
ent halt en) . Die Laufzeit en der beiden obigen Algor it hm en v er halt en sich OLQHDU währ end
die binär e Suche ORJDULWKPLVFK abläuft .
Abb.2 – Binäre Suche: Hälft en w er den wieder aufget eilt .
Wieso logar it hm isch ?
Bet racht en w ir das an einem Beispiel: Wir haben ein $UUD\ ( = Feld) aus 8 Elem ent en:
A= < 1,2,4,8,9,10,26,30> und w ir suchen die Zahl 26. Nach dem Algorit hm us der binären
Suche brauchen w ir hier m ax. 3 Schr it t e ( s.Abb.3) um irgendein Elem ent in einem Feld
der Größe 8 zu erm it t eln.
Abb.3 - Größe des Feldes n= 8, m ax .Schr it t = 3
3 = 2³
6FKULWWH
Binär e Suche ( BS) als
UHNXUVLYH'HILQLWLRQ
ORJ Q
:

Q

2

 

Q
BS( < a 1 ,a 2 ,a 3 ,…a n > ,k ) =  %6 (< D1 , D 2 ,..., D   >, N ) +  
 2  −1
2

 
 %6 (< D   ,..., D >

 2  +1
 
IU
.....
N
IU
.....
N
IU
.....
N
Q
 2 
Q
< $ 
2
Q
< $ 
2
=
$
Bei einem leer en Feld also < a 1 ,a 2 ,, …a n > = < > wird ein FEHLER zurück geliefert .
Seit e 3 von 7
Mit schrift zum AlgoDat Rep. 12- 06- 2002
A l go r i t hm u s 3
binäre_suche(A,n,k)
if (n==0)
return (FEHLER);
{
else
Q
;
2
m= 
if (A[m]==k)
return m;
else if (k<A[m])
return (binäre_suche(<a1,a2,…am-1>,m-1,k);
else
return (binäre_suche(<am+1,…an>,m,k) +m;
//siehe Anmerkung unten *)
}
* ) Wieso + m ? Der Algorit hm us ruft sich selber auf. Bei der Suche in der 2t en Hälft e, w ird diese
w iederum als ein „ neues“ Feld angenom m en ( das w ieder von 1 anfängt ) .Für sich genom m en fängt
dieser Array schon von eins an, dann zw ei, dann drei, et c., aber absolut gesehen ( im Bezug auf
den großen ursprünglichen Array, von dem w ir j a dann die Suchposit ion erm it t eln w ollen, w ürde
das Ergebnis verfälscht w erden.
Bsp.:
unsere
suchen
Zahl in einem n= 8 großen Array. Wir finden die Zahl an der
Wir
ohne + m w ürde uns „ 2“ ret urniert w erden und w ir w ürden in
der
unserem „ ürsprüngl. Array“ an der St elle 2 nicht die richt ige Zahl finden, weil j a „ 2“ auf die 2t e
2+ 4 = 6.
Hälft e bezieht also: r et urnw ert + m +LQZHLV
•
Für Übungszwecke wär en folgende Algor it hm en sicher sehr int eressant ; - )
,WHUDWLYH
9HUVLRQ
GHU
ELQlUHQ
6XFKH
( Acht ung unser Algor it hm us 3 ist
rekursiv )
•
5HNXUVLYH9HUVLRQGHUYHUEHVVHUWHQOLQHDUHQ6XFKH
Anm .d.Aut ors: Wenn’s geht bit t e im FORUM post en !
/DXI]HLWHQ
Laufzeit en m it konst ant em Fakt or sind ver nachlässigbar und m achen k einen wirk lich
großen Unt erschied aus. z.B. Laufzeit en von Algor it hm us 1 ( n ) oder Algor it hm us 2
( n/ 2) . Allerdings ist der logar it hm ische Aufwand deut lich besser als ein linear er ( s.Abb4) .
Abb.4 Laufzeit en der 3 Algorit hm en
Seit e 4 von 7
Mit schrift zum AlgoDat Rep. 12- 06- 2002
T H ET A – OM EGA – O – N o t a t i o ne n :
Θ( J (Q)) = “ Menge aller Funkt ionen f( n) , die ca. so gut w ie g( n) sind.“
Definit ionen:
Θ( J (Q)) = {I (Q) | ∃F1 , F 2 > 0, Q0 > 0 : ....VRGDV..0 ≤ I (Q) ⋅ F1 ≤ J (Q) ≤ I (Q) ⋅ F 2 .....∀Q ≥ Q0 }
Ο( J ( Q)) = {I ( Q) | ∃F > 0, Q0 > 0 : ....VRGDV..0 ≤ I ( Q) ⋅ F ≤ J ( Q).........∀Q ≥ Q0 }
Ω( J (Q)) = {I (Q) | ∃F > 0, Q0 > 0 : ....VRGDV..0 ≤ J (Q) ⋅ F ≤ I (Q).........∀Q ≥ Q0 }
Alle Funkt ionen, die im hellt ür kisen
Ber eich liegen befinden sich in
Ω( J (Q)) , im gelben in O( g( n) ) .I n
Abb.5 ist außerdem zu er kennen, dass
die Funkt ion g( n) = n² im I nt er vall
[ 0,n 0 ] schneller zu wachsen scheint ,
als f( n) = n 4 , doch ab einem n 0
er kennen wir, dass im Unendlichen
f( n) doch schneller ist als g( n) Æ :LU
LQWHUHVVLHUHQXQVQXUIUJUR‰HQ ! !
Abb5.
:LFKWLJH5HJHOQKLOIUHLFKIUGLH3UIXQJIUGLH.UHX]OIUDJHQ
•
•
•
•
•
I ( Q ) ∈ Θ( J ( Q)) ⇒ J ( Q ) ∈ Θ( I ( Q ))
Θ( J (Q)) = Ο( J (Q)) ∩ Ω( J (Q))
o
I ( Q ) = Θ ( J ( Q)) ⇒ I ( Q ) = 2 ( J ( Q))
⇒ I (Q) = Ω( J (Q))
I ( Q ) = 2 ( J ( Q )) ⇒
/ I (Q) = Θ( J (Q))
I ( Q ) = Θ ( J ( Q)) ⇔ J ( Q ) = Θ( J ( Q ))
I ( Q ) = Ο( J ( Q)) ⇔ J ( Q) = Ω ( I ( Q ))
+LQZHLV Bei Thet a, Om ega, O- Not at ionen w erden das ∈ und das = gleichw ert ig
behandelt , also nicht v erw ir ren lassen.
Bsp. 1:
Gegeben: f( n) = 18n 3 + n 4 , g( n) =
Q
4
2
Gelt en folgende Aussagen?
a)
I
(Q) ∈ Θ( J (Q))
b)
I
( Q ) ∈ Θ( Q 2 )
Seit e 5 von 7
Mit schrift zum AlgoDat Rep. 12- 06- 2002
I
a)
(Q) ∈ Θ( J (Q)) ⇔ 18Q + Q
3
4
 Q4 
∈ Θ 
 2
⇔ ∃F1 , F 2 > 0, Q0 > 0....... : 0 ≤
⇔ ∃F1 , F 2 > 0, Q0 > 0....... : 0 ≤
Q
4
2
F
1
⋅ F1 ≤ 18Q 3 + Q 4 ≤
≤
36
Q
Q
4
2
⋅ F2
+ 2 ≤ F 2 ...............JLOIW..∀Q ≥ Q0
Gilt für n 0 = 1, c 1 = 1, c2 = 38
I
b)
(Q) ∈ Θ(Q 2 ) ⇔ 18Q 3 + Q 4 ∈ Θ(Q 2 )
⇔ ∃F1 , F 2 > 0, Q0 ≥ 0 : 0 ≤ F1 ⋅ Q 2 ≤ 18Q 3 + Q 4 ≤ F 2 ⋅ Q 2
⇔ ∃F1 , F 2 > 0, Q0 ≥ 0 : 0 ≤ F1 ≤ 18Q + Q 2 ≤ F 2
Ein c 1 lässt sich leicht finden z. B. c 1 = 1 und n 0 = 1
da
2
lim
(18Q + Q ) = ∞
Æ
aber ein c 2 kann m an NI CHT finden
( w ir int er essieren uns j a für große n) und som it ex ist iert KEI NE
→∞
Konst ant e, die gr ößer als Unendlich ist . – logisch ; - )
Som it haben wir $XVVDJHEZLGHUOHJW!
Bsp2.
I
3Q 2
( Q) =  3
2 Q
gilt
I
ZHQQ
....3 | Q
ZHQQ...3 /| Q
 29 
( Q ) = Ο Q 3  ?
 10 
+LQZHLV 3| n liest sich als „ 3 t eilt n“ und heißt im übert ragenen Sinne QPRG
Wir über legen uns: auch im Unendlichen wir es im m er Zahlen geben die durch 3 t eilbar
sind, bzw. Zahlen die nicht durch 3 t eilbar sind. d.h.: es m üssen EHLGH Bedingungen in
O( g( n) ) liegen.
1.Bedingung:
2.Bedingung:
 29 
3Q 2 ∈ Ο Q 3 
 10 
 29 
2 Q 3 ∈ 2 Q 3 
 30 
⇔ ∃F > 0, Q0 > 0........0 ≤ 3Q
∀Q ≥ Q0
0≤
JLOW
2
29
≤ F ⋅ Q3
10
30
≤F
29Q
für ein n 0 = 1 und c= 2.
⇔ ∃F > 0, Q0 > 0
0 ≤ 2Q 3 ≤ F ⋅
0≤
∀Q0 ≤ Q
29 3
Q
30
60
≤F
29
JLOW für ein beliebiges n 0 und ein c =
60/ 29
Da nun beide Aussagen richt ig sind, liegt f( n) in O( g( n) ) .
Seit e 6 von 7
Mit schrift zum AlgoDat Rep. 12- 06- 2002
Bsp. 3:
I
 Q

( Q) =  9
=1 Q²
∑
....Q > 1000
IU ...Q ≤ 1000
IU
hEHUOHJXQJ
I m Gegensat z zum v or igen Beispiel, haben w ir hier unser n beschränkt , also
wenn n gr ößer als 1000 ist dann nim m t f( n) = n an. Wie schon vor her behaupt et ,
int eressier en wir uns nur für gr oße n also nur für n > 1000. So können wir unser n 0 =
1001
wählen,
und
som it
ist
die
XQWHUH
%HGLQJXQJ
GLH
PLW
GHP
6XPPHQ]HLFKHQZHUWORV. Zum w eit er en Beweis ob f( n) in O( g( n) ) et c. liegt , genügt es
hier nur zu zeigen ob Q 2JQ liegt .
7LSS Bei der Pr üfung genau über legen, wie v erhält sich m eine Funkt ion im Unendlichen,
st eht bei der Angabe ir gendet was w ie 3 t eilt n , oder n Pr im zahl oder nicht Pr im zahl, n
gerade oder ungerade, et c. so m üssen %(,'( Funkt ionsbedingungen erfüllt werde, da
beide im Unendlichen gelt en.
I m Falle einer „ zählbaren Lim it ierung“ z. B. n< 1000. ersparen w ir uns die Mühe und
wählen unser n 0 so , dass es knapp „ über“ dem Lim it liegt , z.B. n 0 = 1001.
/HW]WH.RUUHNWXU
[email protected]
)HKOHUKLQZHLVHELWWHDQ
Seit e 7 von 7
Herunterladen