2013 Martin Kačer. BI-EP2 Efektivní programování 2

Podobné dokumenty
BI-EP2 Efektivní programování 2

5. Dynamické programování

Digitální učební materiál

C++ Akademie SH. 2. Prom nné, podmínky, cykly, funkce, rekurze, operátory. Michal Kvasni ka. 20. b ezna Za áte níci C++

ALG 04. Zásobník Fronta Operace Enqueue, Dequeue, Front, Empty... Cyklická implementace fronty. Průchod stromem do šířky

BI-EP1 Efektivní programování 1

Bubble sort. příklad. Shaker sort

Algoritmizace a programování

Programování v C++ 1, 1. cvičení

Šablony, kontejnery a iterátory

Šablony, kontejnery a iterátory

4. Rekurze. BI-EP1 Efektivní programování Martin Kačer

Jazyk C++, některá rozšíření oproti C

Programování v C++ 2, 8. cvičení

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. October 17, 2016

1. Úvodní informace. BI-EP1 Efektivní programování Martin Kačer

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

KTE / ZPE Informační technologie

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí

2. Mřížky / Záplavové vyplňování

Strukturované typy a ukazatele. Úvod do programování 1 Tomáš Kühr

NPRG030 Programování I, 2017/18 1 / :22:16

Abstraktní datové typy

Algoritmizace a programování. Ak. rok 2012/2013 vbp 1. ze 44

PB přednáška (26. října 2015)

Abstraktní třídy, polymorfní struktury

Vstupní a vstupní proudy v C++

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Třídy a objekty -příklady

Základní stavební prvky algoritmu

PB161 Programování v jazyce C++ Přednáška 3

Rekurzivní algoritmy

Úvod do programování v jazyce Java

Digitální učební materiál

NEJKRATŠÍ CESTY I. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze

awk programovatelný filtr

Digitální učební materiál

Řazení. Uspořádat množinu prvků obsahujících klíč podle definovaného kriteria.

Fronta (Queue) Úvod do programování. Fronta implementace. Fronta implementace pomocí pole 1/4. Fronta implementace pomocí pole 3/4

ZPRO v "C" Ing. Vít Hanousek. verze 0.3

Preprocesor. Karel Richta a kol. katedra počítačů FEL ČVUT v Praze. Karel Richta, Martin Hořeňovský, Aleš Hrabalík, 2016

Čipové karty Lekařská informatika

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

Digitální učební materiál

Programování v C++ 1, 14. cvičení

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. November 16, 2017

DobSort. Úvod do programování. DobSort Implementace 1/3. DobSort Implementace 2/3. DobSort - Příklad. DobSort Implementace 3/3


Programovací jazyk C(++) C++ area->vm_mm->locked_vm -= len >> PAGE_SHIFT;

8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek

Řídící struktury, if, while, switch

DTP Základy programování Úvod do předmětu

Cvičení 9 - Monitory. monitor m; var proměnné... procedure p; begin... end; begin inicializace; end;

Cykly. Základy programování 1 Martin Kauer (Tomáš Kühr)

Objektov orientované programování. C++ Akademie SH. 7. Objektov orientované programování. Michal Kvasni ka. Za áte níci C++ 2.

Práce s polem a pamětí

5 Rekurze a zásobník. Rekurzivní volání metody


Operační systémy. Cvičení 4: Programování v C pod Unixem

Generování vnitřní reprezentace programu

PB161 Programování v jazyce C++ Přednáška 3

Stromy. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta a kol.

Rozklad problému na podproblémy, rekurze

Stromy. Příklady. Rekurzivní datové struktury. Základní pojmy

Příklad aplikace Klient/Server s Boss/Worker modelem (informativní)

Mělká a hluboká kopie

Jazyk C++ I. Šablony


6. Tahy / Kostry / Nejkratší cesty

PES lib (C + PASCAL) KNIHOVNY KOMUNIKAÈNÍCH FUNKCÍ 03/ PESlib KOMUNIKAČNÍ KNIHOVNY C, PASCAL 03/ stran 1

Řídící struktury, if, while, switch

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. October 23, 2016

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Úvod do programování - Java. Cvičení č.4

Příkazy if, while, do-while, for, switch

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 12.

Hledání k-tého nejmenšího prvku

NPRG030 Programování I, 2018/19 1 / :03:07

Funkce, intuitivní chápání složitosti

PB161 Programování v C++ Proudy pro standardní zařízení Souborové proudy Paměťové proudy Manipulátory

Martin Flusser. November 1, 2016


18. února 2015, Brno Připravil: David Procházka. Programovací jazyk C++

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

Programování v C++ 1, 17. cvičení

1. Téma 12 - Textové soubory a výjimky

