Rekurzív algoritmusok

Slides:



Advertisements
Hasonló előadás
GRIN: Gráf alapú RDF index
Advertisements

 Árnyalási egyenlet  Saját emisszió  Adott irányú visszaverődés.
2D grafikus rendszerek Szirmay-Kalos László. 2D grafikus editor: GUI, use-case, dinamikus modell L L L R LD LU MouseLDown első pont MouseLDown második...
HIKGHB Németh Gábor LUF9NV Simon Attila. A programozás alapjai előadás Híradástechnikai Tanszék.
Benczúr Zsolt VBA gyorstalpaló Benczúr Zsolt
Bevezetés.  A számítógépes grafika inkrementális képszintézis algoritmusának hardver realizációja  Teljesítménykövetelmények:  Animáció: néhány nsec.
GPGPU labor I. OpenGL, Cg.
 Nincs szinkronizáció és kommunikáció  Csővezeték alkalmazása  Párhuzamosítás Proc 2Proc 1 Csővezeték Proc 1 Proc 21 Proc 22 Párhuzamosság.
GPGPU labor V. GPU ray tracing. Kezdeti teendők Tantárgy honlapja, GPU ray tracing A labor kiindulási alapjának letöltése (lab5_base.zip), kitömörítés.
Szélességi bejárás , 0.
7. előadás (2005. április 12.) Láncolt lista File kezelés 1.
5. előadás (2005. március 22.) Függvények definíciója, deklarációja, hívása Enumerációs adattípus 1.
Mérés és adatgyűjtés Kincses Zoltán, Mingesz Róbert, Vadai Gergely 10. Óra MA-DAQ – Műszer vezérlése November 12., 15. v
Ez a dokumentum az Európai Unió pénzügyi támogatásával valósult meg. A dokumentum tartalmáért teljes mértékben Szegedi Tudományegyetem vállalja a felelősséget,
Borland C/C++ mintapéldák fájlokra. 1. példa Írjon olyan programot,amely megnyit egy hw.txt fájlt és írja bele a Hello világ szöveget. Ez után zárja le.
Készítette: Pető László
Mesterséges neuronhálózatok
OPERÁCIÓKUTATÁS Kalmár János, 2012 Tartalom A nulla-egy LP megoldása Hátizsák feladat.
Determinisztikus véges automaták csukva nyitva m s kbsm csukva nyitva csukva nyitva csukvanyitva 1. Példa: Fotocellás ajtó s b m m= mindkét helyen k= kint.
Számoljuk meg rekurzív függvénnyel egy bináris fa leveleit!
C++ Alapok, első óra Elemi típusok Vezérlési szerkezetek
„Országos” feladat. Feladat: Egy tetszőleges, színes országokat tartalmazó térképen akar eljutni egy kommandós csapat egy országból egy másikba. Viszont.
Dijkstra algoritmusa Egy csúcsból a többibe vezető legkisebb költségű út megkeresése Az algoritmus működésének leírása és bemutatása LL.
HTML oldal felépítése Készítette: Pataki Arnold
Számítógépes grafika 3. gyakorlat.
Web-grafika (VRML) 1. gyakorlat Nyitrai Erika Varga Balázs.
Alapszint 2.  Készíts makrót, ami a kijelölt cellákat egybenyitja, a tartalmat vízszintesen és függőlegesen középre igazítja és 12 pontos betűméretűre.
Turbo Pascal 11..
Sims-1 This chapter is about Simson line. The question arises in connection with orthic triangles: from which points should we draw perpendicular lines.
1 AAO folytatás ++ Csink László. 2 Rekurzív bináris keresés (rendezett tömbben) public static int binker(int[] tomb, int value, int low, int high) public.
Fraktálok és csempézések
Rendering pipeline Ogre3D
 MipMap  glTexImage2D(GL_TEXTURE_2D, level, GL_RGBA32F,...);  glFramebufferTexture2D(GL_FRAMEBUFFER,..., TexID, mipLevel);
 Kvantált kép fényesség értékei: G [ 0, Gmax ]  G fényességű pontok száma: P(G)
