Pagini recente » Profil mircearoata | Monitorul de evaluare | Statistici Nicolae Dan (dhlnestarr) | Monitorul de evaluare | Diferente pentru probleme-cu-secvente intre reviziile 38 si 39
Nu exista diferente intre titluri.
Diferente intre continut:
după care rezolvăm problema pentru sufix şi prefix prin metoda liniară în $O(N/K)$, şi determinăm în $O(1)$ pentru fiecare bucată în care este spart şirul $a[x..y]$ subsecvenţa ei de sumă maximă.
Mai rămâne să găsim subsecvenţa de sumă maximă cu capătul în bucăţi diferite. Pentru două bucăţi fixate $i < j$, subsecvenţa de sumă maximă ce are câte un capăt în fiecare bucată are valoarea: $max[j] - min[i]$. Determinarea subsecvenţei de sumă maximă cu capetele în bucăţi diferite devine astfel de complexitate $O(K)$. Deci, pentru a rezolva o întrebare trebuie să facem $O(N/K + K)$ calcule. Pentru a reduce complexitatea problemei considerăm pe $K = sqrt(N)$. Complexitatea totală a acestei soluţii este $O(N + M*sqrt(N))$.
Mai rămâne să găsim subsecvenţa de sumă maximă cu capătul în bucăţi diferite. Pentru două bucăţi fixate $i < j$, subsecvenţa de sumă maximă ce are câte un capăt în fiecare bucată are valoarea: $max[j] - min[i]$. Determinarea subsecvenţei de sumă maximă cu capetele în bucăţi diferite devine astfel de complexitate $O(K)$. Deci, pentru a rezolva o întrebare trebuie să facem $O(N/K + K)$ calcule. Pentru a reduce complexitatea problemei considerăm pe $K = sqrt(N)$. Complexitatea totală a acestei soluţii este $O(N + M * sqrt(N))$.
Să vedem ce se întâmplă pe exemplu:
build_tree(2 * index + 1, mid + 1, high);
aint[index].maxS = Math.max(aint[2 * index].maxS,
Math.max(aint[2 * index + 1].maxS, aint[2 * index + 1].max - aint[2 * index].min));
aint[index].max = Math.max(aint[2 * index].max,aint[2 * index + 1].max);
aint[index].min = Math.min(aint[2 * index].min,aint[2 * index + 1].min);
aint[index].max = Math.max(aint[2 * index].max, aint[2 * index + 1].max);
aint[index].min = Math.min(aint[2 * index].min, aint[2 * index + 1].min);
}
}
==
şi procedura care răspunde la întrebări tot în _java_:
== code(java) |
long minPrefix;
long minPrefix;
int x, y;
public long queryTree(int index, int low, int high) {
if (x <= low && high <= y) {
long maxRet = aint[index].maxS;
if (minPrefix != infinity) {
if (minPrefix != INFINIT) {
maxRet = Math.max(maxRet, aint[index].max - minPrefix);
}
minPrefix = Math.min(minPrefix, aint[index].min);
h2(#bibliografie). Bibliografie
# '_Arbori de intervale (Segment Trees)_':arbori-de-intervale, Dana Lica
# '_Căutări Ortogonale: Structuri de date şi aplicaţii_':cautari-ortogonale, Cosmin Negruşeri
# '_Efficient Algorithms for the Maximum Subarray Problem by Distance Matrix Multiplication_':http://www.cosc.canterbury.ac.nz/tad.takaoka/cats02.pdf, Takaoka T.
# '_On the Range Maximum-Sum Segment Query_':http://www.csie.ntu.edu.tw/~kmchao/papers/2007_DAM_RMSQ.pdf, Kuan Yu Chen, Kun Mao Chao
# '_Efficient Algorithms for Locating the Length-Constrained Heaviest Segments, with Applications to Biomolecolar Sequence Analysis_':http://www.csie.ntu.edu.tw/~kmchao/seq2003/mslc.pdf, Yaw Ling Liu, Tao Jiang, Kun Mao Chao
# '_Introducere in Algoritmi_':http://zhuzeyuan.hp.infoseek.co.jp/ita/toc.htm, T. H. Cormen, C. E. Leiserson, R. R. Rivest
# Dana Lica - '_Arbori de intervale şi aplicaţii în geometria computaţională_':arbori-de-intervale
# Cosmin Negruşeri - '_Căutări Ortogonale: Structuri de date şi aplicaţii_':cautari-ortogonale
# Takaoka T. - '_Efficient Algorithms for the Maximum Subarray Problem by Distance Matrix Multiplication_':http://www.cosc.canterbury.ac.nz/tad.takaoka/cats02.pdf
# Kuan Yu Chen, Kun Mao Chao - '_On the Range Maximum-Sum Segment Query_':http://www.csie.ntu.edu.tw/~kmchao/papers/2007_DAM_RMSQ.pdf
# Yaw Ling Liu, Tao Jiang, Kun Mao Chao - '_Efficient Algorithms for Locating the Length-Constrained Heaviest Segments, with Applications to Biomolecolar Sequence Analysis_':http://www.csie.ntu.edu.tw/~kmchao/seq2003/mslc.pdf
# T. H. Cormen, C. E. Leiserson, R. R. Rivest - '_Introducere in Algoritmi_':http://zhuzeyuan.hp.infoseek.co.jp/ita/toc.htm
Nu exista diferente intre securitate.
Topicul de forum nu a fost schimbat.