III. Adatszerkezetek és algoritmusok
|
|
- Ödön Budai
- 6 évvel ezelőtt
- Látták:
Átírás
1 III. Adatszerkezetek és algoritmusok 40
2 Bevezetés Adatszerkezet egyszerű vagy összetett alapadatok rendszerének matematikai, logikai modellje elég jó ahhoz, hogy tükrözze a valós kapcsolatokat elég egyszerű a kezeléshez Adatszerkezet típusok Tömbök lineáris egy vagy többdimenziós Kapcsolt listák a kapcsolati információ is adat Gráf adathalmaz adatpárok kapcsolattal Fa hurok nélküli gráf Verem LIFO (Last In First Out) Sor FIFO (First In First Out). Műveletek feldolgozási tevékenységek (algoritmusok) Bejárás - az elemek elérése Keresés - adott értéknek megfelelő elemek kiválasztása Beszúrás - új adat beillesztése Törlés - adatelem eltávolítása Rendezés - elemeket logikai sorrendbe Összeválogatás - különböző rendezett adathalmazokból új elemhalmaz kialakítása Bonyolultság futási idő vagy helyigény az adatok számának függvényében 41 B(n)
3 III.1 Lineáris tömbök N db. azonos típusú adatelem az elemekre egymást követő számokból álló indexhalmazzal hivatkozunk az elemeket egymást követő memóriahelyek tárolják az elemekhez bejárás nélkül férünk hozzá LB LB+1 UB-1 UB Lower Bound Upper Bound Hosszúság (Length) L = UB-LB+1 Indexelt alak A 1, A 2 A(1), A(2) A[1], A[2] Példa (C#) int [] DATA; DATA = new int [5]; DATA[0]=154 ; DATA[3]=-33 ; DATA[4]=1 ; III.1.1 Hozzáférés tömbelemhez - indexelés (C) int DATA[5]; LOC(DATA) LOC(DATA[4]) LOC(DATA[k])=LOC(DATA)+w * k ; w az alapadat tárolási mérete 42
4 III.1.2 Bejárás Ha L n elemű lineáris tömb, akkor minden eleme kiírható k számláló k=0 k<n k=k+1 PRINT L[k] Példa (C#) const int n = 6; int[] l; l = new int[n]; Random vletlen = new Random(); l[k] = vletlen.next(100); Console.WriteLine(l[k]); III Pl Példa (C) const int n = 10; int l[n]; l[k] = rand(); printf("%i\n",l[k]); 43
5 III.1.3 Rendezés Ha L n elemű lineáris tömb, akkor rendezett, ha L[0]< L[1]< L[2]<L[3]... L[n-1]<L[n] III Buborék rendezés k, p számláló, s segéd k=0 k<n k=k+1 p<n-1-k L[p]>L[p+1] s=l[p] L(p)=L[p+1] L[p+1]=s p=p+1 p=0 n ( n 1 ) Bonyolultság : 2 O( n ) 2 44
6 Példa (C#) const int n =6; int[] l; l = new int[n]; Random vletlen=new Random(); l[k] = vletlen.next(100); for (int p=0; p<n-1-k;p++){ if (l[p] > l[p + 1]) { int s = l[p]; l[p] = l[p + 1]; l[p + 1] = s; Console.WriteLine(l[k]); Példa (C) const int n = 6; int l[n]; l[k] = rand(); for (int p=0; p<n-1-k;p++) { if (l[p] > l[p + 1]) { int s = l[p]; l[p] = l[p + 1]; l[p + 1] = s; printf("%i\n",l[k]); 45
7 III Például
8 III.1.4 Keresés III Szekvenciális keresés KER-t keressük, az n elemű L elemei között, LOC a keresett pozíció L[n]=KER K=0 L[K] KER LOC=k Példa (C#) Bonyolultság : n 1 O( n ) k=k+1 const int n = 6; int[] l; l = new int[n+1]; Random vletlen = new Random(); l[k] = vletlen.next(10); Console.WriteLine("l[{0]={1", k, l[k]); int ker=5; l[n]=ker; int j = 0; while (l[j]!=ker) { j++; Console.WriteLine("Az 5 a {0.", j); III Pl Az 5 a 6. - nincs ilyen Példa (C) const int n = 10; int l[n+1]; l[k] = rand(); int ker=l[7]; l[n]=ker; int j = 0; while (l[j]!=ker) { j++; printf("az %i az %i.\n",l[7],j); 47
9 III Bináris keresés KER-t keressük, ha L sorbarendezett, Beg, End, Mid segédváltozók, LOC a keresett pozíció, (INT) az egészrész Beg=LB(L) End=UB(L) Mid=INT((Beg+End)/2) LOC=Mid End=Mid-1 Beg<End és L(Mid) KER L[Mid]=KER Mid=(INT)((Beg+End)/2) KER<L[Mid] LOC=Null Beg=Mid+1 Bonyolultság : A legalább szükséges összehasonlítások száma f(n), Minden összehasonlításkor feleződik a minta f ( n ) 2 n f ( n) log2 ( n) 1 48
10 Példa (C#) const int n = 10; int[] l; l = new int[n + 1]; Random vletlen = new Random(); l[k] = vletlen.next(10); Console.WriteLine("l[{0]={1", k, l[k]); Console.WriteLine("Sorbarakva"); Array.Sort(l); Console.WriteLine("l[{0]={1", k, l[k]); int beg = 0; int end = n - 1; int mid = (int)((beg + end) / 2); int ker = 5; while ((beg<end) && (l[mid]!=ker)) { if (ker < l[mid]) end=mid-1; else beg=mid+1; mid = (int)((beg + end) / 2); if (l[mid] == ker) Console.WriteLine("Az 5 az {0.",mid); else Console.WriteLine("Nincs 5"); Példa (C) const int n = 10; int l[n+1]; l[k] = rand(); printf("%i") for (int p=0; p<n-1-k;p++) { if (l[p] > l[p + 1]) { int s = l[p]; l[p] = l[p + 1]; l[p + 1] = s; int beg = 0; int end = n - 1; int mid = (int)((beg + end) / 2); int ker = l[7]; while ((beg<end) && (l[mid]!=ker)) { if (ker < l[mid]) end=mid-1; else beg=mid+1; mid = (int)((beg + end) / 2); if (l[mid] == ker) printf("az %i az %i.",l[mid],mid); else 49 printf("nincs");
11 III Pl Sorbarakva beg=0 mid=4 end=9 beg=5 mid=7 end=9 beg=8 mid=8 end=9 Az 7 az 8. 50
12 III.2. Többdimenziós tömbök N * M db. azonos típusú adatelem az elemekre egymást követő számokból álló indexhalmazokból alkotott számpárokkal hivatkozunk az elemeket egymást követő memóriahelyek tárolják az elemekhez bejárás nélkül férünk hozzá III.2.1 Hozzáférés tömbelemhez - indexelés Kétdimenziós eset LB SOR1 LB SOR1 +1 UB SOR1-1 UB SOR1 LB SOR2 LB SOR2 +1 UB SOR2-1 UB SOR 2 LB SORn-1 LB SORn-1 +1 UB SORn-1-1UB SORn-1 LB SORn LB SORn +1 UB SORn -1 UB SOR n Indexelt alak A 1,1, A 12 A(1,1), A(1,2) A[1,1], A[1,2] Memória pozíció (A m * n-es mátrix) LOC(A(j,k))=LOC(A)+w * (n * j+k) ; w az alapadat tárolási mérete 51
13 Példa (C#) float[,] matrix; matrix = new float [3,3]; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { if (i == j) matrix[i, j] = 1; else matrix[i, j] = 0; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) Console.Write("{0,8:f2",matrix[i, j]); Console.WriteLine(); Példa (C) float matrix [3][3]; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { if (i == j) matrix[i][ j] = 1; else matrix[i][j] = 0; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) printf("%8.2f",matrix[i][j]); printf("\n"); III.2.2 Pl. 1,00 0,00 0,00 0,00 1,00 0,00 0,00 0,00 1,00 52
14 III.3. Rekordok, rekordszerkezetek, állományok A rekord egymáshoz tartozó (a világ egy egyedére vonatkozó) adattételek (mezők, attribútumok) gyűjteménye. az adattételek lehetnek összetettek** és tovább nem bonthatók egyszerűek*. például változó méretű adatsorok, szabálytalan tömbök tárolására használható Az állomány rekordok összessége. Név LB Lakcím** SOR1 +1 Testmagasság Testsúly* Példa (C#) struct ember { public String nev; public String lakcim; public int testmagassag; public int testsuly; // ember x; x = new ember(); x.nev = "Lajos"; x.lakcim = "Budapest"; x.testmagassag = 160; x.testsuly = 50; Console.WriteLine(x.nev + " " + x.lakcim + " " + x.testmagassag + " " + x.testsuly); Console.ReadLine(); LB SOR1 #include <stdio.h> #include <conio.h> #include <string.h> int _tmain(int argc, _TCHAR* argv[]) { struct ember { char nev[64]; char lakcim[64]; int testmagassag; int testsuly; ; // ember x; strcpy(x.nev,"lajos"); strcpy(x.lakcim,"budapest"); x.testmagassag = 160; x.testsuly = 50; printf("%s ",x.nev); printf("%s ",x.lakcim); printf("%i ",x.testmagassag); printf("%i \n",x.testsuly); getch(); return 0; Példa (C) 53
15 III.3.1 Szintszám, minősítés Az adattételek lehetnek összetettek, altételekkel. Például: Gyermek Név Apa Anya Példa (C#) struct ember { public string nev; public int apa; public int anya; static void Main(string[] args) { ember[] x; x = new ember[5]; x[0].nev = "Ádám"; x[1].nev = "Éva"; x[2].nev = "Káin"; x[2].apa = 0; // tömbindex a pointer helyett x[2].anya = 1; Console.ReadLine(); Név Példa (C) struct ember { char nev[64]; int apa; int anya; ; ember x[5]; strcpy(x[0].nev,"ádám"); strcpy(x[1].nev, "Éva"); strcpy(x[2].nev, "Káin"); x[2].apa = 0; // tömbindex a pointer helyett x[2].anya = 1; Név 54
16 III.4. Kapcsolt listák A kapcsolt lista vagy egyirányú lista adatelemek, vagy csomópontok lineáris gyűjteménye, ahol az elemek sorrendjét mutatók rögzítik. Start a mutatókat tároló elemet kapcsolómezőnek hívjuk. x III.4.1 Kapcsolt listák a memóriában Minden csomóponthoz egy tömbelemet (INFO(k) az indexelt csomópont), Minden követőhöz egy másik tömbelemet (LINK(k)) rendelünk. Start INFO (0,0) (100,100) (100,0) (0,100) (0,0) LINK x III.4.2 Kapcsolt listák bejárása A PTR mutató az éppen feldolgozott csomópontra mutat. A kezdetet a START mutató jelöli. A vége NULL Hasonló a lineáris tömbhöz. 55
17 III.4.3 Példa Mutató aritmetika, csoport elemeinek bejárása Ha P változó mutató, akkor a P+1 kifejezés a következő memóriacímet jelenti Példa (C#) /unsafe (Property/Build/Allow unsafe code) const int n=10; P=C k int[] l; l = new int[n]; Random vletlen= new Random(); l[k] = vletlen.next(10); Console.WriteLine("l[{0]={1", k, l[k]); Console.WriteLine(); unsafe { int i=4; fixed ( int * ipk=&l[i]) { fixed ( int * ipv=&l[8]) { int * ip = ipk; while (ip < ipv) { Console.WriteLine( "l[{0]={1", i++, *ip++); P=P+1 Bejárás P<C v const int n=10; Példa (C) int l[n]; l[k] = 10*(float)rand()/RAND_MAX; printf("l[%2i]=%3i\n", k, l[k]); printf("\n"); int i=4; int * ipk=&l[i]; int * ipv=&l[8]; int * ip = ipk; while (ip < ipv) { printf("l[%2i]=%2i ", i++, *ip++); 56
18 III.4.4 Példa Csoport elemeinek bejárása tömbelemmutatóval PTR=START PTR NULL Példa (C#) const int n=10; int[,] l; l = new int[n,3]; // [x,y,következő] Random vletlen= new Random(); int start=0; l[k,0] = vletlen.next(10); l[k,1] = vletlen.next(10); if (k==n-1) l[k, 2] = -1; else l[k, 2] = k+1; Console.WriteLine( "l[{0,1]={1 l[{0,2]={2", k,l[k, 0],l[k, 1]); Console.WriteLine(); int akt=start; // bejárás while (true) { Console.WriteLine( "l[{0,1]={1 l[{0,2]={2", akt,l[akt,0],l[akt, 1]); if (l[akt, 2] == -1) break; akt = (int)l[akt, 2]; PTR=LINK(PTR) {PTR INFO feldolgozás const int n=10; int l[n][3]; Példa (C) // [x,y,következő] int start=0; l[k][0] = 10*(float)rand()/RAND_MAX; l[k][1] = 10*(float)rand()/RAND_MAX;; if (k==n-1) l[k][2] = -1; else l[k][2] = k+1; printf("l[%1i,1]=%2i l[%1i,2]=%2i\n", k,l[k][0],l[k][1]); printf("\n"); int akt=start; // bejárás while (true) { printf("l[%1i,1]=%2i l[%1i,2]=%2i\n", akt,l[akt][0],l[akt][1]); if (l[akt][2] == -1) break; akt = (int)l[akt][2]; 57
19 l[0,1]=7 l[0,2]=3 következő=l[0,3]=1 l[1,1]=3 l[1,2]=4 következő=l[1,3]=2 l[2,1]=1 l[2,2]=0 következő=l[2,3]=3 l[3,1]=0 l[3,2]=6 következő=l[3,3]=4 l[4,1]=6 l[4,2]=0 következő=l[4,3]=5 l[5,1]=4 l[5,2]=0 következő=l[5,3]=6 l[6,1]=6 l[6,2]=1 következő=l[6,3]=7 l[7,1]=0 l[7,2]=6 következő=l[7,3]=8 l[8,1]=3 l[8,2]=7 következő=l[8,3]=9 l[9,1]=0 l[9,2]=9 következő=l[9,3]=-1 l[0,1]=7 l[0,2]=3 következő=l[0,3]=1 l[1,1]=3 l[1,2]=4 következő=l[1,3]=2 l[2,1]=1 l[2,2]=0 következő=l[2,3]=3 l[3,1]=0 l[3,2]=6 következő=l[3,3]=4 l[4,1]=6 l[4,2]=0 következő=l[4,3]=5 l[5,1]=4 l[5,2]=0 következő=l[5,3]=6 l[6,1]=6 l[6,2]=1 következő=l[6,3]=7 l[7,1]=0 l[7,2]=6 következő=l[7,3]=8 l[8,1]=3 l[8,2]=7 következő=l[8,3]=9 l[9,1]=0 l[9,2]=9 következő=l[9,3]=-1 58
20 III.4.5 Keresés kapcsolt listában (tömbös) Ugyanaz mint lineáris esetben, csak az összehasonlítás és a léptetés elválik PTR=START Példa (C#) LOC= {PTR PTR=LINK(PTR) const int n = 10; int[,] l; l = new int[n, 2]; //szam,következő Random vletlen = new Random(); int start = 0; l[k, 0] = vletlen.next(10); if (k == n - 1) l[k, 1] = -1; else l[k, 1] = k + 1; Console.WriteLine( "l[{0,0]={1 következő {2", k,l[k,0],l[k,1]); int keres = l[4, 1]; Console.WriteLine("A keresett={0", keres); Console.WriteLine(); // kereses int akt = start; while (l[akt,1]!=-1) { if (keres == l[akt, 0]) Console.WriteLine("l[{0,1]={1", akt, l[akt, 0]); akt = (int)l[akt, 1]; KER= {PTR INFO PTR NULL const int n = 10; int l[n][2]; Példa (C) //szam,következő int start = 0; l[k][0] = 10*(float)rand()/RAND_MAX; if (k == n - 1) l[k][1] = -1; else l[k][1] = k + 1; printf( "l[%1i,0]=%2i kovetkezo %2i\n", k,l[k][0],l[k][1]); int keres = l[4][1]; printf("a keresett=%2i", keres); printf("\n"); // kereses int akt = start; while (l[akt][1]!=-1) { if (keres == l[akt][ 0]) printf("l[%1i,1]=%2i ", akt, l[akt][0]); 59 akt = (int)l[akt][1];
21 III.4.6 Beszúrás kapcsolt listába (tömbök) Start x Start élda (C#) x const int n = 11; int[,] l; l = new int[n + 1, 3]; //x,y,következő Random vletlen = new Random(); int start = 0; l[k, 0] = vletlen.next(10); l[k, 1] = vletlen.next(10); if (k == n - 1) l[k, 2] = -1; else l[k, 2] = k + 1; Console.WriteLine( "l[{0,1]={1 l[{0,2]={2", k, l[k, 0], l[k, 1]); int akt = start; // beszúrás while (akt!=2) { akt = (int)l[akt, 2]; l[n, 2] = l[akt, 2]; l[akt, 2] = n ; l[n, 0] = 1000; l[n, 1] = 1000; int j = 0; do { Console.WriteLine("l[{0,1]={1 l[{0,2]={2", j, l[j, 0], l[j, 1]); j = l[j, 2]; while (l[j, 2]!= -1); Példa (C) const int n = 11; int l[n + 1][ 3]; //x,y,következő int start = 0; l[k][0] = 10*(float)rand()/RAND_MAX; l[k][1] = 10*(float)rand()/RAND_MAX;; if (k == n - 1) l[k][2] = -1; else l[k][2] = k + 1; printf("l[%i,1]=%i l[%i,2]=%i\n", k, l[k][0], k, l[k][1]); int akt = start; // beszúrás while (akt!=2) { akt = (int)l[akt][2]; l[n][2] = l[akt][2]; l[akt][2] = n ; l[n][0] = 1000; l[n][1] = 1000; int j = 0; do { printf("l[%i,1]=%i l[%i,2]=%i\n", j, l[j][0], j, l[j][1]); j = l[j][2]; while (l[j][2]!= -1); 60
22 l[0,1]=9 l[0,2]=9 l[0,3]=1 l[1,1]=6 l[1,2]=9 l[1,3]=2 l[2,1]=8 l[2,2]=0 l[2,3]=3 l[3,1]=2 l[3,2]=1 l[3,3]=4 l[4,1]=5 l[4,2]=8 l[4,3]=5 l[5,1]=6 l[5,2]=8 l[5,3]=6 l[6,1]=2 l[6,2]=5 l[6,3]=7 l[7,1]=4 l[7,2]=4 l[7,3]=8 l[8,1]=9 l[8,2]=5 l[8,3]=9 l[9,1]=6 l[9,2]=6 l[9,3]=-1 Beszúrás l[2,2]=10 l[10,1]=1000 l[10,2]=1000 l[10,3]=3 Lista l[0,1]=9 l[0,2]=9 l[0,3]=1 l[1,1]=6 l[1,2]=9 l[1,3]=2 l[2,1]=8 l[2,2]=0 l[2,3]=10 l[3,1]=2 l[3,2]=1 l[3,3]=4 l[4,1]=5 l[4,2]=8 l[4,3]=5 l[5,1]=6 l[5,2]=8 l[5,3]=6 l[6,1]=2 l[6,2]=5 l[6,3]=7 l[7,1]=4 l[7,2]=4 l[7,3]=8 l[8,1]=9 l[8,2]=5 l[8,3]=9 l[9,1]=6 l[9,2]=6 l[9,3]=-1 l[10,1]=1000 l[10,2]=1000 l[10,3]=3 Bejárás l[0,1]=9 l[0,2]=9 l[0,3]=1 l[1,1]=6 l[1,2]=9 l[1,3]=2 l[2,1]=8 l[2,2]=0 l[2,3]=10 l[10,1]=1000 l[10,2]=1000 l[10,3]=3 l[3,1]=2 l[3,2]=1 l[3,3]=4 l[4,1]=5 l[4,2]=8 l[4,3]=5 l[5,1]=6 l[5,2]=8 l[5,3]=6 l[6,1]=2 l[6,2]=5 l[6,3]=7 l[7,1]=4 l[7,2]=4 l[7,3]=8 l[8,1]=9 l[8,2]=5 l[8,3]=9 61
23 III.4.7 Törlés kapcsolt listából Start x Start x III.4.8 Kétirányú listák Minden irányban bejárható Első INFO x INFO INFO INFO x III.4.9 Beszúrás kétirányú listába Első INFO x INFO INFO INFO x Utolsó Utolsó INFO III.4.10 Törlés kétirányú listából Első INFO x INFO INFO INFO x Utolsó 62
24 l[0,1]=4 l[0,2]=4 következő=l[0,3]=1 l[1,1]=1 l[1,2]=1 következő=l[1,3]=2 l[2,1]=6 l[2,2]=3 következő=l[2,3]=3 l[3,1]=7 l[3,2]=9 következő=l[3,3]=4 l[4,1]=5 l[4,2]=5 következő=l[4,3]=5 l[5,1]=5 l[5,2]=2 következő=l[5,3]=6 l[6,1]=1 l[6,2]=8 következő=l[6,3]=7 l[7,1]=8 l[7,2]=1 következő=l[7,3]=8 l[8,1]=7 l[8,2]=7 következő=l[8,3]=9 l[9,1]=9 l[9,2]=3 következő=l[9,3]=-1 A 4-e elem törlése l[0,1]=4 l[0,2]=4 következő=l[0,3]=1 l[1,1]=1 l[1,2]=1 következő=l[1,3]=2 l[2,1]=6 l[2,2]=3 következő=l[2,3]=3 l[3,1]=7 l[3,2]=9 következő=l[3,3]=5 l[4,1]=5 l[4,2]=5 következő=l[4,3]=5 l[5,1]=5 l[5,2]=2 következő=l[5,3]=6 l[6,1]=1 l[6,2]=8 következő=l[6,3]=7 l[7,1]=8 l[7,2]=1 következő=l[7,3]=8 l[8,1]=7 l[8,2]=7 következő=l[8,3]=9 l[9,1]=9 l[9,2]=3 következő=l[9,3]=-1 Bejárás l[0,1]=4 l[0,2]=4 következő=l[0,3]=1 l[1,1]=1 l[1,2]=1 következő=l[1,3]=2 l[2,1]=6 l[2,2]=3 következő=l[2,3]=3 l[3,1]=7 l[3,2]=9 következő=l[3,3]=5 l[5,1]=5 l[5,2]=2 következő=l[5,3]=6 l[6,1]=1 l[6,2]=8 következő=l[6,3]=7 l[7,1]=8 l[7,2]=1 következő=l[7,3]=8 l[8,1]=7 l[8,2]=7 következő=l[8,3]=9 l[9,1]=9 l[9,2]=3 következő=l[9,3]=-1 63
25 III.5. Verem (Stack) Last In First Out Új elem behelyezése (PUSH) a tetejére (TOP) Elem leemelése (POP) III.5.1 A verem tárolása a b c d III PUSH TOP TOP=TOP+1 STACK(TOP)=Elem maxstk TOP<MAXSTK III POP túlcsordul Elem=STACK(TOP) TOP=TOP-1 TOP=0 alulcsordul 64
26 public class stack { public const int max_stack = 10; public int stack_pointer = 0; public double[] x; public stack() { x = new double[max_stack]; public void push(double be) { if (stack_pointer < max_stack) x[stack_pointer++] = be; public double pop() { return x[--stack_pointer]; stack s = new stack(); Console.WriteLine("Először bekerül a 13"); s.push(13); Console.WriteLine("Utána bekerül a 14"); s.push(14); Console.WriteLine("Először a {0 jön ki", s.pop()); Console.WriteLine("Aztán a {0 jön ki", s.pop()); 65
27 Példa C++ class stack { public: static const int max_stack = 10; int stack_pointer; double * x; stack() { x = new double[max_stack]; stack_pointer=0; void push(double be) { if (stack_pointer < max_stack) x[stack_pointer++] = be; double pop() { return x[--stack_pointer]; ; //Verem létrehozása stack * s=new stack(); printf("eloszor bekerul a 13\n"); s->push(13); printf("utana bekerul a 14\n"); s->push(14); printf("eloszor a %f jon ki\n", s->pop()); printf("aztan a %f jon ki\n", s->pop()); 66
28 III.5.2 Rekurzió III Faktoriális iteratív definíció n!=1 2 3 (n-2) (n-1) n N=0 Fakt=1 k=1 k<=n k=k+1 Fakt=Fakt*k III Faktoriális rekurzív definíció 0!=1 ; n!=n (n-1)! N=0 Fakt=1 Fakt()=n * Fakt(n-1) Fakt()=1 A verem és az alprogram kapcsolata Példa (C#) public class Szamitasok { public static int fakt(int n) { if (n<2) return 1; else return n*fakt(n-1); Console.Write("Nem negatív egész="); int n=convert.toint32(console.readline()); Console.WriteLine("{0!={1",n, Szamitasok.fakt(n)); 67
29 III.6. Sor (Queue) First In First Out III.6.1 A sor tárolása (lebegő sor) a BOT b c d TOP maxque III PUSH TOP=TOP+1 QUE(TOP)=Elem TOP<MAXQUE-1 III POP túlcsordul Elem=QUE(BOT) BOT=BOT+1 BOT>TOP üres 68
30 public class queue { public const int size = 10; public int max_queue = 0; public int min_queue = 0; public double[] x; public queue() { x = new double[size]; public void push(double be) { if (max_queue< size -1) x[max_queue++] = be; public double pop() { if (min_queue < max_queue) return x[min_queue++]; else return 99999; //Sor létrehozása queue q = new queue(); Console.WriteLine("Először bekerül a 13"); q.push(13); Console.WriteLine("Utána bekerül a 14"); q.push(14); Console.WriteLine("Először a {0 jön ki", q.pop()); Console.WriteLine("Aztán a {0 jön ki", q.pop()); #include "stdafx.h" #include <conio.h> #include <stdlib.h> class queue { public: static const int size = 10; int max_queue; int min_queue; double x[size]; queue() { max_queue=0; min_queue=0; void push(double be) { if (max_queue< size -1) x[max_queue++] = be; double pop() { if (min_queue < max_queue) return x[min_queue++]; else return 99999; ; Példa (C) int _tmain(int argc, _TCHAR* argv[]) {//Sor létrehozása queue q = queue(); printf("eloszor bekerul a 13.0\n"); q.push(13); printf("utana bekerul a 14.0\n"); q.push(14); printf("eloszor a %f jon ki\n", q.pop()); printf("aztan a %f jon ki\n", q.pop()); getch(); 69 return 0;
31 III.7. Bináris fa Elemek véges halmaza, amely vagy üres vagy egyetlen T elemhez (gyökér) kapcsolt két diszjunkt T1 ésd T2 részfa alkotja A H D B C E F G I K J A gyökér (szülő, apa) R(A) - jobboldali részfa (C,F,G, I, J, K) L(A) baloldali részfa (B, D, E, H) C A jobboldali szukcesszora (gyermek, leszármazott) B A baloldali szukcesszora Minden csomópontnak 0, 1, illetve 2 szukcesszora lehet Zárócsomópont - 0 szukcesszor Az összekötő vonalak - élek, 0 szukcesszor - levél utolsó él - ág Szintszám : gyökér - 0 leszármazott - szülő+1 Generáció : azonos szintszámú elemek Mélység : az azonos ágon elhelyezkedő elemek maximális száma Teljes : az utolsó szintet kivéve a csp-k száma maximális 70 Kiterjesztett bináris fa minden csomópontnak 0/2 gyermeke van
32 III.7.1 Bináris fák ábrázolása kapcsolt szerkezettel Root A B C D x x E x x F x G x H x x I x J x III.7.2 Bináris fák ábrázolása tömbökkel x K x Root Avail L(Root) R(Root) A C G J K F I B D H E
33 III.7.3 Bináris fák szekvenciális ábrázolása a gyökér T(1) ha egy csomópont a T(k)-n van, akkor ha van L(T(k))=T(2*k) egyébként NULL akkor ha van R(T(k))=T(2*k+1) egyébként NULL A B C D E F G A B C D E F G NULL NULL NULL NULL NULL NULL NULL NULL III.7.4 Bináris fák bejárása Több lehetőség. Pl. a G gyökér Az L(G) bejárása az irányítás szerint, Az R(G) bejárása az irányítás szerint, D B A C E F G H I J K 72
34 III Pl. az irányítással megegyező bejárás (I.8.1 tárolás) NULL a STACK-en PTR a gyökéren Ameddig a PTR!=NULL az összes L() feldolgozása az összes R() a STACK-re PTR=L(PTR) léptetés utána PTR=STACK legfelső elemével (ha nem NULL, R feldolgozás) TOP=0 STACK(TOP)=NULL PTR=Gyökér PTR NULL STACK(TOP)=R(PTR) TOP=TOP+1 R(PTR) NULL ADAT(PTR) feldolgozás A PTR=L(PTR) B C D E F G L(PTR) NULL H I J TOP=TOP-1 PTR=STACK(TOP) K 73
35 III.8. Általános fa Elemek véges halmaza (T), amely Tartalmaz egy kitüntetett R gyökérelemet A többi elem nem nulla diszjunkt részfája T-nek A B C D E F G H I J K L III.8.1 Tárolás számítógépen INFO(k) - az elem adatai GYERMEK(k) - az első gyermek TESTVÉR(k) - az első testvér INFO A B C D E F G H I J K L TESTVÉR GYERMEK
36 III.9 Gráf Két halmazzal jellemezhető adatszerkezet Csomópontok sorszámozott halmaza (csúcsok) Az elemeket összekötő e=[u,v] számpárral jellemzett élek halmaza az összekötött csomópontokat szomszédoknak hívjuk deg(u) a csomópont foka, a befutó élek száma deg(u)=0 izolált csomópont v 0 -ból v n -be haladó élek halmazát P(v 0, v 1, v 0 ) útnak nevezzük. P út zárt, ha v 0 =v n P út egyszerű, ha minden pontja különböző Kör a 3-nál hosszabb egyszerű zárt út. Összefüggő egy gráf, ha bármely két pontja között létezik út. Egy G gráf akkor és csak akkor összefüggő, ha bármely két pontja között létezik egyszerű út. Egy gráf teljes, ha minden csomópontja minden csomópontjával össze van kötve. A fa köröket nem tartalmazó összefüggő gráf G gráf címkézett, ha éleihez adatokat rendelünk. Ha G gráf éleihez rendelt adatok nem negatívak, akkor a gráfot súlyozottnak hívjuk. G gráf irányított, ha az éleknek irányítottságuk van 75
37 III.9.1 Szekvenciális tárolás számítógépen Szomszédsági mátrix a i,j =1 ha i-ből j felé halad él a i,j =0 egyébként C A B A A B C D A B C D D Ha A a G gráf szomszédsági mátrixa, akkor A k mátrix i,j. eleme az i-ből j-be vezető K hosszú utak számát adja. A 2 A B C D A Útmátrix p i,j =1 ha i-ből j felé halad valamilyen út p i,j =0 - egyébként B C D U A B C D A B C D Egy m pontból álló irányított gráf útmátrixának p ij tagja akkor és csak akkor 1, ha Az A szomszédsági mátrixból képzett A+A 2 +.+A m mátrix i,j. eleme nem 0. 76
38 III.10. Alkalmazások III Bejárás négyzetszámok összege szorzata Feltöltés k=0 k<=n k=k+1 L[k]=k 2 Számítás sz=0 p=1 k=0 k<=n k=k+1 int n=10; int[] L = new int [n+1]; for (int k=0; k<=n; k++) { L[k]=k*k; int sz=0; int p=1; for (int k=0; k<=n; k++) { sz+=l[k]; p*=l[k]; sz+=k 2 p * =k 2 const int n=10; int L[n+1]; for (int k=0; k<=n; k++) { L[k]=k*k; int sz=0; int p=1; for (int k=0; k<=n; k++) { sz+=l[k]; p*=l[k]; 77
39 III Bejárás - numerikus integrálás, deriválás Numerikus derivált f x = f n f n 1 x n x n 1 h = x n x n 1 df(x) dx f n f n 1 h x + y n 1 Numerikus integrál (trapéz szabály) h (f i 1 + f i ) 2 f n 1 x n 1 x n f n Feltöltés k=0 k<=n k=k+1 f[k]=x[k] x[k]=k*0.1 78
40 Számítás derivált és integrál integ=0 k=1 k<=n k=k+0.1 integ += f k 1 + f[k] 2 (x k x k 1 ) d[k] = f k + f[k 1] x k x k 1 double[] f = new double[n + 1]; double[] x = new double[n + 1]; double[] d = new double[n + 1]; double dt=0.1; for (int k = 0; k <= n; k++) { x[k] = k * dt; f[k] = x[k] * x[k] ; double integ = 0; for (int k = 1; k <= n; k++) { integ += (f[k - 1] + f[k]) / 2 * (x[k] - x[k - 1]); d[k] = (f[k] + f[k - 1]) / (x[k] - x[k - 1]); double f[n + 1]; double x[n + 1]; double d[n + 1]; double dt=0.1; for (int k = 0; k <= n; k++) { x[k] = k * dt; f[k] = x[k] * x[k] ; double integ = 0; for (int k = 1; k <= n; k++) { integ += (f[k - 1] + f[k]) / 2 * (x[k] - x[k - 1]); d[k] = (f[k] + f[k - 1]) / (x[k] - x[k - 1]); 79
41 III Gyökkeresés Gyökkeresés bejárással gyok=-1 k=0 k<=n k=k+1 gyok = x k + x[k 1] 2 dt f k f k 1 0 double gyok = -1; for (int k = 1; k <= n; k++) { if (f[k - 1] * f[k]<=0) gyok = dt*(x[k] + x[k - 1])/2; double gyok = -1; for (int k = 1; k <= n; k++) { if (f[k - 1] * f[k]<=0) gyok = dt*(x[k] + x[k - 1])/2; 80
42 Bináris gyökkeresés B=0 V=n V B < ε gyok=k*dt V=K B=K F[B] *f[k] <0 K= V+B 2 int K; int B=0; int V=n; while (V-B>=1) { K = (B + V) / 2; if (f[b] * f[k] < 0) V = K; else { if (f[k]!=0) B = K; else B=V=K; double gyok=k*dt; int K; int B=0; int V=n; while (V-B>1) { K = (B + V) / 2; if (f[b] * f[k] < 0) V = K; else { if (f[k]!=0) B = K; else B=V=K; double gyok=k*dt; 81
III. Adatszerkezetek és algoritmusok
III. Adatszerkezetek és algoritmusok 1 Bevezetés Adatszerkezet egyszerű vagy összetett alapadatok rendszerének matematikai, logikai modellje elég jó ahhoz, hogy tükrözze a valós kapcsolatokat elég egyszerű
RészletesebbenAdatszerkezetek és algoritmusok
Adatszerkezetek és algoritmusok 1 Bevezetés Adatszerkezet egyszerű vagy összetett alapadatok rendszerének matematikai, logikai modellje elég jó ahhoz, hogy tükrözze a valós kapcsolatokat elég egyszerű
RészletesebbenAdatszerkezetek Bevezetés Adatszerkezet Adatszerkezet típusok Műveletek Bonyolultság
datszerkezetek Bevezetés datszerkezet adatok rendszerének matematikai, logikai modellje elég jó ahhoz, hogy tükrözze a valós kapcsolatokat elég egyszerű a kezeléshez datszerkezet típusok Tömbök lineáris
RészletesebbenTamás Péter (D. 424) Mechatronika, Optika és Gépészeti Informatika Tanszék (D 407)
Tamás Péter (D. 424) Mechatronika, Optika és Gépészeti Informatika Tanszék (D 407) 1 Előadás Bevezetés az informatikába Adatszerkezetek Algoritmusok, programozási technológiák Számítástudomány alapjai
RészletesebbenElemi adatszerkezetek
2017/12/16 17:22 1/18 Elemi adatszerkezetek < Programozás Elemi adatszerkezetek Szerző: Sallai András Copyright Sallai András, 2011, 2014 Licenc: GNU Free Documentation License 1.3 Web: http://szit.hu
RészletesebbenA programozás alapjai előadás. [<struktúra változó azonosítók>] ; Dinamikus adatszerkezetek:
A programozás alapjai 1 Dinamikus adatszerkezetek:. előadás Híradástechnikai Tanszék Dinamikus adatszerkezetek: Adott építőelemekből, adott szabályok szerint felépített, de nem rögzített méretű adatszerkezetek.
RészletesebbenAdatszerkezetek 7a. Dr. IványiPéter
Adatszerkezetek 7a. Dr. IványiPéter 1 Fák Fákat akkor használunk, ha az adatok között valamilyen alá- és fölérendeltség van. Pl. könyvtárszerkezet gyökér () Nincsennek hurkok!!! 2 Bináris fák Azokat a
RészletesebbenProgramozás alapjai II. (7. ea) C++ Speciális adatszerkezetek. Tömbök. Kiegészítő anyag: speciális adatszerkezetek
Programozás alapjai II. (7. ea) C++ Kiegészítő anyag: speciális adatszerkezetek Szeberényi Imre BME IIT M Ű E G Y E T E M 1 7 8 2 C++ programozási nyelv BME-IIT Sz.I. 2016.04.05. - 1
RészletesebbenSpeciális adatszerkezetek. Programozás alapjai II. (8. ea) C++ Tömbök. Tömbök/2. N dimenziós tömb. Nagyméretű ritka tömbök
Programozás alapjai II. (8. ea) C++ Kiegészítő anyag: speciális adatszerkezetek Szeberényi Imre BME IIT Speciális adatszerkezetek A helyes adatábrázolás választása, a helyes adatszerkezet
RészletesebbenAdatszerkezetek és algoritmusok
2010. január 8. Bevezet El z órák anyagainak áttekintése Ismétlés Adatszerkezetek osztályozása Sor, Verem, Lengyelforma Statikus, tömbös reprezentáció Dinamikus, láncolt reprezentáció Láncolt lista Lassú
RészletesebbenProgramozás alapjai II. (7. ea) C++
Programozás alapjai II. (7. ea) C++ Kiegészítő anyag: speciális adatszerkezetek Szeberényi Imre BME IIT M Ű E G Y E T E M 1 7 8 2 C++ programozási nyelv BME-IIT Sz.I. 2016.04.05. - 1
RészletesebbenAlgoritmusok és adatszerkezetek gyakorlat 06 Adatszerkezetek
Algoritmusok és adatszerkezetek gyakorlat 06 Adatszerkezetek Tömb Ugyanolyan típusú elemeket tárol A mérete előre definiált kell legyen és nem lehet megváltoztatni futás során Legyen n a tömb mérete. Ekkor:
RészletesebbenProgramozás I gyakorlat. 10. Stringek, mutatók
Programozás I gyakorlat 10. Stringek, mutatók Karakter típus A char típusú változókat karakerként is kiírhatjuk: #include char c = 'A'; printf("%c\n", c); c = 80; printf("%c\n", c); printf("%c\n",
RészletesebbenAdatszerkezetek 1. Dr. Iványi Péter
Adatszerkezetek 1. Dr. Iványi Péter 1 Adat Adat minden, amit a számítógépünkben tárolunk és a külvilágból jön Az adatnak két fontos tulajdonsága van: Értéke Típusa 2 Adat típusa Az adatot kódoltan tároljuk
RészletesebbenTartalom Keresés és rendezés. Vektoralgoritmusok. 1. fejezet. Keresés adatvektorban. A programozás alapjai I.
Keresés Rendezés Feladat Keresés Rendezés Feladat Tartalom Keresés és rendezés A programozás alapjai I. Hálózati Rendszerek és Szolgáltatások Tanszék Farkas Balázs, Fiala Péter, Vitéz András, Zsóka Zoltán
RészletesebbenKeresés és rendezés. A programozás alapjai I. Hálózati Rendszerek és Szolgáltatások Tanszék Farkas Balázs, Fiala Péter, Vitéz András, Zsóka Zoltán
Keresés Rendezés Feladat Keresés és rendezés A programozás alapjai I. Hálózati Rendszerek és Szolgáltatások Tanszék Farkas Balázs, Fiala Péter, Vitéz András, Zsóka Zoltán 2016. november 7. Farkas B., Fiala
RészletesebbenAdatszerkezetek 2. Dr. Iványi Péter
Adatszerkezetek 2. Dr. Iványi Péter 1 Fák Fákat akkor használunk, ha az adatok között valamilyen alá- és fölérendeltség van. Pl. könyvtárszerkezet gyökér (root) Nincsennek hurkok!!! 2 Bináris fák Azokat
RészletesebbenAdatszerkezetek Adatszerkezet fogalma. Az értékhalmaz struktúrája
Adatszerkezetek Összetett adattípus Meghatározói: A felvehető értékek halmaza Az értékhalmaz struktúrája Az ábrázolás módja Műveletei Adatszerkezet fogalma Direkt szorzat Minden eleme a T i halmazokból
Részletesebbenfélstatikus adatszerkezetek: verem, várakozási sor, hasítótábla dinamikus adatszerkezetek: lineáris lista, fa, hálózat
Listák félstatikus adatszerkezetek: verem, várakozási sor, hasítótábla dinamikus adatszerkezetek: lineáris lista, fa, hálózat A verem LIFO lista (Last In First Out) angolul stack, románul stivă bevitel
Részletesebbenhiányzott szeptemberben vagy A tanuló nem hiányzott szeptemberben szöveget
Hiányzások Ebben a feladatban egy általános iskola 2017 szeptemberi hiányzásai tartalmazó szövegfájlt kell feldolgoznia. Az adatok a szeptember.csv állomány tartalmazza. Az állomány egy sorában egy tanuló
RészletesebbenHierarchikus adatszerkezetek
5. előadás Hierarchikus adatszerkezetek A hierarchikus adatszerkezet olyan < A, R > rendezett pár, amelynél van egy kitüntetett r A gyökérelem úgy, hogy: 1. r nem lehet végpont, azaz a A esetén R(a,r)
Részletesebben3. Határozza meg és írja ki a minta szerint, hogy a forrásállományban hány kémiai elem felfedezési adatai
Kémiai elemek felfedezése A kémiai elemek kémiailag tovább már nem bontható, egyszerű anyagok. Jelenleg 118 különböző kémiai elemet ismerünk, közüliik a Földön 94 található meg a természetben, ezeket természetes
RészletesebbenAdatszerkezetek 1. előadás
Adatszerkezetek 1. előadás Irodalom: Lipschutz: Adatszerkezetek Morvay, Sebők: Számítógépes adatkezelés Cormen, Leiserson, Rives, Stein: Új algoritmusok http://it.inf.unideb.hu/~halasz http://it.inf.unideb.hu/adatszerk
RészletesebbenAdatszerkezetek Tömb, sor, verem. Dr. Iványi Péter
Adatszerkezetek Tömb, sor, verem Dr. Iványi Péter 1 Adat Adat minden, amit a számítógépünkben tárolunk és a külvilágból jön Az adatnak két fontos tulajdonsága van: Értéke Típusa 2 Adat típusa Az adatot
RészletesebbenProgramozás alapjai C nyelv 10. gyakorlat. Standard függvények. Union
Programozás alapjai C nyelv 10. gyakorlat Szeberényi Imre BME IIT Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.21. -1- Standard függvények Standard függvények amelyeket
Részletesebben6. gyakorlat Egydimenziós numerikus tömbök kezelése, tömbi algoritmusok
6. gyakorlat Egydimenziós numerikus tömbök kezelése, tömbi algoritmusok 1. feladat: Az EURO árfolyamát egy negyedéven keresztül hetente nyilvántartjuk (HUF / EUR). Írjon C programokat az alábbi kérdések
RészletesebbenMiről lesz ma szó? A PROGAMOZÁS ALAPJAI 1. Dinamikus adatszerkezetek. Dinamikus adatszerkezetek. Önhivatkozó struktúrák. Önhivatkozó struktúrák
2012. március 27. A PROGAMOZÁS ALAPJAI 1 Vitéz András egyetemi adjunktus BME Híradástechnikai Tanszék vitez@hit.bme.hu Miről lesz ma szó? Dinamikus adatszerkezetek Önhivatkozó struktúra keresés, beszúrás,
RészletesebbenAlgoritmusok és adatszerkezetek gyakorlat 07
Algoritmusok és adatszerkezetek gyakorlat 0 Keresőfák Fák Fa: összefüggő, körmentes gráf, melyre igaz, hogy: - (Általában) egy gyökér csúcsa van, melynek 0 vagy több részfája van - Pontosan egy út vezet
RészletesebbenProgramozás 6. Dr. Iványi Péter
Programozás 6. Dr. Iványi Péter 1 Előfeldolgozás része Makrók A forrás kódban elvégzi a helyettesítéseket a fordító Csak egyszer végez helyettesítést Nem olyan makrók, mint a LISP vagy Scheme esetén Csak
RészletesebbenInformációs Technológia
Információs Technológia Rekurzió, Fa adatszerkezet Fodor Attila Pannon Egyetem Műszaki Informatika Kar Villamosmérnöki és Információs Rendszerek Tanszék foa@almos.vein.hu 2010. november 18. Rekurzió Rekurzió
Részletesebben10. gyakorlat Tömb, mint függvény argumentum
10. gyakorlat Tömb, mint függvény argumentum 1. feladat: A 6. gyakorlat 1. feladatát oldja meg a strukturált programtervezési alapelv betartásával, azaz minden végrehajtandó funkciót külön függvényben
RészletesebbenEGYSZERŰ, NEM IRÁNYÍTOTT (IRÁNYÍTATLAN) GRÁF
Összefoglaló Gráfok / EGYSZERŰ, NEM IRÁNYÍTOTT (IRÁNYÍTATLAN) GRÁF Adott a G = (V, E) gráf ahol a V a csomópontok, E az élek halmaza E = {(x, y) x, y V, x y (nincs hurokél) és (x, y) = (y, x)) Jelölések:
RészletesebbenC# feladatok gyűjteménye
C# feladatok gyűjteménye Készítette: Fehérvári Károly I6YF6E Informatika tanár ma levelező tagozat 1) Feladat: ALAPMŰVELETEK Készítsünk programot, amely bekér két egész számot. Majd kiszámolja a két szám
RészletesebbenProgramozás alapjai C nyelv 7. gyakorlat. Függvények. Függvények(2)
Programozás alapjai C nyelv 7. gyakorlat Szeberényi Imre BME IIT Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.05. -1- Függvények C program egymás mellé rendelt függvényekből
Részletesebben7 7, ,22 13,22 13, ,28
Általános keresőfák 7 7,13 13 13 7 20 7 20,22 13,22 13,22 7 20 25 7 20 25,28 Általános keresőfa Az általános keresőfa olyan absztrakt adatszerkezet, amely fa és minden cellájában nem csak egy (adat), hanem
RészletesebbenFüggvények. Programozás alapjai C nyelv 7. gyakorlat. LNKO függvény. Függvények(2) LNKO függvény (2) LNKO függvény (3)
Programozás alapjai C nyelv 7. gyakorlat Szeberényi Imre BME IIT Függvények C program egymás mellé rendelt függvényekből áll. A függvény (alprogram) jó absztrakciós eszköz a programok
RészletesebbenProgramozási nyelvek Java
statikus programszerkezet Programozási nyelvek Java Kozsik Tamás előadása alapján Készítette: Nagy Krisztián 2. előadás csomag könyvtárak könyvtárak forrásfájlok bájtkódok (.java) (.class) primitív osztály
RészletesebbenFejlett programozási nyelvek C++ Iterátorok
Fejlett programozási nyelvek C++ Iterátorok 10. előadás Antal Margit 2009 slide 1 Témakörök I. Bevezetés II. Iterátor definíció III. Iterátorok jellemzői IV. Iterátorkategóriák V. Iterátor adapterek slide
RészletesebbenAlgoritmusok és adatszerkezetek II.
Algoritmusok és adatszerkezetek II. Horváth Gyula Szegedi Tudományegyetem Természettudományi és Informatikai Kar horvath@inf.u-szeged.hu 6. Ugrólista (Skiplist) Definíció. Olyan adatszerkezet, amelyre
RészletesebbenJárműfedélzeti rendszerek II. 3. előadás Dr. Bécsi Tamás
Járműfedélzeti rendszerek II. 3. előadás Dr. Bécsi Tamás 5.3. Mutatók,tömbök A mutató vagy pointer olyan változó, amely egy másik változó címét tartalmazza. A C nyelvű programokban gyakran használják a
RészletesebbenA C# programozási nyelv alapjai
A C# programozási nyelv alapjai Tisztán objektum-orientált Kis- és nagybetűket megkülönbözteti Ötvözi a C++, Delphi, Java programozási nyelvek pozitívumait.net futtatókörnyezet Visual Studio fejlesztőkörnyezet
RészletesebbenProgramozás BMEKOKAA146. Dr. Bécsi Tamás 3. előadás
Programozás BMEKOKAA146 Dr. Bécsi Tamás 3. előadás Vezérlési szerkezetek Elágazás Gyakran előfordul, hogy meg kell vizsgálnunk egy állítást, és attól függően, hogy igaz vagy hamis, a programnak más-más
RészletesebbenFák 2009.04.06. Témakörök. Fa definíciója. Rekurzív típusok, fa adatszerkezet Bináris keresőfa, bejárások Bináris keresőfa, módosítás B-fa
Fák szenasi.sandor@nik.bmf.hu PPT 2007/2008 tavasz http://nik.bmf.hu/ppt 1 Rekurzív típusok, fa adatszerkezet Bináris keresőfa, bejárások Bináris keresőfa, módosítás B-fa Témakörök 2 Fa (Tree): csomópontok
RészletesebbenBME MOGI Gépészeti informatika 5.
BME MOGI Gépészeti informatika 5. 1. feladat Készítsen alkalmazást, mely feltölt egy egydimenziós tömböt adott tartományba eső, véletlenszerűen generált egész értékekkel! Határozza meg a legkisebb és a
RészletesebbenProgramozas 1. Strukturak, mutatok
Programozas 1 Strukturak, mutatok Strukturak Tömb: több egyforma típusú változó együttese Struktúra: több különböző típusú de logikailag egybetartozó változó együttese, amelyet az egyszerű kezelhetőség
RészletesebbenAlgoritmusok és adatszerkezetek I. 1. előadás
Algoritmusok és adatszerkezetek I 1 előadás Típusok osztályozása Összetettség (strukturáltság) szempontjából: elemi (vagy skalár, vagy strukturálatlan) összetett (más szóval strukturált) Strukturálási
RészletesebbenInformációs Technológia
Információs Technológia Sor és verem adatszerkezet Fodor Attila Pannon Egyetem Műszaki Informatikai Kar Villamosmérnöki és Információs Rendszerek Tanszék foa@almos.vein.hu 2009. november 19. Alapötlet
Részletesebben10. tétel. Adatszerkezetek és algoritmusok vizsga Frissült: 2013. január 28.
10. tétel Adatszerkezetek és algoritmusok vizsga Frissült: 2013. január 28. 2-3 fák Hatékony keresőfa-konstrukció. Ez is fa, de a binárisnál annyival bonyolultabb hogy egy nem-levél csúcsnak 2 vagy 3 fia
RészletesebbenStruktúra nélküli adatszerkezetek
Struktúra nélküli adatszerkezetek Homogén adatszerkezetek (minden adatelem azonos típusú) osztályozása Struktúra nélküli (Nincs kapcsolat az adatelemek között.) Halmaz Multihalmaz Asszociatív 20:24 1 A
RészletesebbenC programozási nyelv Pointerek, tömbök, pointer aritmetika
C programozási nyelv Pointerek, tömbök, pointer aritmetika Dr. Schuster György 2011. június 16. C programozási nyelv Pointerek, tömbök, pointer aritmetika 2011. június 16. 1 / 15 Pointerek (mutatók) Pointerek
RészletesebbenA számítástudomány alapjai. Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
A számítástudomány alapjai Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem Bináris keresőfa, kupac Katona Gyula Y. (BME SZIT) A számítástudomány
RészletesebbenProgramozás alapjai C nyelv 9. gyakorlat. Rekurzió. Rekurzív algoritmus
Programozás alapjai C nyelv 9. gyakorlat Szeberényi Imre BME IIT Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.14. -1- Rekurzió A feladat algoritmusa eleve rekurzív
RészletesebbenMestInt gyakorlat visszalépéses keresés
MestInt gyakorlat visszalépéses keresés Probléma leírása N királynő probléma Az n királynő probléma, azt a kérdést veti fel, hányféleképpen lehet lerakni n darab királynőt egy n n-es táblán úgy, hogy a
RészletesebbenKupac adatszerkezet. A[i] bal fia A[2i] A[i] jobb fia A[2i + 1]
Kupac adatszerkezet A bináris kupac egy majdnem teljes bináris fa, amely minden szintjén teljesen kitöltött kivéve a legalacsonyabb szintet, ahol balról jobbra haladva egy adott csúcsig vannak elemek.
RészletesebbenProgramozás alapjai C nyelv 5. gyakorlat. Írjunk ki fordítva! Írjunk ki fordítva! (3)
Programozás alapjai C nyelv 5. gyakorlat Szeberényi Imre BME IIT Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.10.17. -1- Tömbök Azonos típusú adatok tárolására. Index
RészletesebbenINFORMATIKAI ALAPISMERETEK
Informatikai alapismeretek középszint 1021 ÉRETTSÉGI VIZSGA 2011. május 13. INFORMATIKAI ALAPISMERETEK KÖZÉPSZINTŰ ÍRÁSBELI ÉRETTSÉGI VIZSGA JAVÍTÁSI-ÉRTÉKELÉSI ÚTMUTATÓ NEMZETI ERŐFORRÁS MINISZTÉRIUM
RészletesebbenEdényrendezés. Futási idő: Tegyük fel, hogy m = n, ekkor: legjobb eset Θ(n), legrosszabb eset Θ(n 2 ), átlagos eset Θ(n).
Edényrendezés Tegyük fel, hogy a rendezendő H = {a 1,...,a n } halmaz elemei a [0,1) intervallumba eső valós számok. Vegyünk m db vödröt, V [0],...,V [m 1] és osszuk szét a rendezendő halmaz elemeit a
Részletesebben... fi. ... fk. 6. Fabejáró algoritmusok Rekurzív preorder bejárás (elsőfiú-testvér ábrázolásra)
6. Fabejáró algoritmusok Fa bejárásán olyan algoritmust értünk, amelynek bemenete egy F fa és egy M művelet, és az algoritmus adott sorrendben pontosan egyszer végrehajtja az M műveletet a fa pontjaiban
RészletesebbenKészítette: Nagy Tibor István
Készítette: Nagy Tibor István A változó Egy memóriában elhelyezkedő rekesz Egy értéket tárol Van azonosítója (vagyis neve) Van típusa (milyen értéket tárolhat) Az értéke értékadással módosítható Az értéke
Részletesebben7. BINÁRIS FÁK 7.1. A bináris fa absztrakt adattípus 7.2. A bináris fa absztrakt adatszerkezet
7. BINÁRIS FÁK Az előző fejezetekben már találkoztunk bináris fákkal. Ezt a központi fontosságú adatszerkezetet most vezetjük be a saját helyén és az általános fák szerepét szűkítve, csak a bináris fát
RészletesebbenRekurzió. Programozás alapjai C nyelv 9. gyakorlat. Rekurzív algoritmus. Rekurzív algoritmus fajtái. Példa: n! (2) Példa: n!
Programozás alapjai C nyelv 9. gyakorlat Szeberényi Imre BME IIT Rekurzió A feladat algoritmusa eleve rekurzív formában adott (ld: n!). A valójában nem rekurzív de valami hasznot húzunk
RészletesebbenStack Vezérlés szerkezet Adat 2.
Stack Vezérlés szerkezet Adat 2. Kód visszafejtés. Izsó Tamás 2013. november 14. Izsó Tamás Stack Vezérlés szerkezet Adat 2./ 1 Változó típusú paraméterekátadása 1. #include < s t d i o. h> int64 myfunc
RészletesebbenEmlékeztető: a fordítás lépései. Szimbólumtábla-kezelés. Információáramlás. Információáramlás. Információáramlás.
Emlékeztető: a fordítás lépései Forrás-kezelő (source handler) Szimbólumtábla-kezelés Fordítóprogramok előadás (A, C, T szakirány) Lexikális elemző (scanner) Szintaktikus elemző (parser) Szemantikus elemző
RészletesebbenA programozás alapjai előadás. Amiről szólesz: A tárgy címe: A programozás alapjai
A programozás alapjai 1 1. előadás Híradástechnikai Tanszék Amiről szólesz: A tárgy címe: A programozás alapjai A számítógép részegységei, alacsony- és magasszintű programnyelvek, az imperatív programozási
RészletesebbenMutatók és címek (ism.) Programozás alapjai C nyelv 8. gyakorlat. Indirekció (ism) Néhány dolog érthetőbb (ism.) Változók a memóriában
Programozás alapjai C nyelv 8. gyakorlat Szeberényi mre BME T Programozás alapjai. (C nyelv, gyakorlat) BME-T Sz.. 2005.11.07. -1- Mutatók és címek (ism.) Minden változó és függvény
RészletesebbenAdatszerkezetek I. 7. előadás. (Horváth Gyula anyagai felhasználásával)
Adatszerkezetek I. 7. előadás (Horváth Gyula anyagai felhasználásával) Bináris fa A fa (bináris fa) rekurzív adatszerkezet: BinFa:= Fa := ÜresFa Rekord(Elem,BinFa,BinFa) ÜresFa Rekord(Elem,Fák) 2/37 Bináris
RészletesebbenA lista adatszerkezet A lista elemek egymásutániságát jelenti. Fajtái: statikus, dinamikus lista.
Lista adatszerkezet A lista adatszerkezet jellemzői 1 Különböző problémák számítógépes megoldása során gyakran van szükség olyan adatszerkezetre, amely nagyszámú, azonos típusú elem tárolására alkalmas,
RészletesebbenStruktúrák (struct) A struktúra szerkezetét meghatározó deklaráció általános formája:
Struktúrák (struct) A struktúra egy olyan összetett adatszerkezet, amely nemcsak azonos típusú elemeket rendelhet össze. A struktúra definíciójában leírjuk, hogy a struktúra hogyan épül fel. A struktúra
RészletesebbenAlgoritmusok pszeudókód... 1
Tartalomjegyzék Algoritmusok pszeudókód... 1 Abszolút érték... 1 Hányados ismételt kivonással... 1 Legnagyobb közös osztó... 2 Páros számok szűrése... 2 Palindrom számok... 2 Orosz szorzás... 3 Minimum
RészletesebbenPélda 30 14, 22 55,
Piros-Fekete fák 0 Példa 14, 22 55, 77 0 14 55 22 77 Piros-Fekete fák A piros-fekete fa olyan bináris keresőfa, amelynek minden pontja egy extra bit információt tartalmaz, ez a pont színe, amelynek értékei:
Részletesebben.Net adatstruktúrák. Készítette: Major Péter
.Net adatstruktúrák Készítette: Major Péter Adatstruktúrák általában A.Net-ben számos nyelvvel ellentétben nem kell bajlódnunk a változó hosszúságú tömbök, listák, sorok stb. implementálásával, mert ezek
RészletesebbenAlgoritmuselmélet 2. előadás
Algoritmuselmélet 2. előadás Katona Gyula Y. Budapesti Műszaki és Gazdaságtudományi Egyetem Számítástudományi Tsz. I. B. 137/b kiskat@cs.bme.hu 2002 Február 12. ALGORITMUSELMÉLET 2. ELŐADÁS 1 Buborék-rendezés
Részletesebbentétel: különböző típusú adatokat csoportosít, ezeket egyetlen adatként kezeli, de hozzáférhetünk az elemeihez is
A tétel (record) tétel: különböző típusú adatokat csoportosít, ezeket egyetlen adatként kezeli, de hozzáférhetünk az elemeihez is A tétel elemei mezők. Például tétel: személy elemei: név, lakcím, születési
RészletesebbenInformatika terméktervezőknek
Informatika terméktervezőknek C# alapok Névterület (namespace) using Osztály (class) és Obejtumok Metódus (function, procedure, method) main() static void string[] arg Szintaxis // /* */ \n \t Névadások
RészletesebbenBánsághi Anna 2014 Bánsághi Anna 1 of 33
IMPERATÍV PROGRAMOZÁS Bánsághi Anna anna.bansaghi@mamikon.net 7. ELŐADÁS - ABSZTRAKT ADATTÍPUS 2014 Bánsághi Anna 1 of 33 TEMATIKA I. ALAPFOGALMAK, TUDOMÁNYTÖRTÉNET II. IMPERATÍV PROGRAMOZÁS Imperatív
RészletesebbenMás szavakkal formálisan:, ahol olyan egész szám, hogy. Más szavakkal formálisan:, ahol olyan egész szám, hogy.
Bevezetés 1. Definíció. Az alsó egészrész függvény minden valós számhoz egy egész számot rendel hozzá, éppen azt, amely a tőle nem nagyobb egészek közül a legnagyobb. Az alsó egészrész függvény jele:,
RészletesebbenBánsághi Anna 2014 Bánsághi Anna 1 of 68
IMPERATÍV PROGRAMOZÁS Bánsághi Anna anna.bansaghi@mamikon.net 3. ELŐADÁS - PROGRAMOZÁSI TÉTELEK 2014 Bánsághi Anna 1 of 68 TEMATIKA I. ALAPFOGALMAK, TUDOMÁNYTÖRTÉNET II. IMPERATÍV PROGRAMOZÁS Imperatív
RészletesebbenTartalomjegyzék Algoritmusok - pszeudókód... 1 42
Tartalomjegyzék Algoritmusok - pszeudókód... 1 42 Abszolút érték...1 Hányados ismételt kivonással...1 Legnagyobb közös osztó... 1 2 Páros számok szűrése...2 Palindrom számok... 2 3 Orosz szorzás...3 Minimum
RészletesebbenINFORMATIKA javítókulcs 2016
INFORMATIKA javítókulcs 2016 ELMÉLETI TÉTEL: Járd körbe a tömb fogalmát (Pascal vagy C/C++): definíció, egy-, két-, több-dimenziós tömbök, kezdőértékadás definíciókor, tömb típusú paraméterek átadása alprogramoknak.
RészletesebbenSzámítógép hálózatok, osztott rendszerek 2009
Számítógép hálózatok, osztott rendszerek 2009 1: Bevezetés: Internet, rétegmodell Alapok: aszimptótika, gráfok 1 Az előadáshoz Előadás: Hétfő 10:00 12:00 óra Gyakorlat: Hétfő 14:00-16:00 óra Honlap: http://people.inf.elte.hu/lukovszki/courses/0910nwmsc
RészletesebbenProgramozás C++ -ban 2007/4
Programozás C++ -ban 2007/4 1. Az adatokhoz való hozzáférés ellenőrzése Egy C programban a struktúrák minden része mindig elérhető. Ugyanakkor ez nem a legkedvezőbb helyzet. Több szempontból is hasznos
RészletesebbenUgrólisták. RSL Insert Example. insert(22) with 3 flips. Runtime?
Ugrólisták Ugrólisták Ugrólisták Ugrólisták RSL Insert Example insert(22) with 3 flips 13 8 29 20 10 23 19 11 2 13 22 8 29 20 10 23 19 11 2 Runtime? Ugrólisták Empirical analysis http://www.inf.u-szeged.hu/~tnemeth/alga2/eloadasok/skiplists.pdf
RészletesebbenProgramozás 5. Dr. Iványi Péter
Programozás 5. Dr. Iványi Péter 1 Struktúra Véges számú különböző típusú, logikailag összetartozó változó együttese, amelyeket az egyszerű kezelhetőség érdekében gyűjtünk össze. Rekord-nak felel meg struct
RészletesebbenTorna. A torna.csv UTF-8 kódolású állományban soronként egy versenyző eredményeit tároljuk. Az adatokat pontosvessző választja el egymástól.
Torna A pekingi olimpián tornából hat versenyszámban mérettetik meg magukat a versenyzők. Ennek a versenynek az eredményeit kell feldolgoznia ebben a feladatban. A megoldás során vegye figyelembe a következőket:
RészletesebbenAlgoritmuselmélet. 2-3 fák. Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem. 8.
Algoritmuselmélet 2-3 fák Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem 8. előadás Katona Gyula Y. (BME SZIT) Algoritmuselmélet 8. előadás
RészletesebbenProgramozás I. 5. Előadás: Függvények
Programozás I 5. Előadás: Függvények Függvény Egy alprogram Egy C program általában több kisméretű, könnyen értelmezhető függvényből áll Egy függvény megtalálható minden C programban: ez a main függvény
RészletesebbenBevezetés a Programozásba II 12. előadás. Adatszerkezetek alkalmazása (Standard Template Library)
Pázmány Péter Katolikus Egyetem Információs Technológiai és Bionikai Kar Bevezetés a Programozásba II 12. előadás (Standard Template Library) 2014.05.19. Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.hu/groberto
RészletesebbenProgramozás alapjai C nyelv 8. gyakorlat. Mutatók és címek (ism.) Indirekció (ism)
Programozás alapjai C nyelv 8. gyakorlat Szeberényi Imre BME IIT Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.07. -1- Mutatók és címek (ism.) Minden változó és függvény
RészletesebbenMiről lesz ma szó? A PROGAMOZÁS ALAPJAI 1. Dinamikus változók. Dinamikus változók. Dinamikus változók. Dinamikus változók. 7.
Miről lesz ma szó? A PROGAMOZÁS ALAPJAI 1 Vitéz András egyetemi adjunktus BME Híradástechnikai Tanszék vitez@hit.bme.hu Dinamikus memóriakezelés Dinamikus tömbök Dinamikus stringek Program kapcsolata a
RészletesebbenProgramozás C nyelven FELÜLNÉZETBŐL elhullatott MORZSÁK. Sapientia EMTE
Programozás C nyelven FELÜLNÉZETBŐL elhullatott MORZSÁK Sapientia EMTE 2015-16 1 Felülnézet 1 Feltételes fordítás #if, #else, #elif, #endif, #ifdef, #ifndef stb. Felülnézet 2 #include: hatására a preprocesszor
RészletesebbenBuborékrendezés: Hanoi Tornyai: Asszimptótikus fv.ek: Láncolt ábrázolás: For ciklussal:
Buborékrendezés: For ciklussal: Hanoi Tornyai: Asszimptótikus fv.ek: Láncolt ábr.: ha p egy mutató típusú változó akkor p^ az általa mutatott adatelem, p^.adat;p^.mut. A semmibe mutató ponter a NIL.Szabad
RészletesebbenAmortizációs költségelemzés
Amortizációs költségelemzés Amennyiben műveleteknek egy M 1,...,M m sorozatának a futási idejét akarjuk meghatározni, akkor egy lehetőség, hogy külön-külön minden egyes művelet futási idejét kifejezzük
RészletesebbenÉrdekes informatika feladatok
A keres,kkel és adatbázissal ellátott lengyel honlap számos díjat kapott: Spirit of Delphi '98, Delphi Community Award, Poland on the Internet, Golden Bagel Award stb. Az itt megtalálható komponenseket
RészletesebbenGráfelméleti feladatok. c f
Gráfelméleti feladatok d e c f a b gráf, csúcsok, élek séta: a, b, c, d, e, c, a, b, f vonal: c, d, e, c, b, a út: f, b, a, e, d (walk, lanţ) (trail, lanţ simplu) (path, lanţ elementar) 1 irányított gráf,
RészletesebbenEgyirányban láncolt lista
Egyirányban láncolt lista A tárhely (listaelem) az adatelem értékén kívül egy mutatót tartalmaz, amely a következő listaelem címét tartalmazza. A láncolt lista első elemének címét egy, a láncszerkezeten
RészletesebbenAlgoritmuselmélet. Gráfok megadása, szélességi bejárás, összefüggőség, párosítás. Katona Gyula Y.
Algoritmuselmélet Gráfok megadása, szélességi bejárás, összefüggőség, párosítás Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem 2. előadás
RészletesebbenAlkalmazott modul: Programozás 4. előadás. Procedurális programozás: iteratív és rekurzív alprogramok. Alprogramok. Alprogramok.
Eötvös Loránd Tudományegyetem Informatikai Kar Alkalmazott modul: Programozás 4. előadás Procedurális programozás: iteratív és rekurzív alprogramok Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.hu/groberto
Részletesebben1: Bevezetés: Internet, rétegmodell Alapok: aszimptótika, gráfok. HálózatokII, 2007
Hálózatok II 2007 1: Bevezetés: Internet, rétegmodell Alapok: aszimptótika, gráfok 1 Az előadáshoz Előadás: Szerda 17:00 18:30 Gyakorlat: nincs Vizsga írásbeli Honlap: http://people.inf.elte.hu/lukovszki/courses/g/07nwii
RészletesebbenGráfok 1. Tárolási módok, bejárások. Szoftvertervezés és -fejlesztés II. előadás. Szénási Sándor
Gráfok 1. Tárolási módok, bejárások előadás http://nik.uni-obuda.hu/sztf2 Szénási Sándor szenasi.sandor@nik.uni-obuda.hu Óbudai Egyetem,Neumann János Informatikai Kar Gráfok 1. Tárolási módok Szélességi
Részletesebben// keressük meg a legnagyobb faktoriális értéket, ami kisebb, // mint százmillió
BME MOGI Gépészeti informatika 3. 1. feladat Végezze el a következő feladatokat! Kérjen be számokat 0 végjelig, és határozza meg az átlagukat! A feladat megoldásához írja meg a következő metódusokat! a.
Részletesebben