рефераты рефераты
Домой
Домой
рефераты
Поиск
рефераты
Войти
рефераты
Контакты
рефераты Добавить в избранное
рефераты Сделать стартовой
рефераты рефераты рефераты рефераты
рефераты
БОЛЬШАЯ ЛЕНИНГРАДСКАЯ БИБЛИОТЕКА
рефераты
 
МЕНЮ
рефераты Алгоритмы рефераты

БОЛЬШАЯ ЛЕНИНГРАДСКАЯ БИБЛИОТЕКА - РЕФЕРАТЫ - Алгоритмы

Алгоритмы

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 imama vir?utin? pus?, tada V pasilieka tas pats, o A(F-1.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-1<n< 2k-1. f(n) ( 1*1/n + 2*2/n +...+ (log n ( * 2k-

2/n + ( (log n ( +1) * (n-(2k-1-1))/n ( 1/n (i(1(log n ( ( i *2i-1) + (

(log n ( +1) * ( n - ( 2k-1 - 1))/n.

Jis artimas max plyginim? sk. Jei ie?kom? ?ra?? n?ra, tai jis ( max

palyginim? sk. Binarin? paie?ka tiek pagal max palyginim? sk. tiek pagal

vidutin? yra optimali.

2) Pos?ra?io dyd?io nustatymo metodas.Pradedant paie?k? i?eities pos?ra?io

dydis S1(N, tai pirmoji riba N1((N/2(, o pos?ra?is S2((S1/2(. Si+1((Si/2( ;

Ni+1(Ni((Si+1/2( . Jeigu ?ra?? n?ra, tai paskutin?je iteracijoje Si+1(1.

Toliau dalinant pusiau ir imant sekant? pos?ra??, jis tampa nuliniu ir tai

rodo, kad ?ra?? n?ra.

3) Ribos numeris visada 2 laipsnyje

Idealus atvejis binarinei paie?kai N(2k-1 ir riba bus N1(2k-1.Tegu 2k-

1<N<2k-1, tai pirma riba N1(2k-1. Gaunam 2 ne vienodas dalis. Jei K<F1, tai

imam pirm? dal? ir elgiam?s kaip idealiu atveju. Jei K>F1, tai ie?komas

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

2r-1-1<N-2k-1<2r-1 ir v?l viskas tas pats. Panagrin?sime algoritmo

sud?tingum?, ?statant n element? ? med? pagal atliekam? palyginim? sk..

Blogiausias atvejis, kai elementai i?rikiuoti, nes gaunamas paprastas

s?ra?as ir kiekvien? element? pastatyti ? s?ra?o gal?. T(n)-bendras

palyginim? sk. ?statant n element? ? s?ra??. T(n-1) - bendras palyginim?

sk. ?statant n-1 element?. ?statant n-t?j? element? reikia n-1 palyginim?.

T(n) ( T(n-1) + (n-1). T(n) ( T(n-1) + (n-1) ( T(n-2) + (n-2) + (n-1) (

T(1) + 1 +...+ (n-1) ( (i(1n-1 ( i ) ( n * (n-1)/2. Vidutinis atvejis, kai

i?eities seka a1,a2,...,an yra bet kokia, tai ?io algoritmo sud?tingumas

((n log n ). Lygi? sk. binariniame medyje - log n. Tegu T(n) yra palyginim?

sk. ?statant elementus a1,a2,...,an ? binarin? med?. Tegu b1,b2,...,bn yra

ta pati seka, ta?iau jau i?r??iuota did?jimo tvarka. Kadangi a1,a2,..,an

yra atsitiktinai i?d?styti, tai bet kuris i? j? gali atsidurti bent kurioje

vietoje su vienoda tikimybe. Tuomet a1 su tikimybe 1/n gali atsirasti j

vietoje (j(1...n). a1 fakti?kai tampa med?io ?aknim ir jis yra j-tasis. Tai

(j-1) element? yra kair?je pus?je, o (n-j) de?in?je. ?statant (j-1)

element? ? kair? pomed?, reikia (j-1) palyginim? su ?aknimi plius T(j-1)

((j-1)+T(j-1)). Analogi?kai de?iniam pomed?iui reikia (n-j) palyginim? su

?aknimi plius T(n-j). (j-1) + T(j-1) + (n-j) + T(n-j) ( (n-1) + T(j-1) +

T(n-j). Tiek palyginim? reik?t? jei b?t? j-tasis elementas (med?io

?aknimi),bet a1 gali b?ti bet kuris, tuomet palyginim? sk.: T(n) ( 1/n

(j(1n ((n-1)+T(j-1)+T(n-j)) ( n-1+ 1/n (j(1n (T(j-1) + T(n-j)) ( n-1 + 2/n

(j(0n-1 ( T(j) ).

Toliau pertvarkant galima parodyti, kad T(n) ( k n log n, kur k ( ln 4 (

1.39.

1) Principas - ‘Skaldyk ir valdyk’

Sprend?iant kok? nors u?davin? kartais jie suskaldomi ? du. Rasti j?

sprendimai apjungiami ir gaunamas u?davinio sprendimas. Savo ruo?tu

suskaidyti u?daviniai gali b?ti toliau skaidomi. Visiems u?daviniams

spr?sti naudojama ta pati rekursyvi proced?ra. Pavyzd?iui, reikia rasti

aib?je i? N element? max ir min element?. Surandant max element? reikia (n-

1) palyginim?. Taip pat ir ie?kant min reikia (n-2) palyginim? (su max

nelyginam). Ie?kant min ir max element? reikia 2n -3. Tarkim n(2k. Vis?

aib? suskaldom ? 2 dalis. Kiekvienoje i? j? randam min ir max ir juos

palyginam. T(n)({1, n(22T(n/2)+2, n>2. 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 a<c, turim ma??jan?i? geometrin? progresij?. Tuomet

turim tiesin? algoritm? ((n). Jei a(c, tai algoritmo sud?tingumas

((nlogcn). Jei a>c, 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|<( - t.y. artiname ir

reikalaujame, kad jos skirtus? (. Kad i?rai?ka tur?t? prasm?, mes para?ome:

P=p.Padalinkime abi puses i? vidutin?s kvadratin?s paklaidos.

P =p. Pa?y-m?kime tp = (/ S((t) (2). m- vidurkio

matematin? viltis.(t - m ?vertinimas tada i? formul?s (2) i?eina, kad ( =

tp*S((t) = tp[pic]. Galim para?yti : t-(< m< t+(, tada t - tp[pic]< m <(t +

tp[pic]t.y. tikroji matematin? viltis su tikimybe p rasis ?iame intervale,

o su tikimybe 1 i?eis i? ?io intervalo. Turime taip vadinam? intervalin?

?vertinim?.

Dviej? program? ekspermentinis- statistinis tyrimas. Tegul mes atlikom

skai?iavimus pagal vien? program? ir fiksavom laikus t1i(i=1….K). Galima

paskai?iuoti vidurk? (t1 , dispersij? S2(t1) ir t1+- (1(intervalinis

?vertinimas). T? pat? atlie-kam su kita programa(t2, S2(t2), (t2 +- (2

Jei palyginsim tik (t1 ir (t2 tas dar nerodo, kad vienas i? ?i? algoritm?

yra geresnis, nes (t1 ir (t2 - atsitiktiniai dyd?iai, tod?l palyginim?

rezultatas taip pat gali b?ti atsitiktinis. Geriau lyginti (t1 ( (1 ir (t2

( (2. Jei jie nepersidengia, tai yra pagrindo teigti, kad viena programa

yra geresn? u? kit?.Arba galima lyginti ir taip:

1.paskai?iuojam (t=t1-t2 ; D(((t ) = D((t1)+D((t2); Jeigu ?ie atsitiktiniai

dy-d?iai nepriklausomi.

S2(((t ) = S2((t1 ) + S2((t2) = S2(t1)/K + S2(t2)/K ;

S(((t)=(((S2(t1)+S2(t2))/K);

((t - tpS(((t )<m(((t )< ((t + tpS(((t )

p=0.95. Jeigu ?is intervalas neapima 0, tai galima teigti, kad viena

programa geresn? u? kit?.

Galima naudoti priklausomus bandymus, kurie gaunami taip:

suformuluojam atsitiktin? sek? i? n element?. J? sur??iuojame su viena

programa ir gaunama laik? t11. Po to t? pa?i? sek? sur??iuojame su kita ir

gauname t21 ir taip toliau k kart?, t.y. gauname t1i ir t2i, kur i

=1,2…,K. Galima paskai?iuoti: (t1, (t2, S2(t1)=[pic][[pic]t21I -

1/K([pic]t1I)2]; S2(t2)([pic][[pic]t22I - 1/K([pic]t2i)2]

Tarpusavio momentai M1=[pic][pic] (t1i-(t1)(t2i-(t2)=[pic][pic](t1it2i-

(t1t2i -(t2t1i+(t1(t2)=[pic][[pic] t1it2i - (t1(t2i - (t2(t1i + K (t1(t2]

=[pic][[pic]t1it2i-1/K[pic] t1i[pic] t2i] ; (ti= t1i - t2i ; D((t)=D(t1)+

D(t2)-2M12 (1); Koreliacijos koef. K12 = M12 / ((t1)((t2); Jis gali kisti

nuo -1 iki +1. M12=K12((t1)((t2). Jei K12=1, tai rei?kia teisin? funkcin?

priklausomyb?. Jei K12=1 ir ((t1)=((t2), tai jei ?statysim ? 1 -aj?

formul?, tai gausime D((t)=0. Ta?iau tai idealus atvejis, o prakti?kai K12

< 1.

Jei K12 > 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) <m ((t) < ((t + tpS(((t) (1). Kadangi S2((t)

esant priklausom? bandym? atvejais yra < nei nepriklausom? bandym?, tai

intervalinis ?vertinimas (1) yra siauresnis ir algoritm? vertinimas yra

tikslesnis. Jei intervalas apima 0, tai algoritm? palyginti negalima. Arba

galima sakyti ir taip: naudojant priklausomus bandymus, esant teigiamai

koreliacijai mums pavyksta i?skirti grei?iau reik?mingus skirtumus. Tas

pats rezultatas gaunasi jei su kiekvienu bandymu mes fiksuosime t1i, t2i ir

skai?iuosime (ti, i=1,2,……..,K. fakti?kai gauname atsitiktinius dyd?ius. (t

= 1/K[pic](ti; S2((ti)=[pic][[pic](ti2-1/K([pic](ti)2]

S2(((t)=S2((ti)/K; S(((t)= S((ti)/(K

((t - tp S(((t) < m((t) < ((t + tp S(((t)

Jei ?is intervalas apima 0, tai negalima sakyti, kad viena programa geresn?

? kit?. Ir prie?ingai, jei neapima 0, tai yra pagrindo teigti, kad viena

programa yra geresn? u? kit?.

Binarinis ?terpimo algoritmas

Ie?kant elementui vietos jau sur??iuotoje sekoje mes galima naudoti

binarin? paie?kos metod?.

Iterpiant i+1 element? ? i-tojo dyd?io sur??iuot? s?ra?? reikia atlikti

(log i ( + 1 = (log(i+1)( palyginim?. Visada reiks atlikti max palyginim?,

nes ?terpiamo dyd?io tame s?ra?e n?ra. R??iuojant n-tojo dyd?io s?ra?? mums

reik?s atlikti [pic](log(i+1)( palyginim?.

[pic](log(i+1)( = [pic](log(i)( = n(log(n)]-2(logn( + 1 tokio algoritmo

sud?tingumas ((nlogn).

R??iavimas i?rinkimu

I? prad?i? i?renkame did?iausi? element?. J? sukei?iame su paskutiniu.

Paskui i? likusios dalies i?renkame did?iausi? ir sukei?iame su

prie?paskutiniu ir t.t.

Palyginim? sk. tokiam algoritmui yra [pic](n-i)=[pic]i=n(n-1)/2, tai ?io

algo-ritmo sud?tingumas: ((n2).?is alg. gali b?ti geriausias vienu metu

ie?kant max ir min.

R??iavimas piramide

?is algoritmas susideda i? dviej? dali?:1. I? duotos sekos sudaryti

r??iavimo med?. 2. Sukeisti pirm? element? su paskutiniu ir atstatyti

r??iavimo med?. R??iavimo med? pradedame sudarin?ti nuo (n/2(, o kiekviena

narys A(i) (A(2i) ir A(i) (2i+1, ir [1(i(n/2] arba [1(i(n/2]. Did?iausias

elementas tampa med?io ?aknis. Pastatome did?iausi? element? ? sekos gal?

ir kadangi jis jau savo vietoje, tod?l jis daugiau nenagrin?jamas, o sek?

suma?iname 1 ir turime jau ne r??iavimo med?. Mums v?l reikia atstatyti

r??iavimo med?, kad pirmasis elementas b?t? did?iausias t.y. pradedant nuo

n/2 eiti link pirmo ir kiekvien? element? reikia sukeisti vietomis su

didesniu s?numi. Taigi mums reikia tam tikr? element? perstumti per ka?kiek

lygi?. Perstumiant element? per 1 lyg? reikia atlikti 2 palyginimus: (2i)

ir (2i+1) tarpusavyje ir did?iausi? i? j? su palyginamu elementu.

Perstumiant element? per n lygi? reikia atlikti 2n palyginim?, tod?l

blogiausiu atveju, perstumiant n element?, palyginim? sk. nevir?ins 2nm.(m-

lygi? sk. , be pirmos vir??n?s). Kai reikiia perstumti 1 element?,

maksimaliai reikia f(n)(2(log n( palyginim?. Tiksliau: f(n) ( (log n( +

(log (n-1)(. Perstumiant n vir??ni? maksimaliai tur?tume 2n(log n(

palyginim?. Algoritmo sud?tingumas bus ((n log n). Ta?iau ?rodyta, kad

pirmoje dalyje reik?s ne daugiau kaip 2n-4 palyginim?, tod?l pirmos dalies

algoritmo sud?tingumas yra tiesinis, nes ?ia reikia per?i?r?ti tik n/2

element?, o visumoje ?io algoritmo sud?tingumas ((n log n).

R??iavimas suliejimu (sujungimu)

n element? dalinami ? 2 dalis: [pic] ir [pic] ?ios dalys tur?t? b?ti

sur??iuojamos ir sujungiamos. Ta?iau jos v?l savo ruo?tu suskaidomos iki

vieno vieno elemento ir atliekamas j? sujungimas. Tai palyginim? sk. ?iame

metode:

f(n)=[pic]

?ios rekurentin?s lygties sprendimas yra toks: f(n)=n (log n( - 2 (log n(

+1

?i rekurentin? formul? sutampa su binarinio algoritmo ?terpimo blogiausiu

atveju.

Paai?kinimas algoritmo: next - indeksas, ? kur? mes ra?omelower 1 - pirmos

dalies pirmas indeksas. Tr?kumas: reikia papildomos atminties masyvui Save.

R??iavimas suskaldymu (quick sort).

Turime sek? i? n element?. I(1, o J(n. Lyginame A(I) su A(J). Jei A(I) <

A(J), tai J(J-1, bet jei A(I) > 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

Ie?kant kito max elemento, reikia a6 ly-ginti su pralaim?jusiais, randant

a1

Jei a6 > a3, tai reikia palyginti ir ar a6 > a2

Jei a6 < a3, tai reikia palyginti ir ar a3 > a6

Radom max per 2 palyginimus. Pirami-d?je radom per n-1 palyginim?. Tai yra

sekantis randamas per (log n( -1 palygi-nim?. Gauname, kad ?iuo metodu

palygi-nim? sk. yra optimalus: n + (log n( - 2 .

Geriausio (max) ir blogiausio (min) elemento i?rinkimas

Galima si?lyti suskaidyti sek? n ? 2 dalis ir sura?yti ?iose dalyse max ir

min elementus. Palyginus max-ius elementus gaunamas max-is elementas, min-

ius -min-is. Rekursyviai galima suskaidyti iki 1,2 element?. Palyginant 2

elementus tarpusavyje i? karto gauname max ir min elementus. Rekurentin?

lygtis, apra?anti tok? akgoritm?:

f(n)=[pic]

Bendras ?ios srities sprendinys:

|[pic|(n-2(log |

|] |n()/2, kai|

| |n =<3 * |

| |2(log n(-1|

| | |

| |(2(log |

| |n(+1-n)/2,|

| |kitais |

| |atvejais |

k-ojo didesnio elem. I?rinkimas[be ru?iavimo]

1.Alg. - i?rinkimas su randomizacija: pa?mus ?-aj? elem ir elementu seka

suskaidoma ? 2 dalis: (i-1)- S1, i, (n-i)-S3. Jeigu pataikeme paimti

skaidymui elem. k-uoju, tai jis atsiduria savo vietoje ir algor. baigia

darba. Jei nepataikeme tai tolimesniam skaidymui imame poaib?, kuriame yra

ie?komas elem. ir j? skaidome toliau: Jei i>k, tai imame S1, kuriame yra (i-

1) ele-t?. Jei i<k, tai imame S3 kuriame yra (n-i) elem. Antru atveju

imamas poabis S3 , taciau ie?komas elem., kuris yra(k-i), o skaidymui

naudojamas tas pats alg. Kadangi skaidydami gali buti parinktas bet kuris

РЕКЛАМА

рефераты НОВОСТИ рефераты
Изменения
Прошла модернизация движка, изменение дизайна и переезд на новый более качественный сервер


рефераты СЧЕТЧИК рефераты

БОЛЬШАЯ ЛЕНИНГРАДСКАЯ БИБЛИОТЕКА
рефераты © 2010 рефераты