АСП1/К2 2019 — разлика између измена

Извор: SI Wiki
Пређи на навигацију Пређи на претрагу
(Pokrenuta strana)
 
м (Dopunjeno do 5. zadatka)
Ред 1: Ред 1:
{{tocright}}
[https://rti.etf.bg.ac.rs/rti/ri3sp/rokovi/13S111ASP1_K2_1819.pdf Zadaci]
[https://rti.etf.bg.ac.rs/rti/ri3sp/rokovi/13S111ASP1_K2_1819.pdf Zadaci]


== 1. zadatak ==
== 1. zadatak ==
=== Postavka ===
=== Postavka ===
Neka je skoro kompletno ili kompletno binarno stablo predstavljeno sekvencijalnom
Neka je skoro kompletno ili kompletno binarno stablo predstavljeno sekvencijalnom memorijskom reprezentacijom (nizom). Na osnovu prosleđenog niza u kome su smeštene celobrojne vrednosti koje predstavljaju informacioni sadržaj čvorova, formirati ekvivalentno binarno stablo ulančane reprezentacije.
memorijskom reprezentacijom (nizom). Na osnovu prosleđenog niza u kome su smeštene
celobrojne vrednosti koje predstavljaju informacioni sadržaj čvorova, formirati ekvivalentno
binarno stablo ulančane reprezentacije.


=== Rešenje ===
=== Rešenje ===
Ред 32: Ред 30:
  ''value''(''node'') = ''value''
  ''value''(''node'') = ''value''
  '''return''' ''node''
  '''return''' ''node''
== 2. zadatak ==
=== Postavka ===
Primenom LZW algoritma prikazati postupak kodiranja znakovnog niza KUKURIKU, ako je data početna tabela sa kodovima simbola. Napisati kodiranu poruku i izgled tabele simbola nakon postupka kodiranja.
=== Rešenje ===
Kodovano: '''014234'''
{| class="wikitable"
! Simbol
! Kôd
|-
| K
| 0
|-
| U
| 1
|-
| R
| 2
|-
| I
| 3
|-
| KU
| 4
|-
| UKU
| 5
|-
| KUR
| 6
|-
| RI
| 7
|-
| IKU
| 8
|}
== 3. zadatak ==
=== Postavka ===
Za neko binarno stablo ''preorder'' obilazak daje poredak HBIKCFDAEJG, a ''inorder'' obilazak HBIADJEGFCK. Odrediti poredak koji se dobija ''level-order'' obilaskom i objasniti postupak.
=== Rešenje ===
  H
    \
    B
      \
      I
        \
        K
        /
      C
      /
    F
    /
  D
  / \
A  E
    / \
  J  G
''Level-order'' obilazak: '''HBIKCFDAEJG.''' Postupak se svodi na to da idemo po svakom nivou binarnog stabla i čitamo sadržaj tog nivoa sleva na desno.
== 4. pitanje ==
=== Postavka ===
Dato je stablo formirano primenom statičkog ''Huffman''-ovog algoritma. Implementirati funkciju FIND_CODES koja za takvo stablo na čiji koren pokazuje pokazivač ''root'' vraća simbole čiji su kodovi dužine tačno ''k''.
=== Rešenje ===
<u>FIND CODES(''root'', ''k'')</u>
'''if''' ''root'' = nil '''then'''
    '''return''' nil
'''end_if'''
''symbols'' = nil
''node'' = nil
''depth'' = 0
''symb_node'' = nil
''p'' = symbols
QUEUE_INIT(''Q1'')
QUEUE_INIT(''Q2'')
QUEUE_INSERT(''Q1'', ''root'')
QUEUE_INSERT(''Q2'', 0)
'''while''' '''not''' QUEUE_EMPTY(''Q1'') '''do'''
    ''node'' = QUEUE_DELETE(''Q1'')
    ''depth'' = QUEUE_DELETE(''Q2'')
    '''if''' ''depth'' = ''k'' '''then'''
        '''if''' ''symbol''(''node'') ≠ nil '''then'''
            ''symb_node'' = GETNODE
            ''value''(''symb_node'') = ''symbol''(''node'')
            '''if''' ''symbols'' = nil '''then'''
                ''symbols'' = ''p'' = ''symb_node''
            '''else'''
                ''next''(''p'') = ''symb_node''
                ''p'' = ''next''(''p'')
            '''end_if'''
        '''end_if'''
    '''else'''
        '''if''' ''left''(''node'') ≠ nil '''then'''
            QUEUE_INSERT(''Q1'', ''left''(''node''))
            QUEUE_INSERT(''Q2'', ''depth'' + 1)
        '''end_if'''
        '''if''' ''right''(''node'') ≠ nil '''then'''
            QUEUE_INSERT(''Q1'', ''right''(''node''))
            QUEUE_INSERT(''Q2'', ''depth'' + 1)
        '''end_if'''
    '''end_if'''
'''end_while'''
'''return''' ''symbols''
== 5. zadatak ==
=== Postavka ===
Primenom algoritma dinamički ''Huffman'' kodirati poruku ABRAKADABRA, ukoliko su početni fiksni kodovi za slova A, B, R, K, D redom 000, 001, 010, 011 i 100. Proces kodiranja prikazati po koracima.
=== Rešenje ===
* Krajnje transmitovano: '''A 0B 00R 0 100K 0 1100D 0 10 110 0'''
* Krajnje kodirano: '''000 0001 00010 0 100011 0 1100100 0 10 110 0'''
* Krajnje stablo:
  11
  /  \
A    6
5  / \
    B  4
    2  / \
      R  2
      2  / \
        1  K
      / \  1
    NYT  D
      0  1
== 6. zadatak ==
=== Postavka ===
Precizno objasniti kako se iterativni algoritam za obilazak po ''inorder''-u može modifikovati tako da se zadato stablo transformiše u povezano (''threaded'') stablo po istom obilasku.
=== Rešenje ===
== 7. zadatak ==
=== Postavka ===
U kakvom binarnom stablu interna dužina puta postiže maksimum za dati broj čvorova? Izvesti i objasniti izraz za izračunavanje maksimalne interne dužine puta u binarnom stablu sa ''n'' čvorova. Nacrtati primer takvog stabla sa 4 čvora i izračunati internu dužinu puta.
=== Rešenje ===
== 8. zadatak ==
=== Postavka ===
Na jednoj društvenoj mreži postoji simetrična relacija prijateljstva između korisnika i
asimetrična relacija praćenja kod koje jedan korisnik prati aktivnosti drugog. Potrebno je
posmatranu društvenu mrežu modelirati grafom.
# Predložiti odgovarajući tip grafa i detaljno opisati njegove osobine.
# Predložiti i obrazložiti odgovarajaću memorijsku reprezentaciju grafa, tako da se optimizuje određivanje ukupnog broja pratilaca nekog korisnika. Korisnikove aktivnosti mogu da prate i prijatelji i pratioci.
# Napisati pseudkod funkcije koja za zadatog korisnika vraća ukupan broj pratilaca.
=== Rešenje ===

Верзија на датум 26. март 2020. у 01:38

Zadaci

1. zadatak

Postavka

Neka je skoro kompletno ili kompletno binarno stablo predstavljeno sekvencijalnom memorijskom reprezentacijom (nizom). Na osnovu prosleđenog niza u kome su smeštene celobrojne vrednosti koje predstavljaju informacioni sadržaj čvorova, formirati ekvivalentno binarno stablo ulančane reprezentacije.

Rešenje

FORM TREE(arr, n)
ALLOCATE(nodes[n])
j = 1
nodes[1] = GETNODE(arr[1])
for i = 1 to n do
    nodes[i] = GETNODE(arr[i])
    if j < n then
        j = j + 1
        left(nodes[i]) = GETNODE(arr[j])
    end_if
    if j < n then
        j = j + 1
        right(nodes[i]) = GETNODE(arr[j])
    end_if
end_for
return nodes[1]
GETNODE(value)
ALLOCATE(node)
left(node) = nil
right(node) = nil
value(node) = value
return node

2. zadatak

Postavka

Primenom LZW algoritma prikazati postupak kodiranja znakovnog niza KUKURIKU, ako je data početna tabela sa kodovima simbola. Napisati kodiranu poruku i izgled tabele simbola nakon postupka kodiranja.

Rešenje

Kodovano: 014234

Simbol Kôd
K 0
U 1
R 2
I 3
KU 4
UKU 5
KUR 6
RI 7
IKU 8

3. zadatak

Postavka

Za neko binarno stablo preorder obilazak daje poredak HBIKCFDAEJG, a inorder obilazak HBIADJEGFCK. Odrediti poredak koji se dobija level-order obilaskom i objasniti postupak.

Rešenje

  H
   \
    B
     \
      I
       \
        K
       /
      C
     /
    F
   /
  D
 / \
A   E
   / \
  J   G

Level-order obilazak: HBIKCFDAEJG. Postupak se svodi na to da idemo po svakom nivou binarnog stabla i čitamo sadržaj tog nivoa sleva na desno.

4. pitanje

Postavka

Dato je stablo formirano primenom statičkog Huffman-ovog algoritma. Implementirati funkciju FIND_CODES koja za takvo stablo na čiji koren pokazuje pokazivač root vraća simbole čiji su kodovi dužine tačno k.

Rešenje

FIND CODES(root, k)
if root = nil then
    return nil
end_if
symbols = nil
node = nil
depth = 0
symb_node = nil
p = symbols
QUEUE_INIT(Q1)
QUEUE_INIT(Q2)
QUEUE_INSERT(Q1, root)
QUEUE_INSERT(Q2, 0)
while not QUEUE_EMPTY(Q1) do
    node = QUEUE_DELETE(Q1)
    depth = QUEUE_DELETE(Q2)
    if depth = k then
        if symbol(node) ≠ nil then
            symb_node = GETNODE
            value(symb_node) = symbol(node)
            if symbols = nil then
                symbols = p = symb_node
            else
                next(p) = symb_node
                p = next(p)
            end_if
        end_if
    else
        if left(node) ≠ nil then
            QUEUE_INSERT(Q1, left(node))
            QUEUE_INSERT(Q2, depth + 1)
        end_if
        if right(node) ≠ nil then
            QUEUE_INSERT(Q1, right(node))
            QUEUE_INSERT(Q2, depth + 1)
        end_if
    end_if
end_while
return symbols

5. zadatak

Postavka

Primenom algoritma dinamički Huffman kodirati poruku ABRAKADABRA, ukoliko su početni fiksni kodovi za slova A, B, R, K, D redom 000, 001, 010, 011 i 100. Proces kodiranja prikazati po koracima.

Rešenje

  • Krajnje transmitovano: A 0B 00R 0 100K 0 1100D 0 10 110 0
  • Krajnje kodirano: 000 0001 00010 0 100011 0 1100100 0 10 110 0
  • Krajnje stablo:
  11
 /  \
A    6
5   / \
   B   4
   2  / \
     R   2
     2  / \
       1   K
      / \  1
    NYT  D
     0   1

6. zadatak

Postavka

Precizno objasniti kako se iterativni algoritam za obilazak po inorder-u može modifikovati tako da se zadato stablo transformiše u povezano (threaded) stablo po istom obilasku.

Rešenje

7. zadatak

Postavka

U kakvom binarnom stablu interna dužina puta postiže maksimum za dati broj čvorova? Izvesti i objasniti izraz za izračunavanje maksimalne interne dužine puta u binarnom stablu sa n čvorova. Nacrtati primer takvog stabla sa 4 čvora i izračunati internu dužinu puta.

Rešenje

8. zadatak

Postavka

Na jednoj društvenoj mreži postoji simetrična relacija prijateljstva između korisnika i asimetrična relacija praćenja kod koje jedan korisnik prati aktivnosti drugog. Potrebno je posmatranu društvenu mrežu modelirati grafom.

  1. Predložiti odgovarajući tip grafa i detaljno opisati njegove osobine.
  2. Predložiti i obrazložiti odgovarajaću memorijsku reprezentaciju grafa, tako da se optimizuje određivanje ukupnog broja pratilaca nekog korisnika. Korisnikove aktivnosti mogu da prate i prijatelji i pratioci.
  3. Napisati pseudkod funkcije koja za zadatog korisnika vraća ukupan broj pratilaca.

Rešenje