374 Matching Annotations
  1. Last 7 days
    1. isUnerLeft

      Apa sih perbedaan IsUnerLeft dengan IsSkewLeft?

      • isUnerLeft:
      • Hanya mengecek hubungan akar dan anak langsungnya.
      • Fokus pada apakah akar memiliki anak kiri saja, tanpa memedulikan keseluruhan struktur pohon.
      • Contoh: A / B

        • isUnerLeft(A): True, karena A hanya punya anak kiri (B).

        A / B / \ C D - isUnerLeft(A): Tetap True, karena hanya A yang dicek, dan A hanya punya anak kiri (B), tanpa memperhatikan apa yang ada di bawah B.


      • isSkewLeft:
      • Memeriksa seluruh pohon.
      • Pastikan semua simpul dalam pohon hanya memiliki anak kiri, secara rekursif.
      • Contoh: A / B / C
        • isSkewLeft(A): True, karena semua simpul hanya memiliki anak kiri. A / B \ C
        • isSkewLeft(A): False, karena B punya anak kanan (C).

      Kesimpulan:

      • isUnerLeft: Hanya fokus pada simpul akar dan anak langsungnya (lokal).
      • isSkewLeft: Mengevaluasi keseluruhan pohon biner secara rekursif, memastikan miring ke kiri sepenuhnya.
    2. Penting

      WOY BACA HIGHLIGHT IS UNER LEFT

    3. else: delLeft(p↑.left,x)

      bisa unerleft/biner, dua duanya punya subpohon kiri maka solusi dijadikan satu

    4. isUnerRight(p): delLeft(p↑.right,x)

      kalo unerright gapunya subpohon kiri

    5. DelDaunTerkiri

      Basis 1. btw untuk menentukan basis (kondisi dasar) apa yg dipake bisa dikira-kira, berhubungan daun selalu 1 btw

    6. input/output p

      input output karena p AKAN BERUBAH

    7. 1 + max(depth(p↑.left), depth(p↑.right))

      dihiitung tinggi kiri dan kanan, bandingkan mana yg tertinggi, pilih tertinggi lalu tambah 1 (akar)

    8. Tinggi/Kedalaman Pohon

      Pakai basis 0

    9. isBiner(p) : → nbLeaf1(p↑.left) + nbLeaf1(p↑.right)

      sama aja kaya nb element tapi akar == 0

    10. nbLeaf1

      ini baru rekursif, basis 1 karena memang hanya memproses berdasarkan basis 1, basis 0 udh di handle

    11. nbLeaf

      ini bukan rekursif karena gaada pemanggilan diri dia sendiri, hanya analisis kasus biasa

    12. 0 (utk akar) + Jumlah_daun(pohon kiri) + Jumlah_daun(pohon kanan)

      daun itu terujung

    13. isUnerLeft(p) : → 1 + nbElmt(p↑.left)isUnerRight(p): → 1 + nbElmt(p↑.right)isBiner(p) : → 1 + nbElmt(p↑.left) + nbElmt(p↑.right)

      Fungsi dibuat seperti ini untuk mencegah NbElmt dengan basis 0.Oke, mari kita sederhanakan penjelasannya.

      Kenapa Basis 1 Butuh unerleft, unerright, dan isbiner?

      • Basis 1 adalah aturan di mana rekursi hanya berhenti kalau pohon punya satu simpul (akar saja).
      • Untuk memastikan rekursi tetap berjalan sesuai aturan basis 1, kita perlu tahu bentuk struktur pohon yang sedang diproses:
      • Pohon punya anak kiri saja (unerleft).
      • Pohon punya anak kanan saja (unerright).
      • Pohon punya dua anak (isbiner).

      Dengan kata lain, kita pecah bentuk pohon menjadi 3 kategori supaya fungsi bisa tahu ke mana rekursi harus berjalan (kiri saja, kanan saja, atau kiri dan kanan).


      Kenapa Bukan Basis 0?

      • Basis 0 berhenti kalau pohon kosong (NIL).
      • Tapi di basis 1, kita tidak menganggap pohon kosong sebagai bagian dari logika. Kita hanya peduli pada pohon yang punya minimal satu simpul.
      • Jadi, logika basis 1 menghindari pohon kosong dan memaksa fungsi hanya berhenti kalau pohon punya satu simpul saja.

      Contoh Sederhana

      Misalkan ada pohon seperti ini:

      A / \ B C / D

      Dengan Basis 1:

      1. Kalau pohon punya satu simpul (seperti D), langsung hitung dan berhenti.
      2. Kalau pohon punya anak kiri saja, lanjut ke kiri (contoh: B).
      3. Kalau pohon punya anak kanan saja, lanjut ke kanan.
      4. Kalau pohon punya dua anak (contoh: A), proses keduanya.

      Kode Sederhana

      c function NbElmt(p: BinTree) -> integer IF isOneElmt(p) THEN RETURN 1 ELSE IF unerleft(p) THEN RETURN 1 + NbElmt(LEFT(p)) ELSE IF unerright(p) THEN RETURN 1 + NbElmt(RIGHT(p)) ELSE IF isbiner(p) THEN RETURN 1 + NbElmt(LEFT(p)) + NbElmt(RIGHT(p))

      • isOneElmt(p): Kalau pohon cuma satu simpul, berhenti di situ.
      • unerleft(p): Kalau pohon cuma punya anak kiri, hitung akar + rekursi ke kiri.
      • unerright(p): Kalau pohon cuma punya anak kanan, hitung akar + rekursi ke kanan.
      • isbiner(p): Kalau pohon punya dua anak, hitung akar + rekursi kiri + rekursi kanan.

      Simpulan

      • Basis 1 fokus ke pohon dengan minimal satu simpul, bukan pohon kosong.
      • unerleft, unerright, dan isbiner membantu memecah struktur pohon supaya rekursi berjalan dengan aturan basis 1, tanpa kembali ke logika basis 0 (pohon kosong).
    14. Pohon Basis-1

      Perbedaan utama antara pohon biner basis 0 dan pohon biner basis 1 terletak pada cara definisi kondisi dasar (basis) dalam proses rekursi dan bagaimana pohon tersebut direpresentasikan secara logis dalam setiap operasi. Mari kita perjelas:


      1. Basis 0: Kondisi Kosong

      Pada basis 0, pohon dianggap kosong jika tidak ada simpul sama sekali. Kondisi berhenti dalam rekursi adalah ketika pohon mencapai kondisi kosong.

      Ciri-ciri Pohon Basis 0:

      • Kondisi Terminasi: IsTreeEmpty(p) == true (artinya simpul p == NIL).
      • Basis 0 digunakan untuk kasus di mana: ** - Pohon tidak memiliki simpul sama sekali (kosong)**.
      • Proses rekursi berhenti saat mencapai simpul kosong.
      • Definisi Rekursif:
      • Pohon biner basis 0 didefinisikan sebagai:
        • Pohon kosong, atau
        • Sebuah simpul akar dengan dua sub-pohon kiri dan kanan yang juga pohon biner basis 0.

      Ilustrasi Basis 0

      Pohon Basis 0: Pohon Kosong -> Tidak ada simpul

      Kondisi rekursi:

      - Jika pohon kosong, berhenti. - Jika tidak kosong, proses akar, lalu lanjutkan ke sub-pohon kiri dan kanan.


      2. Basis 1: Kondisi Satu Elemen

      Pada basis 1, pohon dianggap memiliki satu elemen jika hanya ada satu simpul (simpul akar) tanpa sub-pohon kiri dan kanan. Kondisi berhenti dalam rekursi adalah ketika pohon memiliki hanya satu simpul.

      Ciri-ciri Pohon Basis 1:

      • Kondisi Terminasi: isOneElmt(p) == true (artinya simpul p adalah akar, dan LEFT(p) == NIL serta RIGHT(p) == NIL).
      • Basis 1 digunakan untuk kasus di mana:
      • Pohon memiliki satu elemen (akar saja), tanpa sub-pohon.

        ** - Proses rekursi berhenti saat mencapai simpul tunggal.**

      • Definisi Rekursif:
      • Pohon biner basis 1 didefinisikan sebagai:
        • Sebuah simpul akar tanpa sub-pohon kiri dan kanan, atau
        • Sebuah simpul akar dengan dua sub-pohon kiri dan kanan yang juga pohon biner basis 1.

      Ilustrasi Basis 1

      Pohon Basis 1: Pohon dengan Satu Simpul A / \ NIL NIL

      Kondisi rekursi: - Jika pohon hanya memiliki satu elemen, berhenti. - Jika memiliki lebih dari satu elemen, proses akar, lalu lanjutkan ke sub-pohon kiri dan kanan.


      Perbandingan

      | Aspek | Basis 0 | Basis 1 | |-----------------------|----------------------------------------|----------------------------------------| | Kondisi Terminasi | IsTreeEmpty(p) == true | isOneElmt(p) == true | | Definisi Kosong | Pohon benar-benar kosong (tidak ada) | Pohon kosong hanya setelah 1 elemen | | Definisi Rekursif | Pohon kosong atau memiliki simpul akar dan dua sub-pohon basis 0. | Pohon satu elemen, atau akar dengan dua sub-pohon basis 1. | | Contoh Pohon | Kosong: NIL | Satu elemen: simpul dengan LEFT = NIL dan RIGHT = NIL | | Penggunaan Rekursi| Berhenti saat pohon kosong | Berhenti saat pohon terdiri dari satu simpul. |


      Contoh dalam Rekursi

      Basis 0 (Kosong)

      Fungsi menghitung jumlah elemen pohon basis 0: c function nbElmt(p: BinTree) -> integer { KAMUS LOKAL } { ALGORITMA } IF IsTreeEmpty(p) THEN RETURN 0 ELSE RETURN 1 + nbElmt(LEFT(p)) + nbElmt(RIGHT(p)) - Basis 0: Jika pohon kosong (IsTreeEmpty(p)), kembalikan 0. - Rekursi berlanjut sampai semua simpul diakses.

      Basis 1 (Satu Elemen)

      Fungsi menghitung jumlah elemen pohon basis 1: c function nbElmt(p: BinTree) -> integer { KAMUS LOKAL } { ALGORITMA } IF IsTreeEmpty(p) THEN RETURN 0 ELSE IF isOneElmt(p) THEN RETURN 1 ELSE RETURN 1 + nbElmt(LEFT(p)) + nbElmt(RIGHT(p)) - Basis 1: Jika pohon hanya memiliki satu elemen (isOneElmt(p)), kembalikan 1. - Rekursi berlanjut jika pohon memiliki lebih dari satu simpul.


      Kesimpulan

      • Basis 0: Fokus pada kondisi pohon kosong. Rekursi berhenti ketika tidak ada simpul lagi.
      • Basis 1: Fokus pada kondisi pohon dengan satu simpul. Rekursi berhenti ketika simpul tunggal ditemukan.
      • Pilihan antara basis 0 atau basis 1 tergantung pada konteks operasi dan cara definisi pohon biner yang diinginkan.
    15. Basis 1: jika pohon satu elemen, maka jumlah elemen adalah 1

      TIDAK AKAN PERNAH BERTEMU POHON KOSONG

    16. 1

      akar

    17. postOrder(p↑.left)postOrder(p↑.right)proses(p)

      ini urutannya pokonya ngikutin requirement nya aja

    18. proses(p)

      proses akar ada di tengah

    19. if isTreeEmpty(p) then { Basis-0 }{ do nothing }

      ini tuh berarti kaya kondisi terminasi ya. Penjelasan, Ya, Anda benar! Dalam contoh kode PrintPreOrder dari PDF, basis 0 bertindak sebagai kondisi terminasi dari proses rekursi. Basis 0 memastikan bahwa traversal berhenti saat mencapai sub-pohon kosong (atau simpul tanpa anak).

      Penjelasan Rekursi PrintPreOrder

      1. Pola Traversal PreOrder

      Traversal pre-order dilakukan dengan urutan: 1. Proses akar. 2. Traversal sub-pohon kiri. 3. Traversal sub-pohon kanan.

      Pada setiap langkah, rekursi dipanggil untuk sub-pohon kiri terlebih dahulu, lalu sub-pohon kanan.

      2. Basis 0 sebagai Kondisi Terminasi

      • Basis 0 diartikan sebagai kondisi di mana simpul pohon yang sedang diproses adalah kosong (NULL).
      • Ketika simpul pohon bernilai NULL, fungsi atau prosedur rekursi akan berhenti untuk cabang tersebut dan kembali ke level rekursi sebelumnya.
      • Hal ini mencegah rekursi tanpa akhir dan menjaga traversal tetap valid.

      3. Alur Rekursi

      • Dari akar pohon:
      • Cetak nilai akar.
      • Rekursi ke sub-pohon kiri (terus ke bawah sampai mencapai simpul kosong).
      • Rekursi ke sub-pohon kanan (terus ke bawah sampai simpul kosong).
      • Basis 0 memastikan bahwa jika simpul yang sedang diproses adalah NULL, tidak ada lagi pemanggilan rekursif, sehingga traversal "berbalik" ke simpul di atasnya.

      Kode PrintPreOrder

      Berikut adalah cuplikan kode dari PDF pada halaman 23: c procedure PrintPreOrder(p: BinTree) /* I.S. p terdefinisi */ /* F.S. Semua node pohon dicetak secara pre-order */ { KAMUS LOKAL } { ALGORITMA } IF NOT IsTreeEmpty(p) THEN Print(INFO(p)) /* Proses simpul akar */ PrintPreOrder(LEFT(p)) /* Proses sub-pohon kiri */ PrintPreOrder(RIGHT(p)) /* Proses sub-pohon kanan */

      • Kondisi IsTreeEmpty(p) memeriksa apakah simpul p adalah NULL. Jika ya, maka traversal untuk simpul ini berhenti (basis 0).
      • Jika tidak kosong, simpul diproses (dicetak), lalu rekursi dipanggil untuk sub-pohon kiri dan kanan.

      Ilustrasi Traversal

      Misalkan pohon biner seperti berikut:

      A / \ B C / \ D E

      Traversal pre-order: 1. Cetak A. 2. Rekursi ke sub-pohon kiri B: - Cetak B. - Rekursi ke sub-pohon kiri D: - Cetak D. - Basis 0: D tidak memiliki anak, kembali ke B. - Rekursi ke sub-pohon kanan E: - Cetak E. - Basis 0: E tidak memiliki anak, kembali ke B, lalu ke A. 3. Rekursi ke sub-pohon kanan C: - Cetak C. - Basis 0: C tidak memiliki anak.

      Hasil pre-order: A, B, D, E, C.


      Kesimpulan

      • Basis 0 memastikan rekursi berhenti pada simpul kosong, sehingga traversal "berbalik" ke simpul di atasnya.
      • Dalam traversal pre-order, rekursi terjadi dari akar → kiri → kanan, dengan basis 0 menjadi kondisi terminasi untuk setiap cabang sub-pohon.
    20. output(p↑.info)

      ini proses(p) kalau print pre order

    21. C-D-B-F-G-E-A

      mulai dari baris terbawah. C karna gaada subpohon kiri, subpohon kanan maka C doang, lalu pindah ke kanannya (D), terus pindah ke sub pohon kanan

    22. Pohon biner tidak kosong terdiri dari sebuah simpul akar dan dua anakyang salah satunya pasti tidak kosong

      pasti sub pohon salah satunya ga kosong, kalo yg basis 0 bisa kosong

    23. Gunakan isUnerLeft, isUnerRight, isBiner untuk memastikan tidakterjadi pemrosesan pada pohon kosong

      tidak akan pernah ketemu pohon kosong di basis 1

    24. Basis: pohon biner yang hanya terdiri dari akar {menggunakan predikat isOneElmt}

      Basisnya hanya akar doang, kalau IsOneElement(p) == true

    25. deallocTreeNode (input/output p: Address)

      dealokasi pohon P

    26. x: ElType

      info dari sebuah node

    27. Konstruktor

      ada 2 bentuk, fungsi dan prosedur. Perbedaan utama antara fungsi dan prosedur dalam pembuatan pohon biner terletak pada cara mereka mengembalikan hasilnya:

      1. Fungsi (function):
      2. Fungsi menghasilkan BinTree sebagai nilai kembalian (return value).
      3. Hasilnya langsung berupa pohon biner yang terbentuk, dan fungsi tersebut tidak memodifikasi parameter input secara langsung.
      4. Contoh: Pada halaman 15, fungsi Tree mengembalikan pohon biner yang dibuat dari akar dan dua sub-pohon kiri dan kanan, tanpa memanipulasi argumen input: c function Tree(akar: ElType, l: BinTree, r: BinTree) → BinTree

      5. Prosedur (procedure):

      6. Prosedur menggunakan parameter output (seperti p atau BinTree) untuk memberikan hasilnya.
      7. Parameter output ini biasanya dapat dimodifikasi lebih lanjut di luar prosedur.
      8. Contoh: Pada halaman 15, prosedur CreateTree memanfaatkan parameter output untuk memberikan hasil pohon biner: c procedure CreateTree(input akar: ElType, input l, r: BinTree, output p: BinTree)

      Kapan Menggunakan Fungsi atau Prosedur?

        • Gunakan fungsi ketika hasil akhir hanya berupa sebuah pohon biner, tanpa perlu manipulasi lebih lanjut.
        • Gunakan prosedur ketika pohon biner yang dihasilkan memerlukan penanganan lebih lanjut (misalnya, manipulasi node).

      Pendekatan ini membantu membedakan tujuan kode Anda: apakah untuk mendapatkan hasil langsung (immutable seperti fungsi) atau untuk manipulasi lanjutan (mutable seperti prosedur).

    28. input akar: ElType,input l: BinTree, input r: BinTree,output p: BinTree

      3 parameter sama, tapi sebagai outputnya kalau tadi berbentuk BinTree kalau ini berbentuk p yang bisa di passing/assign

    29. akar: ElType, l: BinTree, r: BinTree

      nanti fungsi Tree akan menyambungkan antara inputan Akar ke subpohon kiri L dan subphon kanan R

    30. procedure

      bintree yang dihasilkan di representasikan oleh sebuah parameter output P

    31. function

      akan menghasilkan bintree

    32. Address left;Address right

      bisa disebut BinTree juga pada dasarnya BinTree di definisikan juga sebagai Address

    33. ADT Pohon Biner

      Cara akses nya: Akar(P), Left(P), Right(P)

    34. Address

      pointer terhadap sbuah simple

    35. Pohon biner condong kanan

      tidak pernah punya subpohon kiri

    36. Pohon biner condong kir

      tidak pernah punya subpohon kanan

    37. 3 *

      anak dari simpul makk 2 gabisa lebih

    38. terdiri atas sebuah simpul yang disebut akar dan dua buah himpunan lainyangdisjoint yang merupakan pohon biner, yang disebut sebagai subpohon kiri dan sub pohon kanan

      intinya bisa punya akar yang di dalamnya ada subpohon kiri dan subpohon kanan

    39. Linier

      jir

    40. Postfix

      dari subpohon kiri, subpohon kanan, lalu akar

    41. Prefix

      prefix simbol akar di awal, diikuti subpohon kiri, dan subpohon kanan

    42. Lebar (breadth):maksimum jml simpulpd suatu tingkat

      Misal pada level 2 maxnya 2, level 3 maxnya 4

    43. Binaire (binary), maksimum subpohon: 2• N-aire, maksimum subpohon: N

      Maksimum sub-pohon = N-aire

    44. elemen yang dibedakan dari yang lain → AKAR

      yg paling atas

    45. SubPohon

      subpohon kalau diambil sebenernya pohon juga, yang punya akar, dan subpohon juga

    Annotators

    1. Penambahan Relasi Baru

      ini berarti untuk MK_DOS

    2. MK_DOS
      • relasi ⟨Dosen, MataKuliah⟩ {atau relasi mengajar}.
      • struktur nodenya, elemen satu nunjuk ke matkul, 2 ke dosen, 3 next
    3. relasi⟨Dosen, MataKuliah⟩

      INI MK_DOS

    4. Relasi sebagai list terpisah

      relasi hubungan mengajar dipisah

    5. MataKuliah

      Sebuah mata kuliah bisa diajar lebih dari 1 dosen

    6. Dosen
      • List biru: list dosen
      • List hijau: penghubung yang menunjukkan hubungan "mengajar" ke mata kuliah
      • List merah: mata kuliah

    Annotators

    1. Mendaftarkan anak yang baru lahir

      kinerja sama aja

    2. Alternatif-2

      kinerja lebih baik

    3. Alternatif-1:

      akan memberikan kinerja yg lebih baik untuk fitur ini

    4. if father(anak)=pegawai then

      ada kondisional cek apakah ortu nya sama dengan pegawai yang lagi di iterasi

    5. FirstPeg: ListPegFirstAnak: ListAnak

      first ada dua biji

    6. father: AdrPeg

      ada pointer ke ayah

    7. FirstPeg: ListPeg

      FirstPeg menunjuk ke pegawai pertama

    8. List Pegawai
      • Pegawai A akan mempunyai anak X dan Y, maka list anak akan kebawah muncul dari list pegawai
      • Jadi ada dua pointer, satu buat hubungan dan satu buat next. Tapi list disatukan
    9. List Pegawai dengan 3 elemen

      Kalo ini list anak dan pegawai dipisahkan, list anak akan menunjuk ke list pegawai yang sesuai. Jadi ada dua pointer, satu buat hubungan dan satu buat next.

    Annotators

  2. Local file Local file
    1. Regular graphs

      REgular graph dan graph lain yang ga ngestate jenis directed/undirected berarti APPLY KE KEDUA JENIS TERSEBUT.

    2. newGraphNode

      alokasi node

    3. 3

      ada 3 node yang masuk ke no 5

    4. 0

      tidak ada 1 busur yang masuk ke node 1

    5. Latihan Graph
      • karena simpul ada 5, maka punya leader list yang elemennya ada 5. trailer list itu kotak dua kbawah yang ada 4 dan 1 di paling bawah.

      • trailer list akan menyatakan seluruh busur yang menghubungkan antara node tersebut ke node yang lain

      • contohnya node 1, nunjuk ke 2 dan 3. maka akan punya 2 trailer list yang menunjuk ke 2 dan 3
    6. Simpul dan busur disimpan sebagai objek/record yang memuat informasi tentangsimpul/busur tersebutSetiap simpul menyimpan list dari busur yang terhubung dengannya

      meyimpan simpul dan list simpul yang terhubung dengannya

    7. node

      jumlah simpul ada 6, maka node ada 6

    8. node

      karna banyak node 6, maka matriks nya 6x6

    9. list of nodes

      menghasilkan list of node yang berisi daftar simpul yang bertetangga dengan v

    10. v1, v2

      parameter

    11. [vs undirected graphs]

      kebalikan dari undirected graph (ga ada arah), a->k k->a diasumsikan sama aja

    Annotators

    1. char *s = "(A()())";

      contoh string

    2. (*idx)++;

      setelah selesai buat phon kanan akan menunjuk kurung tutup, dan harus di advance lagi

    3. BuildTreeFromString(&LEFT(*t),st,idx);BuildTreeFromString(&RIGHT(*t),st,idx);

      kalo udh ketemu kurung buka sudah siap memanggil fungsi yang sama dengan parameter left dari T, setelah left terbentuk panggil dengan parameter right

    4. (*idx)++;

      maju ke idx slanjutnya, dalam representasi list ini setelah abjad adalah karakter kurung buka,

    5. t = newTreeNode(st[*idx])

      ciptakan node dengan abjad yang ditunjuk idx

    6. else

      abjad

    7. (*idx)++

      mirip ADV

    8. int *idx

      idx menunjuk ke index dari string st, index akan berada di awal string. seiring dipanggilnya void yg sama, idx bergerak ke kanan dan pohon dibangun secara rekursif

    9. char *st

      string yg digunakan

    10. start

      yg tadi ya jadi diluar build tree

    11. BuildTree(&(LEFT(*t)));BuildTree(&(RIGHT(*t)))

      akan memanggil prosedur yg sama dengan parameter Left dari T dan setelah selesai untuk Right dari T.

    12. else

      abjad

    13. BuildTree

      start mesin karakter akan dipanggil oleh prosedur yang memanggil build tree (di kode lain sblm fungsi ini)

    14. Struktur data yang digunakan adalah tree biasa (tidak memerlukan pointer keBapak)

      dalam typedef gaada parent: Address

    15. *t = ptr;

      currentParrent == Nil artinya ptr akan menjadi akar dari pohon kita

    16. currParent != NIL

      awal pembangunan pohon

    17. currParent = PARENT(CurrParent);

      naik

    18. if (c1 != '(') {

      sebenarnya sudah selesai dengan subpohon kanan, waktunya naik

    19. insKi = ( c1 != ')')

      kondisi insertkiri, C1 != ')' kalo kanan berarti sama dengan

    20. default

      abjad

    21. insKi

      apakah node akan disisipkan sebagai subpohon kiri atau subpohon kanan

    22. ElType x

      valuenya x

    23. newTreeNode

      alokasi

    24. dibutuhkan informasi karakter sebelumnya → karena itu digunakan mesin couple (C1, CC)

      jadi ada dua window di mesin karakter (mesin couple)

    25. parent: Address

      TAMBAHAN

    26. (K()())))

      BARIS KEDUA

    27. (J()()))

      subpohon kanan DIBARIS KEDUA

    28. Contoh - 2IF2110/IF2111 Pohon Biner (Bagian 2) 15(A(B(C(D()())(E()()))

      pokonya kalo baris pertama selalu kiri, max ada 2 baris dan di baris kedua itu sub pohon kanan

    29. (C()())

      subpohon kanan A

    30. (B()())

      subphon kiri A

    31. ()

      sub phon kanan kosong

    32. ()

      subpohon kiri kosong

    33. q↑.info.count ← p↑.info.count

      janlup ini juga

    34. q↑.info.key ← p↑.info.key { salin info p ke q }

      ketika dah ditemukan anak terbesar

    35. p↑.right  NIL: delNode(p↑.right)

      supaya dapat anak terbesar

    36. delNode(q↑.left)

      akan mencari anak terbesar dari subpohon kiri yang dimiliki oleh q

    37. isUnerLeft(q) : p ← q↑.left

      q punya subpohon kiri, set p jadi kiri dari q (anak dari subpohon kiri dari q akan dimasukkan kedalam p)

    38. isUnerRight(q): p ← q↑.right

      q punya subpohon kanan, set p jadi right dari q (anak dari subpohon kanan dari q akan dimasukkan kedalam p)

    39. depend on q

      cek apakah q dgn kondisi dibawah

    40. isOneElmt(q) : p ← NIL

      kalo daun, set p jadi NIL

    41. x.key < p↑.info.key : delBTree(p↑.left, x)

      kiri mas

    42. input x: ElType

      node yang akan dihapus

    43. DelBTree(p,10)

      copy nilai 8 ke 10 lalu hapus node 8

    44. DelBTree(p,5)

      sama, node 3 dicopy ke posisi 5, lalu yg node 3 dihapus

    45. DelBTree(p,15)53 813181013

      lebih rumit karena 13 harus dipindah menggantikan posisi node bervalue 15, caranya 1. copy nilai node 13 ke 15 2. hapus node 13

    46. x.key < p↑.info.key : insSearchTree(x, p↑.left)x.key > p↑.info.key : insSearchTree(x, p↑.right)

      p itu akar, kiri kalo lebih kecil dari p, kanan kalo lebih gede dari p

    47. x.key = p↑.info.key : p↑.info.count ← p↑.info.count + 1

      kalo sama (muncul lebih dari sekali) count di increment

    48. input x: ElType

      value dari node

    49. insSearchTree

      melakukan insert node pada BST

    50. Banyak kemunculan suatunilai key disimpan dalam field “count”

      kalau key muncul > 1 ada field count yang akan mencatat banyaknya kemunculan nilai tersebut

    51. Nilai simpul (key)

      value

    52. • semua simpul pada subpohon kiri < Akar p• semua simpul pada subpohon kanan >= Akar p

      urutan isi elmen itu kiri < akar <= kanan

    53. Subpohon kiri dan subpohon kanan merupakan BST

      jadi definisi rekursif

    54. p

      pohon biner

    55. p↑.left ← l; p↑.right ← r

      Menyambungkan dengan elemen akar yang dibuat setelah subpohon terbuat

    56. nR ← n – nL - 1
      • 1 (akar)
    57. if (p  NIL)

      alokasi berhasil

    58. nL, nR

      banyak node di sisi kiri L dan sisi kanan R

    59. if (n = 0) then { Basis-0 }

      basis0

    60. n: integer

      banyak node yang akan dibuat

    Annotators

    1. Zone yang dibebaskan berada di tengah list, di antara elemen KIRI dan KANAN:KIRI dan KANAN digabung → salah satu di-delete, lainnya di-updateDi tengah KIRI dan KANAN, tapi tidak bersambung → insert elemen baru di antara KIRIdan KANANTerletak sesudah elemen KIRI → update KIRITerletak sebelum elemen KANAN → update KANAN

      apa ini lek

    2. mengubah

      apa

    3. mengubah

      maksud mengubah apa?

    4. input X:

      banyak blok yang di kosongkan

    5. input IAw: integer

      indeks awal yang akan dijadikan kosong

    6. Best Fit

      beda sama FF di case C yaitu yang di dealokasi yang <17,3> karena better (Sama dengan)

    7. else Set IAw = 0

      ini kalo ga nemu samsek

    8. a. jika jumlah blok kontigu sama dengan X, hapus elemen listkosong tersebut,b. jika jumlah blok kontigu lebih besar dari X, update elemenlist kosong tersebut.

      intinya bedanya FF dan BF itu kalo FF lgsg stop pas nemu yang fit kalo BF dibandingin dulu lalu dipilih yang terbaik untuk fit

    9. Best Fit

      cari sluruh elemen kosong di block apakah ada yang memenuhi syarat >= x, kalo gaada yg mendekati x aja

    10. Alokasi
      • Awalnya kosong smua Nb = 20 lalu dialkoasi 3 jadi 17 (kasus 1)
      • Kasus kedua ada yg exact sama, jadi <5,10> di dealokasi sehingga list zone kosong berubah
      • Hanya ada yang lebih besar, jadi dikurang di bagian <5,10>
    11. IAw dengan Aw(P)

      Akses isian alamat Aw(P) (harusnya index)

    12. lse { lebih besar: update zone kosong }Update Nb(P) dan Aw(P)

      Nb(P) = Nb(P) - x * Aw(P) di set karena ketemu* *

    13. update elemen list kosong tersebut

      update ukuran tsb - x

    14. 1 NB

      bentuk utama list berkait (satu kesatuan dianggap zone). ketika diawal karena semua kosong jadi <1,NB> (nb semua blok kosong) <blok ke berapa, jmlh blok kosong>

    15. Nb

      banyak blok dalam zone kosong

    16. Aw

      indeks awal

    17. ZB

      tipe block untuk sebuah zone

    18. List zone kosong

      ISINYA LIST ZONE KOSONG AJA, tiap zone akan jadi elemen list

    19. Rep. Berkait – Blok Kosong

      BEDANYA YANG DISIMPAN ITU HANYA BLOK KOSONG NYA

    Annotators

    1. Traversal untuk mengelompokkan KOSONG di kiri dan ISI di kanan denganmenukarkan dua elemen

      jadi kaya swap, kosong bakal dituker ke kiri, yang true otomatis ke kumpul ke kanan

    2. Traversal untuk mencacah banyaknya blok kosong, misalnya NKosong

      cari dulu berapa banyak NKosong

    3. if blok pertama zone kosong thenHitung banyaknya blok dlm zone kosong tsb.

      hitung banyak block kosong per zona kosong

    4. semua blok diperiksa atau blok berukuran = X

      beneran cari traversal ke seluruh blok sampe ada yg sama atau mendekati ke X

    5. NKosong  X

      intinya kalo dah ketemu yg cukup lgsg gas

    6. Alokasi dilakukan pada zone yang memenuhi syarat yang pertama kali ditemukan

      begitu ketemu sama zone yang sesuai dengan yang diharapkan (ada aja yg kosong, misal X 5 dan zonenya tersedia), langsung pake zone tersbut untuk di alokasikan. tanpa ada pengecekan mana yg paling ok (efisien)

    7. output IAw: integer

      IAw (indeks awaL) merupakan alamat indeks awal dari memori yg berhasil di alokasikan

    8. input X: integer

      menyatakan banyaknya blok yang akan di alokasikan

    9. NB: integer = 100

      banyak blok memori

    10. InitMem

      blok kosong yg false smua (kondisi awal)

    11. Alokasi dan dealokasi memori menyebabkan perubahan terhadap zone bebas

      Alokasi: mengurangi zone bebas Dealokasi: menambah zone bebas

    12. Memori
      • F: memori kosong/blok kosong
      • T : terisi
      • NB Blok: banyak blok yg dikelola

      jadi kalo ada request 2 blok bakal cari emang exact 2 blok (kalo 4 blok diambil 2 doang gaakan mau karena bakal ga efisien dan ngerusak selanjutnya) jadi dicari yang eksak sama. (ini bestfit)

      yg langsung ketemu di awal (firstfit)

      best bakal iterasi sampe ujung kalo first yaudah sampe yang ada fit doang

    Annotators

    1. ama dengan untuk representasi kontigu

      isinya loop yg berisi pilihan dan user milih mau make operasi yang mana

    2. populatePol

      mengisi dengan 0

    3. insertLast

      buat sisip elemen

    4. function newSuku () → Address { Alokasi sebuah suku }procedure deallocSuku (input/output pt: Address) { Dealokasi sebuah suku }

      Alokasi dan dealokasi

    5. Polinom: Address

      menunjuk ke suku pertama

    6. FIRST(p)NEXT(pt)DEGREE(pt)COEF(pt)

      TANYAIN DAH KAPAN BISA PAKE MAKRO GINI KAPAN HARUS ->

    7. pt↑.nextpt↑.degreept↑.coef

      GOBLOK WKWK TERNYATA PANAH KE ATAS KHUSUS TIPE DATA ADDRESS

    8. Tabel

      kontigu/array

    9. list P1 dibentuk dengan penyisipan elemen terakhir,

      insertLast

    10. ⟨ 3,−2 ⟩ InsertLast(P3,P2), Next(P2)⟨ 2,−1 ⟩ InsertLast(P3,P2), Next(P2)⟨ 1,−2 ⟩ InsertLast(P3,P2), Next(P2)⟨ 0,−10 ⟩ InsertLast(P3,P2), Next(P2)

      koefisien jadi minus karena P2 dikurang basically 0-P2 jadi mines (-)

    11. ⟨ 3,2 ⟩ InsertLast (P3,P1), Next(P1)⟨ 2,1 ⟩ InsertLast (P3,P1), Next(P1)⟨ 1,2 ⟩ InsertLast (P3,P2), Next(P2)⟨ 0,10 ⟩ InsertLast (P3,P1), Next(P1)

      Bergantian sesuai urutan

    12. Next(P1)

      P2 ga next karena degree ga sama

    13. InsertLast (P3,P1+P2)

      Operasi penjumlahan kalau degree sama

    14. Next(P1), Next(P2)

      bergerak ke elemen selanjutnya masing masing (P1 dan P2)

    15. penyisipan

      PENYISIPAN SESUAI URUTAN MENURUN

    16. ⟨ 2,5 ⟩

      menempati posisi pertama karna SELALU TERURUT MENURUN

    17. ⟨ −999, 0 ⟩

      MARK

    18. polinom kosong menjadi sangat “natural

      kita punya list yang beneran kosong, kalo array kan di declare dulu semuanya tapi gaada isinya aje/0

    19. Kalau banyak yang muncul?

      Maka gaakan efisien dengan berkait karena tiap degree yang sama jika muncul kembali akan disimpan di tempat terpisah.

    Annotators

    1. populatePol(p1); populatePol(p2)

      kenapa P3 gaperlu di populate?

    2. P1 = P'

      ini emang jadi array baru (yang berbeda)

    3. 9

      degree terbesar bisa berubah kalo derajat 9 jadi 0/habis (berubah jadi 8)

    4. berderajat 9

      karena derajat paling tinggi

    5. degree

      index sekalian derajat pollinom

    6. arrSuku

      koefisien polinom

    7. nMax

      menyatakan pangkat tertinggi yang dapat disimpan dalam polinom ini

    8. 4x5 + 2x4 +7x2 + 10

      x^3 sebenernya ada tapi 0, tapi mending ga ditulis biar kalo pangkat nya gede banget ga ribet nulisnya

    Annotators

    1. menghapus elemen dengan prioritas tertinggi (yaitu di Head)

      dequeue bakal sama aja intinya

    2. p = newNode(x);if (p != NIL)

      SELALU INGET KALO BIKIN NEWNODE BIKIN CASE KALO ALOKASI GAGAL (p == NIL)

    Annotators

    1. List linier “biasa”

      list biasa yang cocok, first menunjuk ke elemen pertama list, first nil kalau kosong, first berubah menjadi top dan top menunjuk ke top stack, top bernilai nil kalau stack kosong

    Annotators

    1. precLast

      selalu ada di satu elemen di belakang last

    2. while (NEXT(last) != FIRST(*l)) {last = NEXT(last);

      mencari first beneran

    3. (NEXT(last) != FIRST(*l)

      bukan elemen terakhir

    4. (NEXT(last) != FIRST(*l)

      selama last bukan Last beneran (karna di traversal sampe last beneran dari awal/first)

    5. NEXT(p) = p;

      hanya satu elemen, next ke diri dia sendiri

    6. (NEXT(pt) != FIRST(l)

      LAST

    7. List Sirkuler

      Elemen pertamanya dikenali oleh First(L) sedangkan elemen terakhir memiliki next ke elemen pertama (First(L))

    Annotators

    1. NEXT(PREV(LAST(*l))) = NIL;

      NEXT ELEMEN SBLM LAST

    Annotators