2. algoritmi so raspored

Post on 22-Dec-2015

39 Views

Category:

Documents

6 Downloads

Preview:

Click to see full reader

DESCRIPTION

dfgfg

TRANSCRIPT

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Алгоритми со распоред

Алторитми и сложеностАудиториски вежби 2

Бојан Илијоски

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Распределба на тежински интервали Дадено е множество на n интервали Секој од интервалите имаВреме на почеток si

Време на крај fiВредност vi

Да се најде подмножество на множеството интервали така што вредноста на овие интервали биде максимална и притоа да не се поклопуваат

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Распределба на тежински интервали Алчен пристапАко сите тежини се еднакви (пр.vi=1 , i=1..n)Интервалите се распоредени во растечки

редослед според времето на завршувањеДодади го интервалот во подмножеството

ако тој не се поклопува со претходно избраните

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Распределба на тежински интервали Ако имаме тежини алчниот пристап не

работи

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Распределба на тежински интервали Да претпоставиме дека сме

заинтересирани само за вредноста, не и за тоа кои интервали се вклучени

Типичен проблем на ДПТреба да најдеме решение кое оптимизира

одредена вредностСе фокусираме на тоа која треба да биде

оптималната вредност на подпроблемите

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Решение со динамичко програмирање Интервалите се сортираат и се

обележуваат според времето на завршување f1≤f2 ≤… ≤fn

p(j) = најголемиот индекс i < j така што i не се поклопува со j

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Пример

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Решение со динамичко програмирање Случај 1: интервалот j влегува во

оптималното решениеМора да го вклучи оптималното решение на

подпроблемите кои ги содржат интервалите со кои не се преклопува 1, 2, ...,p(j)

Не може да ги користи интервалите со кои се преклопува p(j)+1, p(j)+2, …, j-1

Случај 2: интервалот ј не влегува во оптималното решениеМора да го вклучи оптималното решение од

останатите интервали со кои не се поклопува 1, 2, …, ј-1

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Решение со динамичко програмирање OPT(j) = оптималното решение земајќи

ги во предвид интервалите 1, ..., ј

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Распределба на тежински интервали

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Алгоритам со груба сила Груба сила – рекурзивен алгоритамInput: n, s1,…,sn , f1,…,fn , v1,…,vnSort jobs by finish times so that f1 ≤ f2 ≤ ... ≤ fn.Compute p(1), p(2), …, p(n)

Compute-Opt(j) {if (j = 0)

return 0else

return max(vj + Compute-Opt(p(j)), Compute-Opt(j-1))}

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Пример

Вкупен број на јазли ≥ 2n/2

За извршување на секој јазол имаме константна сложеност Ω(2n)

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Распределба на тежински интервали Груба сила – рекурзивен алгоритамПроблем: постојано го пресметуваме

истиот подпроблемРешение: Зачувај го решението за секој

подпроблем кој си го пресметал

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Алгоритам со ДП Bottom-Up пристапInput: n, s1,…,sn , f1,…,fn , v1,…,vnSort jobs by finish times so that f1 ≤ f2 ≤ ... ≤ fn.Compute p(1), p(2), …, p(n)

Iterative-Compute-Opt {OPT[0] = 0for j = 1 to n

OPT[j] = max(vj + OPT[p(j)], OPT[j-1])}

Output OPT[n]

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Алгоритам со ДП Bottom-Up пристап OPT[j] e оптималното решение за

интервалите 1...j СложеностГлавната лупа О(n)Сортирање О(n log n)

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Пример

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Пример

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Распределба на тежински интервали Го имаме оптималното решение, како

да најдеме кои интервали се вклучени? Интервалот j e во оптималното решение

на подпроблемите на интервалите {1, 2, …, j} ако vj + OPT(p(j)) ≥ OPT(j - 1)

