реферат, рефераты скачать Информационно-образоательный портал
Рефераты, курсовые, дипломы, научные работы,
реферат, рефераты скачать
реферат, рефераты скачать
МЕНЮ|
реферат, рефераты скачать
поиск
Алгоритмы

Алгоритмы

PAIE?KA PAPRASTAME S?RA?E

1.1. Nuosekli paie?ka

Tegu ?ra?ai i?d?styti atsitiktinai kaip buvo ?ra?yti. Reikia surasti duot?

?ra?? pagal rakt?. Nuosekliai ie?kant reikia per?i?r?ti visus ?ra?us

nuosekliai.Vid.per?i?r?? ?ra?? sk. ie?kant yra Lap =L/2. Jei ?ra?o n?ra

teks per?i?r?ti visus ?ra?us L. Tarkim ie?komo ?ra?o su tikimybe p0 n?ra

s?ra?e, tada vid. per?i?r?t? ?ra?? sk. Lap=L*p0+(i(1L (i*pi ); pi=1-p0/L.

Ie?kant ?ra?o sutvarkytame faile(?ra?ai i?d?styti pagal rakt?) reikia

per?i?r?ti i? eil?s, tod?l vid. per?i?r?t? ?ra?? sk. tas pats: Lsp=L/2. Jei

ie?komo ?ra?o n?ra, tai paie?ka nutraukiama kai eilinis raktas bus didesnis

u? u?duot?. Atliekant k ?ra?? paie?k? nesutvarkytame faile vid. per?i?r?t?

?ra?? sk. Lkap = k * L / 2.

1.2. Paie?ka interpoliavimas

Jei s?ra?ai sur??iuoti ir ?inomas pirmo ?ra?o raktas K(1) ir paskutinio

K(n) tai galima apskai?iuoti p=X-K(1)/K(n)-K(1). X-ie?komo ?ra?o

raktas.Paie?k? pradedam nuo ?ra?o kurio numeris p*n.

1.3. Binarin? paie?ka

Naudojama sur??iuotame masyve. Jis dalinamas pusiau ir ie?komas raktas

lyginamas su vidurio raktu ir t.t.. Idealus masyvo dydis 2n-1.Jei 31 ?ra?as

reik?s 5 ?ingsni?, kad surasti ?ra?? 31(25-1. Bendru atveju 2n-1-1< N ( 2n-

1. Kai ?ra?? sk. bet koks, tai naudojami tokie alg.:

1) Pos?ra?io rib? nustatymo metodas. I?kiriame 2 markerius: V vir?utiniam

adresui ir A apatiniam adresui. Vidurinio ?ra?o adresas F(( (V+A) / 2 (.

Ie?komas ?ra?o raktas k palyginamas su F. Jei k(Fk, tai ?ra?as surastas,

jei k Fk, tai imam apatin? dal?, tada V(F+1, o A i?lieka tas pats ir t.t..

Toks dalinimas atliekamas tol, kol nepasidaro A(V. Rekurentin? lygtis

apra?anti max palyginim? sk. binarin?je paie?koje yra:

f(n)({1, n(1 f( ( n/2 ( )+1, n>1. Sprend?iant rekurentin? formul? galim

u?ra?yti: f(n) ( f( (n/2( ) + 1 ( f( (n/21( ) + 1(( f( (n/22( )+1) +

1 ( f( (n/22( )+2 (...( f( (n/2i( ) + i, kol

( n/2i ((1; i((logn(. f(n)((logn(+1 arba f(n) ( (log (n+1)( . Vid.

palyginim? sk. ideliu atveju kai n ( 2k-1:

f(n)(1* 1/n + 2*2/n + 3*4/n +...+ ((log n( + 1)*2k-1/n ( 1/n * (i(1(log

n(+1 (i * 2i-1). 2k-1-1F1, tai ie?komas

?ra?as yra antroje dalyje, kuri ma?esn? u? pirm?j?.

2r-1-12. Tas dvi dalis galim dalinti dar

pusiau. T(n) ( T(2k) ( 2T(2k-1)+2 ( 2(2T(2k-2) + 2) +2 ( 22T(2k-2) + 22 +2

( 2k-1T(2) + 2k-1 +...+ 23 +22 +2 ( 2k-1 + 2k-1 + 2k-2 + ... + 23 +22 +2 (

n+2k-1-2 ( n+n/2-2 ( 3n/2-2. Atliekant toki? skaidymo proced?r?, algoritmo

sud?tingumas suma??ja.

Rekurentini? lyg?i? sprendimas

T(n) ( {b, n(1aT(n/c) + bi, n>1

a,b,c-teigiamos const.n(ck; k(log cn.

T(1) ( b

T(c) ( aT(1) + bc ( ab + bc ( (1+a/c);

T(c2) ( aT(c) + bc2 ( a(ab + bc) + bc2 ( a2b + abc + bc2 ( bc2(1+ a/c +

a2/c2) ......

T(n) ( T(ck) ( aT(ck-1) + bck ( bck(1+a/c+a2/c2+...+ak/ck) . T(n) (

bn(i(0logcn (a/c)i. Jei ac, turim did?jan?i? geometrin? progresij?. Tuomet T(n)

greitai did?ja did?jant n, tai eksponentinio sud?tingumo algoritmas.

U?davin? suskaid?ius ? 4 dalis ir toki? dali? pa?mus 4 – ias: a=c=4,

gauname ((nlog4n), log2n > log4n. Kas bus, kai n?ck? I?vestos formul?s

netinka, bet pa?mus atvej?, kai n’=ck > n, i?vados galioja. U?davinys gali

b?ti sprend?iamas su rekursija arba be jos, ta?iau u?davinio sud?tingumas

nepasikei?ia. Su rekursija algoritmas sprend?iamas ?iek tiek ilgiau.

T Apie rekurentin?s lygties tipo T(n)=aT(n\c)+f(n), kur a?1, c?1, f(n)-

teigiama f-ja. 1) Jei f(n)= ((n(logca)-() ,tai T(n)= ((nlogca). 2) Jei

f(n)= ((nlogca) ,tai T(n)= ((nlogca . log n. 3) Jei f(n)= ((n(logca)+()

,tai T(n)= ((f(n)), jei af(n\c)?bf(n) (b>1 dideliems n).

Balansavimas (skaidymas ? vienodas dalis). Reikia sur??iuoti n ilgio masyv?

did?jimo tvarka. 1.surandam min, kur? sukei?iam su pirmu, po to i? (n-1)

elemento surandam min ir sukei?iam su antru ir t.t.. Rekursyvin? lygtis

apra?anti palyginim? sk.: T(n) ( {0, n(1T(n-1)+n-1, n>1 ;

T(n) ( n(n-1)/2, o algoritmo sud?tingumas ((n2). ?ia skaldymas ? dvi

nelygias dalis: ? vieno elemento ir (n-1).2. Gaunamas suskald?ius u?davin?

? dvi lygias dalis ( n/2. Tarkim, kad n ( 2k. Viena dalis nuo x1 iki xn/2 ,

o kita nuo xn/2+1 iki xn. ?ias dalis sur??iuojam ir sujungiam palyginant

minimalius elementus. Sujungimui reiks maksimum n-1 palyginim?. Tok?

skaidym? galima rekursyviai t?sti toliau, kol lieka dalyse po 1 element?.

Rekursyvin? lygtis apra?anti tok? algoritm? yra:

T(n) ( {0, n(1 2T(n/2) + n - 1, n>1.

?io algoritmo sud?tingumas (( n log n).

Dinaminis programavimas.

Kartais galima efektyvius algoritmus gauti naudojant dinamin? programavim?.

?iuo b?du reik?t? skai?iuoti visus dalinius u?davnius, bet sprend?iami nuo

ma?? prie dideli?. Atsakymai prisimenami lentel?je ir u?daviniai jungiami,

kad b?t? i?spr?stas visas u?davinys ir gautas optimumas. Pvz. sudauginant n

matric? yra labai svarbus daugybos eili?kumas, kuris nulemia bendr? veiksm?

skai?i?. Pa?ymim mi j minimalus veiksm? sk. dauginant matricas:

Mi*Mi+1*...*Mj, kur 1 ( i < j ( n. Kai M ( M1*M2*...*Mn, tai j? mati?kumas

yra r0*r1*r2*...*rn.

mi j ( {0, i(j MIN( mik + mk+1, j + ri-1 rk rj ),

j > i, i ( k < j (1).

M` (Mi*Mi+1*...*Mk, [ri-1*rk]. Min vei-ksm? sk. mi,k.

M``(Mk+1 *Mk+2 *... * Mj, [rk*rj].

Atliekant ?i? daugyb? min veiksm? sk. mk+1, j, o sudauginant M` su M``,

min veiksm? sk. ri-1 rk rj. Tai atliekam tol kol negaunam m1n.1-a lygtis

ya dinaminio programavimo rekurentin? lygtis. mi,j reik?m?s skai?iuojamos

tvarka, kai did?ja indeks? sk. I? prad?i? skai?iuojam mi,i( 0 (visiem i),

toliau mi, i+1, po to mi, i+2, kol neprieinam m1n.

R??IAVIMO ALGORITMAI

K-ma?i? korte?? r??iavimas

Tegul mes turime sek? A1 A2 ... An k-ma?i? korte??, t.y., A erdvinis Ai

elementas, sudarytas i? ai1 ai2 ... aik.Reikia ?i? sek? r??iuoti taip: B1

B2 ... Bn, kad visiem i Bi ( Bi+1. R??iavimas atliekamas k kart? pereinant

per duot? sek?. Pirm? kart? atliekamas r??iavimas pagal k-?j? komponent?.

Antr? kart? pagal (k-1) komponent? ir t.t. Pr?jus pagal i-?j?, tur?sim

s?ru?iuot? sek?. Kiekviena skiltis ai j yra nuo 0 iki m-1. Reikia

organizuoti m pagalbini? eili? Q(j), kur j ( 0,...,m-1, kurios i? prad?i?

turi b?ti tu??ios. Duomenis A1 A2 ... An i? prad?i? sura?om ? s?ra?? EIL?.

Paimam eilin? korte?? Ai i? EIL?S ir patalpinam ? pagalbin? eil? Q(j) pagal

analizuojamos komponent?s reik?m?. Taip darom tol, kol bendra EIL?

i?tu?t?ja. Visi korte?ai atsiduria pagalbin?se eil?se. Po to jie suduriami:

Q(0) Q(1)...Q(m-1) ir jie sudaro vien? bendr? eil? EIL?. Kai praeinam pro

visas komponentes, tai EIL? bus sur??iuota. Algoritmo sud?tingumas yra

tiesinis ([(n+m)/k]. Naudoti ?? metod? neverta, kai n yra ma?as.

Nevienodo ilgio korte?? r??iavimas

Kad suvienodinti korte?? ilgius galima priekyje prira?yti nulius, ta?iau

tai ne efektyvu, nes bus bereikaling? daug per?i?r?jim?. Tuomet tegul lmax-

korte?? maksimalus ilgis, tai reikia i? prad?i? sur??iuoti maksimalaus

ilgio korte?us pagal l max paskutin? komponent?. Reik?s lmax kart? r??iuoti

visus korte?us.Antr? kart? reikia r??iuoti korte?us, kuri? ilgis lmax -1 ir

jau sur??iuotus pagal paskutin? komponent?, kuri? ilgis lmax. Ir paskutin?

kart? lmax per?jus per vis? s?ra??, bendram s?ra?e bus sur??iuota seka.

Pastabos: 1. Prie? naudojant ?? algoritm?, visi korte?ai turi b?ti

i?skirstyti pagal ilgius. Tam formuojami s?ra?ai ILGIS(l), kur l (

1,...,lmax, kuriuose sura?yti atitinkamo ilgio korte?ai. Pirmame ?ingsnyje

r??iuojamas tik s?ra?as ILGIS(lmax) pagal paskutin? komponent?. 2. Be to

matom, kad pra?jus kart? pro vien? komponent? gali b?ti daug pagalbini?

eili? Q(i) (kur i ( 0,1,...,m-1) tu??ios. Ne?i?rint to jas visas reikia

jungti ? bendr? s?ra??, tod?l naudinga b?t? i? prad?i? nustatyti kurios

pagalbin?s eil?s bus netu??ios ir tik jas jungti ? vien? bendr? s?ra??.

R??iavimas lyginant elementus

“Burbuliuko” metodas. Paprastai elementai r??iuojami pagal raktin? ?od?.

Tarkim turim K1..K16 element? ir lyginame K1 >K2. Jeigu daugiau sukei?iam

vietom. Jeigu ne nieko nedarom ir t.t. Paskutinis palyginimas bus Km > Kn.

Po 1 iteracijos did?iausias skai?ius atsiranda pabaigoje. Sekanti iteracija

vyksta su n-1 elementu, nes paskutinio neimame ir t.t.

Pirmoje iteracijoje bus (n-1) palyginim?. Antroje iteracijoje (n-2), i-

tojoje iteracijoje (n-i).

Tuomet bendras palyginim? skai?ius bus

[pic]

Kadangi ne visuomet elementai sukei?iami, tuomet jeigu i?r??iuota seka bus

0 pakitim?, o atvirk??iai i?r??iuota seka - n(n-1)/2 pakeitim?. Tada

vidutinis pakeitim? sk. bus n(n-1)/4.

Jeigu yra n element? seka, tai i? jos gali b?ti padaryti n! sek?. Mes

laikome kad bet kuri seka gali pasitaikyti su vienoda tikimybe 1/n!.

Kiekvienai sekai galima para?yti inversi?k? sek?. Jeigu turime tokias 2

sekas, ir jas sur??iuosime, tai sumalinis pakeitim? sk. bus n(n-1)/4.

Algoritmo sud?tingumas ((n2).

Iterpimo metodas.

?ia eilinis elementas yra ?terpiamas ? jau sur??iuot? elemet? sek?. Tegul

turime n element? i? viso ir turime jau i sur??iuot? element?. Mums reikia

?terpti i+1 element? Ki+1. Ki+1 atsidurs tarp Kj < Ki+1 < Kj+1 element?.

?statant i+1 element? mums reik?s max palyginim? (su 1, su 2…).Max

palyginim? sk. b?t?:

[pic]Pagal tai ir algoritmo sud?tingumas bus ((n2).Vidutini?kai bus ma?iau

palyginim?.?iuo b?du r??iuojant masyvus (paprastus) patogiau prad?ti elemt?

lyginim? nuo sur??iuotos sekos pabaigos. Tai yra nuo i-tojo elemento.

Panagrin?kime koks ?iame algoritme yra vidutinis palyginim? sk. Tegul

turime i sur??iuot? elemt? ir reikia ?statyti I+1 element?. Pirmiau

lyginsime su 1 elememtu. Yra i+1 pozicijos, ? kurias galima ?statyti i+1

element? ir priekyje ir gale. Laikome, kad i+1 elementas ? bet kuri?

pozicij? gali patekti su vienoda tikimybe 1/(i + 1). Vidutinis palyginim?

sk. ?statant element? bus:

[pic]jei patenka ? paskutin?

prie? pirm?j? pozicij?

element? (gale)

=1/(i+1)(1+2+…+i+i) = 1/(i+1)*((i+1)/i ) /2 + i / ( i + 1 ) = i / 2 + i / (

i + 1 )

Tiek pagal max,tiek pagal vidutin? palyginim? skai?i? ?io algoritmo

sud?tingumas yra ((n2)

Ekspermentinis statistinis algoritm? tyrima.s ?iuo metodu pvz. tiriant

r??iavimo algoritmus mums reikia para?yti atitinkam? program?, paiimti

atsitiktin? sek? i? n duomen? ir atlikti skai?iavimus, pvz.: fikstuoti

laik? t1, po to paimame kit? sek? ir gauname laik? t2 po to paimame kit?

sek? taip pat i? n duomen? ir gauname laik? t3 ir tokius bandymus kartojame

k kart?. Gauname atsitiktini? dyd?i? imt? t1, t2, …. tk. Vidurkis bus ( =

1/K(i(1K (ti), vidurkis - atsitiktinis dydis.

Dirpersija bus : S2(t)=[pic]i-t)2= =[pic]ti2-2(t ti +(t2) = =[pic] ti2-

2t[pic]ti+K(t2]= =[pic][pic]ti2-2([pic][pic]ti)* *[pic]ti + K/K2

([pic]ti)2] = [pic]* *[ [pic]ti2 - [pic]( [pic]ti)2]

?i dispersijos fomul? patogesn? ma?ininiuose skai?iavimuose, nes su

kiekvienu nauju atsitiktiniu dyd?iu ti mes kaupiame tik dvi sumas : (ti ir

(ti2.(t - atvirk?tinis dydis ir jis vertina tam tikr? matematin? vilt?.(t

dispersija yra tokia: D((t )= D [[pic][pic]ti] = 1/K2[pic] D(ti) =

1/K*D(t); D - tikroji dispersija;S-?vertinimas.S2((t)=S2(t)/K arba

i?traukus ?akn?: S(t) = S(t)/[pic]; |(t - m| 0, tai ((t = (t1- (t2, S2((t)(S2((t1)+ S2((t2)-2(M12 t.y.

dispersija ma?esn? nei nepriklausom? dyd?i? atvju. S2(((t)( S2(t1)/K+

S2(t2)/K - 2K12S((t1) * S((t2)= S2(t1)/K+ S2(t2)/K - 2M12/S(t1)S(t2)*

S(t1)/(k * S(t2)/(K = S2(t1)/K+ S2(t2)/K - 2M12/K t.y. ir vidurkio

dispersija yra ma?esn?, nes atsiima 2M12/K. Atitinkamai intervalinis

?vertinimas: ((t - tpS(((t) A(J) tai sukei?iame juos vietomis ir I(I+1

ir t.t.. Taip palyginus su visais elementais, gausime, kad kair?je pus?je

elemento su kuriuo mes lyginome bus elementai ma?esni u? j?, o de?in?je

didesni, t.y. suskald?m sek? jo at?vilgiu. Elementas pagal kur? atlikome

palyginimus yra pirmasis ir vadinamas generaliniu. ?ia generalinis

elementas visada buvo pirmas, ta?iau tai neb?tina. Gaima paimti bet kur?.

Generaliniai elementai gali b?ti parenkami ?vairiai: pirmas, atsitiktinis,

mediana (vidurinis). Skaidyti pagal median? geriausia. Galima paimti

nedideli? imt? i? keli? sekos element? ir surasti median?. Imant visada

pirm? element?, blogiausias atvejis gaunasi, kada seka yra sur??iuota. Tada

seka suskaldoma ? vien? element? ir vis? likusi?. Gausis taip kaip ir

kituose algoritmuose. Tuo atveju algoritmo sud?-tingumas ((n2), o visais

kitais atvejais ?ymiai geriau. ?is algoritmas gerai veikia didel?m sekom, o

taip pat reikia tinkamai parinkti generalin? element?. Vid. veiksm? sk.

yra:

[pic]

c-koef., cn-veiksm? sk. atliekant pirm? suskaldym?. Generalinis elem.

atsiranda i-ojoje vietoje ir gaunam dvi sekas (i-1) ir (n-i). Veiksm? sk.

skaldant sek? (i-1) yra (i(1n f(i-1), o sek? (n-i) yra (i(1n f(n-i). 1/n-

i su vienoda tikimybe gali atsirasti bet kurioje vietoje.

(i(1n [f(i-1)+ f(n-i)](f(0)+ f(n-1)+ f(1)+ f(n-2)+...+ f(n-2)+ f(1)+ f(n-

1)+f(0)( 2 f(0)+2f(1)+...+2f(n-2)+2f(n-1)(2(i(1nf(i)

f(n)(cn + 2/n(i(0n-1 f(i), kai n>1

f(0)(f(1)(b

f(2)(2c+2/2[f(0)+f(1)](2c+2b(k

f(3)(3c+2/3[f(0)+f(1)+f(2)](3c+2/3[2b+2c+2b](3c+8/3b+4/3c((8b+13c)/3.

?rodyta, kad visada galioja lygyb? f(n) < kn ln n. Tod?l QUICKSORT

algoritmo vidutinis sud?tingumas yra ((n ln n). ?ia nevertinta, kad ma?os

sekos gali b?ti r??iuojamos kitu b?du, kas dar pagreitina ?? algoritm?.

Optimalus r??iavimas. Jei yra n element?, tai variant? i? viso gali b?ti

n!. n=3, 3!=6 Minimalus palyginim? sk. blogiausiu atveju = 3. Ir laikom,

kad ?i schema optimali. Tegul S(n) - minimalus palyginim? sk. blogiausiu

atveju, r??iuojant n element?: S(3)=3 Pilname k-tojo lygio binariniame

medyje, paskutiniame lygyje yra 2K mazg?. K=S(n).

n! =< 2 S(n), tada S(n) >= (log n!( =n log n - n/ln2+1/2 log n + (

( - paklaida. (Stirlingo formul?)

Minimalus palyginim? sk. blogiausiu atveju yra apie nlogn . Palyginus

(log n!( su f(n) = n (log n( - 2 (log n( + 1 pasirodo, kad suliejimo

metodas pagal minimal? palyginim? sk. n?ra minimalus.

I?RINKIMAS

Maksimalaus elemento i?rinkimas i? n element? sekosRadus max element?,

reikia atlikti n-1 palyginim?. O kiek reikia priskyrim?? Jei seka -

ma??janti, tai reik?s 1 prisky-rimo. Jei seka - did?janti, tai reik?s n

priskyrim?. O koks vidutinis priskyrim? sk, jei bet kokia seka i? n

element? vienodai galima?

Hn=1 +[pic] P[ai > aj] ( 1 = 1+ [pic]1/2 ( 1 = [pic][pic] = ln n + ( +1/2n

+ (

?i eilut? diverguojanti, t.y. did?jant n, jos reik?m? did?ja.(Eulerio

formul?) ?ia ((0,577; (- paklaida.

Sekan?io did?iausio elemento radimas (2-? max radimas). Norint surasti max

element?, reikia n-1 palyginim?. Po to j? pa?alinam ir surandame kit? max.

Tam reikia n-2 palyginim?. Tod?l i? viso palyginim? sk: 2n-3. ?? algoritm?

galima pagerinti suskald?ius n element? ? 2 dalis: (n/2( ir (n/2( Ie?kome

max element?: I dalyje max el. surasti reik?s (n/2( - 1 palygini-m?, II

dalyje - (n/2( palyginim?. Po to juos reik?s tarpusavyje palyginti. I? viso

reik?s [pic] palyginim?. Paskutiniame lygyje pralai-m?jus? element? reik?s

palyginti su pra-laim?jusiais elementais, lyginant su mak-simaliu. Taip

rasim kit? max element?. Reikia [pic] palyginim?. Toliau galima kelti

klausim?, ar negalima ??jimo sek? padalinti ? 4, 8 ir t.t. dali?, kol

neprieisim algoritmo, kuris atitinka piramidin? r??iavim?. Lai I faz?je

lyginame po 2 elementus: n=8

a1

a1 a6

a1 a3 a6 a7

a1 a2 a3 a4 a5 a6 a7 a8

Страницы: 1, 2



© 2003-2013
Рефераты бесплатно, рефераты литература, курсовые работы, реферат, доклады, рефераты медицина, рефераты на тему, сочинения, реферат бесплатно, рефераты авиация, курсовые, рефераты биология, большая бибилиотека рефератов, дипломы, научные работы, рефераты право, рефераты, рефераты скачать, рефераты психология, рефераты математика, рефераты кулинария, рефераты логистика, рефераты анатомия, рефераты маркетинг, рефераты релиния, рефераты социология, рефераты менеджемент.