|
04. 08. 2007. | #1 |
Domagoj Horvat
Expert
|
Matematicki problem
imamo matricu MxN. popunjena je nulama, osim na proizvoljnim mjestima jedinicama. potrebno je pronaci najvecu matricu popunjenu samo jedinicama unutar velike.
dakle, nesto kao 0 0 1 1 0 0 1 1 1 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 ako je ovo pocetna matrica, algoritam bi trebao vratiti 3. i 4. stupac (bez zadnjeg reda) ima li ko ideju kako uopce pristupit problemu? bilo bi dosta jednostavnije da se trazi kvadratna, ali treba bas proizvoljan mxn [Edit: dana matrica slucajno je kvadratna. opci slucaj je mxn osnovne matrice, takodjer]
__________________
postoje ludosti bez kojih je nemoguce ljudsko dostojanstvo Poslednja izmena od dee : 04. 08. 2007. u 00:16. |
04. 08. 2007. | #2 |
хардвераш
Qualified
Datum učlanjenja: 04.01.2007
Lokacija: Маунтин Вју, САД
Poruke: 117
Hvala: 4
25 "Hvala" u 10 poruka
|
Како дефинишеш највећу (под)матрицу?
ф
__________________
Рад је створио човека. Рад ће га и уништити. |
04. 08. 2007. | #3 |
Domagoj Horvat
Expert
|
kao najvecu sastavljenu od samih jedinica, bez ijedne nule.
__________________
postoje ludosti bez kojih je nemoguce ljudsko dostojanstvo |
04. 08. 2007. | #4 |
хардвераш
Qualified
Datum učlanjenja: 04.01.2007
Lokacija: Маунтин Вју, САД
Poruke: 117
Hvala: 4
25 "Hvala" u 10 poruka
|
Разумео сам да је попуњена јединицама. Али шта значи „највећа“.
Да објасним: шта се дешава ако имаш две пуне подматрице 3x4? Која од те две подматрице је највећа? Шта се дешава ако имаш пуну подматрицу 1x12 и 3x4? Која од те две подматрице је највећа? Кад се каже „највећа“ онда се подразумева да може да постоји само једна. Кад се каже „максимална“, онда може да буде више максималних. Али прво мора да се установи мера по којој се матрице уређују. Кад сам питао, мислио сам на дефиницију мере. ф
__________________
Рад је створио човека. Рад ће га и уништити. |
04. 08. 2007. | #5 | |
Domagoj Horvat
Expert
|
Citat:
najveca je ona koja ima najvise jedinica i takva je uvijek samo jedna.
__________________
postoje ludosti bez kojih je nemoguce ljudsko dostojanstvo |
|
04. 08. 2007. | #6 |
хардвераш
Qualified
Datum učlanjenja: 04.01.2007
Lokacija: Маунтин Вју, САД
Poruke: 117
Hvala: 4
25 "Hvala" u 10 poruka
|
Падају ми на памет два приступа. Један је грубом силом, а сложеност је O[max(m,n)^4].
Други треба да обори сложеност на нешто мање. Први је лакши за објашњавање. Прво нам треба предикат који за задате координате углова подматрице (нпр. горњи-леви и доњи-десни) одређује да ли је подматрица пуна. Подматрица је пуна ако у њој нема нула. То се уради тако што се направи табела димензија m*n у којој, у ћелији (m,n) стоји збир свих поља почетне матрице, у подматрици [(0,0),(m,n)]. (тзв. дискретни интеграл) . Ова табела се лако прави једним пролазом кроз изворну матрицу, тако што се почне од подматрице [(0,0),(0,0)], чији је дискретни интеграл просто вредност уписана у ћелију (0,0). Дискретни интеграл суседних матрица се добија на основу већ израчунатих вредности и нове ћелије. Када се има ова табела, лако је да се одреди дискретни интеграл било које подматрице [(p,q),(r,s)] као: DI[(p,q),(r,s)] = DI[(0,0),(r,s)]*[r>0,s>0] - DI[(0,0),(p-1,r)]*[p>1,r>0] - DI[(0,0),(s,q-1)]*[s>0,q>1] + DI[(0,0),(p-1,q-1)]*[p>1,q>1] овде је DI(x) дискретни интеграл подматрице, а x = [(x,y),(z,т)], тј. пар тачака које редом одређују горњи-леви и доњи десни угао. (ћелија 0,0 је горе-лево а координате расту надесно, одн. надоле); [.] је индикатор функција (тзв. Ајверсонов [Iverson] индикатор), који има вредност 1 када је услов наведен унутар индикатора тачан, одн. 0 ако је услов наведен у индикатору нетачан. (НБ: [t>=0] је Хевисајдова функција, позната свима који су се бавили рецимо обрадом сигнала) Ако је дискретни интеграл неке подматрице једнак њеној површини, онда је матрица пуна. Ова провера може да се одради у константном времену, кад смо једном срачунали DI. Онда направимо два итератора по елементима матрице и пробамо све могуће комбинације горњих левих и доњих десних ћошкова подматрице. То су укупно 4 обгрљене петље. Проверимо DI да откријемо да ли је посматрана подматрица пуна. Ако јесте, сачувамо је као највећу, под условом да је већа од највеће дотад пронађене. Када се петље заврше, највећа пуна подматрица је сачувана. ф
__________________
Рад је створио човека. Рад ће га и уништити. |
|
|
Slične teme | ||||
Tema | Početna poruka teme | Forum | Odgovori | Poslednja poruka |
Double float problem - resen, ali ima dodatni problem :0 | ljtruba | (X)HTML, JavaScript, DHTML, XML, CSS | 34 | 23. 08. 2008. 03:28 |