Откако ќе одредиме дали интервалот j е во решението или не го гледаме соодветниот подпроблем{1, 2, …, p(j)}{1, 2, …, j-1}

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Распределба на тежински интервали Интервали во решениетоRun M-Compute-Opt(n)Run Find-Solution(n)Find-Solution(j) {

if (j = 0)output nothing

else if (vj + OPT[p(j)] > OPT[j-1])print jFind-Solution(p(j))

elseFind-Solution(j-1)

Број на рекурзивни повици < n → O(n)

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Пример

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Поделба на интервали Дадени се n предавања Предавањето j почнува во sj, a

завршува во fj Да се одреди минималниот број на

предавални (училни) така што ќе се распоредат сите предавања и нема да има две (или повеќе) предавања во исто време, во иста предавална

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Пример

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Поделба на интервали Имаме доволно ресурси да опслужиме

повеќе од едно барање одеднаш и сакаме да направиме распоред така што сите барања ќе бидат задоволени со што е можно помалку ресурси

Очигледно дека ќе ни требаат најмалку ресурси колку што е длабочината на множеството барања

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Поделба на интервали Длабочина на множество на интервали

е максималниот број на интервали кој се случуваат во дадено време

Клучно забелешка: Бројот на потребни предавални ≥ длабочината

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Поделба на интервали

Дали секогаш постои распоред каде бројот на предавални е еднаков на длабочината?

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Поделба на интервали – алчен алгоритамSort requests in increasing order of start times (s1,f1),…,(sn,fn)

For i=1 to nj←1While (request i not scheduled)

lastj ← finish time of the last request

currently scheduled on resource jif si≥lastj then schedule request i on

resource jj←j+1

End While

End For

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Поделба на интервали – алчен алгоритам Никогаш нема да бидат распоредени

две незавршени предавања во иста предавална

Теорема: Алчниот алгоритам е оптимален

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Поделба на интервали – алчен алгоритам Доказ

Нека d = број на предавални кои ги алоцира алчниот алгоритам

Предавалната d е отворена затоа што во неа треба да се распореди предавање, да речеме j, кое не е компатибилно со ниту една од останатите d-1 предавални

Бидејќи ги сортиравме по време на започнување, сите некомпатибилни предавални се зафатени од предавања кои започнуваат порано од sj

Значи имаме d предавања кои се прекопуваат во исто време со sj

Клучна забелешка ⇒ сите предавања корисат ≥ d предавални

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Поделба на интервали – алчен алгоритамSort requests in increasing order of start times (s1,f1),…,(sn,fn) О(n log n)

For i=1 to nj←1While (request i not scheduled)

lastj ← finish time of the last request

currently scheduled on resource jif si≥lastj then schedule request i on

resource jj←j+1

End While

End For поспоро од O (n * d), што може да биде Ω(n2)

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Поделба на интервали – алчен алгоритамSort requests in increasing order of start times (s1,f1),…,(sn,fn) О(n log n)

d ← 1Schedule request 1 on resource 1last1 ← f1Insert 1 into priority queue Q with key = last1For i=2 to n

j ← findmin(Q)if si ≥ lastj then

schedule request i on resource jlastj ← fiIncreasekey(j,Q) to lastj

else

d ← d+1schedule request i on resource dlastd ← fiInsert d into priority queue Q with key = lastd

End For О(n log n)

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Распределба да се намали доцнење Единствен ресурс како кај распределба

на интервали, но наместо почетно и крајно време секое од барањата i имаВреме на траење ti кое мора да биде

распоредено во непрекинат блокВреме на завршување (deadline) di до кое

барањето би требало да биде завршеноСевкупно време на почеток s

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Распределба да се намали доцнење Барањата се распоредени од алгоритамот во

временски интервали [si, fi] така што ti=fi-si

Доцнењето во распоредот на барањето i eАко di < fi тогаш барањето i доцни Li=fi-di, во

спротивно Li=0 Максималното доцнење е L=maxiLi

Целта е да се најде распоред за сите барања (вредности за si и fi за секое барање i) така што ќе се минимизира вкупното доцнење L

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Пример

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Распределба да се намали доцнење Алчен пристап – сортирај ги барањата

во некаков редоследНајкратките прво – Сортирај ги барањата

во растечки редослед според времето на процесирање (извршување) tj

Најраниот рок (deadline) – Сортирај ги барањата во растечки редослед според посакуваното време на завршување dj

Најмал простор за работа – Сортирај ги барањата во растечки редослед според dj -tj

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Распределба да се намали доцнење Најкратките прво – најкратко време за

работаКонтра пример

Најмал простор за работаКонтра пример

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Распределба да се намали доцнење Алчен алгоритам – Најраниот рок

(deadline) првоПодреди ги барањата во растечки

редослед според нивниот рокРаспореди го барањето со најраниот рок

веднаш штом ресурсот ти стане достапен

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Распределба да се намали доцнење Алчен алгоритам – Најраниот deadline

првоSort deadlines in increasing order

(d1 ≤ d2 ≤ … ≤ dn)f ← sfor i ← 1 to n to

si ← ffi ← si+tif ← fi

end for

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Распределба да се намали доцнење Доказ на алчниот алгоритам Ќе докажеме дека ако постои друг

распоред O (оптимален распоред)тогаш можеме постепено да го менуваме O така штоВо секој чекор максималното доцнење во

O нема да се влошиВсушност ќе има истo чинење со A

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Пример Дали постои оптимален распоред без

време на чекање

Алчниот распоред нема време на чекање

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Алчен алгоритам Барање 1: Алгоритамот продуцира распоред

без инверзии и без време во мирување Барање 2: Сите распореди без инверзии и

без време на мирување имаат исто доцнење Барање 3: Постои оптимален распоред без

време на мирување Барање 4: Постои оптимален распоред без

инверзии и без време на мирување Барање 5: Алчниот алгоритам продуцира

оптимален распоред

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Алчен алгоритам Брање 4: Постои оптимален распоред без инверзии и без време

на мирување Пристап: Започни со оптимален распоред O и искористи

аргумент за да го претвориш О во распоред што го задоволува барањето 4 и нема поголемо доцнење од О. 1. Ако O има инверзија, тогаш постои пар од барања i и j така што j

е распореден веднаш после i и d(j) < d(i). 2. Нека i и j се последователни инвертирани барања во О. По

промената на местата на i и j, ние добиваме распоред O’ со една инверзија помалку

3. Максималното доцнење на O’ не е поголемо од максималното доцнење на О

Доволно е да покажеме дека по C(n, 2) размени, имаме распоред без инверзии чие што доцнење не е поголемо од она на О

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Намалување на доцнење: инверзии Инверзија на распоредот S е парот од

барања i и j така што di < dj, но ј е распореден пред i

Заклучок: Алчниот распоред нема инверзии

Ако распоред (без време на чекање) има инверзија, тој има еден пар со инверзни барања распоредени последователно

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Намалување на доцнење: инверзии

Менувањето на две соседни инверзни барања го намалува бројот на инверзии за еден и не го зголемува максималното доцнење

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Намалување на доцнење: инверзии Ако dj > di но j е распореден во O веднаш

пред i тогаш преместувањето на барањата i иj за да се добие распоред O’ не го зголемува максималното доцнење Доцнењето Li’ ≤ Li се додека i е распореден порано во O’ од

O Барањата i и j заедно го зафаќаат истото време и во двата

распореди Сите останати барања k≠i,j имаат Lk’=Lk

fj’=fi според тоа Lj’= f’j-dj =fi-dj< fj-dj=Lj

Максималното доцнење не се зголемува

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Оптимален распоред и инверзии Предпоставка: Постои оптимален

распоред без време на чекање и без инверзии

Доказ:Од претходно, постои оптимален распоред

за О без време на чекањеАко О има инверзија тогаш има

последователен пар од барања во неговиот распоред што има инверзија и може да биде резменет без зголемување на доцнењето

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Оптимален распоред и инверзии Евентуално овие промени (менувања)

можат да продуцираат оптимален распоред без инверзииСекоја размена го намалува бројот на

инверзии за еденИма најмногу n(n-1)/2 инверзии

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Време на чекање и инверзии Претпоставка: Сите распореди без инверзии и без

време на чекање имаат минимално доцнење Доказ:

Распоредите може да се разликуваат само во начинот на кој ги подредуваат барањата со исти рокови (deadlines)

Да претпоставиме дека сите времиња имаат ист рок Максималното доцнење на барањата е базирано само на

времето на завршување на последното барање, но множеството од барања завзема исто време во двата распореди Според тоа последното барање завршува во исто време во

било кој таков распоред

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Оптималност на алчниот алгоритам Знаеме дека:

Има оптимален распоред без време на чекање и инверзии

Сите распореди без време на чекање и без инверзии имаат исто максимално време на доцнење

Алгоритамот со најпрво барањата со најран рок (deadline) продуцира распоред без чекање и инверзии

Според тоаОвој алчен алгоритам продуцира оптимален

распоред

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Распределба на задачи Распределба на временски задачи со пожелно време

за завршување (рок, deadline) и казни на една машина

Дадено е: S = {1,2,3, …, n}, множество од n задачи {d1, d2, d3, …, dn}, множество од n цели броеви кои го

претставуваат пожелното време на завршување (роковите), така што 1<=di<=n и задачата i би требало да заврши до di.

{w1, w2, w3, …, wn}, множество на ненегативни тежини или казни така што казната wi е пресметува само ако задачата не се заврши до di, ако задачата се заврши пред di нема казна.

Проблем: Најди распоред за S така да се минимизира вкупната казна за промашени рокови.

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Распределба на задачи За една задача велиме дека доцни ако заврши по

нејзиниот рок, во спротивно таа завршила порано (или точно на време)

Забелешка 1: Секој произволен распоред може да биде направен во форма најраните-први во кој раните задачи им претходат на подоцнежните. Ако некоја рана задача E се наоѓа по некоја доцна задачаL, тогаш можеме да ги смениме L и E без да влијаеме на тоа да E биде рано, а L доцна

Забелешка 2: Според забелешка 1 секој распоред може да биде направен во канонична форма во која сите рани задачи ќе им претходат на доцните задачи и раните задачи се во неопаѓаки редослед според нивните рокови.

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Распределба на задачи Ова може да биде направено со поставување

на распоредот во форма раните задачи први. Потоа, се додека има задачи i и j кои завршуваат во време k и k+1 така што dj < di, можеме да им ги промениме местата на i и j без да влијаеме на ниту една од нив.

Ова е можно затоа што задачата ј е навремена пред промената k+1 < dj.

Од dj < di => k+1 < di од таму задачата i е сеуште на време по промената

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Алгоритам Сега наоѓањето на оптимален распоред се сведува на наоѓање

на множество од задачи А така што тие ќе бидат навремени во оптималниот распоред. Откако еднаш ќе се пресмета А можеме да го направиме распоредот со подредување на елементите од А во неопаѓачки редослед според рокот, a потоа подредување на задачите што доцнат во било кој редослед.

Множеството на задачи А е независно ако постои распоред на неговите задачи така што нема задачи кои што доцнат. Јасно е дека множеството од навремени задачи формира независно множество на задачи.

Нека I е множество од сите независни множества на задачи.

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Алгоритам За t=1, 2,…, n нека Nt(A) го претстаува

бројот на задачи во А кои имаат рокови ≤ t.

Лема: За секое множество на задачи А следниве својства се еквивалентни:1. Множеството А е независно2. За t=1, 2,…, n имаме дека Nt(A) < t3. Ако задачите во А се распоредени во

неопаѓачки редослед според роковите, тогаш нема задача што доцни

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Алгоритам Користејќи го својството 2 можеме

лесно да провериме дали А е независно Минимизирање на сумата на казните за

задачите кои доцнат = максимизирање на сумата на задачите кои се навремени

Ваквиот алгоритам го пресметува оптималното множество А со максимална сума на казни

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Алчен алгоритамAlgorithm RT-Schedule (S, I, w)

A <- 0

Sort S into nonincreasing order by weight w

for each x ϵ S, taken in nonincreasing order by weight wx

do if A U {x} ϵ I

then A <- A U {x}

return A

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

CDP

ECE 291 -- Spring 2000

Example:

Задача 1 2 3 4 5 6 7

di 4 2 4 3 1 4 6

wi 70 60 50 40 30 20 10

- Алгоритамот ги селектира задачите 1, 2, 3 и 4- Ги одбива задачите 5 и 6- Ја селектира задачата 7

Конечниот оптимален распоред е: <2, 4, 1, 3, 7, 5, 6>

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Екипа За дадени студенти (N) и нивното

знаење за во секоја категорија (M) да се одреди екипа од К студенти која би се пратила на натпревар така да знаењето им биде најголемо

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Екипа (пример) N = 3 M = 2 K = 2,Индекс на студент (знаење), ред =

категорија2 (3.0) 1 (0.2) 3 (0.1)3 (1.0) 2 (0.5) 1 (0.2)

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Екипа Секој студент може да учествува во

само една категорија, но повеќе студенти може да учествуваат во иста категорија

Ако еден студент може да учествува во сите категории, најдобро е да го земеме во категоријата во која има најмногу знаење

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Екипа Ако еден студент е избран во една

категорија, тоа не ги ограничува останатите студенти да бидат избрани во истата категорија

Од тука следи дека најдобро би било секој студент да биде избран во категоријата во која е најдобар

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Екипа (решение) За секој студент знаеме во која

категорија е најдобар Го земаме во таа категорија Си сортираме сите студенти Ги бираме k-те најдобри Сложеност O(N*M + N*logN)

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Екипа (решение) Бидејќи знаеме дека се сортирани по

знаење во секоја категорија, чувај покажувач кон најдобриот во таа категорија

Помини низ сите категории, избери го најдобриот студент

Итерирај ја повторно првата колона Сложеност O(N*M)

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Екипа (пример) N = 4 M = 4 K = 34 (5.0) 2 (4.0) 3 (2.0) 1 (1.0)2 (2.0) 3 (1.0) 1 (0.5) 4 (0.3)4 (6.0) 3 (5.0) 2 (2.0) 1 (0.0)1 (4.0) 2 (3.0) 4 (0.6) 3 (0.3)

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Екипа#include <cstdio>#include <algorithm>#include <iostream>#include <cassert>#define MAXN 101using namespace std;double best[MAXN];int main() {

int n, m, k;scanf("%d%d%d", &n, &m, &k);for(int i = 0; i < m; ++i) {

for(int j = 0; j < n; ++j) {int s;double o;scanf("%d%lf", &s, &o);best[s-1] = max(best[s-1], o);

}}sort(best, best+n, greater<double>());double sol = 0.0;for(int i = 0; i < k; ++i)

sol += best[i];printf("%.1lf\n", sol);return 0;

}

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Распределба на нафта Во M погони на фабрика треба да се

