АСП1/К2 2019

Извор: SI Wiki
< АСП1
Датум измене: 26. март 2020. у 01:38; аутор: KockaAdmiralac (разговор | доприноси) (Dopunjeno do 5. zadatka)
Пређи на навигацију Пређи на претрагу

Задаци

1. задатак

Поставка

Нека је скоро комплетно или комплетно бинарно стабло представљено секвенцијалном меморијском репрезентацијом (низом). На основу прослеђеног низа у коме су смештене целобројне вредности које представљају информациони садржај чворова, формирати еквивалентно бинарно стабло уланчане репрезентације.

Решење

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. задатак

Поставка

Применом ЛЗW алгоритма приказати поступак кодирања знаковног низа КУКУРИКУ, ако је дата почетна табела са кодовима симбола. Написати кодирану поруку и изглед табеле симбола након поступка кодирања.

Решење

Кодовано: 014234

Симбол Кôд
К 0
У 1
Р 2
I 3
КУ 4
УКУ 5
КУР 6
РИ 7
ИКУ 8

3. задатак

Поставка

За неко бинарно стабло преордер обилазак даје поредак ХБИКЦФДАЕЈГ, а инордер обилазак ХБИАДЈЕГФЦК. Одредити поредак који се добија левел-ордер обиласком и објаснити поступак.

Решење

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

Левел-ордер обилазак: ХБИКЦФДАЕЈГ. Поступак се своди на то да идемо по сваком нивоу бинарног стабла и читамо садржај тог нивоа слева на десно.

4. питање

Поставка

Дато је стабло формирано применом статичког Хуффман-овог алгоритма. Имплементирати функцију ФИНД_ЦОДЕС која за такво стабло на чији корен показује показивач роот враћа симболе чији су кодови дужине тачно к.

Решење

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. задатак

Поставка

Применом алгоритма динамички Хуффман кодирати поруку АБРАКАДАБРА, уколико су почетни фиксни кодови за слова А, Б, Р, К, D редом 000, 001, 010, 011 и 100. Процес кодирања приказати по корацима.

Решење

  • Крајње трансмитовано: А 0Б 00Р 0 100К 0 1100Д 0 10 110 0
  • Крајње кодирано: 000 0001 00010 0 100011 0 1100100 0 10 110 0
  • Крајње стабло:
  11
 /  \
A    6
5   / \
   B   4
   2  / \
     R   2
     2  / \
       1   K
      / \  1
    NYT  D
     0   1

6. задатак

Поставка

Прецизно објаснити како се итеративни алгоритам за обилазак по инордер-у може модификовати тако да се задато стабло трансформише у повезано (тхреадед) стабло по истом обиласку.

Решење

7. задатак

Поставка

У каквом бинарном стаблу интерна дужина пута постиже максимум за дати број чворова? Извести и објаснити израз за израчунавање максималне интерне дужине пута у бинарном стаблу са н чворова. Нацртати пример таквог стабла са 4 чвора и израчунати интерну дужину пута.

Решење

8. задатак

Поставка

На једној друштвеној мрежи постоји симетрична релација пријатељства између корисника и асиметрична релација праћења код које један корисник прати активности другог. Потребно је посматрану друштвену мрежу моделирати графом.

  1. Предложити одговарајући тип графа и детаљно описати његове особине.
  2. Предложити и образложити одговарајаћу меморијску репрезентацију графа, тако да се оптимизује одређивање укупног броја пратилаца неког корисника. Корисникове активности могу да прате и пријатељи и пратиоци.
  3. Написати псеудкод функције која за задатог корисника враћа укупан број пратилаца.

Решење