Microsoft Word - DSEA-3s.doc
|
|
- Rimantė Butkus
- prieš 6 metus
- Peržiūrų:
Transkriptas
1 3. Rūšiavimo algoritmai Rūšiavimas yra viena iš bazinių kompiuterių darbo operacijų kompiuteris vidutiniškai apie 25 procentus viso skaičiavimo laiko sunaudoja rūšiavimui. Rūšiavimo kaip algoritmo tikslas išdėstyti duomenis tam tikra tvarka. Rūšiavimo darbą sąlygoja daug aspektų: duomenų sutvarkymo apibrėžimas, duomenų struktūra, rūšiuojamų laukų išskyrimas, atminties panaudojimas rūšiavimo operacijai, antrinės ar tretinės atminties poreikis, duomenų pateikimo rūšiavimui vienalaikiškumas ar eiliškumas, lygiagretus rūšiavimas, kiti veiksniai visa tai turi didelę įtaką rūšiavimo algoritmo darbo efektyvumui. Duomenys, kuriais disponuojama, paprastai saugomi sąraše, jei jie išsitenka vidinėje atmintyje. Duomenys saugomi faile(-uose), jei jiems reikia antrinės arba tretinės atminties. Kiekvieno duomens užimama vieta kompiuterio atmintyje vadinama įrašu, kiekvienas įrašas gali būti skaidomas į laukus, laukų reikšmės vadinamos raktais. Rūšiavimas yra labai svarbus paieškos efektyvumui. Pvz., jei įrašai sąraše sutinkami atsitiktine tvarka, tikslinga naudoti nuoseklios paieškos metodą, kurio patobulinti beveik neįmanoma. Tačiau jei įrašai yra surūšiuoti pagal raktinius laukus, reikiamo rakto sąraše galima ieškoti labai efektyviai. Pvz., dvejetainė paieška sąraše list[0].key list[1].key list[n-1].key lyginimo operacijas vykdo su list[middle].key reikšme, kur middle = (n- 1)/2. Tokiu būdu, arba paieška baigiama sėkmingai, arba nepatikrinta sąrašo dalis yra sumažinta maždaug per pusę. Po j raktinių palyginimų, nepatikrinta sąrašo dalis yra [n/2 j ], o tai reiškia, kad šis metodas blogiausiu atveju reikalauja O(log n) raktų reikšmių palyginimų. Savybė: dvejetainei paieškai galima naudoti dvejetainį sprendimų medį (decision tree), aprašantį paieškos procesą: rakto reikšmės ir sąrašo indeksai talpinami viršūnėse, kelias medyje nuo šaknies iki bet kokios viršūnės reiškia paieškos lyginimų seką; tuomet lengva pastebėti, kad dvejetainė paieška atlieka ne daugiau kaip O(log n) palyginimų. Formalizuojant rūšiavimą, tariama kad yra duotas įrašų sąrašas (R 0, R 1,, R n- 1), kuriame kiekvienas įrašas R i turi rakto reikšmę K i. Raktų reikšmės sudaro pilnai sutvarkytą aibę, t.y. bet kokiom dviem raktų reikšmėms x ir y, galioja x = y arba x < y, arba x > y. Šie sąryšiai yra tranzityviniai, t.y. bet kokiai iš trijų reikšmių x, y ir z, 1
2 iš x < y ir y < z išplaukia x < z. Rūšiavimo uždavinius galima apibrėžti kaip paiešką tokių perstatinių, kad K σ(i-1 ) K σ(i), 0 < i n-1, norima išdėstymo tvarka yra ( R σ(0), R σ(1),, R σ(n-1) ). Kadangi sąrašas gali turėti kelias vienodas raktų reikšmes, perstatinis nėra vienintelis. Kai kuriuose taikymuose tikslinga surasti vienintelį pakeitimą σ s, kuris turi stabilumo savybes: [surūšiuotas] K σ(i-1) K σ(i), kai 0 < i n-1 [stabilus] Jei i < j ir K i = K j įvestame sąraše, tada R i eina prieš R j surūšiuotame sąraše. Rūšiavimo metodas, kuris generuoja stabilų perstatinį σ s yra vadinamas stabiliu. Stabilumas yra tik vienas iš kriterijų, atskiriant rūšiavimo metodus vienus nuo kitų. Be to, duomenų rūšiavimą galima apibūdinti vietos atmintyje poreikiu (pvz. vidinis ar išorinis rūšiavimas), naudojamu rūšiavimo metodu (pvz., burbuliuko algoritmas) ir pan.. Papildomos atminties (vidinės) kiekis, reikalingas algoritmų darbui, irgi yra svarbus rodiklis. Rūšiavimo algoritmai gali būti skirstomi į grupes pagal tai, kiek papildomos atminties naudoja (nenaudoja visiškai; naudoja papildomai tik atmintį, reikalingą rodyklėms išdėstyti; naudoja papildomai tiek pat atminties, kiek yra duomenų) Elementarūs rūšiavimo algoritmai Nagrinėjant rūšiavimą dažnai galima tarti, kad duomenys, kuriuos algoritmas turi rūšiuoti - tai skaičiai, laisvai telpantys į kintamajam skirtą atmintį. Taip galima geriau sukoncentruoti dėmesį į algoritmo darbo specifiką. Išrinkimo algoritmas Vienas iš paprasčiausių rūšiavimo algoritmų - išrinkimo (selection arba selection sort) vadovaujasi taisykle: iš turimo duomenų sąrašo išrenkamas minimalus elementą ir rašomas į pirmą vietą (sukeičiant pirmoje vietoje esantį elementą su rastu minimaliu). Po to tas pats principas taikomas sąrašui be pirmojo elemento, ir t.t. kol sąrašas tampa tuščias. Nors šis algoritmas priklauso brutalios 2
3 jėgos algoritmams, jis dažnai naudojamas labai ilgiems įrašams su trumpais laukais rūšiuoti, nes šis algoritmas garantuoja, kad kiekvienas iš elementų bus perkeltas į kitą vietą ne daugiau kaip vieną kartą (algoritmas efektyvus duomenų sukeitimo vietomis swap operacijos atžvilgiu). Pagrindinės algoritmo darbo operacijos - tai duomenų lyginimas ir keitimas vietomis. Savybė: Vertinant algoritmo efektyvumą, nesunku parodyti, kad jis naudoja apytikriai N 2 /2 lyginimų ir N sukeitimų vietomis. Įterpimo algoritmas Įterpimo algoritmas yra beveik toks pat paprastas kaip ir išrinkimo, bet labiau lankstus. Pradedant nuo pirmojo elemento, kiekvienas sekantis x i yra lyginamas su prieš jį esančiu, ir, jei jų tvarka netinkama, sukeičiami vietomis. Jei toks keitimas įvyko, lyginama pora (x i-1, x i ), ir t.t. Lyginimų serija nutraukiama, jei kurios nors poros elementų sukeisti vietomis nereikia. Šis algoritmas gerai žinomas bridžo žaidimo mėgėjams - taip jie rūšiuoja turimas kortas. Taikomuoju požiūriu jis labiau tinkamas situacijai, kai duomenų keitimo vietomis operacija yra lengvai vykdoma. Programuojant šį algoritmą, reikia parinkti tinkamą bazinę duomenų struktūrą (masyvas čia mažiau tinka). Naudojant sąrašus, tikslinga į juos įvesti ir signalinį žymenį (sentinel), tai žymiai palengvina programos konstravimą. Analizuojant algoritmą, galima naudoti elementų įterpimo metidką. Tariant kad rūšiavimas įterpia R i įrašą į sutvarkytą įrašų seką R 0, R 1,, R i-1, ( K 0 K 1 K i- 1 ), taip kad gautoji dydžio i seka taip pat būtų sutvarkyta. Tuomet pradedama nuo sutvarkytos sekos R 0 ir nuosekliai į ją įterpia įrašus R 1, R 2,, R n-1. Kadangi kiekvienas įterpimas vėl duoda seką sutvarkytą, galima sutvarkyti sąrašą su n įrašų darant n-1 įterpimą. Ši strategija yra realizuojama insertion_sort pagalba: void insertion_sort(element list[], int n) { int i,j; element next; for (i = 1; i < n, i++) { 3
4 next = list[i]; for (j = i-1; j>= 0 && next.key < list[j].key;j--) list[j+1] = list[j]; Savybė. Įterpimo algoritmas vidutiniu atveju naudoja apytikriai N 2 /4 lyginimų ir N 2 /8 keitimų vietomis ir dvigubai daugiau operacijų blogiausiu atveju. Įterpimo metodas yra tiesinis beveik surūšiuotiems duomenims. Burbuliuko algoritmas Šio algoritmo idėja - nuosekliai iš dešinės į kairę peržiūrint gretimų elementų poras ir jei reikia, elementus sukeičiant vietomis, į sekos pradžią perkelti mažesnius elementus. Taip elgiantis, mažesni elementai pasislenka į duomenų sekos pradžią, o pirmoje sekos vietoje atsiduria mažiausias elementas. Po to galima pritaikyti tą patį principą duomenų posekiui be pirmojo elemento, ir t.t. Tai panašu į virimo procesą, kai oro burbuliukai kyla į paviršių - iš čia kilęs algoritmo pavadinimas. Savybė: Burbuliuko algoritmas apytikriai naudoja N 2 /2 lyginimų ir N 2 /2 keitimų vietomis ir vidutiniu, ir blogiausiu atvejais. Nė vienam iš trijų pateiktų algoritmų nereikia papildomos arba tarpinės atminties. Tolesnis algoritmų darbo arba jų tinkamumo vienai ar kitai situacijai vertinimas turi apimti lyginimo ir keitimo vietomis operacijų "kainą" ir jų santykį. Operacijų vykdymo laikas akivaizdžiai priklauso nuo įrašų ilgio, laukų, pagal kuriuos rūšiuojama, santykio, įrašų ilgių santykio ir pan. Jei šie faktoriai napalankūs, galima keisti algoritmų realizaciją. Pavyzdžiui, rūšiuojant ilgus įrašus, galima įvesti papildomą įrašų nuorodų masyvą ar sąrašą ir lyginimo atveju manipuliuoti šio masyvo reikšmėmis. Taip galima pasiekti, kad bet kuris iš jau nagrinėtų algoritmų naudos tik N įrašų keitimų vietomis. Rūšiavimas Šelo metodu Išvardyti algoritmai yra universalūs ta prasme, kad nekreipia dėmesio į duomenų sekos ypatumus. Tačiau jei duomenų ypatumai žinomi, algoritmus galima modifikuoti taip, kad jie dirbtų efektyviau, tokiems atvejams pasiūlyta daug ir įvairių metodu. 4
5 Įterpimo algoritmas nors ir dažnai naudojamas, yra lėtas, nes atliekami elementų sukeitimai vyksta tik tarp gretimų elementų, taigi elementai gali saraše pajudėti tik per vieną poziciją vienu metu. Pavyzdžiui, jei elementas su mažiausia reiksme yra masyvo pabaigoje, reikia N žingsnių norint jį patalpinti į jam priklausiančią vietą. Rūšiavimas Šelo metodu (toliau Shellsort) yra modifikuotas įterpimo algoritmas, kuris leidžia sukeisti vietomis toli esančius elementus. Šio algoritmo idėja - pertvarkyti elementus taip, kad imant kiekvieną h-tąjį elementą, būtų gaunamas surūšiuotas sąrašas (vadinamas h-surūšiuotu), kartojant šį algoritmą skirtingoms h reikšmes (paprastai mažėjančioms pagal tam tikrą dėsnį), galima perkelti elementus sąraše dideliais atstumais ir tuo pagreitinti rūšiavimą. Šio algoritmo darbo efektyvumas priklauso nuo skaičiaus h (vadinamosios inkrementinės sekos) kitimo dėsnio parinkimo ir nuo duomenų sekos. Kitas šio metodo ypatumas - jį lengva programuoti netgi sudėtingesniems duomenims. Todėl jis dažnai aptinkamas įvairiuose taikymuose. Kaip nuspręsti kurią inkrementinę seką naudoti? Paprastai į šį klausima atsakyti sunku. Daugelio skirtingų inkrementinių sekų savybės aprašytos literatūroje [Knuth 1998], pasiūlyta sekų, gerai veikiančių praktiškai, bet nėra įrodomai geriausios sekos. Praktikoje dažnai naudojamos geometriškai mažėjančios sekos, tuomet sukeitimo prieaugių skaičius yra logaritminis. Taip pat reikia atsižvelgti į aritmetinius prieaugių santykius, tokius kaip bendrųjų daliklių kiekis ir kt. Inkrementinė seka , rekomenduota Knuth o 1969 metais [Knuth 1998], kurios santykis tarp prieaugių yra apie 1/3, duoda palyginti efektyvų rūšiavimo laiką net gana dideliems sąrašams. Daug kitų inkrementinių sekų duoda efektyvesnį rūšiavimą, bet Knuth minėtą seką sunku pralenkti daugiau nei 20%, net santykinai dideliems N. Viena tokių sekų yra , seka 4 i i + 1, i>0, kuri yra greitesnė blogiausiu atveju. Ši, Knuth`o ir daug kitų sekų turi panašias dinamines charakteristikas dideliems failams Kita vertus, yra keletas blogų inkrementinių sekų, pvz., (tikroji Shell o pasiūlyta seka, kai jis pristatė algoritmą 1959 m.). Ši seka veiks blogai, nes nelyginėse pozicijose esantys elementai nelyginami su esančiais lyginėse iki pat paskutinio veiksmo. Lėto rūšiavimo efektas yra pastebimas atsitiktiniams sąrašams ir yra katastrofiškas blogiausiu atveju: algoritmas išsigimsta ir reikalauja kvadratinio laiko jei, pvz., pusė elementų su 5
6 mažiausiomis reikšmėmis yra lyginėse pozicijose ir pusė elementų su didžiausiomis reikšmėmis yra nelyginėse pozicijose. Toliau programa pateikia kompaktišką Shellsort algoritmo realizaciją, naudojančią inkrementinę seką : void shellsort(item a[],int l, int r) { int i, j, h; for (h = 1; h <= (r-l)/9; h= 3*h+1); for ( ; h > 0; h/=3) for (i = l+h; i<= r; i++) { int j = i; Item v = a[i]; while (j>= l+h && less(v, a[j-h])) { a[j] = a[j-h]; j -= h; a[j] = v; Shellsort algoritmo efektyvumo tiksli matematinė analizė yra sudėtinga, ji nėra tiksli, tai apsunkina ne tik įvairių didėjančių sekų įvertinimą, bet ir Shellsort algoritmo analitinį palyginimą su kitais algoritmais. Nežinoma net Shellsort algoritmo veikimo laiko funkcijos išraiška (kuri beje priklauso nuo inkrementinės sekos). Knuth pastebėjo, kad abi funkcinės išraiškos N(log N) 2 ir N 1.25 gana gerai atitinka eksperimentinius duomenis, o vėlesni testai nurodo sudėtingesnės išraiškos funkciją N 1+1/ lg N kai kurioms inkrementinėms sekoms. Tiriant Shellsort algoritmą, galima pagrįsti tokias savybes. Savybė: k-sutvarkyto failo h-rūšiavimo rezultatas yra failas, sutvarkytas pagal h ir k. Savybė: Shellsort algoritmas atlieka mažiau nei N(h-1)(k-1)/g palyginimų g- surūšiuoti failą, kuris yra h- ir k-sutvarkytas, su sąlyga, kad h ir k yra pirminiai. Savybė: Shellsort algoritmas atlieka mažiau nei O(N 3/2 ) palyginimų sekai
7 Savybė: Shellsort algoritmas atlieka mažiau nei O(N 4/3 ) palyginimų sekai Savybė: Shellsort algoritmas atlieka mažiau nei O(N(log N) 2 ) palyginimų sekai Pasiskirstymo skaičiavimas Labai paprasta rūšiuoti specifinėje situacijoje, kai elementų raktai keičiasi pvz., nuo 1 iki N, belieka duomenis perkelti į vietas, kurių numeriai lygūs jų reikšmėms: for i:= 1 to N do t[a[i]] = a[i]; Jei turima N skaičių, kurie yra intervale nuo 1 iki M, rūšiuoti galima irgi panašiu būdu, tik reikia žinoti, kiek kartų kiekvienas skaičius sekoje pasikartoja. Kai M nėra labai didelis, seką galima pereiti du kartus, pirmą kartą apskaičiuojant elementų pasikartojimus sekoje, o antrą kartą perkeliant tuos elementus į jiems priklausančias vietas Greito rūšiavimo algoritmas Šis metodas, angliškai vadinamas quicksort, pasiūlytas C. A. R. Hoare 1962-ais metais [Sedgewick 1999]. Jis yra labai paplitęs ir aptinkamas daugelyje taikymų. Algoritmo realizavimo paprastumas ir efektyvus atminties naudojimas sąlygojo jo populiarumą. Algoritmo teigiamos savybės: papildoma atmintis beveik nenaudojama; algoritmo sudėtingumas yra O(NlogN) viduriniu atveju; algoritmo realizavime gali būti apibrėžti labai trumpi vidiniai ciklai. Algoritmo neigiamos savybės: algoritmas rekursyvus, todėl diegimas komplikuotas, kai nėra rekursijos mechanizmo; algoritmo sudėtingumas yra O(N 2 ) blogiausiu atveju; algoritmas labai jautrus programavimo klaidoms. 7
8 Quicksort remiasi paradigma "skaldyk ir valdyk". Pagrindinė idėja - išskaidžius duomenų seką į dvi dalis taip, kad vienoje iš jų visi elementai būtų mažesni už kitos dalies elementus, toliau šios dvi dalys gali būti rūšiuojamos nepriklausomai viena nuo kitos. Todėl parinkus slenkstį, t.y elementą, kuris galima sakyti jau yra savo vietoje, galima skaidyti seką į dvi dalis: vienoje iš jų visi elementai yra mažesni už slenkstį, o kitoje dalyje didesni. Rūšiavimo programa tuomet gali atrodyti taip: Void quicksort(element list[], int left, int right) /*rūšiuojame list[left],..., list[right] nemažėjančia tvarka pagal raktinius laukus. List[left].key sutartinai pasirenkamas kaip atskaitos raktas. Tarkime, kad list[left].key list[right].key*/ { int pivot,i,j; element temp; if (left < right) { i = left; j = right + 1; pivot = list[left].key; do { /*ieškome raktų iš kairės ir dešinės raktų dalies,pakeičiant out-of-order elementus tol, kol kairysis ir dešinysis rėžiai susikerta arba susiliečia*/ do i++; while (list[i].key < pivot); do j--; while (list[j].key > pivot; if (i < j) SWAP(list[i],list[j],temp); while (i < j); SWAP(list[left],list[j],temp); quicksort(list,left,j-1); quicksort(list,j+1,right); Įvertinus reikalingus veiksmus ir juos pertvarkius, algoritmą galima vykdyti gan tobulai, pvz., suradus kairėje sekos pusėje elementą, kuris didesnis už slenkstį ir kurį reikia perkelti į dešinę pusę, galima prieš tai dar surasti elementą dešinėje, 8
9 kuris mažesnis už slenkstį, ir tik tada abu šiuos elementus sukeisti vietomis - taip yra taupomi sukeitimo veiksmai ir atmintis. Aišku, šis algoritmas yra nestabilus, jis gali ne tik keisti lygių elementų tvarką, bet ir juos dėstyti skirtingose vietose. Algoritmo efektyvaus realizavimo (programavimo) ypatumus sąlygoja tokie faktoriai: rekursijos eliminavimas (sudarant galimybę detaliai valdyti algoritmo vykdymo eigą ir iš anksto numatyti nepalankių arba išsigimusių sekų atvejus); trumpi posekiai esant trumpiems sąrašams, greitas rūšiavimas yra neefektyvus, todėl tikslinga trumpą posekiams, pvz., tokiems kad elementų skaičius M, naudoti kokį nors tiesioginį metodą, pvz., įterpimą, ribinį skaičių M parenkant tinkamiausią esamoms sąlygoms; sąrašo skaidymo į dalis slenksčio parinkimas - ši problema irgi svarbi greito rūšiavimo algoritme dažniausiai naudojamas arba didesnio iš pirmųjų dviejų nesutampančių sekos elementų principas, arba vadinamasis medianos iš trijų elementų principas. Quicksort analizė Algoritmo elgesys blogiausiu atveju yra lygus O(n 2 ) tai akivaizdu, parenkant seką ir skaidymo į dalis slenkstį taip, kad viena iš dalių visada būtų tuščia. Tačiau palankiais atvejais, kai kiekvienas įrašas yra teisingoje pozicijoje, sąrašo dalis į kairę bus tokio paties dydžio kaip ir į dešinę, tuomet kiekvienos dalies dydis apytikriai bus n/2. Intuityviai aišku, kad quicksort turėtų veikti optimaliausiai, kai sąrašas skaidomas į dvi lygias dalis. Laikas, reikalingas lokalizuoti įrašą n dydžio sąraše, yra lygus O(n). Jei T(n) yra laikas, reikalingas surūšiuoti sąrašą iš n įrašų, tai kai sąrašas skyla į apytikriai dvi lygias dalis, o kiekvieną kartą įrašas yra tinkamoje vietoje, laiką galima įvertinti: T(n) cn + 2T(n/2), kai kurioms konstantoms c cn + 2(cn/2 + 2T(n/4)) 2cn + 4T(n/4) cn log 2 n + nt(1) = O(n log 2 n) 9
10 Eksperimentiniai rezultatai rodo, kad kai vidutinis skaičiavimo laikas atitinka nurodytą santykį, tuomet quicksort yra geriausias iš iki šiol nagrinėtų vidinio rūšiavimo metodų. Savybė: Tegul T avg (n) yra laukiamas laikas, kurį užtruks quicksort, kad surūšiuotų failą iš n įrašų. Tada egzistuoja gokia konstanta k, kad T avg (n) kn log e n, kai n 2. Skirtingai nuo įterpimo rūšiavimo, kuriame papildoma vieta atmintyje reikalinga tik vienam įrašui, greitam rūšiavimui reikalingas stekas, realizuojantis rekursiją. Tuo atveju, kai sąrašas skaidomas taip kaip aukščiau paminėtoje savybėje, maksimalus rekursijos gylis (recursion depth) bus log n, o tai reikalauja steko apimties, vertinamos dydžiu O(log n). Blogiausias atvejis būna tada, kai sąrašas suskaidomas į kairę dalį, kurios dydis yra n 1, ir į dešinę dalį, kurios dydis yra 0, kiekviename rekursijos lygyje. Šiuo atveju, rekursijos gylis lygus n, kuris reikalauja O(n) steko apimties. Esant blogiausiam atvejui reikalinga steko apimtis gali būti sumažintas 4 kartus, tariant kad dešiniosios sąrašo dalies, kurios dydis mažesnis už 2, nebūtinai turi būti saugoma atmintyje, bent jau laikinai. Greito rūšiavimo algoritmo taikymas ranginės statistikos uždaviniams Pagrindinė quicksort algoritmo idėja gali būti panaudota ne vien duomenims rūšiuoti. Labai dažnai sutinkami uždaviniai kaip antai: iš skaičių sekos išrinkti k mažiausių elementų, arba apskaičiuoti skaičių aibės medianą. Šitokius ir panašius uždavinius (dažnai minimus ranginės statistikos vardu), aišku, galima spręsti rūšiuojant turimą skaičių seką, tačiau iš esmės tokiems uždaviniams pilnas rūšiavimas nėra reikalingas. Efektyvesnis sprendimo būdas yra panaudoti dalinimo į dvi dalis operaciją (pateikiamoje žemiau programoje ji išskirta atskirai, partition vardu, ją valdantys parametrai yra a slenkstis, l, r kairiojo ir dešiniojo elementų pozicijos, šie parametrai perduodami procedūrai), t.y. parinkti tinkamą elementą ir suskaidyti sąrašą į dvi dalis taip, kad vienoje iš jų būtų k mažesnių už parinktą elementų, o kitoje (N-k) didesnių. Jei nepavyksta tai atlikti iš karto, skaidymo operacija kartojama kelis kartus, bet tik vienai iš dalių. Programuojant šitokią procedūrą, ji iškviečia save tik vieną kartą, iš esmės ji nėra rekursyvi ir eliminuoti rekursiją nėra sudėtinga. Tam nebūtina naudoti netgi dėklo, nes procedūra, grįždama vėl į savo pradžią, atnaujina parametrų reikšmes. Tuomet rekursyvi programos versija galėtų atrodyti taip: 10
11 Select(Item a[], int l, int r, int k) { int i; if (r <= l) return; i = partition(a, l, r); if (i > k) select(a, l, i-1, k); if (I < k) select(a, i+1, r, k); Savo ruožtu, nerekursyvi programa galėtų atrodyti: Select(Item a[], int l, int r, int k) { while ( r > l ) { int i = partition(a, l, r); if (i >= k) r = i-1; if (I <= k) l = i+1; Optimalaus rūšiavimo laiko vertinimas Rūšiavimo metodų, kurie buvo aptarti, blogiausio atvejo veikimo laikas yra O(n 2 ), o jo vertinimas priklauso nuo konkrečių algoritmų. Tačiau optimalaus rūšiavimo laiko vertinimas gali būti atsietas nuo konkrečių procedūrų ir nagrinėjamas teoriniame lygmenyje. Teoriškai, vidinio rūšiavimo algoritmai turi dvi pagrindines operacijas: raktų palyginimą ir elementų keitimą vietomis (swap). Tuomet galima teigti, kad geriausias galimas laikas yra O(n log 2 n). Toks vertinimas gali būti įrodytas, naudojant sprendimų medį, kuris vizualiai atspindi rūšiavimo procesą. Kiekviena medžio viršūnė vaizduoja dviejų raktų palyginimą, ir kiekviena šaka rodo palyginimo rezultatą. Todėl, kiekvienas kelias, kuriuo galima apeiti medį, vaizduoja skaičiavimų seką, kuriuos rūšiavimo algoritmas galėtų atlikti. Savybė: Bet kuris sprendinių medis, kuris rūšiuoja n skirtingų elementų, yra bent log 2 (n!) + 1 aukščio. Iš tikro, rūšiuojant n elementų galima gauti n! skirtingų galimų atsakymų. Todėl bet koks sprendinių medis turi turėti bent n! lapų. Bet sprendinių medis taip 11
12 pat yra ir dvejetainis medis, kuris gali turėti daugiausiai 2 k-1 lapų, jeigu jo aukštis yra k. Todėl aukštis turi būti bent log 2 (n!) + 1. Savybė: Bet koks algoritmas, kuris rūšiuoja naudodamas palyginimus, turi turėti blogiausio atvejo skaičiavimo laiką ne mažiau Ω(n log 2 n). Kiekvienam sprendinių medžiui, turinčiam n! lapų, gali (arba turi) egzistuoti kelias, kurio ilgis yra c nlog 2 n, kur c yra konstanta. Blogiausiam atvejui turi egzistuoti kelias, kurio ilgis log 2 n!. Dabar, n! = n(n - 1)(n - 2),, (3)(2)(1) (n / 2) n / 2. Taigi log2n! (n / 2)log 2 (n / 2) = O(n log 2 n) Skaitmeninis rūšiavimas Rūšiuojami duomenys dažnai yra sudėtingi, pvz., įrašai duomenų bazėse, ar telefonų sąrašai, ar bibliotekiniai katalogai. Paprastai apie šių įrašų laukų reikšmes nieko apibrėžto negalima pasakyti. Tačiau jei apie įrašų ar laukų reikšmes galima pasakyti ką nors papildomo, šią informaciją tikslinga panaudoti rūšiavimo procedūroms. Skaitmeninio rūšiavimo algoritmuose (radixsort) duomenų reikšmės interpretuojamos kaip skaičiai M-ainėje skaičiavimo sistemoje. Priklausomai nuo elementų reikšmių i-oje pozicijoje skaičiai gali būti suskirstyti į M grupių, po to kiekviena iš šių grupių gali būti lygiai taip pat suskirstyta į M pogrupių, priklausomai nuo reikšmių j-oje pozicijoje, ir t.t.. Įvedus vienokį ar kitokį pozicijų parinkimo dėsnį, gaunami išsamiai apibrėžti skaitmeninio rūšiavimo algoritmai. Skaitmeninio rūšiavimo algoritmai nagrinėjami kai M yra 2 laipsnis (turint omenyje kompiuterinę realizaciją), o pozicijos keičiasi pereinant nuo i prie i+1 arba i-1 arba jas grupuojant po kelias. Šioje situacijoje, programuojant skaitmeninio rūšiavimo algoritmus, tikslinga turėti funkcijas tiesioginiam darbui su bitais, pvz. ekvivalenčią tokiai instrukcijai: x (div 2 k ) mod 2 j. Reikia pastebėti, kad taikant skaitmeninį rūšiavimą skaičiai turi būti pakankamai dideli. Jei skaičiai nėra dideli ir kiekvieną jų sudaro ne daugiau kaip b bitų, naudojant pasiskirstymo skaičiavimo algoritmą duomenis galima rūšiuoti taip, kad rūšiavimo laikas tiesiškai priklausytų nuo duomenų kiekio. Belieka tik atmintyje išskirti 2 b dydžio lentelę, kad b bitų ilgio skaičiais galima būtų laisvai disponuoti. 12
13 Dažniausiai naudojamos dvi skaitmeninio rūšiavimo procedūros: skaitmeninio keitimo (radix exchange sort arba most significant digit - MSD) ir tiesioginio skaitmeninio rūšiavimo (straight radix sort arba least significant digit - LSD), besiskiriančios apdorojamų bitų tvarka. Pirmasis metodas (MSD) pagrįstas leksikografine tvarka ir bitų pozicijas numeruoja iš kairės į dešinę. Tai reiškia, kad skaičiai, prasidedantys dvejetainiu nuliu, rūšiuojamoje sekoje pasirodys anksčiau negu skaičiai, prasidedantys dvejetainiu vienetu. Kai reikia dvejetaines pozicijas analizuoti ir skaičius keisti vietomis, galima taikyti keitimo vietomis procedūrą, panašiai kaip partition procedūra greito rūšiavimo algoritme. Tiesioginio skaitmeninio rūšiavimo metodas (LSD), skirtingai nuo skaitmeninio keitimo algoritmo, analizuoja bitus iš dešinės į kairę. Jis iš pradžių rūšiuoja duomenis pagal dešiniausią poziciją, po to pagal prieš tai esančią poziciją, po to dar prieš tai ir t.t. Elementams, kurių bitai j-1 pozicijoje sutampa, šis metodas neturi keisti tarpusavio tvarkos, t.y. jis yra stabilus. Labai panašiai elgdavosi senos skaičiavimo mašinos, rūšiuodamos perfokortas. LSD rūšiavimas dažnai yra paprastesnis nei MSD, nes elementų grupių nereikia rūšiuoti atskirai, o tai reiškia, kad LSD rūšiavimo resursų sanaudos yra mažesnės nei MSD. Formalizuojant LSD skaitmeninį rūšiavimą, galima daryti prielaidą, kad įrašai R 0,..., R n 1 turi reikšmes, kurios yra (x 0, x 1,..., x d 1 ) ir 0 < x i < r. Taip pat galima tarti, kad kiekvienas įrašas turi nuorodos lauką ir kad įvedamas sąrašas yra dinaminis sąrašas. Atskiras elementų grupes galima realizuoti kaip eilutes su nuorodomis front[i] į i-tos eilutės pradžią ir nuoroda rear[i] į jos pabaigą, 0 i < r. Tuomet įvedamus įrašus galima apibrėžti kaip tiesinį sąrašą, pvz. kai r = 10 ir d = 3, įrašai aprašomi taip: #define max_digit 3 /* skaičiai tarp 0 ir 999 */ #define radix_size 10 typedef struct list_node *list_pointer; typedef struct list_node { int key[max_digit]; list_pointer link; ; Tuomet LSD skaitmeninio rūšiavimo programa gali atrodyti taip: 13
14 list_pointer radix_sort(list_pointer ptr) /* tiesinio sąrašo skaitmeninis rūšiavimas */ { list_pointer front [radix_size], rear [radix_size]; int i, j, digit; for (i = max_digit - 1; i >= 0; i--) { for (j = 0; j < 0; j < radix_size; j++) front[j] = rear[]j] = null; while (ptr) { digit = ptr -> key[i]; if (!front[digit]) front[digit] = ptr; else rear[digit] -> link = ptr; rear[digit] = ptr; ptr = ptr ->link; /* iš naujo sukuriamas tiesinis sąrašas kitam lyginimui */ ptr = null; for (j = radix_size - 1; j >= 0; j--) if (front[j]) { rear[j] -> link = ptr; ptr = front[j]; return ptr; Algoritmo vykdymo laikas labai priklauso nuo radix pagrindo parinkimo. Skaitmeninis rūšiavimas pagrindu 2 ir skaičiais nuo 1 iki 100 milijardų bus atliekamas labai lėtai, o pagrindu 10 ir skaičiais nuo 0 iki 999 bus atliktas labai greitai. Taigi parinkti pagrindą kiekvienam n reikia labai kruopščiai. Savybė: funkcija radix_sort daro max_digit lyginimų, kiekvienas lyginimas užima o(radix_size + n) laiko, o visos programos vykdymo laikas yra o(max_digit(radix_size + n)). Jei skaitmeninės sistemos pagrindas yra 2-to laipsnis, tuomet galima pastebėti tokias abiejų skaitmeninio rūšiavimo algoritmų savybes: 1. radixexchange metodas naudoja apie NlgN bitų lyginimų, 14
15 2. abu skaitmeniniai metodai, rūšiuodami N skaičių, kurių kiekvienas yra b bitų ilgio naudoja mažiau negu Nb bitų lyginimų, 3. tiesioginis metodas rūšiuoja N skaičių, kurių kiekvienas b bitų ilgio, kartodamas algoritmą b/m kartų (jei išskiriama papildoma atmintis 2 m skaitliukių saugoti, o taip pat buferis pertvarkyti sąrašą) Heapsort algoritmas Naudojant prioritetinės eilutės operacijas, galima konstruoti heap rūšiavimo algoritmą (heapsort), kuris remiasi duomenų struktūra heap. Algoritmo idėja labai paprasta: turint duomenis heap struktūroje, atspausdinti šakninį elementą (kuris yra didžiausias aibės elementas), po to jį pašalinti, o likusią aibę vėl pertvarkyti į heap struktūrą taip elgtis tol, kol aibė nebus tuščia. Visi išmetami elementai išsirikiuos mažėjančia tvarka. Formaliai užrašytas algoritmas bus toks: void heapsort(element list[], int n) /* atliekamas masyvo heap rūšiavimas */ { int i, j; element temp; for (i = n/2; i > 0; i--) adjust(list, i, n); for (i = n - 1; i > 0; i--) { swap(list[1], list [i + 1], temp); adjust(list, 1, i); Ši programa naudoja funkciją adjust, kuri reikalinga max-heap sutvarkymui: void adjust(element list[], int root, int n) /* pertvarkomas dvejetainis medis, kad sukurtume heap struktūrą */ { int child, rootkey; element temp; temp = list[root]; rootkey = list[root].key; 15
16 child = 2 * root; /* left child*/ while (child <= n ) { if ((child < n) && (list[child].key < list[list + 1].key)) child++; if (rootkey > list[child].key) /* palyginame šaknį ir didžiausią sūnų */ break; else { list[child / 2] = list[child]; /* pereinam prie tėvo */ child *= 2; list[child/2] = temp; Šioje heapsort algoritmo versijoje yra naudojama max-heap struktūra, t.y. šakninis elementas yra didžiausias visoje aibėje. Pirmiausia į tuščią heap struktūrą yra įterpiama n įrašų, po to įrašai vienas po kito iš jos šalinami struktūros. Heap iš n elementų galima sukurt greičiau, naudojant funkciją adjust. Ši funkcija pertvarko dvejetainį medį T, kurio abu pomedžiai patenkina, o šaknis gali ir nepatenkinti heap sąvybės, taip kad visas medis patenkintų heap sąvybę. Jei medžio su šaknimi i aukštis yra d, tai while ciklas yra atliekamas daugiausiai d kartų. Taigi funkcijos adjust sudėtingumas vykdymo atžvilgiu yra O(d). Rūšiuojant sąrašą, atliekama n 1 žingsnių, per kiekvieną žingsnį sukeičiant pirmą heap įrašą su paskutiniu. Kadangi pirmas įrašas visada turi didžiausią reikšmę, tai jis dabar jau bus savo vietoj (t.y., kur turėtų būti, surūšiavus failą). Sumažinus heap struktūros dydį, ji vėl pertvarkoma, pvz. pirmu žingsniu įrašas su didžiausia reikšme perkeliamas į n-tąją poziciją, antru žingsniu perkeliamas įrašas su antra pagal dydį reikšme į n 1 poziciją, i tuoju žingsniu perkeliamas įrašas su i taja pagal dydį reikšme į n i + 1 poziciją. Funkcija heapsort realizuoja šią strategiją, jos iškvietimas yra heapsort(list, n). Heap rūšiavimas, kaip tai seka iš jo realizacijos, reikalauja tik fiksuoto papildomos atminties kiekio, o tuo pačiu metu jo sudėtingumas vykdymo atžvilgiu bus O(nlogn), kaip blogiausiu taip ir vidutiniu atvejais. Heap rūšiavimas yra truputį lėtesnis nei sąlajos, kai naudojama O(n) papildomos vietos, tačiau jis greitesnis už sąlajos rūšiavimą, kai naudojama papildoma atmintis yra proporcinga O(1). 16
17 Heapsort analizė Tariant kad 2 k 1 n 2 k, atitinkamas dvejetainis medis turės k lygių ir viršūnių skaičius lygyje i yra 2 i 1. Pirmuoju programos ciklu for heapsort iškviečia adjust po vieną kartą kiekvienai viršūnei, kuri turi sūnų. Taigi, laikas kiek trunka šis ciklas, yra kiekvieno lygio viršūnių sandaugų su didžiausiu atstumu, kuriuo gali judėti viršūnė, suma. O tai yra ne daugiau kaip: k k k i 1 (k i) = 2 k i 1 i n i/2 i < 2n = O(n) i=1 i=1 i=1 Antru for ciklu heapsort iškviečia adjust n 1 kartų, kur maksimalus aukštis yra log 2 (n + 1). Taigi, ciklo vykdymo laikas yra O(n logn), o tai duoda ir galutinį vykdymo laiką O(n logn) Sąlajos rūšiavimas Apdoruojant duomenis dažnai tenka į gan didelį surūšiuotą sąrašą įterpti tam tikrą kiekį naujų duomenų, po to jį vėl surūšiuoti. Galima elgtis keliais būdais: iš pradžių duomenis įterpti į failą, o po to rūšiuoti; galima išlaikyti surūšiuotą sąrašą įterpiant kiekvieną elementą atskirai; galima iš pradžių duomenis surūšiuoti, o po to abu failus sulieti būtent pastarasis metodas ir bus nagrinėjamas. Sąlajos rūšiavime esminis yra sąlajos (merge) procesas, kuris sujungia dvi arba kelias duomenų aibes į vieną aibę ir tam tikra prasme yra priešingas išrinkimo (selection) operacijai. Paprasčiausiai sąlajos procesas atrodo, kai suliejami du surūšiuoti sąrašai. Tuomet per tiesinį laiką, t.y. po vieną kartą nuskaitant abiejų sąrašų elementus ir keičiant tik nuskaitymų eilę, galima sukurti naują surūšiuotą sąrašą. Pateikiama programa naudoja O(n) papildomos vietos, ji sujungia surūšiuotus sąrašus (list[i],, list[m]) ir (list[m + 1],, list[n]) į vieną surūšiuotą sąrašą (sorted[i],, sorted[n]): Void merge(element list[], element sorted[], int i, int m, int n) 17
18 { int j,k,t; j = m+1; /*antrosios sąrašo dalies indeksai*/ k = i /*surūšiuoto sąrašo indeksai*/ while (i <= m && j <= n) { if (list[i].key <= list[j].key) sorted[k++] = list[i++]; else sorted[k++] = list[j++]; if (i > m) /*sorted[k],..., sorted[n] = list[j],..., list[n]*/ for (t = j; t <= n; t++) sorted[k+t-j] = list[t]; else /*sorted[k],..., sorted[n] = list[i],..., list[m]]*/ for (t = i; t <= m; t++) sorted[k+t-i]; Sąlajos proceso analizė: kiekvienoje while ciklo iteracijoje vienas įrašas yra pridedamas prie surūšiuoto sąrašo, tai yra, k padidėja 1. Visas įrašų skaičius, pridėtas prie surūšiuoto sąrašo, yra n i +1. Tai reiškia, kad while ciklas kartojamas daugiausiai n i +1 kartą, bendras skaičiavimo laikas yra O(n i +1). Jeigu įrašų ilgis yra M, tau šis laikas iš tikrųjų yra O(M(n i + 1)). Kai M yra didesnis už 1, sujungto sąrašo vaizdavimas panaikina papildomus n i +1 įrašus, tačiau turi būti skiriama vieta n i +1 elementų tarpiniam sąrašui. Tuomet skaičiavimo laikas daugiau nėra priklausomas nuo M; jis tiesiog vertinamas O(n i +1). Šį sąlajos procesą galima modifikuoti, padarant pačią sąlają sudėtingesnę, tačiau vykdant algoritmą taip kad jis naudotų tik O(1) papildomos vietos. Pagrindiniai algoritmo žingsniai gali būti tokie (darant prielaidą, kad bendras įrašų skaičius n yra tiksluss kvadratas, o kiekviename sąraše esančių įrašų, kuriuos reikia sujungti, kiekis yra n kartotinis): 18
19 1 žingsnis: identifikuojama n įrašų su didžiausiais raktais, einant iš dešinės į kairę ir kartu jungiant du sąrašus; 2 žingsnis: sukeičiami antro sąrašo įrašai, kurie identifikuoti 1 žingsnyje, su tais, kurie yra į kairę nuo identifikuotų iš pirmojo sąrašo, taip, kad n įrašų su didžiausiais raktais suformuotų vientisą bloką; 3 žingsnis: blokas, sudarytas iš n įrašų su didžiausiais raktais, sukeičiamas su kairiausiuoju bloku (jei jis dar nėra kairiausias blokas), rūšiuojamas dešiniausias blokas; 4 žingsnis: pertvarkomi blokai, išskyrus bloką su didžiausiais įrašais, į nemažėjančią pagal paskutinius raktus blokuose seką; 5 žingsnis: atliekame tiek sąlajos žingsnių, kiek jų reikia, kad būtų surūšiuoti (n 1) blokų, išskyrus bloką su didžiausiais raktais; 6 žingsnis: surūšiuojamas blokas su didžiausiais raktais. Detalesnė analizė. Realizuojant algoritmo žingsnius, galima teigti, kad 1 ir 2 žingsniai bei 3 žingsnyje sukeitimo vietomis operacija užtrunka po O( n) laiko ir užima po O(1) vietos. 3 žingsnio rūšiavimas gali būti atliktas per O(n) laiką, užimant O(1) vietos, kai naudojamas įterpimo rūšiavimas. 4 žingsnis gali būti atliktas per O(n) laiką ir reikalauja O(1) vietos, naudojant išrinkimo rūšiavimą. Kiekvienas įrašų keitimas vietomis naudojant išrinkimą, iš tikrųjų perkelia n dydžio bloką. Šiame žingsnyje įterpimo rūšiavimas būtų prastesnis už išrinkimą. Bendras 5 žingsnio skaičius yra ne daugiau (n 1), t.y. vykdymo laikas proporcingas O(n). 6 žingsnio rūšiavimas gali būti atliktas per O(n) laiko, naudojant arba išrinkimo arba įterpimo rūšiavimą. Todėl programos bendras laikas, realizuojant ją kaip aprašyta yra O(n), o naudojama papildoma atmintis yra O(1). Kartotinis sąlajos rūšiavimas Kartotinio rūšiavimo atveju daroma prielaidą, kad įvedamos sekos turi n surūšiuotų vieneto ilgio sąrašų. Tuos sąrašus suliejamos poromis gaunant n/2 sąrašų, kurių ilgis 2 (jei n nelyginis, tada vienas iš naujų sąrašų bus vieneto ilgio). Toliau n/2 sąrašų yra suliejami poromis, ir t.t., tęsiant procesą kol lieka vienas sąrašas. Kartotinį algoritmą lengviau realizuoti, jei iš pradžių išskiriama funkcija, kuri atlieka vieną suliejimą: 19
20 void merge_pass(element list[], element sorted[], int n, int length) { int i, j; for (i = 0; i <= n - 2 * length; i += 2 * length) merge(list, sorted, i, i + length - 1, i + 2 * length - 1); if (i + length < n) merge(list, sorted, i, i + length - 1, n - 1); else for (j = i; j < n; j++) sorted[j] = list[j]; Naudojant šią programą, nesunku tiesmukiškai parašyti rekursyvią programą, kuri naudotų funkciją merge_pass, ją iškviečiant surūšiuotiems sąrašams sujungti. Tuo tarpu nerekursyvus programos variantas irgi naudotų tą pačią funkciją ir gali atrodyti taip: void merge_sort (element list[], int n) { int length = 1; element extra[max_size]; while (length < n) { merge_pass(list, extra, n, length); length *= 2; merge_pass(extra, list, n, length); length *= 2; Sąlajos rūšiavimo algoritmų sudėtingumas ir savybės yra tokios: nepriklausomai nuo duomenų, naudoja apytikriai NlogN lyginimų; naudoja papildomą atmintį, kurios tūris proporcingas duomenų kiekiui N, tačiau gali būti pasiektas O(1) vietos poreikis; 20
21 algoritmai yra stabilūs; algoritmų darbas nepriklauso nuo duomenų tvarkos, jų sudėtingumas yra O(n log n); darbą galima pagerinti, kombinuojant jį su kitais rūšiavimo metodais. Pav pateiktas pavyzdys parodantis kaip duomenys rūšiuojami ir jungiami po kiekvieno lyginimo, pav pateikia kitokią galimą kartotinio sąlajos rūšiavimo variantą [HSA 1993] \ / \ / \ / \ / \ / \ / \ / Pav Kartotinas sąlajos rūšiavimas \ / _ \ / _ 5 26 \ _ \ _ \ / \ / \ / Pav Kitas kartotino sąlajos rūšiavimo variantas. Natūralusis sąlajos rūšiavimas Algoritmą merge_sort galima pakeisti, kad rūšiuodamas atsižvelgtų į įvedamus duomenis. Šiuo atveju duomenys yra peržvelgiami, surandant juose jau surūšiuotas įrašų sekas ir pasižymint jų vietas rūšiuojamame sąraše.. Tada algoritmas gali šiuos surūšiuotus posąrašius interpretuoti kaip jau sulietus. Pav.3.3. iliustruoja, kaip šiuo atveju rūšiuojami pateikti duomenys. 21
22 \ / \ / \ / \ / \ / Pav Kartotinas rūšiavimas fiksuojant dalinai surūšiuotus posekius Išorinis rūšiavimas Apdorojant informaciją labai dažnai pasitaiko atvejų, kai disponuojama labai dideliais duomenų failais ar rinkiniais, kurie yra rūšiuojami ir netelpa kompiuterio vidinėje atmintyje. Tuo atveju anksčiau nagrinėti algoritmai netinka, vietoj jų yra naudojami vadinamieji išoriniai rūšiavimo metodai (external sorting). Du pagrindiniai faktoriai iš esmės skiria vidinio ir išorinio rūšiavimo algoritmus: kadangi dauguma duomenų saugomi antrinėje (diskinėje) ar netgi tretinėje atmintyje, elemento išrinkimas iš išorinės atminties trunka kur kas ilgiau, negu tūkstančiai lyginimo ar keitimo vietomis operacijų ar kitokių skaičiavimų vidinėje atmintyje; duomenų failai, saugomi išorinėje atmintyje, turi savus duomenų išrinkimo ar paieškos metodus, kurių negalima atsisakyti ar pakeisti (pvz., magnetinėje juostoje duomenis galima išrinkti tik nuosekliai). Todėl išorinio rūšiavimo atveju, kuriant ar taikant vienokį ar kitokį algoritmą, reikia atsižvelgti į visus duomenų apdorojimo veiksnius ir etapus, pilnos duomenų apdorojimo sistemos sąvoka (operacijų požiūriu) čia lygiai tokia pat svarbi kaip ir algoritmo. Natūralu yra įvesti dar vieną bazinę operaciją kreipimąsi į išorinę (diskinę) atmintį. Todėl norint parinkti efektyvų išorinio rūšiavimo algoritmą, reikia kreipti dėmesį ne tik į lyginimo ar keitimo vietomis operacijų skaičių, kaip buvo daroma anksčiau, bet ir mažinti įvedimo/išvedimo (I/O) operacijų skaičių ir jų vykdymo laiką. Pirminiai išorinio rūšiavimo principai ir metodai, kurie buvo sukurti kai duomenys dar buvo saugomi perfokortose ir popierinėse perfojuostose, naudojami ir dabar, kai rūšiuojama diskuose ir magnetinėse juostose, domeninėje atmintyje (bubble-memory) ir videodiskuose. Veržlus technologijų vystymasis kelia jiems 22
23 daug reikalavimų, verčia juos adaptuoti vis sudėtingesnei kompiuterinei aplinkai. Pvz., rūšiavimo metodai dabartinėse multimedia sistemose kompiuterinę atmintį skirsto į pirminę, antrinę, tretinę, iš kurių kiekviena turi didelės įtakos rūšiavimo greičiui ir algoritmams. Iš tikrųjų situacija yra dar sudėtingesnė. Šiuolaikiniuose kompiuteriuose vidinė atmintis nėra vienarūšė, jos sudėtinės ar ją aptarnaujančios dalys yra ir superoperatyvioji atmintis (cache memory), ir buferinė atmintis (buffer memory). Duomenų išrinkimo greičiai šiose dalyse irgi yra skirtingi. Aišku, kad rūšiavimo metodai galingose kompiuterinėse sistemose turi gerai išnaudoti ir šiuos skirtumus. Be to, I/O operacijas, pvz. diskines, irgi galima detaliau specifikuoti, kai skaitant iš disko ar rašant į jį, kreipiamas dėmesys į tokius svarbius faktorius: 1. paieškos laikas (seek time): tai laikas per kurį galvutė nusistato teisingą disko takelį, 2. gaišties laikas (latency time): laikas, iki tol, kol skaitymo/rašymo galvutė yra ties reikiamu takeliu; 3. perdavimo laikas (transmission time): laikas, per kurį perduodami duomenys į diską arba iš jo. Populiariausias išorinės atminties duomenų rūšiavimo būdas vadinamas išoriniu sąlajos (external merge) rūšiavimu. Šis metodas susideda iš dviejų atskirų fazių. Visų pirma, įvedimo failo dėmenys yra surūšiuojami naudojant tinkamą vidinio rūšiavimo metodą. Surūšiuoti segmentai, dar vadinami srautais, yra perrašomi į išorinės atminties įrenginius. Antra, srautai sugeneruoti pirmoje fazėje, yra sujungiami į sąlajos medį (merge tree), po to procesas kartojamas tiek kartų kol lieka tik vienas srautas. Kadangi funkcija merge reikalauja, kad tiktai įrašai su didžiausiomis reikšmėmis iš abiejų srautų, kurie yra suliejami, būtų išdėstyti atmintyje vienu metu, todėl yra įmanoma sulieti didelius srautus. Tai žymiai sunkiau pritaikyti vidinio rūšiavimo metodams. Demonstruojant sąlajos medžio panaudojimą išorinio rūšiavimo procese, tikslinga pateikti pavyzdį, kuriame failas susidedantis iš 4500 įrašų rūšiuojamas kompiuteriu su vidine atmintimi, talpinančioje daugiausiai 750 įrašų. Įvedimo failas yra išsaugotas diske ir jo bloko ilgis yra 250 įrašų. Taip pat yra laisvas kitas diskas, kuris gali būti naudojamas kaip tarpinis. Į įvedimo diską negalima dar kartą ant viršaus įrašyti duomenų. Vienas iš būdų įvykdyti tokį rūšiavimą aprašomas žemiau. 1. Naudojant vidinio rūšiavimo procedūrą surūšiuojami trys blokai vienu metu (t.y., 750 įrašų) gaunant šešis srautus R1-R6. Galime naudoti heap rūšiavimą ar 23
24 greitą rūšiavimą. Šie šeši srautai yra įrašomi į tarpinį diską, kaip parodyta pav.3.4. run1 run 2 run 3 run 4 run 5 run Pav Srautai tarpiniame diske 2. Tuomet reikia išskirti tris vidinės atminties blokus, kurių kiekvienas gali išsaugoti 250 įrašų. Du iš šių blokų bus naudojami kaip įvedimo duomenų buferiai, o trečias kaip išvedimo duomenų buferis. Atskiriant srautus R1 ir R2, reikia visų pirma nuskaityti kiekvieno srauto vieną bloką į išvedimo duomenis. Kai išvedimo atmintis yra pilna, duomenys įrašomi į diską. Įvedimo atmintis papildoma kitu bloku iš to paties srauto. Tuomet R1 ir R2, R3 ir R4, R5 ir R6 yra suliejami. Šių pertvarkymų rezultatas yra 3 srautai, kurių kiekvieną sudaro 1500 atrūšiuotų įrašų arba 6 blokai. Procesas tęsiamas kaip parodyta pav 3.5. Pav Šešių srautų sąlaja. Subalansuota daugybinė sąlaja magnetinėms juostoms 24
25 Išorinės atminties įrenginiai gali būti paskirstomi sąlajos srautams labai įvairiai, vienas iš būdų subalansuota daugybinė sąlaja (balanced multiway merging). Tarkime, reikia surūšiuoti pakankamai didelio failo įrašus, o vidinėje atmintyje telpa tik trys įrašai. Sakykime, kad turime neribotą kiekį magnetinių juostų (nuoseklaus išrinkimo įrenginių), ir eiliniam suliejimui naudosime bet kurias tris iš jų. Tada pirmiausia iš pirminio failo skaitome nuosekliai po tris įrašus, juos rūšiuojame ir blokus po tris įrašus pakaitomis ir nuosekliai rašome į tris skirtingas juostas. Toliau vykdomos suliejimo procedūros. Po vieną įrašą iš kiekvienos juostos skaitoma į atmintį ir mažiausias iš jų rašomas į naują juostą. Vėl kreipiamąsi į juostą, kurioje buvo mažiausias įrašas, ir iš jos skaitomas naujas įrašas, vėl mažiausias iš jų rašomas į juostą. Taip tęsiama tol, kol nepasibaigs blokas juostoje, iš kurios skaitoma, po to ta juosta ignoruojama, o iš likusių dviejų juostų skaitomi ir suliejami likusieji įrašai. Taip naujoje juostoje suformuojamas blokas iš devynių elementų. Jei dar blokų yra, ši procedūra gali būti tęsiama. Po to vėl tą pačią porcedūrą galima taikyti naujai suformuotoms trims juostoms, kuriose išdėstyti devynių elementų ilgio blokai. Pavyzdžiui, aprašytoje situacijoje po algoritmo žingsnio: sekančiame žingsnyje gali atrodyti taip: 25
26 Ši aprašyta procedūra taikoma daugeliui gan efektyviai veikiančių rūšiavimosąlajos algoritmų, kurie subalansuotai naudoja nuoseklaus išrinkimo išorinius įrenginius. Balansuotumas reiškia tolygų išorinių atminties įrenginių darbo paskirstymą. k-daugybinė sąlaja Srautų sąlaja, apjungianti srautus po du, kaip pavaizduota pav. 3.5, gali būti apibendrinta m srautų atvejui. Tuomet sąlajos medis turėtų log 2 m +1 lygius arba log 2 m duomenų failo peržiūros skaičių. Failo peržiūros skaičių galima sumažinti, naudojant didesnį sąlajų skaičių, t.y. k-daugybinę sąlają, vienu metu suliejant k- srautų. Pav iliustruoja 4-daugybinę sąlają, kai yra 16 srautų. Peržiūros skaičius dabar yra lygus 2, palyginti su 4 peržiūromis, jei naudojama 2-daugybinė sąlaja. Apskritai, k-daugybinė sąlaja, kai yra m srautų, reikalauja daugumoje log k m duomenų peržiūrų, kaip pavaizduota pav Vis dėlto didesnio skaičiaus sąlaja turi ir neigiamų padarinių. Visų pirma, k-srautams, kurių dydis pakankamai didelis, sulieti gali neužtekti vidinės atminties arba jos gali būti per mažai, kad tai atlikti per tam tikrą laiką. Be to didėjant sąlajų skaičiui, didėja lyginimų skaičius, kuris reikalingas kreipiantis į failus kad nustatyti duomenų suliejimo eilinį bloką. Pagrindinis įvertis, nulemiantis palyginimų skaičiaus didėjimą, yra (k-1)/ log2k. Kai k didėja, įvedimo/išvedimo laiko sumažėjimas tampa atsvara laikui, kuris yra reikalingas centriniui procesoriui atlikti k-daugybinę sąlają Pav daugybinė sąlaja 16-ai srautų 26
27 Pav k-daugybinė sąlaja Optimali srautų sąlaja Srautai, kurie yra sugeneruoti sąlajos vykdymo metu arba sudaromi iš duomenų, gali būti ne to paties dydžio. Kai srautai yra skirtingų dydžių, srautų sąlajos strategija gali nepasiduoti minimaliam sąlajos vykdymo laikui. Pavyzdžiui, turint nurodyta tvarka 2, 4, 5 ir 15 ilgių srautus, pav pateikiami du būdai, kaip galima sulieti šiuos srautus, nuosekliai naudojant 2-daugybinę sąlają. Pav Du skirtingi sąlajos būdai Apvalios viršūnės parodo 2-daugybinę sąlają duomenimis, kurių vaikų viršūnės yra įvedimo operacija. Kvadratinės viršūnės parodo pradinius srautus. Apvalios 27
28 viršūnės nurodomos kaip vidinės viršūnės, o kvadratinės atitinka išorines viršūnes. Kiekvienas iš medžių yra sąlajos medis. Pirmame sąlajos medyje pradedama suliejant dviejų ir keturių dydžio srautus ir gaunant šešių dydžio srautą. Toliau suliejant šį srautą su penkių dydžio srautu gaunamas 11 dydžio srautas. Pagaliau suliejant 11 ilgio srautą su 15 ilgio srautu, gaunamas norimas surūšiuotas 26 dydžio srautas. Kai sąlaja vykdoma naudojant pirmą sąlajos medį, keli įrašai suliejami po vieną kartą, tuo tarpu kai kiti gali būti suliejami net po tris kartus. Antrajame sąlajos medyje kiekvienas įrašas dalyvauja sąlajoje lygiai du kartus, o suliejamų srautų kiekis yra mažesnis. Suliejimų skaičius, kuris įtraukia individualų įrašą, yra lygus atitinkamos išorinės viršūnės nuotoliui iki šaknies. Pavyzdžiui, srauto su 15 įrašų įrašai yra suliejami tiktai kartą pirmame medyje (pav. 3.8) ir du kartus antrame medyje tame pačiame pavyzdyje. Kadangi suliejamų įrašų skaičių yra tiesinis, bendras suliejimo laikas bus lygus srautų ilgių sandaugų su atitinkamų išorinių viršūnių nuotoliais iki šaknų sumai. Ši suma vadinama svertiniu išorinio kelio ilgiu (weighted external path length). Medžiams pavyzdyje svertiniai ilgiai yra: = 43 ir = 52. Suliejant N srautų k-daugybinės sąlajos būdu, šį procesą galima minimizuoti, parenkant k-ainį sąlajos medį su minimaliu svertiniu išorinio kelio ilgiu. Efektyvų minimalaus medžio problemos sprendimą pasiūlė D. Huffman as [HAS 1993]. Formuluojant jo algoritmą C programavimo kalba, tikslinga pradėti nuo specifikacijų formulavimo: typedef struct tree_node *tree_pointer; typedef struct tree_node { tree_pointer left_child; int weight; tree_pointer right_child; ; tree_pointer tree; int n; Huffman o funkcija pradeda darbą su pradiniais duomenimis, kuriuos sudaro n apibendrintų dvejetainių medžių: 28
29 kiekvienas turi po vieną viršūnę jie yra masyve heap[], kiekviena medžio viršūnė turi tris laukus: weight, left_child ir right_child, kiekvienos viršūnės svoris yra q i. Algoritmo vykdymo metu galios taisyklė: bet kuriam medžiui heap e, turinčiam šakninę viršūnę tree ir didesnį už 1 gylį, visų išorinių viršūnių medyje ilgių suma yra tree -> weight. Huffman o funkcija naudoja funkcijas least ir insert; funkcija least pašalina medį, kuris turi mažiausią svorį heap e, o funkcija insert įterpia naują medį į heap ą. Šios funkcijos atlieka veiksmus per tiesinį laiką. Huffman o programa: void huffman ( tree_pointer heap [ ], int n ) { tree_pointer tree; int i; initialize (heap, n); for (i = 1; i < n; i++ ) { tree = (tree_pointer) malloc (sizeof (tree_node) ) ; if (IS_FULL (tree) fprintf (stderr, The memory is full/n ); exit (1) ; tree ->left_child = least (heap, n i + 1); tree ->right_child = least (heap, n i ); tree ->weight = tree ->left_child ->weight + tree ->right_child ->weight; insert (heap, n i 1, tree); Iliustruojant algoritmo veikimą, galima pateikti pavyzdį. Tariant, kad svoriai yra q 1 =2, q 2 =3, q 3 =5, q 4 =7, q 5 =9 ir q 6 =13, gaunama medžių seka, pavaizduota pav
30 (a) (b) (c) 95. (d) (e) Pav Huffman o funkcijos sudarytas sąlajos medis. Šio medžio svertinis išorinio kelio ilgis yra: = 93 Palyginimui, geriausias pilno binarinio medžio svertinis išorinio kelio ilgis yra Savybė: Huffman o algoritmo analizė heap o sudarymas užima O(n) laiko, pagrindinis ciklas for yra vykdomas n-1 kartų, kiekvienas kreipimasis į least užima O(log n) laiko. Asimptotinis algoritmo laikas yra O(n log n) Pakeitimų išrinkimas 30
31 Rūšiavimo-sąlajos algoritmams galima natūraliai ir efektyviai pritaikyti prioritetines eiles. Pirmiausia sąlajos metu, kai reikia išrinkti iš suliejamų elementų minimalų, tikslinga naudoti heap struktūrą ir jos operaciją replace, kuri pakeičia iš karto ankstesnio algoritmo dvi operacijas - minimalaus elemento rašymą į išorinę atmintį ir naujo elemento įterpimą. Taip sumažinamas atliekamų operacijų skaičius. Aišku, heap struktūrą reikia naudoti nuosekliai, t.y. jau pirminiame etape, kai elementai skirstomi į blokus ir rūšiuojami, tikslinga juos išdėstyti į heap struktūrą ir surūšiuoti tik iš dalies. Be to (tai yra dar svarbiau), prioritetinių eilių struktūros panaudojimas įgalina sąlajos metu gauti ilgesnius surūšiuotus blokus, negu jie tilptų į vidinę atmintį. Kai pradiniai duomenys yra pertvarkomi į heap struktūrą ir minimalus elementas yra keičiamas nauju, reikia papildomai naudoti tokią taisyklę: jei naujas elementas, rašomas vietoje minimalaus elemento senoje heap struktūroje, yra mažesnis už jį, reikia nuo šio elemento pradėti naują bloką ir naują heap struktūrą, interpretuojant jį esant didžiausiu šioje struktūroje. Algoritmai, naudojantys šias taisykles, yra vadinami pakeitimo išrinkimo (replacement selection) vardu. Pav pateikia pavyzdį, kaip veikia toks algoritmas. Pav Pakeitimo išrinkimas duomenų blokams iš trijų raidžių. Algoritmai, sukurti naudojant išdėstytus ir panašius principus, turi tokias jų efektyvumą vertinančias savybes: rūšiavimo-sąlajos algoritmai, rūšiuojantys N įrašų, kai vidinė atmintis talpina M įrašų ir duomenys rašomi į (P+1)-ą išorinį įrenginį, perrinks šiuos duomenis 1 + log P (N/2M) kartų; pakeitimo išrinkimo algoritmai, esant atsitiktiniams duomenims, formuoja duomenų blokus dvigubai ilgesnius negu naudojama heap struktūra. 31
Algoritmai ir duomenų struktūros (ADS) 2 paskaita Saulius Ragaišis, VU MIF
Algoritmai ir duomenų struktūros (ADS) 2 paskaita Saulius Ragaišis, VU MIF saulius.ragaisis@mif.vu.lt 2016-02-15 Tiesinės duomenų struktūros Panagrinėsime keletą žinomų ir įvairiuose taikymuose naudojamų
DetaliauDBVS realizavimas Pagrindiniai DBVS komponentai Duomenų saugojimas diske Paruošė J.Skučas
DBVS realizavimas Pagrindiniai DBVS komponentai Duomenų saugojimas diske Paruošė J.Skučas Seminaro tikslai Trumpai apžvelgti pagrindinius DBVS komponentus Detaliai nagrinėjami optimalaus duomenų dėstymo
Detaliau4 skyrius Algoritmai grafuose 4.1. Grafų teorijos uždaviniai Grafai Tegul turime viršūnių aibę V = { v 1,v 2,...,v N } (angl. vertex) ir briaun
skyrius Algoritmai grafuose.. Grafų teorijos uždaviniai... Grafai Tegul turime viršūnių aibę V = { v,v,...,v N (angl. vertex) ir briaunų aibę E = { e,e,...,e K, briauna (angl. edge) yra viršūnių pora ej
DetaliauSlide 1
Duomenų struktūros ir algoritmai 2 paskaita 2019-02-13 Algoritmo sąvoka Algoritmas tai tam tikra veiksmų seka, kurią reikia atlikti norint gauti rezultatą. Įvesties duomenys ALGORITMAS Išvesties duomenys
DetaliauPowerPoint Presentation
Algoritmai ir duomenų struktūros (ADS) 15 paskaita Saulius Ragaišis, VU MIF saulius.ragaisis@mif.vu.lt 2018-05-28 Grįžtamasis ryšys Ačiū visiems dalyvavusiems Daug pagyrimų Ačiū, bet jie nepadeda tobulėti.
DetaliauPowerPoint Presentation
Algoritmai ir duomenų struktūros (ADS) 13 paskaita Saulius Ragaišis, VU MIF saulius.ragaisis@mif.vu.lt 2018-05-14 Šaltinis Paskaita parengta pagal William Pugh Skip Lists: A Probabilistic Alternative to
DetaliauAlgoritmø analizës specialieji skyriai
VGTU Matematinio modeliavimo katedra VGTU SC Lygiagrečiųjų skaičiavimų laboratorija Paskaitų kursas. 5-oji dalis. Turinys 1 2 KPU euristiniai sprendimo algoritmai KPU sprendimas dinaminio programavimo
DetaliauDB sukūrimas ir užpildymas duomenimis
DB sukūrimas ir užpildymas duomenimis Duomenų bazės kūrimas Naujas bendrąsias DB kuria sistemos administratorius. Lokalias DB gali kurti darbo stoties vartotojasadministratorius. DB kuriama: kompiuterio
DetaliauAlgoritmai ir duomenų struktūros (ADS) 7 paskaita Saulius Ragaišis, VU MIF
Algoritmai ir duomenų struktūros (ADS) 7 paskaita Saulius Ragaišis, VU MIF saulius.ragaisis@mif.vu.lt 2015-04-13 Grafai Grafas aibių pora (V, L). V viršūnių (vertex) aibė, L briaunų (edge) aibė Briauna
DetaliauPagrindiniai algoritmai dirbant su sveikųjų ir realiųjų skaičių masyvų reikšmėmis Sumos skaičiavimo algoritmas Sveikieji skaičiai int Suma (int X[], i
Pagrindiniai algoritmai dirbant su sveikųjų ir realiųjų skaičių masyvų reikšmėmis Sumos skaičiavimo algoritmas int Suma (int X[], int n) int s = 0; s = s + X[i]; return s; double Suma (double X[], int
DetaliauMasyvas su C++ Užduotys. Išsiaiškinkite kodą (jei reikia pataisykite) ir paleiskite per programą. Ciklo skaitliuko įrašymas į vienmatį masyvą: #includ
Masyvas su C++ Užduotys. Išsiaiškinkite kodą (jei reikia pataisykite) ir paleiskite per programą. Ciklo skaitliuko įrašymas į vienmatį masyvą: #include main() int mas[100]; int k; for (int
DetaliauLietuvos mokinių matematikos olimpiada Rajono (miesto) etapo užduočių klasei sprendimai 2015 m. 1 uždavinys. Aistė užrašė skaičių seką: 1 (2 3)
Lietuvos mokinių matematikos olimpiada Rajono (miesto) etapo užduočių 11-12 klasei sprendimai 2015 m. 1 uždavinys. Aistė užrašė skaičių seką: 1 (2 3) 4, 4 (5 6) 7, 7 (8 9) 10,..., 2014 (2015 2016) 2017.
DetaliauDažniausios IT VBE klaidos
Dažniausios IT VBE klaidos Renata Burbaitė renata.burbaite@gmail.com Kauno technologijos universitetas, Panevėžio Juozo Balčikonio gimnazija 1 Egzamino matrica (iš informacinių technologijų brandos egzamino
DetaliauLIETUVOS JAUNŲJŲ MATEMATIKŲ MOKYKLA 7. PAPRASČIAUSIOS DIFERENCIALINĖS LYGTYS ( ) Teorinę medžiagą parengė ir septintąją užduotį sudarė prof. d
LIETUVOS JAUNŲJŲ MATEMATIKŲ MOKYKLA 7 PAPRASČIAUSIOS DIFERENIALINĖS LYGTYS (07 09) Teorinę medžiagą parengė ir septintąją užduotį sudarė prof dr Eugenijus Stankus Diferencialinės lygtys taikomos sprendžiant
DetaliauMicrosoft Word - 8 Laboratorinis darbas.doc
Laboratorinis darbas Nr. 8 MOP (metalo sido puslaidininkio) struktūrų tyrimas aukštadažniu -V charakteristikų metodu Darbo tikslas: 1. Nustatyti puslaidininkio laidumo tipą. 2. Nustatyti legiravimo priemaišų
DetaliauMatricosDetermTiesLS.dvi
MATRICOS Matricos. Pagrindiniai apibrėžimai a a 2... a n a 2 a 22... a 2n............ a m a m2... a mn = a ij m n matrica skaičių lentelė m eilučių skaičius n stulpelių skaičius a ij matricos elementas
Detaliau10 Pratybos Oleg Lukašonok 1
10 Pratybos Oleg Lukašonok 1 2 Tikimybių pratybos 1 Lema Lema 1. Tegul {Ω, A, P} yra tikimybinė erdvė. Jeigu A n A, n N, tai i) P (lim sup A n ) = P ( k=1 n=k A n ) = lim P ( n k n=ka n ), nes n=ka n monotoniškai
Detaliau9 paskaita 9.1 Erdvės su skaliarine daugyba Šiame skyriuje nagrinėsime abstrakčias tiesines erdves, kurioms apibrėžta skaliarinė daugyba. Jos sudaro l
9 paskaita 9.1 Erdvės su skaliarine daugyba Šiame skyriuje nagrinėsime abstrakčias tiesines erdves, kurioms apibrėžta skaliarinė daugyba. Jos sudaro labai svarbu normuotu ju erdviu šeimos pošeimį. Pilnosios
DetaliauPrinting triistr.wxmx
triistr.wxmx / Triįstrižainių lygčių sistemų sprendimas A.Domarkas, VU, Teoriją žr. []; [], 7-7; []. Pradžioje naudosime Gauso algoritmą, kuriame po įstrižaine daromi nuliai. Po to grįždami į viršų virš
DetaliauP. Kasparaitis. Praktinė informatika. Skriptų vykdymas ir duomenų valdymas Skriptų vykdymas ir duomenų valdymas Įvadas Skripto failas tai M
Skriptų vykdymas ir duomenų valdymas Įvadas Skripto failas tai MATLAB komandų seka, vadinama programa, įrašyta į failą. Vykdant skripto failą įvykdomos jame esančios komandos. Bus kalbama, kaip sukurti
DetaliauMicrosoft Word - 15_paskaita.doc
15 PASKAITA Turinys: Išimtys Išimtys (exceptions) programos vykdymo metu kylančios klaidingos situacijos, nutraukiančios programos darbą (pavyzdžiui, dalyba iš nulio, klaida atveriant duomenų failą, indekso
DetaliauTIESINĖ ALGEBRA Matricos ir determinantai Matricos. Transponuota matrica. Nulinė ir vienetinė matrica. Kvadratinė matrica. Antrosios ir trečiosios eil
TIESINĖ ALGEBRA Matricos ir determinantai Matricos. Transponuota matrica. Nulinė ir vienetinė matrica. Kvadratinė matrica. Antrosios ir trečiosios eilės determinantai. Minorai ir adjunktai. Determinantų
DetaliauGPAIS vartotojo vadovas savivaldybėms GPAIS VARTOTOJO VADOVAS SAVIVALDYBIŲ PILDOMAI INFORMACIJAI GPAIS TURINYS 1. BENDRI DARBO SU GPAIS PRINCIPAI... 2
GPAIS VARTOTOJO VADOVAS SAVIVALDYBIŲ PILDOMAI INFORMACIJAI GPAIS TURINYS 1. BENDRI DARBO SU GPAIS PRINCIPAI... 2 1.1 PRISIJUNGIMAS PRIE IŠORINIO PORTALO... 2 2. Savivaldybių ir regiono plėtros tarybų ataskaitos...
DetaliauSlide 1
Duomenų struktūros ir algoritmai 3 paskaita 2019-02-20 2 paskaitos papildymas Realaus skaičiaus konvertavimas į kitą skaičiavimo sistemą Pirminių dvynių paieškos algoritmas Tiesinio sąrašo realizacija,
DetaliauDĖL APLINKOS IR SVEIKATOS MOKSLO KOMITETO ĮSTEIGIMO
LIETUVOS RESPUBLIKOS SVEIKATOS APSAUGOS MINISTRAS ĮSAKYMAS DĖL LIETUVOS RESPUBLIKOS SVEIKATOS APSAUGOS MINISTRO 011 M. KOVO D. ĮSAKYMO NR. V-199 DĖL LIETUVOS HIGIENOS NORMOS HN 80:011 ELEKTROMAGNETINIS
DetaliauVERSLO IR VADYBOS TECHNOLOGIJŲ PROGRAMA
PATVIRTINTA Lietuvos Respublikos švietimo ir mokslo ministro 2007 m. rugsėjo 6 d. įsakymu Nr. ISAK-1790 VERSLO IR VADYBOS TECHNOLOGIJŲ BENDROJI PROGRAMA MOKINIAMS, BESIMOKANTIEMS PAGAL VIDURINIO UGDYMO
DetaliauNeiškiliojo optimizavimo algoritmas su nauju bikriteriniu potencialiųjų simpleksų išrinkimu naudojant Lipšico konstantos įvertį
Neiškiliojo optimizavimo algoritmas su nauju bikriteriniu potencialiųjų simpleksų išrinkimu naudojant Lipšico konstantos įvertį. Albertas Gimbutas 2018 m. birželio 19 d. Vadovas: Prof. habil. dr. Antanas
Detaliau* # * # # 1 TIESĖS IR PLOKŠTUMOS 1 1 Tiesės ir plokštumos 1.1 Lygtys ir taškų aibės Sferos lygtis Tarkime, kad erdvėje apibrėžta Dekarto stačiak
1 TIESĖS IR PLOKŠTUMOS 1 1 Tiesės ir plokštumos 1.1 Lygtys ir taškų aibės 1.1.1 Sferos lygtis Tarkime kad erdvėje apibrėžta Dekarto stačiakampė koordinačių sistema Sfera su centru taške ir spinduliu yra
DetaliauSlide 1
UGDYMO PLĖTOTĖS CENTRAS PUBP struktūra. Vertinimo normos ugdymo procesui (pagrindiniam ugdymo koncentrui) 1 Kalbos kurso uždaviniai Kalbos vartojimo ugdymo mokymosi pasiekimai Kalbos sistemos pažinimo
DetaliauPATVIRTINTA Valstybinės kainų ir energetikos kontrolės komisijos pirmininko 2017 m. d. įsakymu Nr. O1- VALSTYBINĖS KAINŲ IR ENERGETIKOS KONTROLĖS KOMI
PATVIRTINTA Valstybinės kainų ir energetikos kontrolės komisijos pirmininko 2017 m. d. įsakymu Nr. O1- VALSTYBINĖS KAINŲ IR ENERGETIKOS KONTROLĖS KOMISIJOS ELEKTROS ENERGIJOS KAINŲ PALYGINIMO INFORMACINĖS
DetaliauRR-GSM_IM_LT_110125
Retransliatorius RR-GSM Įrengimo instrukcija Draugystės g. 17, LT-51229 Kaunas El. p.: info@trikdis.lt www.trikdis.lt Retransliatorius RR-GSM perduoda priimtus pranešimus į centralizuoto stebėjimo pultą
DetaliauJava esminės klasės, 1 dalis Išimtys, Įvestis/išvestis
Java esminės klasės, 1 dalis Išimtys, Įvestis/išvestis Klaidų apdorojimas C kalboje If (kazkokia_salyga) { klaidos_apdorojimas(); return... } Tokio kodo apimtis galėdavo sekti iki 70-80proc. Klaidų/išimčių
Detaliau(Microsoft Word - Pasiruo\360imas EE 10 KD-1)
-as kontrolinis darbas (KD-) Kompleksiniai skaičiai. Algebrinė kompleksinio skaičiaus forma Pagrindinės sąvokos apibrėžimai. Veiksmai su kompleksinio skaičiais. 2. Kompleksinio skaičiaus geometrinis vaizdavimas.
DetaliauMicrosoft PowerPoint Dvi svarbios ribos [Read-Only]
Dvi svarbios ribos Nykstamųjų funkcijų palyginimas. Ekvivalenčios nykstamosios funkcijos. Funkcijos tolydumo taške apibrėžimas. Tolydžiųjų funkcijų atkarpoje savybės. Trūkiosios funkcijos. Trūko taškų
DetaliauLongse Wi-Fi kameros greito paleidimo instrukcija 1. Jums prireiks 1.1. Longse Wi-Fi kameros 1.2. Vaizdo stebėjimo kameros maitinimo šaltinio 1.3. UTP
Longse Wi-Fi kameros greito paleidimo instrukcija 1. Jums prireiks 1.1. Longse Wi-Fi kameros 1.2. Vaizdo stebėjimo kameros maitinimo šaltinio 1.3. UTP RJ-45 interneto kabelio 1.4. Kompiuterio su prieiga
DetaliauEUROPOS KOMISIJA Briuselis, C(2017) 4679 final KOMISIJOS ĮGYVENDINIMO SPRENDIMAS (ES) / dėl bendros sistemos techninių standa
EUROPOS KOMISIJA Briuselis, 2017 07 11 C(2017) 4679 final KOMISIJOS ĮGYVENDINIMO SPRENDIMAS (ES) /... 2017 07 11 dėl bendros sistemos techninių standartų ir formatų, kad EURES portale būtų galima susieti
DetaliauBALSO SKAMBUČIŲ UŽBAIGIMO JUDRIOJO RYŠIO TINKLE SĄNAUDŲ APSKAIČIAVIMO PAAIŠKINIMAS IR SKAMBUČIŲ INICIJAVIMO SĄNAUDŲ SKAIČIAVIMO PRINCIPŲ PAAIŠKINIMAS
BALSO SKAMBUČIŲ UŽBAIGIMO JUDRIOJO RYŠIO TINKLE SĄNAUDŲ APSKAIČIAVIMO PAAIŠKINIMAS IR SKAMBUČIŲ INICIJAVIMO SĄNAUDŲ SKAIČIAVIMO PRINCIPŲ PAAIŠKINIMAS I. ĮŽANGA Lietuvos Respublikos ryšių reguliavimo tarnybos
DetaliauPrašymo taikyti galutinio vartojimo, laikinojo įvežimo, laikinojo įvežimo perdirbti ir laikinojo išvežimo perdirbti langeliuose įrašomi duomenys: 1. P
Prašymo taikyti galutinio vartojimo, laikinojo įvežimo, laikinojo įvežimo perdirbti ir laikinojo išvežimo perdirbti langeliuose įrašomi duomenys: 1. Pareiškėjas Įrašomas tikslus pareiškėjo pavadinimas
DetaliauPATVIRTINTA Kauno lopšelio darželio Vaikystė direktoriaus 2015 m. spalio 26 d. įsakymu Nr. V-74 KAUNO LOPŠELIO DARŽELIO VAIKYSTĖ VAIZDO DUOMENŲ TVARKY
PATVIRTINTA Kauno lopšelio darželio Vaikystė direktoriaus 2015 m. spalio 26 d. įsakymu Nr. V-74 KAUNO LOPŠELIO DARŽELIO VAIKYSTĖ VAIZDO DUOMENŲ TVARKYMO TAISYKLĖS I SKYRIUS BENDROSIOS NUOSTATOS 1. Vaizdo
DetaliauKelmės rajono Kražių gimnazija Įmonės kodas , S.Dariaus ir S. Girėno g.2, Kražiai, Kelmės rajonas 2016 m. kovo 18 d. FINANSINIŲ ATASKAITŲ AIŠ
Kelmės rajono Kražių gimnazija Įmonės kodas 190093592, S.Dariaus ir S. Girėno g.2, Kražiai, Kelmės rajonas 2016 m. kovo 18 d. FINANSINIŲ ATASKAITŲ AIŠKINAMASIS RAŠTAS I. BENDROJI DALIS Kelmės rajono Kražių
DetaliauPATVIRTINTA
PATVIRTINTA VDU Rasos gimnazijos Visuotinio dalininkų susirinkimo 2018 m. gegužės 17 d. protokolu Nr. DSP-04 ASMENŲ PRIĖMIMO Į VYTAUTO DIDŽIOJO UNIVERSITETO RASOS GIMNAZIJĄ KRITERIJŲ IR KLASIŲ KOMPLEKTAVIMO
DetaliauTeorinių kontrolinių sąlygos ir sprendimai Vytautas Kazakevičius 2016 m. gruodžio 20 d. Teiginiai ( ). 1. (0.05 t.) Užrašykite formule tokį t
Teorinių kontrolinių sąlygos sprendimai Vytautas Kazakevičius 206 m. gruodžio 20 d. Teiginiai (206-09-4).. (0.05 t.) Užrašykite formule tokį teiginį: jei iš dviejų teigiamų skaičių vienas yra mažesnis
Detaliau2013 m. gruodžio 11 d. Europos Parlamento ir Tarybos reglamentas (ES) Nr. 1350/2013, kuriuo iš dalies keičiami tam tikri žemės ūkio ir žuvininkystės s
2013 12 21 Europos Sąjungos oficialusis leidinys L 351/1 I (Įstatymo galią turintys teisės aktai) REGLAMENTAI EUROPOS PARLAMENTO IR TARYBOS REGLAMENTAS (ES) Nr. 1350/2013 2013 m. gruodžio 11 d. kuriuo
DetaliauSlide 1
Duomenų struktūros ir algoritmai 1 paskaita 2019-02-06 Kontaktai Martynas Sabaliauskas (VU MIF DMSTI) El. paštas: akatasis@gmail.com arba martynas.sabaliauskas@mii.vu.lt Rėmai mokykloje Rėmai aukštojoje
DetaliauEUROPOS KOMISIJA Briuselis, C(2012) 2384 final KOMISIJOS ĮGYVENDINIMO SPRENDIMAS kuriuo priimamas valstybių narių teikiamų Europ
EUROPOS KOMISIJA Briuselis, 2012 04 18 C(2012) 2384 final KOMISIJOS ĮGYVENDINIMO SPRENDIMAS 2012 04 18 kuriuo priimamas valstybių narių teikiamų Europos Parlamento ir Tarybos direktyvos 2008/98/EB dėl
DetaliauA. Merkys ASOCIACIJA LANGAS Į ATEITĮ, 2015 m. Elektroninis mokymasis Tikriausiai šiais laikais daugelis esate girdėję apie elektroninį bei nuotolinį m
A. Merkys ASOCIACIJA LANGAS Į ATEITĮ, 2015 m. Elektroninis mokymasis Tikriausiai šiais laikais daugelis esate girdėję apie elektroninį bei nuotolinį mokymą(si) ar net jį išbandę. Jis taikomas ne tik išsivysčiusiose
DetaliauProjektas
PATVIRTINTA Kauno technologijos universiteto Lietuvos socialinių tyrimų centro Vytauto Didžiojo universiteto Sociologijos mokslo krypties doktorantūros komiteto 2019 m. gegužės 8 d. posėdžio nutarimu Nr.
DetaliauLogines funkcijos termu generavimo algoritmas pagristas funkciniu modeliu
KAUNO TECHNOLOGIJOS UNIVERSITETAS INFORMATIKOS FAKULTETAS PROGRAMŲ INŽINERIJOS KATEDRA Tomas Žemaitis LOGINĖS FUNKCIJOS TERMŲ GENERAVIMO ALGORITMAS PAGRĮSTAS PROGRAMINIO PROTOTIPO MODELIU Magistro darbas
DetaliauLIETUVOS RESPUBLIKOS AZARTINIŲ LOŠIMŲ ĮSTATYMO NR. IX-325 2, 10, 15, 16, 29 STRAIPSNIŲ PAKEITIMO IR ĮSTATYMO PAPILDYMO 15 1, 16 1 STRAIPSNIAIS ĮSTATYM
LIETUVOS RESPUBLIKOS AZARTINIŲ LOŠIMŲ ĮSTATYMO NR. IX-325 2, 10, 15, 16, 29 STRAIPSNIŲ PAKEITIMO IR ĮSTATYMO PAPILDYMO 15 1, 16 1 STRAIPSNIAIS ĮSTATYMAS 2017 m. lapkričio 21 d. Nr. XIII-771 Vilnius 1 straipsnis.
DetaliauLT Europos Sąjungos oficialusis leidinys L 79/11 DIREKTYVOS KOMISIJOS DIREKTYVA 2007/16/EB 2007 m. kovo 19 d. įgyvendinanti Tarybos direktyv
2007 3 20 Europos Sąjungos oficialusis leidinys L 79/11 DIREKTYVOS KOMISIJOS DIREKTYVA 2007/16/EB 2007 m. kovo 19 d. įgyvendinanti Tarybos direktyvą 85/611/EEB dėl įstatymų ir kitų teisės aktų, susijusių
DetaliauProjektas
PATVIRTINTA Kauno technologijos universiteto Lietuvos socialinių tyrimų centro Vytauto Didžiojo universiteto Sociologijos mokslo krypties doktorantūros komiteto 2017 m. birželio 6 d. posėdžio nutarimu
DetaliauLIETUVOS RESPUBLIKOS ŪKIO MINISTRAS
LIETUVOS RESPUBLIKOS ENERGETIKOS MINISTERIJA 2014 2020 M. EUROPOS SĄJUNGOS FONDŲ INVESTICIJŲ VEIKSMŲ PROGRAMOS PRIORITETO ĮGYVENDINIMO PRIEMONIŲ ĮGYVENDINIMO PLANAS I SKYRIUS 2014 2020 M. EUROPOS SĄJUNGOS
Detaliaumetų Europos Sąjungos fondų investicijų veiksmų programos 3 prioriteto Smulkiojo ir vidutinio verslo konkurencingumo skatinimas priemonės Nr
2014 2020 metų Europos Sąjungos fondų investicijų veiksmų programos 3 prioriteto Smulkiojo ir vidutinio verslo konkurencingumo skatinimas priemonės 03.3.2-LVPA-K-832 Eco-inovacijos LT projektų finansavimo
DetaliauTiesioginio-debeto-paslaugos-duomenu-apsikeitimo-formatu-aprasas
TIEIOGINIO DEBETO PALAUGO DUOMENŲ APIKEITIMO FORMATŲ APRAŠA Tarp banko ir kliento yra keičiamasi tokio tipo failais: utikimai mokėti tiesioginio debeto būdu, priimti įmonėje (failo plėtinys.dse). o Banko
DetaliauVALSTYBINĖS KAINŲ IR ENERGETIKOS KONTROLĖS KOMISIJOS
Projektas VALSTYBINĖ KAINŲ IR ENERGETIKOS KONTROLĖS KOMISIJA NUTARIMAS DĖL ŠILUMOS TIEKĖJŲ, NEPRIKLAUSOMŲ ŠILUMOS GAMINTOJŲ, GERIAMOJO VANDENS TIEKĖJŲ IR NUOTEKŲ TVARKYTOJŲ, PAVIRŠINIŲ NUOTEKŲ TVARKYTOJŲ
DetaliauTeismo praktikos rinkinys TEISINGUMO TEISMO (penktoji kolegija) SPRENDIMAS 2018 m. spalio 4 d. * Direktyva 2007/64/EB Mokėjimo paslaugos vidaus rinkoj
Teismo praktikos rinkinys TEISINGUMO TEISMO (penktoji kolegija) SPRENDIMAS 2018 m. spalio 4 d. * Direktyva 2007/64/EB Mokėjimo paslaugos vidaus rinkoje Sąvoka mokėjimo sąskaita Galimas taupomosios sąskaitos,
DetaliauGRAFŲ TEORIJA Pasirenkamasis kursas, Magistrantūra, 3 sem m. rudens semestras Parengė: Eugenijus Manstavičius Įvadas Pirmoji kurso dalis skirta
GRAFŲ TEORIJA Pasirenkamasis kursas, Magistrantūra, 3 sem. 2018 m. rudens semestras Parengė: Eugenijus Manstavičius Įvadas Pirmoji kurso dalis skirta grafų algoritmams, tačiau apibrėžus gretimumo matricą
DetaliauPrinting AtvirkstineMatrica.wxmx
AtvirkstineMatrica.wxmx / Atvirkštinė matrica A.Domarkas, VU, Teoriją žr. [], 8-; []. Figure : Toliau pateiksime atvirkštinės matricos apskaičiavimo būdus su CAS Maxima. su komanda invert pavyzdys. [],
DetaliauRYŠIŲ REGULIAVIMO TARNYBOS
LIETUVOS RESPUBLIKOS RYŠIŲ REGULIAVIMO TARNYBOS DIREKTORIUS ĮSAKYMAS DĖL LIETUVOS RESPUBLIKOS RYŠIŲ REGULIAVIMO TARNYBOS DIREKTORIAUS 2008 M. GRUODŽIO 24 D. ĮSAKYMO NR. 1V-1160 DĖL RADIJO DAŽNIŲ NAUDOJIMO
DetaliauLIETUVOS RESPUBLIKOS REGIONINĖS PLĖTROS ĮSTATYMO NR. VIII-1889 PAKEITIMO ĮSTATYMAS 2014 m. rugsėjo 18 d. Nr. XII-1094 Vilnius 1 straipsnis. Lietuvos R
LIETUVOS RESPUBLIKOS REGIONINĖS PLĖTROS ĮSTATYMO NR. VIII-1889 PAKEITIMO ĮSTATYMAS 2014 m. rugsėjo 18 d. Nr. XII-1094 Vilnius 1 straipsnis. Lietuvos Respublikos regioninės plėtros įstatymo Nr. VIII-1889
DetaliauVILNIAUS KOLEGIJA AGROTECHNOLOGIJ FAKULTETAS CHEMIJOS KATEDRA Tyrimas: STUDENTAI APIE KURSINĮ DARBĄ Dalykas: LABORATORIJ VEIKLA Tyrimą atliko lektorė:
VILNIAUS KOLEGIJA AGROTECHNOLOGIJ FAKULTETAS CHEMIJOS KATEDRA Tyrimas: STUDENTAI APIE KURSINĮ DARBĄ Dalykas: LABORATORIJ VEIKLA Tyrimą atliko lektorė: Jolanta Jurkevičiūtė m. Tyrimo tikslas išsiaiškinti
DetaliauNexa serija Stūmokliniai ir hidrauliniai dozavimo siurbliai su dviguba diafragma UAB Elega, Žalgirio , Vilnius, LT 08217, Lietuva, Tel:
Nexa serija Stūmokliniai ir hidrauliniai dozavimo siurbliai su dviguba diafragma UAB Elega, Žalgirio 131-211, Vilnius, LT 08217, Lietuva, Tel: +370 5 2 715444; tel./faksas: +370 5 2 715445; mob. tel.:
DetaliauKPMG Screen 3:4 (2007 v4.0)
Penktasis kasmetinis tyrimas Lietuvos verslo pažeidžiamumas energijos išteklių kainų pokyčiams ir BEVI indeksas Rokas Kasperavičius, partneris Jonas Vainius Raulynaitis, patarėjas Vilnius 2015 TURINYS
DetaliauPS_riba_tolydumas.dvi
Funkcijos riba ir tolydumas Ribos apibrėžimas Nykstamosios funkcijos Funkcijos riba, kai x + Skaičių sekos riba Neaprėžtai didėjančios funkcijos Neapibrėžtumai Vienpusės ribos Funkcijos tolydumas Funkcijos
Detaliau(Pasiūlymų dėl projektų atrankos kriterijų nustatymo ir keitimo forma) PASIŪLYMAI DĖL PROJEKTŲ ATRANKOS KRITERIJŲ NUSTATYMO IR KEITIMO 2017 m. lapkrič
(Pasiūlymų dėl projektų atrankos kriterijų nustatymo ir keitimo forma) PASIŪLYMAI DĖL PROJEKTŲ ATRANKOS KRITERIJŲ NUSTATYMO IR KEITIMO 2017 m. lapkričio d. FORMAI PRITARTA 2014-2020 m. Europos Sąjungos
DetaliauAdministravimo vadovas SAFTit Pro v3
SAF-T IT Pro programos administravimo vadovas Turinys 1. SQL užklausų modifikacija... 2 1.1. Užklausų katalogas ir kaip sukurti nestandartines užklausas... 2 1.2. Užklausų modifikavimas... 2 1.3. Specialieji
DetaliauProjektas „Europos kreditų perkėlimo ir kaupimo sistemos (ECTS) nacionalinės koncepcijos parengimas: kreditų harmonizavimas ir mokymosi pasiekimais gr
Studijų programos aprašas Studijų programos pavadinimas Informatika Aukštojo mokslo institucija (-os), padalinys (-iai) Vilniaus universitetas, Matematikos ir informatikos fakultetas, Informatikos katedra
DetaliauNr gegužė Šiame numeryje: 2 p. Kas yra negalia? 4 p. Diskriminacija dėl sąsajos Šiame leidinyje tęsiame 9-ajame numeryje pradėtą temą kas yra
Nr. 10 2014 gegužė Šiame numeryje: 2 p. Kas yra negalia? 4 p. Diskriminacija dėl sąsajos Šiame leidinyje tęsiame 9-ajame numeryje pradėtą temą kas yra draudimas diskriminuoti dėl negalios. Apžvelgsime
DetaliauAAA.AIEPI.Mokymu_medziaga_MOK_VI_07.Vandens_inventorizacijos_duomenu_tvarkymas.v.0.4
Informacinės sistemos eksploatacinė dokumentacija AIVIKS MOKYMO MEDŽIAGA 07. Vandens inventorizacijos duomenų tvarkymas Aplinkos apsaugos agentūra Aplinkosauginės informacijos elektroninių paslaugų išvystymas
Detaliauktu kompiuterių katedra Programavimas asembleriu Darius Birvinskas Ignas Martišius Algimantas Venčkauskas
ktu kompiuterių katedra Programavimas asembleriu Darius Birvinskas Ignas Martišius Algimantas Venčkauskas Turinys 1 Skaičiavimo sistemos 3 11 Sveikųjų dešimtainių skaičių išreiškimas dvejetaine, aštuntaine
DetaliauVADOVĖLIO VERTINIMO KRITERIJŲ APRAŠAI 1. MEDŽIAGOS TINKAMUMAS VERTYBINĖMS NUOSTATOMS UGDYTI(S) Vertinimo kriterijai 1.1. Tekstinė ir vaizdinė medžiaga
VADOVĖLIO VERTINIMO KRITERIJŲ APRAŠAI 1. MEDŽIAGOS TINKAMUMAS VERTYBINĖMS NUOSTATOMS UGDYTI(S) 1.1. Tekstinė ir vaizdinė medžiaga atitinka pagrindines demokratijos vertybes ir principus (asmens ir tautos
Detaliau2013 m
2019 m. Finansų olimpiada Regioninis etapas I-asis Finansų olimpiados etapas. Finansų žinių testas. (Iš viso 50 balų) Klausimams nuo 1 iki 21 apibraukite vieną teisingą atsakymą. Klausimams nuo 22 iki
DetaliauAtranka į 2019 m. Pasaulinę ir Vidurio Europos matematikos olimpiadas Sprendimai Artūras Dubickas ir Aivaras Novikas 1. Mykolas sugalvojo natūraliųjų
Atranka į 019 m. Pasaulinę ir Vidurio Europos matematikos olimpiadas Sprendimai Artūras Dubickas ir Aivaras Novikas 1. Mykolas sugalvojo natūraliųjų skaičių seką a 1, a, a 3,..., o tada apibrėžė naują
DetaliauKelmės rajono Kražių gimnazija Įmonės kodas , S.Dariaus ir S. Girėno g.2, Kražiai, Kelmės rajonas 2014 m. kovo 20 d. FINANSINIŲ ATASKAITŲ AIŠ
Kelmės rajono Kražių gimnazija Įmonės kodas 190093592, S.Dariaus ir S. Girėno g.2, Kražiai, Kelmės rajonas 2014 m. kovo 20 d. FINANSINIŲ ATASKAITŲ AIŠKINAMASIS RAŠTAS I. BENDROJI DALIS Kelmės rajono Kražių
DetaliauBanko_paslaugu_internetu_teikimo_salygos_
Banko paslaugų internetu teikimo sąlygos 1. Banko paslaugos internetu tai AB SEB banko (toliau Bankas) ir SEB grupės įmonių, kurioms atstovauja Bankas ar kurios naudojasi Banko paslaugų internetu sistema,
DetaliauDISKREČIOJI MATEMATIKA. Grafai serija 5800 variantas 001 Grafas G 1 = (V, B 1 ) apibrėžtas savo viršūnių bei briaunų aibėmis: V = {i, p, z, u, e, s},
DISKREČIOJI MATEMATIKA. Grafai serija 5800 variantas 001 Grafas G 1 = (V, B 1 ) apibrėžtas savo viršūnių bei briaunų aibėmis: V = {i, p, z, u, e, s}, B 1 = {{i, p}, {i, e}, {z, e}, {u, e}, {u, s}}. Grafai
DetaliauCL2013O0023LT _cp 1..1
02013O0023 LT 01.09.2018 001.001 1 Šis tekstas yra skirtas tik informacijai ir teisinės galios neturi. Europos Sąjungos institucijos nėra teisiškai atsakingos už jo turinį. Autentiškos atitinkamų teisės
DetaliauMicrosoft Word - DV_Rekomendacijos2
DOKUMENTŲ VALDYMO FUNKCIJOS EFEKTYVAUS ATLIKIMO REKOMENDACIJOS I. BENDROSIOS NUOSTATOS Dokumentų valdymo funkcijos efektyvaus atlikimo rekomendacijų (toliau Rekomendacijos) tikslas nustatyti valstybės
DetaliauPardavimų aplikacija (Microsoft Dynamics AX (Axapta) sistemai) Diegimo instrukcija bifree.lt qlik.com
Pardavimų aplikacija (Microsoft Dynamics AX (Axapta) sistemai) Diegimo instrukcija bifree.lt qlik.com Microsoft Dynamics AX (Axapta) sistemai 2 Kaip įsidiegti Diegimo žingsniai: 1. Atsisiųsti ir įsidiegti
DetaliauPATVIRTINTA Pasvalio Lėvens pagrindinės mokyklos direktoriaus 2017 m. gruodžio 29 d. įsakymu V-180 PASVALIO LĖVENS PAGRINDINĖS MOKYKLOS LYGIŲ GALIMYBI
PATVIRTINTA Pasvalio Lėvens pagrindinės mokyklos direktoriaus 2017 m. gruodžio 29 d. įsakymu V-180 PASVALIO LĖVENS PAGRINDINĖS MOKYKLOS LYGIŲ GALIMYBIŲ POLITIKA IR JOS ĮGYVENDINIMO TVARKOS APRAŠAS I SKYRIUS
DetaliauNAUJOVĖ Celiuliazė Beta gliukozidazė Individuali produkto koncepcija mažesniam klampumui ir geresniam substrato panaudojimui pasiekti Kitos gliukanazė
NAUJOVĖ Celiuliazė Beta gliukozidazė Individuali produkto koncepcija mažesniam klampumui ir geresniam substrato panaudojimui pasiekti Kitos gliukanazės Ksilanazės Beta-ksilozidazė Arabinofuranozidazė Beta-galaktozidazė
DetaliauSlide 1
Projektų Elektroninių sąskaitų faktūrų posistemio (i.saf) sukūrimas ir Elektroninių važtaraščių posistemio (i.vaz) sukūrimas eiga. Geroji praktika Virginija Ginevičienė i.saf ir i.vaz projektų vadovė Mokestinių
DetaliauMicrosoft Word - Techninis biuletenis.doc
Techninis biuletenis CE ženklinimas: nuo 2013 m. liepos 1 d. Nauji reikalavimai Naujos atsakomybės Tas pats CE ženklinimas Mes susiduriame su didžiausiu dešimtmečio pokyčiu, kai statybos produktai yra
DetaliauProjektas
1 PRIEDAS PATVIRTINTA Vytauto Didžiojo universiteto Menotyros mokslo krypties doktorantūros komiteto 2019 m. gegužės 28 d. posėdžio nutarimu Nr.1 ATVIRO KONKURSO Į MENOTYROS MOKSLO KRYPTIES DOKTORANTŪROS
DetaliauPowerPoint Presentation
Montažų kūrimas iš skaitmeninių nuotraukų naudojant Windows Photo Story 3 programą Photo Story 3 Priedas Windows XP, Windows 8, Windows 10 Skirtas kurti dinamiškus fotoreportažus iš turimų skaitmeninių
DetaliauPowerPoint Presentation
Pagrindiniai Lietuvos ateities iššūkiai Klaudijus Maniokas ESTEP valdybos pirmininkas Trys akcentai Pripažinti ir nepripažinti iššūkiai: konsensuso link Struktūrinių apirbojimų sprendimas: intervencijos
DetaliauVIEŠO NAUDOJIMO Aplinkos oro teršalų koncentracijos tyrimų, atliktų 2017 m. rugpjūčio d. Šiltnamių g. 23 Vilniaus mieste, naudojant mobiliąją la
Aplinkos oro teršalų koncentracijos tyrimų, atliktų 2017 m. rugpjūčio 11 25 d. Šiltnamių g. 23 Vilniaus mieste, naudojant mobiliąją laboratoriją, rezultatų apžvalga Vilnius, 2017 m. Turinys Įžanga... 3
Detaliau2009 m. liepos 22 d. Komisijos reglamentas (EB) Nr. 637/2009, nustatantis įgyvendinimo taisykles dėl žemės ūkio augalų ir daržovių veislių pavadinimų
L 191/10 Europos Sąjungos oficialusis leidinys 2009 7 23 KOMISIJOS REGLAMENTAS (EB) Nr. 637/2009 2009 m. liepos 22 d. nustatantis įgyvendinimo taisykles dėl žemės ūkio augalų ir daržovių veislių pavadinimų
DetaliauIII. SVEIKI NENEIGIAMI SKAIČIAI 3.1 Indukcijos aksioma Natūraliu ju skaičiu aibės sa voka viena svarbiausiu matematikoje. Nors natūralaus skaičiaus sa
III SVEIKI NENEIGIAMI SKAIČIAI 31 Indukcijos aksioma Natūraliu aibės sa voka viena svarbiausiu matematikoje Nors natūralaus skaičiaus sa voka labai sena, bet šio skaičiaus buveinės sa voka buvo suformuluota
DetaliauPS Testavimo ir konfigūravimo valdymas Užduotis nr. 1. Karolis Brazauskas Mindaugas Rekevičius Jonas Riliškis Eugenijus Sabaliauskas
PS Testavimo ir konfigūravimo valdymas Užduotis nr. 1. Karolis Brazauskas Mindaugas Rekevičius Jonas Riliškis Eugenijus Sabaliauskas 2014-10-01 IT Kompanija Dirbame pagal užsakymus, daugiausiai 2 projektai
DetaliauAB FREDA
PATVIRTINTA Kauno Simono Daukanto progimnazijos direktoriaus 2018 m. rugpjūčio 20 d. įsakymu Nr. KAUNO SIMONO DAUKANTO PROGIMNAZIJOS VAIZDO DUOMENŲ TVARKYMO TAISYKLĖS I. BENDROSIOS NUOSTATOS 1. Kauno Simono
DetaliauJABRA REVO WIRELESS Naudotojo Vadovas jabra.com/revowireless
Naudotojo Vadovas jabra.com/revowireless TURINYS 1. SVEIKI...3 2. APŽVALGA... 4 3. KAIP DĖVĖTI...5 3.1 AUKŠČIO REGULIAVIMAS 3.2 SULENKIAMI LANKSTAI 4. ĮKROVIMAS...7 4.1 BATERIJOS BŪSENA 5. PRIJUNGIMAS...
DetaliauLayout 1
Kvalifikacijos kėlimo kursų programos Pneumatika Pneumatikos pagrindai mašinų operatoriams P100 Suteikite savo mašinų operatoriams įgūdžių optimalaus darbinio slėgio nustatymui, oro pratekėjimų (nuostolių)
DetaliauK9 WebProtection (toliau K9) programa yra nemokama asmeniniam naudojimui. Programa suderinama su Windows Vista, Windows 7, Windows 10 ir Mac operacinė
K9 WebProtection (toliau K9) programa yra nemokama asmeniniam naudojimui. Programa suderinama su Windows Vista, Windows 7, Windows 10 ir Mac operacinėmis sistemomis. Programa K9 yra lengvai perprantama
DetaliauQR algoritmas paskaita
Turinys QR algoritmas 4 paskaita Olga Štikonienė Diferencialinių lygčių ir skaičiavimo matematikos katedra, MIF VU 4 5 TA skaitiniai metodai ( MIF VU) Tiesinių lygčių sistemų sprendimas / 40 TA skaitiniai
DetaliauPowerPoint Presentation
KAIP FORMUOJAMASIS VERTINIMAS PADEDA SIEKTI INDIVIDUALIOS PAŽANGOS: REFLEKSIJA KOKYBĖS SIEKIANČIŲ MOKYKLŲ KLUBO KONFERENCIJA MOKINIŲ UGDYMO(SI) PASIEKIMAI. SAMPRATA IR SKATINIMO GALIMYBĖS Doc. dr. Viktorija
DetaliauPATVIRTINTA Vyriausiojo gydytojo įsakymu Nr.55 LYGIŲ GALIMYBIŲ POLITIKOS ĮGYVENDINIMO IR VYKDYMO PRIEŽIŪROS TVARKA I SKYRIUS ĮVADAS 1. Vieš
PATVIRTINTA Vyriausiojo gydytojo 2017-12-05 įsakymu Nr.55 LYGIŲ GALIMYBIŲ POLITIKOS ĮGYVENDINIMO IR VYKDYMO PRIEŽIŪROS TVARKA I SKYRIUS ĮVADAS 1. Viešosios įstaigos Klaipėdos sveikatos priežiūros centro
DetaliauŠIRVINTŲ R
PATVIRTINTA Širvintų r. Bartkuškio mokyklos-daugiafunkcio centro direktoriaus 2017 m. gegužės 26 d. įsakymu Nr. 61-PC ŠIRVINTŲ R. BARTKUŠKIO MOKYKLOS-DAUGIAFUNKCIO CENTRO LYGIŲ GALIMYBIŲ POLITIKA IR JOS
Detaliau