распределат N тони на нафта за неопходно производство. Ако на i-тиот погон му се доделат j тони нафта, тој погон остварува добивка од A(i,j) денари. Во секоја редица на матрицата А вредностите се во растечка низа (добивката расте со зголемување на количината на доделената нафта). Да се изврши распределба на нафтата така што да се оствари максимална вкупна добивка.

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Пример М=2, N=4

A[1]={1, 6, 7, 8}A[2]={2, 5, 6, 7}

Алчно4l во 1 = заработка 83l во 1 и 1l во 2 = заработка 92l во 2 и 2l во 2 = заработка 11

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Пример М=2, N=3

A[1]={1, 2, 3}A[2]={1, 5, 7}

Алчно по просекA[1]={1, 1, 1}A[2]={1, 2.5, 2.3}2l во 2 и 1l во 1 = заработка 63l во 2 = заработка 7

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Распределба на нафта Ако во оптималната распределба

последниот погон има k, тогаш останатите N-k тони мора да бидат оптимално распределени во првите М-1 погони

B(X,Y) максималната вкупна добивка за првите X погони и Y

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Распределба на нафта Ако имаме пресметани B(P,Q) за сите

P<X, Q=1,N, за наоѓање на B(X,Y)доволно е да се испроба доделувањето на погонот со број X на секоја можна количина на нафта (од 0 до Y тони), а останатата нафта оптимално да се распредели на првите X-1 погони

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Распределба на нафтаB(1,Y) = A(1,Y)B(X,0) = 0B(X,Y) = {B(X-1,Y-k) + A(X,k)}

top related