<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Karolio tinklaraštis &#187; Programavimas</title>
	<atom:link href="http://karolio.lt/category/programavimas/feed" rel="self" type="application/rss+xml" />
	<link>http://karolio.lt</link>
	<description>bandau apsimesti protingu</description>
	<lastBuildDate>Wed, 17 Jul 2019 22:21:52 +0000</lastBuildDate>
	<language>lt-LT</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.2</generator>
		<item>
		<title>Kaip dvejetą pastatyti per vidurį, vienetą – priekyje, o trejetą – gale? Rikiavimo algoritmai.</title>
		<link>http://karolio.lt/programavimas/kaip-dvejeta-pastatyti-per-viduri-vieneta-priekyje-o-trejeta-gale-rikiavimo-algoritmai</link>
		<comments>http://karolio.lt/programavimas/kaip-dvejeta-pastatyti-per-viduri-vieneta-priekyje-o-trejeta-gale-rikiavimo-algoritmai#comments</comments>
		<pubDate>Wed, 21 Dec 2011 01:31:54 +0000</pubDate>
		<dc:creator>Karolis</dc:creator>
				<category><![CDATA[Programavimas]]></category>
		<category><![CDATA[masyvas]]></category>
		<category><![CDATA[quicksort]]></category>
		<category><![CDATA[rikiavimas]]></category>
		<category><![CDATA[rūšiavimas]]></category>
		<category><![CDATA[sort]]></category>

		<guid isPermaLink="false">http://karolio.lt/?p=58</guid>
		<description><![CDATA[Ilgokai jau čia nerašiau. Kodėl? Pirma, tai dėl to, nes nelabai turėjau laiko visą mėnesį, antra, nes paprasčiausiai neturėjau idėjų, apie ką galėčiau parašyti. Tarp kitko, atsiprašau už tai, kad lapkričio 16-17 dienomis kažkuriuo metu tinklaraštis nebuvo pasiekiamas – EuroVPS perkėlė mane į kitą serverį, pažadėjo geresnę kokybę – žiūrėsim, kaip čia bus. Taigi, prie [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://karolio.lt/wp-content/uploads/2011/12/sort1.jpg"><img class="alignleft size-medium wp-image-66" title="sort" src="http://karolio.lt/wp-content/uploads/2011/12/sort1-300x225.jpg" alt="" width="300" height="225" /></a>Ilgokai jau čia nerašiau. Kodėl? Pirma, tai dėl to, nes nelabai turėjau laiko visą mėnesį, antra, nes paprasčiausiai neturėjau idėjų, apie ką galėčiau parašyti. Tarp kitko, atsiprašau už tai, kad lapkričio 16-17 dienomis kažkuriuo metu tinklaraštis nebuvo pasiekiamas – EuroVPS perkėlė mane į kitą serverį, pažadėjo geresnę kokybę – žiūrėsim, kaip čia bus. <img src='http://karolio.lt/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Taigi, prie reikalo: turbūt visi pastebi, kad informacija kažkokiose programose, internetiniuose puslapiuose dažnai būna surikiuota tarkim pagal datą, abėcėlę, skaičių eilės tvarką ar pan. Kaip programuotojai sugeba surikiuoti (surūšiuoti) duomenis eilės tvarka? Na, tam yra keletas algoritmų, dažniau naudojamus čia ir pamėginsiu apžvelgti.</p>
<p><a href="http://karolio.lt/wp-content/uploads/2011/12/Selection-Sort-Animation.gif"><img class=" wp-image-69 alignleft" title="Selection-Sort-Animation" src="http://karolio.lt/wp-content/uploads/2011/12/Selection-Sort-Animation.gif" alt="" width="53" height="196" /></a>Pirmas ir vienas iš paprasčiausių rikiavimo algoritmų yra vadinamas „Selection sort“ (išrinkimo algoritmas). Algoritmo veikimo principas labai paprastas: visas duomenų masyvas yra „skenuojamas“ ir ieškoma pačio mažiausio elemento, tada tas elementas yra nukeliamas į masyvo pradžią (jeigu reikia, kad duomenys būtų surikiuoti nuo mažiausio iki didžiausio). Vėliau ciklas kartojamas, tik šįkart netikrinant pirmojo masyvo elemento. Iš krūvos likusių elementų yra išrenkamas mažiausias ir jis jau yra statomas į antrąją masyvo vietą. Vieno ciklo („skenavimo“) metu gali būti perkeliamas tik vienas elementas, todėl šis algoritmas yra ganėtinai lėtas, jeigu duomenų kiekiai yra dideli. Manau iš iliustracijos suprasti bus šiek tiek lengviau.</p>
<p>Šis metodas vėliau buvo patobulintas ir pavadintas „Double selection sort“ (dvigubo išrinkimo algoritmas). Šio metodo principas yra lygiai tas pat, tik „skenuojant“ masyvą yra ieškoma ne tik mažiausių elementų, bet ir didžiausių ir vėliau mažiausias elementas nukeliamas į masyvo pradžią, didžiausias – į pabaigą. Vėliau procesas kartojamas, tik į jį neįtraukiamas pirmasis ir paskutinis masyvo elementai. Toks mažytis patobulinimas leido šį algoritmą pagreitinti du kartus. Internete neradau geros iliustracijos pavaizdavimui, tačiau manau nėra sunku įsivaizduot tokį procesą, jeigu pilnai supratote „Selection sort“.</p>
<p>Trečias metodas, apie kurį noriu papasakoti yra „Insertion sort“ (įterpimo algoritmas). Šis algoritmas nėra labai dažnai sutinkamas ir aš pats jo beveik niekad nenaudoju, tačiau jo veikimo principas nėra labai sunkiai suprantamas. Šio metodo metu masyvas yra suskaidomas į dvi dalis – surūšiuotąją dalį ir nesurūšiuotą dalį. Surūšiuota masyvo dalis būna masyvo pradžioje, nesurūšiuota – pabaigoje. Kiekvienos iteracijos (ciklo) metu, imamas vienas iš nesurūšiuotos dalies elementų (paprastai visi elementai imami paeiliui) ir to elemento reikšmė yra išsaugoma kintamajame ir iš masyvo ištrinama (paliekama tuščia vieta). Vėliau tikrinama, į kurią surūšiuotos masyvo vietos dalį tas elementas turėtų tikti, t.y. jeigu prieš tai buvęs elementas yra mažesnis už pasirinktąjį, o kitas yra didesnis, reiškia šioje vietoje reikia įterpti tą elementą. Pvz. turime surūšiuotą masyvo dalį [1][3][4][5] ir turime elementą [2], pradedame nuo surūšiuoto masyvo galo tikrinti, kur tas [2] turėtų tikti – pirma tikriname [4][5], kadangi [4] yra didesnis už [2], tai jo vieta yra ne čia. Vėliau tikriname [3][4], kadangi, vėlgi, [3] yra daugiau nei [2], čia šis elementas netinka, tęsiame procesą su [1][3]. Kadangi 1 yra mažiau už [2] ir [3] yra daugiau už [2], tai šioje vietoje reikia įterpti šį elementą. Elementas [2] yra įterpiamas į antrą masyvo poziciją, tuo tarpu [3][4][5] yra perstumiami viena pozicija toliau. Nemoku puikiai paaiškinti šių dalykų teksto forma, todėl iš iliustracijos manau susigaudyti bus daug paprasčiau.</p>
<p style="text-align: center;"><a href="http://karolio.lt/wp-content/uploads/2011/12/Insertion-sort-example-300px.gif"><img class=" wp-image-72 aligncenter" title="Insertion-sort-example-300px" src="http://karolio.lt/wp-content/uploads/2011/12/Insertion-sort-example-300px.gif" alt="" width="210" height="126" /></a></p>
<p>Ketvirtas, šiek tiek primenantis „Insertion sort“ (bent man) yra vadinamas „Bubble sort“ (Burbulo algoritmas). Šį algoritmą suprast ir sugebėt pritaikyt turėtų mokėt kiekvienas pradedantis programuotojas. Suprast šį metodą yra labai nesunku, sudėtingiau šiek tiek yra jį panaudoti praktikoje. Burbulo algoritmas yra pakankamai lėtas, tačiau jo pagrindinis privalumas yra tas, kad jis nenaudoja kompiuterio atminties – nereikia nustatyti jokių papildomų kintamųjų, užtenka turėt tik patį masyvą. Veikimo principas yra toks: pradedama yra nuo masyvo pabaigos, yra imami du masyvo elementai ir jie kartu yra lyginami. Jeigu antrasis elementas yra mažesnis už pirmąjį – jie yra apkeičiami vietomis ir mažesnis elementas pakliūva arčiau masyvo pradžios. Po šio apkeitimo yra imami kiti du elementai (priešpaskutinis masyvo elementas ir elementas, esantis jam iš kairės) ir jie identiškai yra tikrinami – jeigu antrasis elementas yra mažesnis už pirmąjį – jie yra apkeičiami vietomis, jeigu visgi antrasis elementas yra didesnis už pirmąjį nedaroma nieko ir pereinama prie kitų dviejų elementų. Pavyzdys: tarkim turime masyvą iš trijų elementų [4][1][3]. Pirma paimame du paskutinius masyvo elementus [1] ir [3]. Kadangi [1] yra mažesnis už [3], nieko su jais nedarome. Einame prie kitų dviejų elementų – [4] ir [1]. Kadangi kairysis elementas ([4]) yra didesnis už dešinįjį, apkeičiame juos vietomis ir gauname masyvą [1][4][3]. Baigėsi viena ciklo iteracija. Vėl visą procesą kartojame iš naujo – tikriname paskutinius du elementus [4][3], kadangi [4] daugiau už [3], apkeičiame juos vietomis, vėliau imant [1][3] nereikės nieko keisti vietomis. Galiausiai turime surikiuotą masyvą – [1][3][4]. Iliustracijoje pavaizduotas tas pat algoritmas tikrinant masyvą nuo jo pradžios. Praktiškai nėra jokio skirtumo, ar masyvas bus pradėtas rūšiuoti nuo pradžios, ar nuo pabaigos. Jeigu bus pradedama rūšiuoti nuo pradžios, pirmiausia bus surūšiuoti didžiausi masyvo elementai, jeigu bus pradedama rūšiuoti nuo pabaigos &#8211; pirmiausia bus surūšiuojami mažiausi masyvo elementai.</p>
<p style="text-align: center;"><a href="http://karolio.lt/wp-content/uploads/2011/12/Bubble-sort-example-300px.gif"><img class=" wp-image-77 aligncenter" title="Bubble-sort-example-300px" src="http://karolio.lt/wp-content/uploads/2011/12/Bubble-sort-example-300px.gif" alt="" width="210" height="126" /></a></p>
<p>Na ir paskutinis, kurį aptarsiu šiame straipsnyje, yra „Quicksort“ algoritmas. Lietuviškai jis skambėtų kaip „greitojo rikiavimo algoritmas“, tačiau retai jis taip vadinamas. Tai vienas iš greičiausių ir plačiausiai naudojamų algoritmų. Mano aukščiau minėti algoritmai visi turėjo vieną pagrindinę neigiamą savybę – jie veikia pernelyg lėtai, kai masyvas yra didelis (rikiuojama labai daug duomenų), tuo tarpu „Quicksort“ lengviau tvarkosi su didesniais duomenų kiekiais negu su mažesniais. Būtent dėl šios priežasties šis algoritmas yra plačiai paplitęs. „Quicksort“ veikimo principas yra toks: pirma yra paimamas vienas iš masyvo elementų (geriausia, kad tas elementas būtų mediana, tačiau praktikoje tai neefektyvu, nes tam reikia skenuot visą masyvą ir tokiu būdu nustatyti medianą). Vėliau visas masyvas yra suskaidomas yra dvi dalis – pirmojoje dalyje yra visi masyvo elementai, kurie yra didesni už paimtą skaičių, antroje – mažesni. Tas skaičius, kuris buvo paimtas, yra vadinamas „Pivot“ ir po šio perrinkimo galime garantuoti, kad šis skaičius tikrai yra savoje vietoje. Vėliau šis procesas kartojamas paėmus jau kitą „pivot“ skaičių vienoje iš likusių dviejų masyvo dalių. Realiai, tokiu būdu masyvas yra suskaidomas į kelias dalis, kurios vėliau rūšiuojamos atskirai. Šio dalyko pliusas yra tas, kad kai kuriais atvejais vienos iteracijos metu gali būti surūšiuojami keli elementai, tuo tarpu visuose ankstesniuose algoritmuose per vieną iteraciją savo vietą masyve atrasdavo tik vienas elementas. Tai „Quicksort‘ui“ leidžia didelius masyvus surūšiuoti daug greičiau. Šio rūšiavimo pavyzdys: tarkime turime masyvą [1][5][9][3][7][8][4], paimame vieną atsitiktinį „pivot“ skaičių, tarkime tas skaičius yra [5], tada visus mažesnius elementus stumiame į kairę, didesnius  &#8211; į dešinę pusę ir gauname tokį masyvą: [1][3][4]<strong>[5]</strong>[9][7][8], po šio perrikiavimo [5] dabar tikrai yra savoje vietoje. Dabar imame bet kurį atsiktinį skaičių iš „mažesniojo“ masyvo, tarkime tai bus [1], po perrikiavimo gauname tokį masyvą – <strong>[1]</strong>[3][4]<strong>[5]</strong>[9][7][8], [1] dabar tikrai yra savo vietoje. Dabar imame vieną iš likusių dviejų skaičių [3] arba [4] atsitiktinai ir po patikrinimo gausime <strong>[1][3][4][5]</strong>[9][7][8]. Kaip matome per tris iteracijas sugebėjome surikiuoti keturis elementus. Dabar lieka kitas, mažesnis masyvas – tarkime atsitiktinai išrenkamas skaičius [8], tai po šios iteracijos visas masyvas bus surikiuotas – <strong>[1][3][4][5][7][8][9]</strong>. Kadangi po perrinkimo tarpuose liko po vieną skaičių – [7] ir [9], tai tų skaičių nėra su kuo lyginti, o tai reiškia, kad jie tikrai yra savose vietose. Kaip matome, užteko vos 4-ių iteracijų, kad surikiuotume 7-ių elementų masyvą!</p>
<p style="text-align: center;"><a href="http://karolio.lt/wp-content/uploads/2011/12/Quicksort-example.gif"><img class=" wp-image-84 aligncenter" title="Quicksort-example" src="http://karolio.lt/wp-content/uploads/2011/12/Quicksort-example.gif" alt="" width="210" height="126" /></a></p>
<p>Kurį metodą kada naudoti? Na, tai priklauso nuo turimo masyvo dydžio ir nuo to, kokie duomenys jame saugomi. Realiai didelio skirtumo tarp visų šių metodų nėra, jeigu masyvas yra nedidelis (tarkim iki 500 elementų), kai kuriais atvejais, dirbant su nedideliais masyvais, koks įterpimo algoritmas surikiuoja duomenis greičiau negu „Quicksort‘as“. Kalbant apie masyvus, kuriuose yra saugomi kažkokie ilgi teksto blokai ir elementų kiekis nėra didelis, naudinga būtų naudoti „Bubble sort“ metodą dėl to, nes jis nenaudoja operatyviosios atminties (nereikia kelti didelių duomenų į RAM, vėliau atlaisvinti RAM ir vėl kelti naujus, kas gali kainuoti kelias milisekundes). Kalbant apie didelius masyvus, kuriuose yra tūkstančiai elementų, aiškus lyderis čia yra „Quicksort“ dėl savo galimybės greitai dirbti su dideliais masyvais. Na, aišku, jeigu turite milijonus ar milijardus nerūšiuotų elementų, tokiu atveju net ir „Quicksort“ darbuosis ilgą laiką.</p>
<p>Pabaigai dar norėčiau pridurti, kad pradinėje straipsnio versijoje buvau įdėjęs ir kodo pavyzdžių, tačiau pamačiau, kad juos įdėjus straipsnio apimtys beveik padvigubėja (o jis ir taip nėra trumpas), tuo tarpu įvedus į „Google“ ar „Bing“ vien algoritmo pavadinimą, yra labai nesunku rasti bent keletą kodo pavyzdžių (paprastai pirmajame, dažniausiai „Wikipedijos“, rezultate jau būna pateikta bent pora kodo pavyzdžių – C++ ir Pascal kalbomis). Taip pat pranešu, kad laikinai išjungiau komentavimo tinklaraštyje galimybę, nes užpuolė šiandien spambotai – daugiau negu 1000 komentarų teko šiandien ištrinti. Kai tik surasiu sprendimą, kaip atsikratyti šių viagros pardavėjų, iškart vėl įjungsiu komentavimo galimybę. Jeigu kas nors žinote, kaip būtų galima tai sutvarkyti, būčiau dėkingas jei praneštumėte apie tai, mano kontaktus galima rasti &#8220;Kontaktai&#8221; skiltyje. Dėkoju ir atsiprašau už nepatogumus.</p>
]]></content:encoded>
			<wfw:commentRss>http://karolio.lt/programavimas/kaip-dvejeta-pastatyti-per-viduri-vieneta-priekyje-o-trejeta-gale-rikiavimo-algoritmai/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Atsitiktiniai skaičiai: kokie jie yra ir kaip jie gaunami?</title>
		<link>http://karolio.lt/programavimas/atsitiktiniai-skaiciai-kokie-jie-yra-ir-kaip-jie-gaunami</link>
		<comments>http://karolio.lt/programavimas/atsitiktiniai-skaiciai-kokie-jie-yra-ir-kaip-jie-gaunami#comments</comments>
		<pubDate>Fri, 07 Oct 2011 00:05:55 +0000</pubDate>
		<dc:creator>Karolis</dc:creator>
				<category><![CDATA[Programavimas]]></category>
		<category><![CDATA[atsitiktinumas]]></category>
		<category><![CDATA[loterija]]></category>
		<category><![CDATA[pseudorandom]]></category>
		<category><![CDATA[random]]></category>
		<category><![CDATA[tikimybės]]></category>

		<guid isPermaLink="false">http://karolio.lt/?p=44</guid>
		<description><![CDATA[Programuojant labai dažnai tenka susidurti su atvejais, kada prireikia sugeneruoti kokį nors atsitiktinį skaičių ar simbolį. Pvz. sukūrus „monetos metimo“ loteriją, juk realiai niekas ten jokios monetos nemėto, tiesiog kompiuteris sugeneruoja atsitiktinį skaičių (pvz. 0 ir 1) ir galiausiai vėliau išvedamas rezultatas iš to skaičiaus – tarkim, jeigu rezultatas yra 0, išvedamas rezultatas „Iškrito herbas“, [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://karolio.lt/wp-content/uploads/2011/10/kauliukai.jpg"><img class="alignleft size-medium wp-image-47" title="kauliukai" src="http://karolio.lt/wp-content/uploads/2011/10/kauliukai-300x199.jpg" alt="" width="300" height="199" /></a>Programuojant labai dažnai tenka susidurti su atvejais, kada prireikia sugeneruoti kokį nors atsitiktinį skaičių ar simbolį. Pvz. sukūrus „monetos metimo“ loteriją, juk realiai niekas ten jokios monetos nemėto, tiesiog kompiuteris sugeneruoja atsitiktinį skaičių (pvz. 0 ir 1) ir galiausiai vėliau išvedamas rezultatas iš to skaičiaus – tarkim, jeigu rezultatas yra 0, išvedamas rezultatas „Iškrito herbas“, o jeigu rezultatas yra 1, tai išvedamas rezultatas „Iškrito skaičius“. Visi žinome, kad kompiuteris yra visiškai logiška mašina, t.y. kompiuteris mums niekad neišves, kad 2+2 yra 5. Taigi, kokiu būdu logikai ir matematikai pavaldi mašina gali sukurti atsitiktinį skaičių?</p>
<p>Problema generuojant atsitiktinius skaičius atsirado vos atsiradus pirmiesiems mikroprocesoriams. Pirmiesiems programuotojams teko ilgokai pasukti galvas, kad sugalvotų, kaip daiktą, kuris visiškai paklūsta matematikai, priversti sugeneruoti atsitiktinį skaičių. Dabar programuotojams tame didelių problemų nekyla – praktiškai kiekviena programavimo kalba turi Random(); funkciją, kuri sugeneruoja tą skaičių ir visiškai nereikia galvoti apie kažkokias matematines formules, kurios skirtos tų skaičių generavimui. Neretas programuotojas (ypač pradedantysis) net nežino, kokiu būdu tie skaičiai yra sugeneruojami.</p>
<p>Atsitiktinių skaičių rūšys yra dvi – tikrieji atsitiktiniai skaičiai ir pseudo-atsitiktiniai skaičiai (pseudo-random). Tikrieji atsitiktiniai skaičiai yra sugeneruojami matuojant visiškai atsitiktinius procesus (branduolinį skilimą, atmosferinį triukšmą ir pan.). Tokiems skaičiams generuoti reikia papildomos įrangos, kaip pvz. <a title="Geiger-Muller kamera" href="http://en.wikipedia.org/wiki/Geiger-Muller_tube" target="_blank">Geiger–Müller kameros</a>, kuri fiksuoja branduolinį skilimą ir naudojantis šia informacija galima sugeneruoti visiškai atsitiktinį skaičių. Pseudo-atsitiktinių skaičių generavimas yra loginis metodas, dažniausiai tai yra matematinė formulė. Paprastai tariant, į formulę įstatomas „seed“ ir iš to yra gaunama atsitiktinių skaičių seka. „Seed“ yra nežinomasis formulėje, tik jį pakeitus kažkokiu skaičiumi yra gaunamas atsakymas. Kiekvienąkart įvedus tą patį „seed“, visad gaunama lygiai tokia pati atsitiktinių skaičių seka. Pvz. jeigu įstatysime į formulę 5, visad gausime seką tarkim 147890154278&#8230;, taigi norint kaskart gauti vis skirtingą atsitiktinių skaičių seką, reikia, kad „seed“ pasikeistų. Tokiu atveju turbūt kyla klausimas, kokiu būdu kompiuteris gali parinkti atsitiktinį „seed“, kad seka kiekvieną kartą būtų visiškai atsitiktinė? Atsakymas paprastas – negali, todėl dažnai kaip „seed“ yra naudojama dabartinė sistemos data ir laikas <a title="Unix išraiška" href="http://en.wikipedia.org/wiki/Unix_time" target="_blank">unix išraiška</a>. Unix išraiška reiškia sekundžių kiekį, kuris praėjo nuo 1970-ųjų metų sausio pirmos dienos.</p>
<p>Vienas iš pirmųjų pseudo-atsitiktinių skaičių generavimo būdų buvo <a title="John von Neumann" href="http://en.wikipedia.org/wiki/John_von_Neumann" target="_blank">John von Neumann</a> 1946-aisiais išrastas metodas, vadinamas <a title="Middle-square metodas" href="http://en.wikipedia.org/wiki/Middle-square_method" target="_blank">middle-square metodu</a>. Metodas yra labai paprastas – tiesiog paimamas koks nors skaičius kaip „seed“, jis pakeliamas kvadratu ir viduriniai gauto rezultato skaičiai yra laikomi „atsitiktiniais“. Tuo tarpu, jei reikia sugeneruoti daugiau atsitiktinių skaičių, ankstesnis rezultatas yra panaudojamas, kaip seed, t.y. jis vėl pakeliamas kvadratu ir vėl imami gauto rezultato viduriniai skaičiai. Procesas kartojamas tiek kartų, kiek reikia. Šis metodas veikia tol, kol skaičių reikia labai nedaug, nes vėliau skaičiai gautoje sekoje pradeda kartotis. Pvz. paėmus nulį kaip pradinę reikšmę, skaičiai pradeda kartotis iškart ir gaunama reikšmė būna 0000&#8230; Šiuo metu yra rasta daug efektyvesnių pseudo-atsitiktinių skaičių generavimo būdų.</p>
<p>Kur yra naudojami pseudo-atsitiktiniai skaičiai ir kur geriau jų nenaudoti? Pseudo-atsitiktiniai skaičiai labai puikiai tinka statistikai, nes kiekvieno iš skaičių kritimo tikimybė yra lygiai tokia pati. T.y. nebus taip, kad sugeneravus 1 000 000 pseudo-atsitiktinių skaičių eilutę nuo 0 iki 1, gautame rezultate vienetas kartosis 95% kartų, o nulis – tik 5%. Gautame rezultate tikimybių nuokrypis nebus labai didelis, o bus „realus“, pvz 49% nulių ir 51% vienetų. Kadangi šis metodas yra grynai matematinis, visų skaičių tikimybės yra labai tikslios. Tačiau, nors vizualiai pseudo-atsitiktiniai skaičiai visiškai niekuo nesiskiria nuo realių atsitiktinių skaičių, šis metodas dažnai nėra naudojamas didelėse loterijose, kai kuriuose internetiniuose pokerio tinklalapiuose, nes teoriškai gali būti nuspėjamas. Tereikia žinot metodą, kuriuo naudojantis yra sugeneruojami skaičiai ir „seed“, kuris naudojamas (o tai dažnai būna, kaip minėjau, sistemos data ir laikas). Tiriant ilgą atsitiktinių skaičių eilutę gautą iš kokios nors virtualios ar realios loterijos, galima atspėti metodą ir nustatyti naudojamą „seed“, kaip neseniai <a title="Nori laimėti loterijoje? Reikia ne sėkmės, o matematikos žinių! - Technologijos.lt" href="http://www.technologijos.lt/n/mokslas/matematika/S-21048/straipsnis?name=S-21048&amp;l=2&amp;p=1" target="_blank">padarė kanadietis statistikas Mohanas Srivastava</a>, kuris pastebėjo tendencijas ir nustatė algoritmą loterijoje. Taigi, jeigu ruošiatės kurti kažkokią loteriją, geriau nenaudokite pseudo-atsitiktinių skaičių generatoriaus, nes Jūsų loterija gali būti paprasčiausiai „nulaužta“. <img src='http://karolio.lt/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>P.S. Žinau, kad gal kai kur mano rašymo stilius gali būti kiek per sudėtingas, todėl, jei kas nors neaišku – praneškite komentaruose. <img src='http://karolio.lt/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://karolio.lt/programavimas/atsitiktiniai-skaiciai-kokie-jie-yra-ir-kaip-jie-gaunami/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
	</channel>
</rss>