for (int i = 0; i < sizeof(hodnoty) / sizeof(int); i++) { cout<<hodonoty[i]<< endl; } cin.get(); return 0; }

Rozklad na prvočinitele. 3. prosince 2010

IB111 Úvod do programování skrze Python

Standardní algoritmy vyhledávací.

A4B33ALG 2010/05 ALG 07. Selection sort (Select sort) Insertion sort (Insert sort) Bubble sort deprecated. Quicksort.

Vysoké učení technické v Brně, Fakulta elektrotechniky a komunikačních technologií Ústav automatizace a měřící techniky. Semestrální projekt

Digitální učební materiál

Struktury a dynamické proměnné

Sčítačky Válcový posouvač. Demonstrační cvičení 6

PROHLEDÁVÁNÍ GRAFŮ. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze

Regulární výrazy. Filtry grep, sed a awk.

Dekompozice problému, rekurze

Začínáme vážně programovat. Řídící struktury Přetypování Vstupně výstupní operace Vlastní tvorba programů

Transkript:

BI-EP2 Efektivní programování 2 LS 2012/2013 Ing. Martin Kačer, Ph.D. 2013 Martin Kačer Katedra teoretické informatiky Fakulta informačních technologií České vysoké učení technické v Praze Vznik předmětu byl podpořen FRVŠ v rámci projektu 2581/2011

2

3