GPGPU labor III. Iteratív algoritmusok. Kezdeti teendők Tantárgy honlapja, Iteratív algoritmusok A labor kiindulási alapjának letöltése (lab3base.zip),
GPGPU labor II. GPU mint vektor processzor. Kezdeti teendők Tantárgy honlapja, Bevezetés – Alap könyvtárak letöltése Tantárgy honlapja, GPU mint vektor.
Delphi Készítette: Rummel Szabolcs Elérhetőség:
Fák.
A Dijkstra algoritmus.
Számítógépes grafika DirectX 5. gyakorlat. Emlékeztető Háromdimenziós alapok befejezése Textúrázás.
OpenGL 4 shaderek, GLSL Valasek Gábor
Web-grafika II (SVG) 9. gyakorlat Kereszty Gábor.
1 Szélességi Bejárás Györgyi Tamás – GYTNAAI.ELTE 2007 Március 22 Algoritmusok És Adatszerkezetek 2 Gráfalgoritmus S b a d e f h g c.
Mélységi bejárás Az algoritmus elve: Egy kezdőpontból kiindulva addig megyünk egy él mentén, ameddig el nem jutunk egy olyan csúcsba, amelyből már nem.
Objektum orientált programozás
Gazdasági informatikus - Szövegszerkesztés 1 Hosszú dokumentumok kezelése.
Útkeresések.
SZÉLESSÉGI BEJÁRÁS Pap Imre DVX468. A bejárás Meglátogatjuk az első csúcsot, majd ennek a csúcsnak az összes szomszédját. Aztán ezen szomszédok összes.
Diszjunkt halmazok adatszerkezete A diszjunkt halmaz adatszerkezet diszjunkt dinamikus halmazok S={S 1,…,S n } halmaza. Egy halmazt egy képviselője azonosít.
Web-grafika (VRML) 1. gyakorlat Nyitrai Erika Varga Balázs alapján Kereszty Gábor.
Excel programozás (makró)
Számítógépes Grafika OpenGL 4 shaderek, GLSL. OpenGL 4 A következő programozható fázisok vannak a 4.x-es OpenGL-ben: Vertex shader Tesselation control.
Képek, képfeldolgozás Szirmay-Kalos László.
1.Kanonikus felügyelt tanulási feladat definíciója (5p) 1.Input, output (1p) 2.Paraméterek (1p) 3.Hipotézisfüggvény (1p) 4.Hibafüggvény/költségfüggvény.
A Dijkstra algoritmus.
Script nyelvek előadás
A grafikus hardware programozása
OpenGL 2. gyakorlat Valasek Gábor
Vizualizáció és képszintézis
Mediánok és rendezett minták
OpenGL IV.
Neumann János Informatikai Kar
Mesterséges intelligencia
OpenGL III.
OpenGL II.
Táblázatok A táblázat megadása a tag használatával lehetséges. A és tageken belül: a és tagek között adhatjuk meg a.
Depth First Search Backtracking
Készítette: Sinkovics Ferenc
Gráfalgoritmusok G=(V,E) gráf ábrázolása
Készítette: Sinkovics Ferenc
Előadás másolata:

Rekurzív algoritmusok

Labirintus fő lépések Véletlen szám generálás Labirintus felépítése 1x1-es felbontástól a teljes méretig Labirintusban egy kiindulási pontból az összes pontba legrövidebb út keresése Egy végállomásból elindulva visszafejteni a legrövidebb utat a kiindulási állapotig

Véletlenszám Fraktál zaj + =

Véletlen szám generálás 2D zaj, 4 színcsatornában 4 független véletlen szám tárolható MipMap glTexImage2D(GL_TEXTURE_2D, level, GL_RGBA32F, ...); glFramebufferTexture2D(GL_FRAMEBUFFER, ..., TexID, mipLevel); Brown mozgás: R kezdeti értéke 0.5 noiseScale kezdeti értéke 0.5 minden mipmap szintnél noiseScale *= 0.5 vec4 R = textureLod(inputTex2, fTexCoord, level + 1); //előző szint vec4 rand = texelFetch(noiseTex, ivec2(mod(coord + ivec2(noiseSeed, 0), ivec2(16))), 0); R = R + noiseScale * (rand - 0.5);

Labirintus generálás Cella: 4 szomszéd, 4 csatorna Ha vezet út a szomszéd felé akkor 1, egyébként 0 1 2 3 V(R,G,B,A) = (0,1,1,1)

Fő lépések Rekurzív tovább osztás Szülő cella értékeit megörököljük Közbülső falakat töröljük Az átjárók egyik felét lezárjuk Az új 4 cellát egy irányban felosztjuk (4 lehetséges irányból 1-et véletlenszerűen választunk)

