Tìm t ng con ln n ht trong mt vector

Một phần của tài liệu Tài liệu Kiểu dữ liệu phức hợp_chương 3 doc (Trang 42 - 43)

Cho m t danh sách L g m N s th c, c n tìm t ng l n nh t trong t t c các t ng c a các danh sách con c a L (g i t t là t ng con l n nh t). Ch ng h n danh sách :

có t ng con l n nh t là 75 t ng ng v i danh sách con (35 12 28)

Bài toán này xu t hi n trong th t c so m u hai chi u đ x lý nh s do Ulf Grenander, Brown University, đ xu t n m 1977 : cho tr c ma tr n N×N s th c, c n tìm ma tr n con có t ng l n nh t trong t t c các ma tr n con có th .

Vì đ ph c t p tính toán quá l n, bài toán đ c đ a v bài toán m t chi u. Tuy nhiên, bài toán m t chi u ch t ra đ n gi n khi m i ph n t là s d ng, khi đó k t qu chính là danh sách đã cho. N u m i ph n t là s âm thì k t qu là 0, t ng ng v i danh sách r ng. Nh ng khi danh sách có c s âm và s d ng tu ý, bài toán l i tr nên r t ph c t p. ã có nhi u l i gi i cho bài toán này :

• Thu t toán l p ph ng v i chi phí O(N3). • Thu t toán bình ph ng v i chi phí O(N2).

• Thu t toán đ quy «chia đ tr » do M. Shamos đ xu t v i chi phí O(NlogN). • Thu t toán quét (t t nh t) do Jay Kadane đ xu t v i chi phí tuy n tính O(N).

Ý t ng c a thu t toán quét nh sau : đ tìm t ng con l n nh t c a danh sách L[1..i],

i=1..N, gi thi t r ng đã có k t qu (đã x lý) cho L[1..i-1],MaxSoFar. Khi đó, t ng con

l n nh t c a L[1..i], ho c là MaxSoFar, ho c là t ng con l n nh t k t thúc t i i, g i là

MaxEndingHere (ph n g ch g ch trong hình v sau đây).

1 i

MaxSoFar MaxEndingHere Hình III.11. Thu t toán quét tìm t ng con l n nh t.

Thu t toán quét đ c vi t b ng gi ng ph ng Pascal nh sau :

MaxSoFar := MaxEndingHere := 0

for i := 1 to N do begin

MaxEndingHere max(MaxEndingHere+L[i], 0)

MaxSoFarmax(MaxSoFar,MaxEndingHere)

end

Sau đây là th t c Scheme tìm t ng con l n nh t c a danh sách s d ng phép l p : (define (maxsumlist L)

(define (msl-it L Ms Me) (if (null? L)

Ms

(let ((m (max (+ Me (car L)) 0))) (msl-it (cdr L) (max m Ms) m)))) (msl-it L 0 0))

(maxsumlist '(18 -20 35 12 28 -5 -42 30 -50 45)) --> 75

Một phần của tài liệu Tài liệu Kiểu dữ liệu phức hợp_chương 3 doc (Trang 42 - 43)

Tải bản đầy đủ (PDF)

(90 trang)