МЕНЮ


Фестивали и конкурсы
Семинары
Издания
О МОДНТ
Приглашения
Поздравляем

НАУЧНЫЕ РАБОТЫ


  • Инновационный менеджмент
  • Инвестиции
  • ИГП
  • Земельное право
  • Журналистика
  • Жилищное право
  • Радиоэлектроника
  • Психология
  • Программирование и комп-ры
  • Предпринимательство
  • Право
  • Политология
  • Полиграфия
  • Педагогика
  • Оккультизм и уфология
  • Начертательная геометрия
  • Бухучет управленчучет
  • Биология
  • Бизнес-план
  • Безопасность жизнедеятельности
  • Банковское дело
  • АХД экпред финансы предприятий
  • Аудит
  • Ветеринария
  • Валютные отношения
  • Бухгалтерский учет и аудит
  • Ботаника и сельское хозяйство
  • Биржевое дело
  • Банковское дело
  • Астрономия
  • Архитектура
  • Арбитражный процесс
  • Безопасность жизнедеятельности
  • Административное право
  • Авиация и космонавтика
  • Кулинария
  • Наука и техника
  • Криминология
  • Криминалистика
  • Косметология
  • Коммуникации и связь
  • Кибернетика
  • Исторические личности
  • Информатика
  • Инвестиции
  • по Зоология
  • Журналистика
  • Карта сайта
  • Алгоритмы

    Алгоритмы

    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

    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 =k, tai imame S1, kuriame yra (i-

    1) ele-t?. Jei i( . i1 ,i2 ...ik = n. P(i1 ,i2 ..ik ).

    Nagrin?jome ?io bendro u?davinio kelis atvejus:

    1.ma?iausio elem, radimas P(1,n-1)=n-1. (palyginim? sk ie?kant min =n-1).

    2.1-mo ir 2-ro ma?iausio elem, radimas P(1,1,n-2)=n+(log n(-2.

    3.ma?. ir did?. elem, radimas

    P(1, n-2, 1)=(3/2 n(-2

    4.k-tojo didesnio elem, radimas

    P(k-1, 1,n-k) = (( n)

    5.Dviej? ma?iausi?: P(2,n-2)=n+(log(n-1)(-2

    6. trij? ma?iausi?: P(3,n-3)=n+2(log n(-(3|2|1|

    ?vairiais atvejais priklausomai nuo n.

    Galima kelti tokius u?davinius:

    a.surasti k ma?iausi? elem, P(k,n-k).

    b. surasti k-?j? element? P(k-1,1,n-k).

    c. surasti k element? i? eil?s P(1,1,1,..,1,n-k)

    P(1,1,1,..,1,n-k)> P(k-1,1,n-k)> P( k,n-k).

    Veiksmai su aibemis(DS po?iuriu)

    U?davinius galima suvesti ? veiksmus su aib?mis. I?analizuojam ?vairias

    Duomen? Strukt?ras ir pasirenkam labiausiai tinkam?. Gero alg. Suk?rimas

    neatski-riamas nuo tinkamos DS pasirinkimo. Pagr. mat. veiksmai su aib?mis

    b?dingi informacin?s paie?kos u?daviniams:

    1:PRIKLAUSYTI (a, S). Nustato ar elem.a priklauso aibei S. Jei a priklauso

    S, tada TAIP, prie?ingu atveju NE..

    2:?STATYTI (a,S).?stato elem, a ? S. Gaunasi aib? S ir elem, a t.y. S({a}.

    3:PA?ALINTI (a,S). Pa?alina a elem, i? aib?s S t.y. aib? S pakei?iama ? S-

    {a}.

    4. APJUNGTI (S1,S2,S3). Atlieka tok? veiksm?: S3= S1(S2.

    5:RASTI (a). Reikia rasti aib?, kurioje duotu momentu randasi elem, a. Jei

    rast? dvejose aib?se, tada veksmas nenustatytas.

    6:SUSKALDYTI (a,S) ?ia aib?selem, u?duoti santykiu min.

    Medis grafas be ciklo. Jei medyje S(V,T) pridesime koki? nors briaun?, tai

    susidarys vienas ciklas. Grafo G mi?ku vadiname neorentuot? med?i? aib?:

    {V1.,T1}, {V2.,T2},...,{Vk.,Tk} . V1 ,V2, .. Vk-suskaldyta aib? V. V=V1

    (V2,(..(Vk; V i (Vj =(. Atitinkamai T1,T2,…Tk yra aib?s E poaibiai.

    Kraskalo alg sako: reikia med?ius jungti minimalaus ilgio briaunomis ir

    apjungti sujungtus med?ius ? vien?. Taip atliekama tol, kol nesigauna

    vienas ekonominis medis.

    ////////// P R O G R A M A--------------

    (1 ir (2 yra med?iai mi?ke. ?iame algo-me E - grafo briaun? aib?. T-

    ekonominio med?io briaun? aib?. VS - grafo mi?ko med?iai kurie apjungiami ?

    ekonomin? med?:

    I? prad?i? VS- atskiras grafo G vir??nei kaip vieno elem, aibei(viena

    vir??n?-vienas mi?ko medis).

    Kadangi aib?je E yra sura?ytos briaunos,kurias rekia imti su minimaliu

    svoriu. Tai galb?t naudinga atlikti j? sur??iavim?. Tai gali b?ti paimtas

    alg, kurio sudetingumas ((eloge).e-briaun? sk.

    Tuomet 3-?io operatoriaus sudetingumas proporcingas vir??ni? sk. n ((n).

    Laikas reikalingas surasti aibei (1 ir (2 ?kurias ?eina vir??nes V ir ( ir

    j? sujungimas, jei priklauso skirtingoms aib?ms yra beveik tu??ias: ((n) .

    O jei tiksliau t.y. ((n G(n)), kur G(n) - atvirk?tin? f-jai F(n) =2F(n-1)

    Jeigu naudosime s?ra?? strukt?r?, tai (7,8) ?ios dalies alg. sudetingumas

    (( MAX(e,n log n)). Tod?l matom, kad visumoje Kraskalo algoritmo

    sud?tingumas yra ((e log e), kur? nulemia r??iavimas.

    Paskirstymo metodas (he?iravimo)

    Mes ?ia nagrin?sime duomen? strukt?r? besikei?ian?ioje aib?je S. Nauji

    elementai bus ?statomi, seni pa?alinami ir karts nuo karto reik?s atsakyti

    ? klausim?: ar priklauso duotu momentu konkretus elementas aibei S. Bus

    reikalingi tokie veiksmai: PRIKLAUSYTI(a,s), ?STA-TYTI(a,s),

    PA?ALINTI(a,s). O elemen-tai, kurie gali b?ti aib?je S, imami i? labai

    didel?s aib?s. Panagrin?sime paskirstymo metod?, kuris leid?ia gerai

    atlikti ?iuos 3 veiksmus. A

    0 h(a)=1

    1 h(a)=2

    h(a)=

    m-1 =m-1

    A-nuorod? masyvas(kiekvienas elementas - nuoroda ? sara??). Paskirstymo

    funkcija h(a) atvaizduoja universalios aib?s elementus ? sveik? skai?i? 0

    ( m-1 aib?.

    Pvz.: h(a)=a mod m, ji gera kai a yra tolygiai pasiskirst?. Vadinasi mums

    reikia h(a) pasirinkti pagal a pasiskirstym?. A(i) - nurodo ? sara?o

    element? a ( S, kur h(a)=i. Tai operacijos ?STATYTI(a,s) atlikimui reikia

    paskai?iuoti h(a) ir po to per?i?r?ti s?ra??, ? kur? nurodo h A[h(a)]. Jei

    elem A ten n?ra, tai j? reikia ?statyti sara?o gale. PA?ALINTI(a,s)

    atliekama analogi?kai. Tas pats ir PRIKLAU-SYTI(a,s). Blogiausiu atveju

    gali atsitikti, kad atliekant operacij? ?STATYTI visoms h(a) gaunasi tas

    pats skai?ius ir visi elementai tada rasis viename sara?e. Tuo atveju,

    atliekant i-taj? operacij? reik?s laiko, proporcingo i. Ir atliekant

    ?statymu reik?s ((n2) laiko. ?iuo atveju tai yra tas pats kaip ir paprastas

    sara?as. Ta?iau vidutinis laikas bus ?ymiai geresnis. Jei h(a) ?gauna

    reik?m? su tikimyb?mis 1/m ir ?statant nan. Vadinasi yra

    u?duotos tikimyb?s q0,q1,...,qn. (pi+(qi(1.Reikia sudaryti optimal?

    paie?kos med? ,kuriame vidutini?kai b?t? atliekama ma?iausiai palyginim?,

    ie?kant ?vair? element? su u?duotomis tikimyb?s.

    a4 0

    a3 a5 1

    a1 3 4 5 2

    0 a2 3

    1 2

    Fiktyviai pa?ymime elemtus medyje ,kuri? n?ra bet tenka ie?koti. Tikimyb? ,

    kad reik?s ie?koti a, kuris a3=nlog n, tai ?is algoritmas i? tikr?j? yra

    optimalus, o kai mw (w=T?VAS[v] ). Tod?l kai

    gr??tama prie nutr?kusios proced?ros paimama sekanti briauna, kuri gali

    vesti ? nauj? vir??n? arba ? sen?. Tada 12 ir 13 operacijos pakuoreguoja

    APAT[v] reik?m?. ?ita briauna taip pat patenka ? stek?. 12 op. pataikrina

    ar ?i briauna patekusi ? med?.10 op. tikrina ar APAT[w] >=VIRNR[v], jei ne

    tai 11 op. pakuoreguoja APAT[v]. Jei taip tai rei?kia aptikta labiausiai

    susijusi komponent?, o i? steko i?stumia briaunas ?einan?ias ? j?

    (komponent?) ir taip pat i?stumiama paskutin?.

    Paie?ka ? gyl? orentuotame grafe

    Naudojant paie?kos ? gyl? grafuose algoritm? orentuotame grafe galima

    i?skirti orentuot? med?i? mi?k?, jei kiekvienam mazgui v suskaupsime s?ra??

    L[v], t.y. pasiekiame vir??ni? v aib? per 1 ?ingsn?. PVZ

    V1 V2

    V3

    V5 V4

    V7 V8

    V6

    V1 V6

    V2 V5 V7 V8

    V4 V3

    I?skirtas grafo mi?kas (med?i? linijos i?tisin?s, kitos punktyrin?s)

    Paimam vir??n? v1. I? jos pasiekiam v2. PIE?KA(v2) i??aukia PIE?KA(v3). ?ia

    Stop, niekur negalim patekti. Gr??tam ? v2 ir pereinam ? v4. V?l niekur

    negalim patekti. Gr??tam ? v1. ?ia i??aukiama PAIE?KA(v5). I? ?ios vir??n?s

    niekur negalim patekti, tod?l paimama sekanti “nauja” vir??n? v6 ir t.t.

    Gauasi du med?iai.

    Tokio algoritmo darbo rezultate gauname 4 tip? lankus:

    1. Med?io lankai, kurie paie?kos metu veda ? naujas vir??nes 2.

    Tiesioginiai lankai vedantieji nuo prot?vi? ? tiesioginius palikuonis (jei

    (v,w) - tiesioginis lankas vw).

    Stipriai susijusi? dali? is?kyrimas orentuotame grafe

    Stipriai susijusios dalys orentuotame grafe, tai i? bet kurios vir??n?s

    egzistuoja kelias ? bet kuri? kit?. Kiekvienai orentuoto grafo vir??nei

    skai?iuosime APATRY?YS[v]( MIN({v}Uw ). ?ia vir??ni? numeracija pagal pai?k? ? gyl?,

    surandant med?ius. Vir??n? v orentuoto grafo stipriai susijusios dalie

    ?aknis bus tada, kai APATRY?YS[v](v. Atliekant paie?k? ? gyl? galima

    apskai?iuoti APATRY?YS[V], o taip pat i?skirti stipriai susijusias dalis,

    tam grafo vir??n?s talpinamos ? stek?, kai apeinant graf? sutinkamos.

    Kiekvien? kart?, kai aptinkama stip. susijusios dalies ?aknis, visos

    vir??n?s iki ?ios ?aknies i?stumiamos i? steko ir jos yra stipriai

    susijusios dalies vir??n?s. Modifikuotos proc. paai?kinimas: APATRY?YS[v]

    skai?iuojamas 4,9 ir 11 eilut?je 4 operacijoje suteikiama pradin? reik?m?

    (vir??n?s Nr.). 9op. Priskiriam APATRY?YS[v](MIN(APATRY?YS[v], APATRY?YS[w]

    )-tai lankams ?einantiems ? med?. 10 op. i?ai?kina ar n?einantis ? med?

    lankas (v,w) yra atbulinis ar skersinis, o tai pat i?ai?kinama ar w( stekui

    ;priklauso stipriai susijusiai grafo daliai. 11 op. koreguojama reik?m?

    APATRY?YS[v] (MIN(VIRNR[w], APATRY?YS[v] ). ?io algoritmo sud?tin-gumas yra

    ((MAX(n,e)) – tiesin?s, n-vir??ni? sk. e-lank? sk.

    Graf? susietumo matrica.

    G(V,E) V-vir??ni? aib?, E-lank? aib?.

    Susietumo matrica: |0 1 1 0|

    ( C ) ( |0 0 0 0|

    |0 1 0 0|

    |1 1 0 0|

    cij ( {0, jei n?ra lanko i? i ? j 1,jei yra lankas i j

    Susietumo matric? daugyba. Tegul turime grafus G1(V,E 1 ) ir G2 (V, E 2 )

    su tom pa?iom vir??n?m, bet skirtingais lankais. Sudauginsime j? susietumo

    matricas C(C1*C2 . Susietumo matrica C atitinka multigrafas sudarytas taip:

    i? vi ? vj eina tiek lank?, kiek yra keli? i? vi ? vj , susidedan?i? i? 2

    lank?: pirmas lankas (G1 , antras (G2. ?rodymas: ar egzistuoja vi ? vj

    kelias vi vk vj per tarpin? vir??n? vk . Galima patikrinti tokiu b?du

    c1ik*c2kj(1; c1ik(G1 , o c2kj(G2 . Kei?iant k nuo 1 iki n patikrinam ar

    egzistuoja kelias per visas tarpines vir??nes. Sumuojant, gaunam toki?

    keli? sk. cij((k(1 n c1ik* c2kj. O tai atitinka matric? daugyba, cij yra

    matricos C elementai. Tegul C yra graf? susietumo matrica. Tada C*C

    elementai parodo kiek yra skirting? keli? i? vir??n?s vi ? vj ,

    susidedan?i? i? dviej? lank?.

    |0110| |0110| |0100|

    ( C )*( C ) ( |0000| |0000| ( |0000|

    |0100| |0100| |0000|

    |1100| |1100| |0110|

    c12(1 rodo keli? v1 v3 v2 .

    ( C )( C )( C ) Parodo kiek keli? yra vj ir vi susidedan?i? i? 3 lank?.

    |0100| |0110| |0000|

    (C)(C)(C)( |0000| |0000| ( |0000|

    |0000| |0100| |0000|

    |0110| |1100| |0100|

    1 rodo, kad tarp v4 ir v2 yra kelias susidedantis i? 3 lauk?, tai v4 v1 v3

    v2 . (C)4 rodyt? keli? sk. susidedan?i? i? keturi? lank?, ?ia n?ra toki?

    keli?. Kai n?ra cikl?, tai gauname nulin? matric?. (C)n – yra tikslas

    skai?iuoti iki (C). Toliau bus rodomi tik ciklai. Jei susumuosime visas

    (C)+(C)2+…+(C)n+

    |10..0|

    + |01..0|

    |00..1|

    matricas, tai gausime keli? sk. i? vi ? vj . Jei atitinkamas elemntas

    cij>0, tai tas rodo, kad yra kelias tarp vir??ni? vi vj . Matricos (n*n)

    daugybai reikia atlikti n3 daugybos veiksm?. Matricai (C)n gauti, reikia

    ~n4daugybos veiksm?. Kartais keliamas u?davinys surasti ar egzistuoja

    kelias tarp vis? grafo vir??ni?. T.y. surasti matric? (L), kurios

    lij({0, jei n?ra kelio tarp vi ir vj 1, jei yra toks kelias.

    Matom, kad toks u?davynys gali b?ti i?spr?stas dauginant ir sudedant

    matricas. Grafas atitinkantis susietumo matric? (L) vadinamas refleksiniu

    -tranzitiniu grafo u?darymu.

    Paai?kinimas (L) matricos radimo algoritmo: ?ia visada ckij(1, jei yra

    daugiau keli?. Tod?l 5 op. 1+1(1. T.y. atliekami veiksmai su 0 ir 1. ?ia 5

    op. atliekamas n3 kart?, nes kartu atliekamas sumavimas.

    Trumpiausio kelio radimas

    Min kelio tarp vir??ni? radimo algoritmas:

    begin

    1. for i(1 until n do c0ii(0;

    2. for 1( i,j( n ir (j do c0ij(cij;

    3. for k(1 until n do

    4. for 1( i, j( n do

    5. ckij( MIN(ck-1ij , ck-1ik +ck-1kj);

    6. for 1( i, j( n do lij(cnij

    end

    V2 1 ir 2 op. duos matric? Cij0

    V1 2 | 2 8 5|

    5 V3 (Cij)( |3 ( (|

    |( 2 (|

    | 0 8 5| k(1 |0 8 5|

    (C0 ij)(| 3 0 8| (C1ij)(|3 0 8|

    |( 2 0| |( 2 0|

    C112(MIN(C012 , C011+C012)(8

    C123(MIN(C023 , C021+C013)(8 ?vertina mas kelias v2v1v3 per v1.

    k(2 |0 8 5| C231(MIN(C131 ,C132+

    (C2 ij)(| 3 0 8| + C121)(5

    |5 2 0| ?vertinamas kelias v3v2v1 per v2.

    k(3 |0 7 5| C312(MIN(C212 ,C213+

    (C2 ij)(| 3 0 8| + C232)(7

    |5 2 0| ?vertinamas kelias v1v3v2 ,

    kuris trumpesnis negu tiesioginis v1v2.

    ?io algoritmo sud?tingumas ((n3),nes ? op. atliekamas n3 kart? , o ? op. n2

    kart?. 1,2 op.taip pat n2 kart?.

    U?davinys su vienu ?altiniu ( Deiks-tros algoritmas)

    Randami trumpiausi atstumai nuo vienos vir??n?s iki kit? garfo vir??ni?.

    Grafas G=(V,E), pradin? vir??n? v0(V. Duotos reik?m?s l(vi ,vj ) ir l(vi

    ,vj )= +(, jei n?ra lanko vi vj . Sprend?iant ?? u?davin?, sudaroma

    vir??ni? aib? S(V.Taip trumpiausias atstumas nuo v0 iki v(S eina per

    vir??nes (S.

    V0 2 V1

    7 3

    10 6 V5

    4

    V4 5 V3

    I_| S_ |w|D[w]|D[v1]|D[v2]|D[v3]|D[v4]

    Prad?.| {v0} | - | - | 2 | +( | +( | 10

    1. |{v0,v1} | v1| 2 | 2 | 5 | +( | 9

    2. |{v0,v1,v2} | v2 | 5 | 2 | 5 | 9 | 9

    3. |{v0,v1,v2,v3} | v3 | 9 | 2 | 5 | 9 | 9

    4. |{v0,v1,v2,v3,v4}| v4 | 9 | 2 | 5 | 9 | 9

    begin

    1. S({v};

    2. D[v](0;

    3. for v(V,kaiS={v}do D[v](l(v,v)

    4. while S(V do

    begin

    5. paimti vir??n? w(V, nepriklausan?i? S, kuriai D[w]-mminimali (w(V-S)

    6. prid?ti vir?un? w prie aib?s S;

    7. for v(V-S do

    8. D[v](MIN(D[v];D[w]+l(w,v));

    end;

    end;

    5 op. atliekamas n kart? (n-vir??ni? ksai?ius), 7,8 operatoriai

    atliekami n kart? (max). 4 op. wile ciklas ?stato kiekivien? vir??n? ? S.

    Tod?l ciklas i? 4,5,6,7,8 operatori? atleikamas n2 kart?, tod?l algoritmo

    sud?tingumas ((n2) ( 3 operatorius atleikamas n kart?, tod?l algoritmo

    sud?tingumui ?takos neturi ).


    Приглашения

    09.12.2013 - 16.12.2013

    Международный конкурс хореографического искусства в рамках Международного фестиваля искусств «РОЖДЕСТВЕНСКАЯ АНДОРРА»

    09.12.2013 - 16.12.2013

    Международный конкурс хорового искусства в АНДОРРЕ «РОЖДЕСТВЕНСКАЯ АНДОРРА»




    Copyright © 2012 г.
    При использовании материалов - ссылка на сайт обязательна.