Átjárók problémája Probléma: Két szomszédos cellacsoport másképp dönt az átjáró lezárásáról (kommunikáció kellene a szálak között) Legegyszerűbb megoldás: Mindig ugyanazt választjuk, pl. bal oldalt és felül tartjuk meg az átjárókat. Ismételhető lesz.

Logikai operátorok Cellák indexelése (index): Irányok indexelése (csatornák): Halmaz operátorok: A * B: metszet uni(A, B) : unió 2 3 1 1 2 3 Maszk (D), mindig bal oldalon és felül tartjuk meg az átjárókat (melyik irányban kell átjárót lezárni): Örököljünk a szülőtől, de zárjuk le a kijáratok felét: V = inv(P * D[index]) * P; Maszk (M), mely irányokban van szomszédja „befele”: (1,0,0,1) (0,0,1,1) (1,1,0,0) (0,1,1,0) (0,0,0,0) (0,1,0,0) (0,0,1,0) (1,0,0,1) Közbülső falak eltüntetése V = uni(V, M[index]);

Cella felosztása vec4 W1; // függőleges v. vízszintes vec4 W2; // bal/lenn - jobb/fenn if(R.x < 0.25) { // right W1 = vec4(1,0,1,0); W2 = vec4(M[index].x == 1); } else if(R.x < 0.5){ // top W1 = vec4(0,1,0,1); W2 = vec4(M[index].y == 1); else if(R.x < 0.75) { // left W2 = vec4(M[index].z == 1); else{ // bottom W2 = vec4(M[index].w == 1); V = V * uni(uni(W1, W2), inv(M[index])); Fontos, hogy a négy cella ugyanazt a döntést hozza a felosztásról. Az R véletlen számot az előző szintről olvassuk: vec4 R = textureLod(inputTex2, fTexCoord, level + 1);

Labirintus felépítése

Geometria shader Opcionális lépcső Primitíveken dolgozik Bemenet: egy primitív Kimenet: egy vagy több A shader kimenete visszaköthető Vertex Shader Geometria Shader Fragmens Shader

Geometria shader Bementi primitívek Pont Szakasz Háromszög GL_POINTS Szakasz GL_LINES, GL_LINE_STRIP, GL_LINE_LOOP Háromszög GL_TRIANGLES, GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN Adjacencia információ glProgramParameteri(shader, GL_GEOMETRY_INPUT_TYPE, tipus);

Geometria shader Adjacencia Szakasz Háromszög GL_LINES_ADJACENCY GL_LINE_STRIP_ADJACENCY Háromszög GL_TRIANGLES_ADJACENCY GL_TRIANGLE_STRIP_ADJACENCY 1 2 3 4 5 6 7 8 1 2 4 5 3 6 1 2 3 4 5 6

Geometria shader Kimeneti primitívek Pont Szakasz Háromszög GL_POINTS GL_LINE_STRIP Háromszög glProgramParameteri(shader, GL_GEOMETRY_OUTPUT_TYPE, tipus); glProgramParameteri(shader, GL_GEOMETRY_VERTICES_OUT, darab);

Geometria shader Speciális bemeneti változók gl_ClipDistance[] : vágási információk gl_PointSize[] : vertex méret a vertex shaderből gl_Position : vertex pozíció gl_PrimitiveIDIn : a feldolgozott primitív sorszáma Speciális kimeneti változók A bemeneti változók gl_Layer : melyik rétegbe tegye a fragmens shader (pl. cube map rendereléshez)

Geometria shader Primitívek generálása Vertex információk beállítása Vertex lezárása Primitív lezárása EmitVertex(); EndPrimitive();

Geometria shader Példa #version 130 #extension GL_EXT_geometry_shader4 : enable in vec2 vTexCoord[]; out vec2 fTexCoord; void main(void){ for(int i=0; i < gl_VerticesIn; ++i){ gl_Position = gl_PositionIn[i]; fTexCoord = vTexCoord[i]; EmitVertex(); } EndPrimitive(); gl_Position = gl_PositionIn[i].yxzw; fTexCoord = vTexCoord[i].yx;

Geometria shader Primitívek újrafeldolgozása Transform feedback Feedback mód Megadja a használható primitíveket Feedback buffer kiválasztása Tulajdonságok kiválasztása Vertex Shader glBeginTransformFeedback(mode); // glDrawArrays(...); glEndTransformFeedback(); Feedback Buffer Geometria Shader glBindBufferBase(GL_TRANSFORM_FEEDBACK_BUFFER, index, buffer); Fragmens Shader glTransformFeedbackVaryings(...);

