Algoritam je opis za rešavanje nekog problema.[1] Reč dolazi iz prezimena persijskog matematičara Al Horezmija. Algoritam je bio izraz koji opisuje način računanja decimalnim brojevima uvedenim oko 1600. godine u Evropi. Algoritmičarima su se ranije zvali oni matematičari koji ne operišu simbolima množina predstavljenim na abakusu, nego jednim (indijskim ili arapskim) sistemom znakova za brojeve (od 16. veka raširenim u Evropi).
U novije vreme, algoritam je pojam koji se gotovo isključivo vezuje za informatiku i, mada ne postoji jedinstvena opšteprihvaćena definicija, podrazumeva se da je u pitanju nekako opisana procedura za obavljanje posla. U tu svrhu se definišu algoritamski jezici. To su formalizovani jezici kojima se relativno lako opisuju postupci rešavanja problema predstavljenih algoritmom, takvi su naprimer programski jeziciAlgol, Fortran i Kobol.
U matematičkoj logici je algoritam generalizovan pojam i odnosi se na postupak za postupno pretvaranje nizova znakova.
O nastanku
Algoritam je u matematiku uveo iranski matematičar Muhamed Al Horezmi. Napisao je knjigu Al Horezmi o indijskoj veštini računanja gde u islamsku matematiku uvodi indijske cifre i decimalni brojni sistem. Ova knjiga biva kasnije prevedena na latinski kao Algoritmi de numero indorum. Od lošeg latinskog prevoda njegovog prezimena i potiče reč algoritam, i dugo je označavala postupak za račun sa decimalnim brojnim sistemom (i indijskim odnosno, kako se kasnije pričalo, arapskim ciframa).[2][3]
Definicija algoritma
Algoritam je konačna i precizno definisana procedura, niz dobro definisanih pravila, kojom se ulazne vrednosti transformišu u izlazne, ili se opisuje izvršavanje nekog postupka.
Danas se reč algoritam često vezuje za pojam računarstva mada uopšteno algoritam možemo smatrati kao uputstvo kako rešiti neki zadatak ili problem. Tako se i uputstvo za slanje čoveka na Mesec i uputstvo za pravljenje ruske salate sastoji od niza koraka, postupaka, koje treba uraditi i koji vode ispunjenju cilja ili rešavanju problema. Uputstvo može sadržati korake koji se ponavljaju više puta ili korake kada treba doneti neku odluku, na osnovu nekog kriterijuma. Dobro uputstvo predviđa i postupak kada nisu svi uslovi ispunjeni npr. prva posada za slanje na Mesec izgorela pri testiranju, ili nema krompira u frižideru a počeli smo da spremamo žumance za majonez. Korektno izvršavanje svakog koraka ne rešava zadatak ako je algoritam bio pogrešan.
Različiti algoritmi mogu rešiti isti problem različitim nizom postupaka uz manje ili više napora, za kraće ili duže vreme. Obzirom da je rezultat isti, algoritmi se mogu porediti po svojoj efikasnosti, brzini ili kompleksnosti.
Primeri algoritma
Primer algoritma iz svakodnevnog života je kuvanje čaja. Svaki korak pripremanja čaja mora biti izvršen pravilno kako bi se moglo preći na sledeći i u konačnom vremenu dobili skuvan čaj.
Algoritam kuvanja čaja glasi:
Uzeti lonče i sipati vodu.
Uključiti ringlu.
Sačekati dok voda ne proključa.
Kad voda proključa, skinuti lonče i isključiti ringlu.
Staviti kesicu čaja u lonče.
Po želji, dodati kašiku šećera, mleko ili limun.
Sipati čaj u šolju.
Iz ovog jednostavnog primera može se videti postupnost i konačnost algoritma. Naime, nema previše koristi od algoritma koji se nikada ne završava ili algoritma čije se naredbe izvode nepredvidljivo ili im je rezultat nepredvidljiv.
Podeliti broj a brojem b pri čemu se dobija količnik c i ostatak r
Broj a uzima vrednost broja b
Broj b uzima vrednost r
Ponavljati sve dok ostatak r ne bude jednak 0. Najveći zajednički delilac je trenutna vrednost broja a
Istorija
Prvi algoritam koji se može smatrati procedurom čija je namena račun na automatskoj mašini je napisala Ejda Bajron1842. godine. U pitanju je algoritam za račun Bernulijevih brojeva na analitičkoj mašiniČarlsa Bebidža. Ta mašina nikad nije proradila, ali je njen algoritam ostavio dubok trag. Danas se to priznaje kao prvi računarski algoritam, a Ejda Bajron, ledi Lavlejs, je priznata kao prvi programer u istoriji.[4][5] U njenu čast je i jedan od najkompleksnijih programskih jezika dobio naziv Ada.
Značajan napredak u formalizaciji uvođenja algoritma u matematiku i logiku je učinio Alan Tjuring u svojim radovima definisanjem Tjuringove mašine. To je primitivan automat, misaona tvorevina, ali poseduje mogućnost izvođenja nekoliko operacija koje su dovoljne za izvođenje skoro svih algoritama. Čerč-Tjuringova teza tvrdi da se svaki algoritam koji je dobro definisan može izvršiti na takvoj mašini. Tako se, i pored jednostavnosti ove mašine, začela teorija konačnih automata kao nova oblast. Istraživanjem se došlo i do teorijskih problema: Tjuringov problem zaustavljanja, NP-težak problem, NP-potpun problem i tako dalje.
Osobine
Algoritmi poseduju sledeće osobine:
diskretnost — u odvojenim koracima se izvršavaju diskretne operacije algoritma koji vode ka konačnom cilju;
rezultativnost — označava sposobnost algoritma da posle konačnog broja koraka daje izlazne podatke;
determinisanost — za iste ulazne podatke algoritam uvek generiše iste vrednosti na izlazima i
masovnost — algoritam je primenljiv na veći broj ulaznih vrednosti.
Elementi
Rešenje bilo kog problema koji se može rešiti pomoću računara, se može izraziti kao superpozicija sledećih struktura: sekvence, selekcije i iteracije.
Sekvenca je uređen niz instrukcija gde se po izvršenju i-te instrukcije, može preći na i+1 instrukciju, zatim na i+2 instrukciju i tako dalje.
Selekcija omogućava izbor jednog toka kojim će se nastaviti izvršavanje instrukcija. Izbor toka vrši se proverom uslova koji je definisan kao logički izraz (predikat).
Razlikuje se sledeći tipovi selekcija:
IF uslov THEN operacija (ako je uslov ispunjen tada izvrši operaciju)
IF uslov THEN operacija1 ELSE operacija2 (ako je uslov ispunjen, tada izvrši operaciju 1, u suprotnom izvrši operaciju 2)
CASE uslov OF
vrednost1: operacija1
vrednost2: operacija2
...
ELSE operacijan (ako uslov ima vrednost1 izvrši operaciju1, ako uslov ima vrednost2, izvrši operaciju2... u suprotnom izvrši operacijun)
Iteracija omogućava ponavljanje operacija tela operacije potreban broj puta. Broj ponavljanja se kontroliše uslovom u formi predikata. Razlikuju se sledeći tipovi iteracije:
REPEAT operacija UNTIL uslov (ponavljaj operaciju sve dok se ne ispuni uslov)
iteracije sa izlaskom u sredini (slabo sintaksno podržane, imaju uglavnom teorijski značaj)
Formalizacija
Algoritam je ključni pojam u računarskoj obradi podataka jer je računarski program izvestan algoritam koji računaru objašnjava koje korake (naredbe) i kojim redosledom treba da obavlja. Tako se algoritmom može smatrati bilo koji niz instrukcija koja se može uraditi na Tjuring-kompletnoj mašini.
Tipično, kada se uz algoritam vezuje pojam obrade podataka, podrazumeva se da se podatak prvo učita preko ulazne jedinice a ispisuje se na izlaznu jedinicu ili čuva za kasniju upotrebu. Sačuvani podaci se smatraju delom unutrašnjeg stanja sistema.
Za svaki računarski posao algoritam mora biti jasno definisan; naveden na način koji podrazumeva sve moguće situacije koje se mogu pojaviti. Znači, svaki uslovni korak se mora sistematično obraditi, slučaj po slučaj; uslov za svaki slučaj mora biti jasan i izračunljiv.
Pošto je algoritam jasan niz preciznih koraka, redosled izračunavanja je uvek kritičan za funkcionisanje algoritma. Pretpostavlja se da su instrukcije navedene jasno, da počinju od vrha i da teku do dna. Ova ideja se formalno opisuje kontrolom toka.
Kod ovakve formalizacije se unapred uzimaju pretpostavke o imperativnom programiranju. Ovo je najuobičajeniji koncept u programiranju i opisuje postupke na mehanički način.[nedostaje referenca] Jedinstveno za ovaj koncept je operacija dodeljivanja, što je davanje vrednosti promenljivoj. Ovo proizilazi iz intuitivnog poimanja memorije kao privremenog skladištenja odnosno pamćenja. Niže u tekstu se može naći primer ovakvog dodeljivanja.
Postoji više načina za razvrstavanje algoritama, a metodologija klasifikacije je tema mnogih rasprava.
Podela prema paradigmi programiranja
Jedan način razvrstavanja je po metodologiji projektovanja ili primenjenom obrascu. Postoji izvestan broj različitih obrazaca kako se pristupa realizaciji algoritama. Dalje, svaka od navedenih kategorija sadrži više različitih tipova algoritama. Neki uobičajeno korišćeni obrasci su:
Podeli pa vladaj algoritmi smanjuju stepen složenosti problema podelom na dva ili više manjih problema od iste vrste (obično rekurzivno), dok od problema ne ostane toliko mali deo da se može jednostavno rešiti.[6]
Dinamičko programiranje. Kada problem pokazuje optimalnu podstrukturu, u smislu da se optimalno rešenje problema može konstruisati iz optimalnog rešenja potproblema, i preklapanjem potproblema, što znači da se isti potproblem koristi za rešavanje više različitih primera problema, možemo rešiti brzo koristeći dinamičko programiranje, pristup koji izbegava ponovno izračunavanje rešenja koja su već izračunata. Na primer, najkraći put do cilja iz čvora težinskog grafa može biti nađen koristeći najkraći put do cilja od svih obližnjih čvorova.[7]
Pohlepni algoritam. Algoritam lakomosti je sličan dinamičkom programiranju, ali je razlika u tome što rešenja potproblema ne moraju biti poznata u svakom trenutku. Stoga, pri traženju rešenja je moguće napraviti i 'lakom' izbor onoga što izgleda najbolje u tom trenutku.[8]
Linearno programiranje. Problem se rešava korišćenjem linearnog programiranja kada postoji više linearnih nejednačina a zadatak je naći maksimum (ili minimum) po nekom kriterijumu. Mnogi realni problemi (kao što je maksimiziranje protoka u usmerenom grafu) mogu biti iskazani na ovaj način, a onda rešeni nekim 'generičkim' algoritmom, kao što je Simpleks algoritam.[9]
Pretraga i numeracija. Mnogi problemi (kao što je igranje šaha) mogu biti modelovani kao problemi grafa. Algoritam pretraživanja grafa daje pravila kretanja kroz graf i koristan je baš za ovakve probleme. Ova kategorija obuhvata i algoritme pretraživanja i povratka kroz stablo odlučivanja (bektreking).[10]
Heuristički algoritmi i algoritmi slučajnosti ne odgovaraju u potpunosti strogoj definiciji algoritma
Algoritmi slučajnosti prave u nekim situacijama slučajan (ili pseudo slučajan) izbor; za neke probleme se stvarno može dokazati da se do najbržeg rešenja može doći samo uvođenjem izvesnog stepena slučajnosti.
Genetički algoritam pokušava da nađe rešenje problema imitirajući biološki evolucioni proces, koji u nizu slučajnih mutacija daje uzastopne generacije 'rešenja'. Tako računar simulira razmnožavanje i 'preživljavanje najprilagođenijih'. U genetičko programiranje je ovaj pristup proširen na algoritme.
Heuristički algoritmi su takvi algoritmi čija je osnovna namena nalaženje optimalnog rešenja, u stvari približnog rešenja, jer vreme ili memorijski prostor za izvršavanje algoritma za nalaženje tačnog najboljeg rešenja nije praktično moguće. Primer algoritama koji su ovakvog tipa su za lokalno pretraživanje, tabu pretraživanje ili algoritam simuliranog otpuštanja, vrsta heurističkog algoritma slučajnosti koji varira rešenje problema u slučajnim iznosima. Naziv simulacija otpuštanja aludira na metalurški proces suprotan kaljenju kada se metal greje pa sporo hladi radi otklanjanja defekta u materijalu. Namera slučajnog variranja je traženje što bližeg rešenja opštem optimalnom rešenju, a ne jednostavno lokalno optimalno rešenje. Ideja je da se amplituda slučajne veličine smanjuje kako se približavamo rešenju.
Podela prema implementaciji
Drugi način razvrstavanja je po implementaciji. Rekurzivni algoritam je takav algoritam koji poziva (referencira) sam sebe uzastopno dok se neki uslov ne ispuni, što je metoda primenjena kod funkcionalnog programiranja.[3] Algoritmi se obično razmatraju uz pretpostavku da u jednom trenutku izvršavaju jednu instrukciju jednog algoritma. Takvi računari se ponekad zovu serijski računari. Algoritmi osmišljeni za takvo okruženje se zovu serijski ili sekvencijalni algoritami, nasuprot paralelnim i distribuiranim algoritmima.[11] Paralelni algoritmi prednosti računarske arhitekture kod koje više procesora u istom trenu rešava isti problem, dok se kod distribuiranih algoritama koristi više računara povezanih u računarsku mrežu. Paralelni ili distribuirani algoritmi dele problem u više simetrični ili asimetričnih potproblema i kasnije sastavljaju rezulata. Za ove algoritme je pored procesorskih ciklusa je važna brzina komunikacije između procesora.
Oblasti imaju težnju da se preklapaju jedni sa drugima, a napredak algoritma u jednom polju može da unapredi algoritme u drugim, ponekad totalno nesrodnim, oblastima. Na primer, dinamičko programiranje je prvobitno namenjeno za optimizaciju potrošnju resursa u industriji, ali se danas koristi u rešavanje širokog polja problema u mnogim poljima.[12]
Podela prema složenosti
U teoriji složenosti, što nije isto što i teorija izračunljivosti, se izučava problematika složenosti, kompleksnosti, algoritma, u smislu zauzimanja resursa, a to su prostor (količina zauzete memorije) i vreme (količina potrošenog vremena procesora). Složenost je funkcija veličine ulaznih podataka. Algoritmi se prave za rešenje opšteg problema, bez obzira na veličinu ulaza, ali sa druge strane razne ulazne veličine izazivaju da programi troše razne količine resursa.
Vremenska složenost algoritma se iskazuje kao broj elementarnih koraka za obavljanje algoritma, što je zavisno od veličine ulaza, a koja može biti izražena u bitovima ili nekim sličnim merilom. Ako kažemo da je algoritam (A) uređivanja niza od n elemenata problem vremenske složenosti n², znači da dvostruko veći broj elemenata zahteva četiri puta više vremena za uređivanje. Ako je, pak drugi algoritam (B) malo pažljivije napisan i brži je dvostruko, on će raditi dvostruko brže za bilo koju veličinu niza. Međutim, ako se programer namuči i osmisli suštinski drugačiji algoritam (C) za uređivanje, on stvarno može biti reda složenosti n·log(n). Algoritmi (A) i (B) su iste složenosti, jer se u notaciji sa velikim O obeležavaju sa O(n²), a u govoru se zovu 'algoritmi kvadratne složenosti', dok je algoritam (C) 'algoritam složenosti n·log(n)'. Zaključak: algoritam (C) je najbolji sa stanovišta korišćenja vremena za velike setove ulaznih podataka.
Prostorna složenost se na isti način odnosi na funkciju zavisnosti zauzimanja memorijskog prostora u zavisnosti od veličine ulaza. Dešava se da je pronalaženje algoritma manje vremenske složenosti vezano sa povećanjem prostorne složenosti. Obično se algoritmi dele na one logaritamske složenosti, linearne, kvadratne i uopšteno polinomijalne složenosti, kao i one najzahtevnije, eksponencijalne složenosti.
Podela prema izračunljivosti
Algortime je moguće klasifikovati i prema izračunljivosti. Ovo se obično radi tako što se razmatraju klase algoritama što omogućava smanjenje vremenskih i memorijskih resursa koji se koriste u izračunavanju. Na primer, klasa rekurzivnih algoritama uključuje algoritme za sve funkcije koje se mogu izračunati pomoću Tjurnigove mašine.
Dokaz ispravnosti
Dokaz ispravnosti, korektnosti, algoritma je teoretski matematički postupak dokaza teoreme predikatskim računom.[13] Algoritam se izražava logičkim izrazima, definiše se invarijanta - izraz čija vrednost ostaje nepromenjena sve vreme rada algoritma - i dokazuje da izraz koji je važio pre početka važi i po završetku obrade. Potpun dokaz ispravnosti podrazumeva još i dokaz da će se algoritam završiti u konačnom vremenu, međutim to ume biti komplikovanije od prvog dela.
Ovakav, teoretski dokaz ispravnosti je kompleksna procedura.
Primer računarskog algoritma
Ovde je naveden jedan od najjednostavnijih algoritama i analizirani u koracima od predstavljanja problema, analize problema, definisanja algoritma i analize ispravnosti.
Iskaz problema
Prvo se problem iskazuje prirodnim jezikom, na razumljiv i nedvosmislen način:
Naći najveći broj u datom, neuređenom nizu brojeva.
Razrada
Rešenje zahteva ispitivanje svakog broja iz niza, ali svega jednom. Iz ovoga sledi jednostavan predlog algoritma izražen prirodnim jezikom:
Pogledaj svaki element u nizu. Ako je veći od bilo kog do sada viđenog, zabeleži ga.
Poslednji zabeležen broj je najveći u nizu kada se postupak završi.
Dijagrami
Uobičajen način pristupanja kreiranju algoritma je crtanjem dijagrama. Postoji više vrsta dijagrama.
Najpopularniji i najrasprostranjeniji je standardni dijagram toka kada se tok prati po pravcu kretanja strelica (slika levo). U pravougaonike se upisuju kratki opisi operacija i poslova, a u rombove i izdužene šestougaonika uslovi za grananje.
Ovde je algoritam prikazan u oba oblika. Desni dijagram izgleda manji i kompaktniji, ali je levi ipak pregledniji. Međutim, standardni dijagram omogućuje da se kontrola iz bilo koje tačke prenese u proizvoljnu tačku, pa i u unutrašnjost petlje. Tako se ruši strukturiranost programa i predstavlja uvod u „špageti programiranje“, što je osnovni pokazatelj lošeg programiranja.
Vizuelizacija programskog toka i toka podataka su izuzetno korisni za razvoj i razradu algoritma. Objektno orijentisano programiranje je uvelo nove pojmove i forme i u analizu i u projektovanje, a više vrsta dijagrama se koristi u procesu koji se naziva unifikovano modelovanje za koje je razvijen i standardizovan UML (Objedinjeni jezik za modelovanje).
Pseudokod algoritma
Zapis ovog algoritma je niže dat u obliku pseudokoda koji je više formalan od prirodnog jezika ili grafičkih dijagrama, a pored prirodnog ima i elemente simboličkog, veštačkog, jezika:
Algoritam NajvećiBroj
Input: Ne-prazan niz brojeva L.
Output: najveći broj u nizu L.
najveći ← -∞
for eachbrojin niz L, doifbroj > najveći, thennajveći ← brojreturnnajveći
gde je ispis ključnih reči na engleskom pitanje dogovora. Moguće ih je napisati i na srpskom, ali se u računarskim krugovima celog sveta koristi engleski kao lingua franca informatičkog doba.
Objašnjenje pseudokoda
Na početku se opisuje prostor (memorijske lokacije) neophodne za rad. Sem ulaznih i izlaznih lokacija, ovde se definiše i opisuje privremeni prostor koji predstavlja unutrašnje stanje. Konkretno, ovde reči Input i Output označavaju prostor koji zauzimaju brojevi, a posebno se rečju Input naglašava da je to ulazni podatak te da je poznat u vreme početka rada algoritma, a rečju Output da će tu biti smešten izlazni podatak i da će on biti poznat tek po završetku rada algoritma.
U drugom delu sledi ključni deo algoritma koji se često u kolokvijalnom razgovoru zove algoritmom. On se sastoji od nabrajanja konstrukcija koje opisuju tok izvršavanja i uz primenu konvencija o predstavljanju operacija nad podacima. U našem primeru imamo:
"for each — in — do" je konstrukcija koja znači "za svaki — od — uradi" i predstavlja način za opis iteracije, višestrukog ponavljanja.
"if — then je način označavanja selekcije, pitalice. Izvestan niz instrukcija će se izvršiti uslovno, u zavisnosti od kriterijuma.
"←" je skraćenica za "dodeljuje se". Na primer, sa "najveći ← broj", znači da je najveći naziv za memorijski prostor u koji će biti iskopirana vrednost iz memorijskog prostora koji smo nazvali broj.
"return" završava algoritam i iza sebe ostavlja vrednost (u memorijskom prostoru kome je dat naziv najveći) kao izlaz.
Analiza ispravnosti
Detaljna analiza ispravnosti algoritma bi podrazumevala razmatranje svih, čak i skoro nemogućih situacija, što u ovom slučaju znači analiza rada algoritma u situaciji kada je
dat prazan niz brojeva,
u niz upisana i neka vrednost koja nije broj
Počinje se razmatranjem problema domena. To je oblast vrednosti koje može uzeti broj. Memorijski prostor promenljive najveći ne sme biti manji od veličine prostora za svaki broj iz niza L. Da se desilo sabiranje dva broja morala bi biti razmotrena situacija ako bi zbir izlazio van domena što bi izazvalo prekoračenje opsega. Ova vrsta provere je obavezna u svakoj analizi algoritma.
Sledeći obavezni korak je provera početne vrednosti, inicijalizacije. Ovo se odnosi na definisanje početnog unutrašnjeg stanja sistema. Teorijski početno stanje mora biti poznato, a praktično to znači sve promenljive moraju biti inicijalizovane. U našem slučaju to znači da memorijska lokacija sa nazivom najveći na početku izvršavanja ovog algoritma mora imati neku vrednost. Međutim, prva naredba najveći ← -∞ predstavlja veliki problem jer bi -∞ trebalo da izlazi van domena bilo kog ograničenog memorijskog prostora. Ovde se u implementaciji ovog algoritma pristupa izvesnom prilagođavanju realnim ograničenjima programskog jezika ili na drugi način zaobilazi doslovna implementacija beskonačnosti. Ovo pokazuje kako se naizgled potpuno ispravni i dobri algoritmi iz teoretskih remek-dela pretvaraju u programersku noćnu moru.
Formalna, matematička, analiza korektnosti bi značila postavljanje teoreme sa predikatskim formulama i dokaz o konačnosti izvršavanja algoritma. Veoma su retke situacije u kojima se to radi.
Analiza složenosti
Većina programera želi da zna koliko određenih resursa (vreme i prostor su najčešći slučaj) zauzima algoritam koji trenutno implementiraju. Razvijene su mnoge metode za analizu algoritma koje daju neku vrstu kvantitativnog odgovora. Na primer, algoritam iznad je vremenske kompleksnosti O(n), gde se ovakav oblik obeležavanja naziva notacija sa velikim O, a n je veličina niza. Sve vreme rada algoritam pamti samo jednu vrednost, najveću vrednost do sada. Stoga ovaj algoritam ima prostornu kompleksnost O(1). Treba primetiti da se veličina ulaza, prethodno datih podataka, ne računa kao prostor korišćen od algoritma.
Algoritam sa pravnog stanovišta
Algoritmi sami po sebi obično nisu podložni patentiranju. U Sjedinjenim Američkim Državama se zahtev/postupak koji se sastoji isključivo od prostih manipulacija apstraktnih koncepata, brojeva ili signala ne smatra „procesom“ (USPTO 2006) zbog čega algoritmi ne podležu patentiranju (primer Gottschalk_v._Benson). Međutim, praktične primene algorimata u nekim slučajevima jesu podložne patentiranju. Na primer, u slučaju Diamond v. Diehr, za primenu jednostavnog algoritma za korišćenje povratne sprege kao ispomoći pri „lečenju“ sintetičke gume je odlučeno da jeste podložna patentu. Patentiranje softvera je veoma kontroverzno a neki patentni koji uključuju algoritme su žestoko kritikovani, naročito oni koji se tiču algoritama za kompresiju podataka, kao što je naprimer patent nad Lempel-Zev-Velč (Lempel-Zev-Welch, LZW) algoritmom kompanije Unisys.
Takođe, u nekim nadležnostima postoje ograničenja koja se tiču izvoza određenih klasa računarskih algoritama (naprimer, ograničenja izvoza kriptografije).
Los Chasseurs d'Afrique, liderados por el General, despejando la artillería rusa de los Altos de Fedyukhin durante la batalla de Balaclava. Chasseurs d'Afrique durante la Batalla de Smala. Los Cazadores de África (en francés: Chasseurs d'Afrique eran un cuerpo de caballería ligera de chasseurs (cazadores) en el Armée d'Afrique francés (Ejército de África). Criados por primera vez en la década de 1830 por la caballería regular francesa destinada a Argelia, contaban con cinco regimien...
Ecoregion in Southeast Asia Peninsular Malaysian rain forestsKincin River in Endau-Rompin National ParkEcoregion territory (in purple)EcologyRealmIndomalayanBiometropical and subtropical moist broadleaf forestsBorders List Indochina mangrovesMyanmar coast mangrovesPeninsular Malaysian montane rain forestsPeninsular Malaysian peat swamp forestsTenasserim-South Thailand semi-evergreen rain forests GeographyArea124,564 km2 (48,094 sq mi)CountriesIndonesiaMalaysiaSingapore,Thailand...
Sumatera Utara Sumatera UtaraProvinsiTranskripsi bahasa daerah • Surat Batakᯘᯮᯔᯖ᯲ᯒ ᯥᯖᯒ • Abjad Jawiسوماترا اوتاراDari atas ke bawah, kiri ke kanan: Danau Toba, Istana Maimun, Gereja Velangkanni Medan, Ruma Bolon dan Tortor di Pulau Samosir, Candi Bahal, Fahombo, dan Gunung Sinabung. BenderaLambangMotto: Tekun berkarya, hidup sejahtera, mulia berbudayaPetaNegara IndonesiaDasar hukum pendirianUU No. 10 Tahun 1948UU No. 24 Tah...
Chirigota is a genre of Spanish choral folksong originating in the Province of Cádiz.[1] The songs are satirical in nature and are performed predominantly in the streets by costumed performers during the annual two week carnival.[2][3] It has been described as a vehicle for gossip and public comment, especially of a political or moral, and sometimes prurient, nature.[1] Suppressed during the Francoist State until 1948, along with carnival in general, there has...
Science museum in Bristol, EnglandExploratoryBrunel's original Great Western station building (pictured in 1994), former home of the ExploratoryTemple Meads, BristolEstablished1987Dissolved14 September 1999LocationBristol, EnglandCoordinates51°26′56″N 2°35′01″W / 51.4489°N 2.5835°W / 51.4489; -2.5835TypeScience museumVisitors200,000 a yearDirectorIann Barron Executive trustee The Exploratory Hands-on Science Centre was a science museum in Bristol, England. ...
Village in Srebrenica, Bosnia and HerzegovinaSkelani СкеланиVillageExcavated Roman ruins in SkelaniSkelaniShow map of Republika SrpskaSkelaniShow map of Bosnia and HerzegovinaCoordinates: 43°58′31″N 19°32′08″E / 43.97528°N 19.53556°E / 43.97528; 19.53556Country Bosnia and HerzegovinaMunicipalitySrebrenicaPopulation (2013) • Total893 [1]Time zoneUTC+1 (CET) • Summer (DST)UTC+2 (CEST) Skelani BiH border crossin...
Indian chess player Vasanti Khadilkar UnniCountryIndiaBorn (1961-04-01) 1 April 1961 (age 62)TitleWoman International MasterFIDE rating2120 [inactive]Peak rating2135 (January 1990)[1][2] Vasanti Khadilkar Unni (Marathi: वासंती खाडिलकर उन्नी; born 1 April 1961) is an Indian chess player holding the title of Woman International Master (WIM). She won in 1974 the inaugural Indian Women's Championship.[3] The Khaldikar sist...
Species of wild sheep native to the Himalayas Blue Sheep redirects here. For the blue public house named the Blue Sheep, see pubs and inns in Grantham. Naur redirects here. For the Danish computer scientist, see Peter Naur. Bharal Male bharal in Spiti Valley Female bharal in North Sikkim Conservation status Least Concern (IUCN 3.1)[1] Scientific classification Domain: Eukaryota Kingdom: Animalia Phylum: Chordata Class: Mammalia Order: Artiodactyla Family: Bovidae Subfamily: Capri...
American jewelry designer based in Palm Beach, Florida This article is an orphan, as no other articles link to it. Please introduce links to this page from related articles; try the Find link tool for suggestions. (September 2016) Stephanie KantisBornSt. Louis, MissouriEducationInterior Design & ArchitectureAlma materAmerican University in LondonFlorida International UniversityOccupationJewelry designerWebsitehttp://www.stephaniekantis.com Stephanie Kantis (born February 3, 1968, in ...
Moroccan footballer Mustapha Chadili Personal informationDate of birth (1973-02-14) February 14, 1973 (age 50)Place of birth Casablanca, MoroccoHeight 1.78 m (5 ft 10 in)Position(s) GoalkeeperSenior career*Years Team Apps (Gls)1992–1995 Olympique de Casablanca 1995–2005 Raja Casablanca 505 (0)2005–2009 Moghreb Tétouan 95 (0)2009–2011 FAR Rabat 11 (0)International career‡1998–2006 Morocco 3 (0) *Club domestic league appearances and goals, correct as of 20:33, 2...
Iranian football club This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Alvand Hamedan F.C. – news · newspapers · books · scholar · JSTOR (November 2013) (Learn how and when to remove this template message) Football clubAlvand HamedanFull nameAlvand Hamedan F.C.Nickname(s)New Pas (Pas Novin)Founded1972; 45 yea...
1985 film by S. A. Chandrasekhar Naan Sigappu ManithanFilm posterDirected byS. A. ChandrasekharScreenplay byS. A. ChandrasekharStory byShabd KumarProduced byA. Poorna Chandra RaoStarringRajinikanthK. BhagyarajAmbikaCinematographyM. KesavanEdited byP. R. Gautham RajuMusic byIlaiyaraajaProductioncompanyLakshmi ProductionsRelease date 12 April 1985 (1985-04-12) Running time147 minutesCountryIndiaLanguageTamil Naan Sigappu Manithan (transl. I am a Red Man) is a 1985 Indian Ta...
Hospital in Massachusetts, United StatesBoston Medical CenterBoston University Chobanian & Avedisian School of MedicineBoston City Hospital, 1903; one of two institutions merged in 1996 to form Boston Medical CenterGeographyLocationBoston, Massachusetts, United StatesCoordinates42°20′06″N 71°04′25″W / 42.3349°N 71.0735°W / 42.3349; -71.0735OrganizationCare systemPrivate, Medicare, MedicaidTypeTeachingAffiliated universityBoston University School of Medi...
Study of behavior of groups This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Social dynamics – news · newspapers · books · scholar · JSTOR (November 2010) (Learn how and when to remove this template message) Part of a series onSociology History Outline Index Key themes Society Globalization Human behavior Hum...
Matthias Jakob SchleidenLahir(1804-04-05)5 April 1804Hamburg, JermanMeninggal23 Juni 1881(1881-06-23) (umur 77)Frankfurt am Main, JermanKebangsaanJermanAlmamaterHeidelbergDikenal atasPenemu teori selKarier ilmiahBidangBotaniInstitusiUniversity of Jena, University of DorpatSingkatan penulis (botani)Schleid. Matthias Jakob Schleiden (5 April 1804 – 23 Juni 1881) adalah seorang ahli botani asal Jerman yang menjadi salah seorang penemu teori sel bersama dengan Theodor S...
Paghimo ni bot Lsjbot. Hypercodia Siyentipikinhong Pagklasipikar Kaginharian: Animalia Ka-ulo: Arthropoda Kasipak-ulo: Hexapoda Kahutong: Insecta Kahanay: Lepidoptera Kapunoang-banay: Noctuoidea Kabanay: Noctuidae Kahenera: Hypercodia Espesye: ' Siyentipikinhong Ngalan Hypercodia Kahenera sa mga alibangbang ang Hypercodia.[1] Ang Hypercodia sakop sa kabanay nga Noctuidae.[1] Ang kladogram matud sa Catalogue of Life mao[1]: Hypercodia Hypercodia disparalis Hyperco...
Part of a series on the History of Italy Early Prehistoric Italy Nuragic civilization (18th–3rd c. BC) Etruscan civilization (12th–6th c. BC) Magna Graecia (8th–3rd c. BC) Ancient Rome Kingdom (753 BC–509 BC) Republic (509 BC–27 BC) Roman expansion in Italy Roman Italy Populares and Optimates Empire (27 BC–286 AD) Western Empire (286 AD–476 AD) Praetorian prefecture of Italy Romano-Barbarian Kingdoms Odoacer's 476–493 Ostrogothic 493–553 V...
This is the talk page for discussing improvements to the Captain Marvel (film) article. This is not a forum for general discussion of the article's subject. Put new text under old text. Click here to start a new topic. New to Wikipedia? Welcome! Learn to edit; get help. Assume good faith Be polite and avoid personal attacks Be welcoming to newcomers Seek dispute resolution if needed Article policies Neutral point of view No original research Verifiability Find sources: Google (books · new...
2009 massively multiplayer online video game 2009 video gameHeroes of Three KingdomsDeveloper(s)Perfect WorldPublisher(s)Perfect WorldReleaseCN: November 16, 2009 NA: July 13, 2010Genre(s)Massively multiplayer online role-playing gameMode(s)Multiplayer Heroes of Three Kingdoms (simplified Chinese: 赤壁Online; traditional Chinese: 決戰!真三國) (also known as Chi Bi or Red Cliff in China,[1] and Legend of 3 Kingdoms in Indonesia)[2] is a massively multiplayer on...