int array[maxlen][maxlen]; int solve() { int res=0; for(int i=0; i<first.length(); i++) { for(int j=0; j<second.length(); j++) { if(first[i]==second[j]) { array[i+1][j+1]=array[i][j]+1; res=max(res,array[i+1][j+1]); else array[i+1][j+1] = 0; return res; 4

int array [2][10010]; for (int i = 1; i <= len1; ++i) { for (int j = 1; j <= len2; ++j) { if (s1[i-1]==s2[j-1]) array[i%2][j] =1+array[1-i%2][j-1]; else array[i%2][j]=0; if (array[i%2][j]>max) max=array[i%2][j]; 5

for (unsigned i=0; i<strlen(str1)-1; i++) { occurence[(int)str1[i]].push_back(i); int longest = 0; for(i=0; i<strlen(str2)-1; i++) { if (i+longest >= strlen(str2)) break; for (j=0; j<occurence[(int)str2[i]].size(); j++) { unsigned pos = occurence[(int)str2[i]][j]; if (pos+longest >= strlen(str1)) break; for (int k=strlen(str2)-i-1; k>longest; k--) { if (strncmp(str2+i, str1+pos, k) == 0) { longest = k; break; => O(n 3 ) 6

for(int a = 0; a < len1; a++) { for(int i = a, j = 0; i < len1 && j < len2; i += move, j += move) { if(str1[i] == str2[j]) { match = 1; for(int i2 = i, j2 = j; i2 > 0 && j2 > 0; ) { i2--; j2--; if(str1[i2] == str2[j2]) match++; else break; for(int i2 = i, j2 = j; i2 < len1-1 && j2 < len2-1; ) { i2++; j2++; if(str1[i2] == str2[j2]) match++; else break; if(match >= move) move = match+1; for(int a = 1; a < len2; a++) { for(int i = 0, j = a; i < len1 && j < len2; i += move, j += move) { if(str1[i] == str2[j]) { match = 1; for(int i2 = i, j2 = j; i2 > 0 && j2 > 0; ) { i2--; j2--; if(str1[i2] == str2[j2]) match++; else break; for(int i2 = i, j2 = j; i2 < len1-1 && j2 < len2-1; ) { i2++; j2++; if(str1[i2] == str2[j2]) match++; else break; if(match >= move) move = match+1; 7

int findlongest(string &longer, string &shorter); if (first.length()>second.length()) { findlongest(first, second); else { findlongest(second, first); 8

for ( int i = 0; i < l1 + l2; i++ ) { int b1 = i; int b2 = l2-1; while ( b1 >= 0 && b2 >= 0 ) { if ( b1 < l1 ) { if ( s1.charat(b1) == s2.charat(b2) ) { samelen++; max = Math.max( samelen, max ); else { samelen = 0; b1--; b2--; samelen = 0; 9

10

void DFS(list<pair<int,int> > & stck, int num) { visited[num]=true; l++; for(int i=0;i<neighb[num].size();i++) { if(! visited[ neighb[num][i] ]) DFS(stck, neighb[num][i]); l++; stck.push_front(make_pair(l,num)); 11

void quicksort(int *A, int low, int high) { int idxr = high, idxl = low, pivot = A[low]; do { while (idxl <= high && A[idxL] < pivot) idxl++; while (idxr >= low && A[idxR] > pivot) idxr--; if (idxl <= idxr) swap(a[idxl++],a[idxr--]); while (idxl <= idxr); if (low < idxr) quicksort(a,low,idxr); if (high > idxl) quicksort(a,idxl,high); return; quicksort(siblings[i],0,siblingscnt[i]-1); 12

while ( begin < end ) { qsort(queue+begin, end-begin,...); for ( i = 0; i < edgecnt[queue[begin]]; i++ ) { edgesin[matrix[i][queue[begin]]]--; if (edgesin[matrix[i][queue[begin]]]==0) queue[end++] = matrix[i][queue[begin]]; printf ( " %s", beverages[queue[begin++]].c_str() ); 13

while(1){ for(j = 0; j < n; j++){ if (!gin[j]){ printf(" %s", s[j]); gin[j] = -1; for(i = 0, i < gc[j]; i++){ gin[ gn[j][i] ]--; break; if (j==n) break; 14

for(int i = 0; i < n; i++){ if(is_root[i]){ dfs(graph, i, visited, node_order, t); for(int i = 0; i < n; i++){ int j = i; while(j > 0 && node_order[j - 1] > node_order[j] &&!neighbour_matrix[node_order[j - 1]] [node_order[j]]){ int tmp = node_order[j - 1]; node_order[j - 1] = node_order[j]; node_order[j] = tmp; j--; 15

fori(i,0,n) if(!edges[i]){ q.push(i); vis[i] = true; fori(j,0,n) if(g[i][j]) edges[j]--; break; int temp; while(!q.empty()){ temp = q.front(); q.pop(); cout << " " << mback[temp]; fori(i,0,n) if(!edges[i] &&!vis[i]){ vis[i] = true; q.push(i); fori(j,0,n) if(g[i][j]) edges[j]--; break; 16

while(qb!= qe) { b = q[qb++]; for(int i = 0; i < g2c[b]; i++) { b2 = g2[b][i]; gc[b2]--; for(int i = 0; i < n; i++) { if(gc[i] == 0) { q[qe++] = i; gc[i] = -1; break; 17

graph[tmp->successors[i]].incoming--; if(graph[tmp->successors[i]].incoming==0) { qu.push(&graph[tmp->successors[i]]); vs. if(--graph[tmp->successors[i]].incoming==0) { qu.push(&graph[tmp->successors[i]]); 18

19

scanf("%d %d", &a, &b); uzly[a]=1; uzly[b]=2; for(int i=1; i<pocethran; i++) { scanf("%d %d", &a, &b); if(uzly[a]==1) { if(uzly[b]!=1) uzly[b]=2; else { cout << "NO" << endl; break; if(uzly[a]==2) { if(uzly[b]!=2) uzly[b]=1; else { cout << "NO" << endl; break; cout << "YES" << endl; 20

while (qb!= qe) { u = q[qb++]; for (i = 0; i < gc[u]; i++) { v = gn[u][i]; if ((gstate[v]==open) && (gcolor[v]==gcolor[u])) { return 0; else if (gstate[v] == FRESH) { gstate[v] = OPEN; gcolor[v] = (gcolor[u] == BLACK? RED : BLACK); q[qe++] = v; gstate[u] = CLOSED; 21

for(i=0; i<e; i++) { int a, b; cin >> a >> b; if(!ver[a] &&!ver[b]) {ver[a] = 1; ver[b] = 2; else if(!ver[a]) ver[a] = (ver[b]==1?2:1); else if(!ver[b]) ver[b] = (ver[a]==1?2:1); else if(ver[a]==ver[b]) okay = false; 22

while(!toexpand.empty()) { toexpand.pop(); // arghh! vs. toexpand.clear(); 23

e a b b f a b b d d a a b b a a c d a b c 24

for (int i = 0; i < len; ++i) str[i+len] = str[i]; str[2*len] = '\0'; for (int i = 1; i < len; ++i) { min = str[*l.begin() + i]; for (list<int>::iterator it = l.begin(); it!= l.end(); ++it) {... 25

int i = 0, j = 1, k = 0; while (i < len && j < len && k < len) { if (str[i+k] == str[j+k]) ++k; if (str[i+k] > str[j+k]) { i = max(i+k+1, j+1); k = 0; else if (str[i+k] < str[j+k]) { j = max(j+k+1, i+1); k = 0; 26

step = 1; while ( startcnt > 1 ) { if ( step == len ) break; min = 127; for ( i = 0; i < startcnt; i++ ) if ( necklace[starts[i]+step] < min ) min = necklace[starts[i]+step]; pom = 0; for ( i = 0; i < startcnt; i++ ) if ( necklace[starts[i]+step] == min ) starts[pom++] = starts[i]; startcnt = pom; step++; 27