Geometria shader Információ a geometria shader működéséről Primitive query Query mód GL_PRIMITIVES_GENERATED Mennyi primitívet állított elő a geometria shader GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN Mennyi primitívet tudott a feedback bufferbe írni a shader GLuint outputQuery; glGenQueries(1, &outputQuery); glBeginQuery(mode, outputQuery); ... glEndQuery(mode);

Geometria shader Információ a geometria shader működéséről A Query eredményének lekérdezése GLuint outPointCount = 0; GLuint succeded = 0; while(!succeded){ glGetQueryObjectiv(outputQuery, GL_QUERY_RESULT_AVAILABLE, &succeded); } glGetQueryObjectiv(outputQuery, GL_QUERY_RESULT, &outPointCount);

Labirintus bejárása Elágazó folyamat, szélességi gráf bejárás

Legrövidebb út, fő lépések A bejárás során egy cellának egy pont primitív fog megfelelni V(x,y,d,n) x,y: cella index d: eddig megtalált legrövidebb úthossz n: a legrövidebb úton melyik szomszédból jutottunk ide (irány index) A legrövidebb úthosszat egy textúrában tároljuk Textúra inicializálása (0,0,0,0) A start cellából indulva azonosítjuk a szomszédjait Ha az adott szomszédba vezet út, megvizsgáljuk, hogy az ahhoz tartozó eddig megtalált legrövidebb úthossz hosszabb-e a csomópontunkhoz tartozó (d + 1) értéknél (vagy még nem is jártunk ebben a cellában) Ha igen, a cella értékét frissíteni kell, és szomszédait meg kell látogatni (előző lépés ismétlése)

Legrövidebb út problémák Elágazás: egy pontból több pont lesz megoldás: Geometry Shader Rekurzió: a szomszédokra újra végre kell hajtani a feladatot megoldás: Vertex Transform Feedback

Legrövidebb út keresés ... vec2 windowSize = textureSize(inputTex2, 0); vec4 vertexdata = gl_PositionIn[0]; //read neighbour information vec4 neighInf = texelFetch(inputTex1, ivec2(vertexdata.xy), 0); vec4 storedCelldata = texelFetch(inputTex2, ivec2(vertexdata.xy), 0); if(storedCelldata.z > vertexdata.z || storedCelldata.w == 0){ celldata = vertexdata; vec2 wCoord = vertexdata.xy / windowSize * 2.0 - 1.0; gl_Position = vec4(wCoord,0,1); EmitVertex(); }

Legrövidebb út keresés //emit neighbours if connected //right if(neighInf.r == 1){ celldata = vertexdata; celldata.x += 1; celldata.z += 1; celldata.w = 3; storedCelldata = texelFetch(inputTex2, ivec2(celldata.xy), 0); if((storedCelldata.z > celldata.z || storedCelldata.w == 0) && celldata.x < windowSize.x){ vec2 wCoord = celldata.xy / windowSize * 2.0 - 1.0; gl_Position = vec4(wCoord,0,1); EmitVertex(); } ... EndPrimitive();

Legrövidebb út hossza

Legrövidebb út egy célcellába, bejárás Hasonló a feladat, csak nincs elágazás Célcellából indulunk (pontprimitív) Kiolvassuk, hogy melyik cellából jutottunk ide Ez a cella lesz az új pont primitív (ki is rajzoljuk a képernyőre, hogy lássuk) Addig folytatjuk, míg el nem jutunk a start cellába (ahol az úthossz 0)

Labirintus bejárása #version 130 #extension GL_EXT_geometry_shader4 : enable uniform sampler2D inputTex1; //cell information out vec4 celldata; void main(void){ vec2 windowSize = textureSize(inputTex1, 0); vec4 vertexdata = gl_PositionIn[0]; vec4 storedCelldata = texelFetch(inputTex1, ivec2(vertexdata.xy), 0); if(storedCelldata.z == 0) return; if(storedCelldata.w == 1){ // right celldata = vertexdata; celldata.x += 1; vec2 wCoord = (celldata.xy * 2 + 1) / (windowSize * 2 + 1) * 2.0 - 1.0; gl_Position = vec4(wCoord,0,1); EmitVertex(); } ... EndPrimitive();

Kijutottunk a labirintusból!!!!!!!