Đánh giá một số thuật toán thông dụng

14 320 0
Đánh giá một số thuật toán thông dụng

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Tài liệu này dành cho sinh viên, giáo viên khối ngành công nghệ thông tin tham khảo và có những bài học bổ ích hơn, bổ trợ cho việc tìm kiếm tài liệu, giáo án, giáo trình, bài giảng các môn học khối ngành công nghệ thông tin

28/03/2008 1 ÁÁ Ố Đ Á NH GI Á MỘT S Ố THUẬT TOÁN THÔNG DỤNG Phạm Thế Bảo Khoa Toán – Tin học Trường Đại học Khoa học Tự nhiên Tp.HCM Tìm kiếmtuầntự • Xét mộtmảng các phầntử a[1], a[2], …, a[n]. Phầntử a[i] có khóa tìm kiếm là a[i].key, bài toán: cho trước khóa k, có tồn tại j để a[j] . key bằng k hay không ? khóa k, có tồn tại j để a[j] . key bằng k hay không ? i=1; found=false; while((i≤n)&&(not found)) do if(a[i].key bằng k) then found=true ; ế ; else i=i+1; endif endw Phạm Thế Bảo N ế ubỏ else: 1. Thuật toán còn đúng không? 2. Có tăng phép đếm (gán)? 28/03/2008 2 • Ta cần phân biệt:  Phép toán số học: so sánh, gán  Phép toán trên khóa: sao chép, so sánh • Nếutathêmmộtphầntử a[n+1].key=k thì số phép toán sẽ tăng hay giảm ? phép toán sẽ tăng hay giảm ? • Viếtlạithuật toán: i=1; a[n+1].key=k; while (a[ i ].key khác k) do while (a[ i ].key khác k) do i= i+1; endw Phạm Thế Bảo • Thuậttoándừng khi nào? – i =n+1 Æ không tìm thấy – i=i 0 , với1≤i 0 ≤n Æ tìm thấy • Để đánh giá ta cần tính α : Để đánh giá , ta cần tính α : – Tìm không thấy: k∉{a[i].key/i=1 n}Æ α=n, gọiq là xác suất tìm không thấy. – Tìm thấysẽ có xác suất là (1-q) – Đặtp i là xác suất để a[i].key bằng k ế ế – Giả thi ết a[k].key khác a[l].key n ế uk ≠ l – Nếua[i].keybằng k thì α=i-1 ??? – Vậy Phạm Thế Bảo 11 (1 ) 1 ( 1) trung bình vaø coù nn ii ii qqp pi αα == +− = == − ∑∑ 28/03/2008 3 • Khi tìm thấysố lượng so sánh khóa: – Tốithiểu= – Tối đa= – Trun g b ình = 1 n 1 n i p α += ∑ g • Số lầnsosánhkhóatrungbìnhchocả hai trường hợp tìm thấy và không tìm thấylà: 1i= ∑ 1 (1)(1) n i i nq qip = ++− ∑ Phạm Thế Bảo Xem xét phân bố khóa 1. Giả sử a[i].key=i k đ h ẫ hiê từ tậ h 12233 k đ ượcc h ọnng ẫ un hiê n từ tậ p h ợp 1 , 2 , 2 , 3 , 3 , 3, …, i, i, …, i, …, n, …, n, n+1, n+2, …, 2n Tổng số khả năng có thể là:(1+2+…+n)+n= Æ Xác suất để k ∉ {key} là ilầnnlần (3) 2 nn+ 2 (3) 3 n q nn n == + + Æ Xác suất để k ∉ {key} là Suy ra Phạm Thế Bảo (3) 3 2 nn n + + 2 (1) (1) 2 i ii p nn nn == + + 28/03/2008 4 Æ Số lần so sánh khóa trung bình là: 22 2 (1) 1 33(1) n i ni ⎛⎞ ⎛⎞ =+ +− ⎜⎟ ⎜⎟ ++ + ⎝⎠ ⎝⎠ ∑ 1 2 33(1) 2( 1) 1 2 ( 1)(2 1) 33(1) 6 297 3( 3) i nnnn nn nnn nnnn nn = ⎜⎟ ⎜⎟ ++ + ⎝⎠ ⎝⎠ ++ ++ =+ +++ ++ = + ∑ Phạm Thế Bảo 3( 3) n + 2. Giả sử dữ liệu phân bốđều Æ – Số lần so sánh khóa trung bình khi tìm thấy: 1 ,1 i p in n =∀= 11 11 2 nn i ii n ip i n + == ∑∑ 3. Giả sử có phân bố khóa như sau: 11 2 ii n == 12 3 2 1 2 2 2 n n c pc p c p c p − == = = Phạm Thế Bảo 1 11 1 1 11 2 121 1 22 1 2 1 1 21 2 i ta coù p n n nn k ik n cc c c − == ⎛⎞ − ⎜⎟ ⎡ ⎤ ⎛⎞ ⎝⎠ == = = − ⎢ ⎥ ⎜⎟ ⎝⎠ ⎢ ⎥ ⎣ ⎦ − ⇒= ⎡⎤ ⎛⎞ − ⎢⎥ ⎜⎟ ⎝⎠ ⎢⎥ ⎣⎦ ∑∑ 28/03/2008 5 S ln so sỏnh khúa trung bỡnh khi tỡm thy: 11 11 1 ' ' 22 ( 1 ) nn i - 1i ự tf( ) i nn n i ii ii i n ci ip i c x x == = == 1 2 () 1 (1) 1 (1 ) 1 2 i1 i i=1 i=1 xe t f( x ) = i xx vụựi c ủửụùc tớnh nhử treõn nn n i x nx n x x ip cf + = = + + = = Phm Th Bo 1 1 2 2 2 2 1 1 2 khi n ủuỷ lụựn (n i i n n i i n n ip = = + = )2 Nuthut túan phõn b nh trờn thỡ phc tpcathuttoỏnlhng (nh). D h h h ờ D on h ng p h nt t h ng xuy ờ n cg p nht csp u, nhng phntucú xỏc sutgpcaohncỏcphnt cng v sau, t l ny gimdnrt nhanh theo h s 2. Vớ d: ng dng trong t chcd liucah c s d liu Oracle Phm Th Bo 28/03/2008 6 4. Xem xét một phân bố khác như sau: 12 3 12 3 cc pp c p == = 11 1 1 11 1 (ln) 2 i n ta coù p maø H n nn n ik c p n ccH k On n == = == = =+ + + = ∑∑ • Lúc đósố phép so sánh khóa trung bình trong trường hợp tìm thấylà Phạm Thế Bảo 2 n 11 1 ln nn n i ii n H nn ip i iH n == ==≈ ∑∑ Tìm kiếmnhị phân • Cho mảng n phầntử thỏa a[1].key<…<a[n].key • Tổng quát, ta sẽ xét từ a[l] đến a[r], vớil≤r: Tí h [( l+ )/2] – Tí n h m= [( l+r )/2] – Nếu a[m].key bằng k Æ dừng – Nếu a[m].key nhỏ hơn k, quá trình tìm kiếmlặplại cho bên phải, nghĩa là l=m+1 – Nếu a[m].key lớnhơn k, quá trình tìm kiếmlặplại cho b ên trái, nghĩalàr= m -1 • Thay vì tính như trên, ta tính m=(a[l].key+a[r].key)/2 Æ chuyệngì? Phạm Thế Bảo 28/03/2008 7 • Ví dụ: xét n=6, m=(1+6)/2=3 – Nếuk∈{khóa} thì thuậttoán dừng ở đâu? Số lầnlặp trung bình ≈ [2,2] [4,6] 3 5 6 42 1 [1,2] [4,4] [6,6] [1,6] 11 2 2 33 14 66 xxx++ = Phạm Thế Bảo – Nếuk∉ {khóa} thì thuậttoán dừng ở đâu? Số lầnlặp trung bình ≈ a∈(-∞,a[1].key) b ∈ (a[1]. key,a [2].key ) c ∈ (a[2]. key,a [3].key) [2,2] [4,6] 3 5 6 42 1 a [1,2] [4,4] [6,6] [1,6] b ∈ (a[1]. key,a [2].key ) c ∈ (a[2]. key,a [3].key) d∈(a[3].key,a[4].key) e∈(a[4].key,a[5].key) f∈(a[5].key,a[6].key) g∈(a[5].key,+ ∞) b c d e f g 12 63 20 77 xx + = Phạm Thế Bảo 28/03/2008 8 Thuật toán: l=1; r=n; idx=-1; while (l≤r) do m=[l+r]/2; if(a[m].key==k) then idx=m; l=r+1; else if(if(a[m].key<k) then l=m+1; else r=m-1; endif endif endw Phạm Thế Bảo • β=1 khi k∈{khóa} và β=0 khi k∉{khóa} • Có 2α-β so sánh khóa • Ta nhậnthấy: 1≤α≤log 2 n • Ướclượng chính xác giá trị trung bình của α: Ta nhậnthấycóthể biểudiễn theo cây, với định nghĩaquynạp cho cây: với đoạn [l,r] cây có gốc là m=[(l+r)/2] và cây con trái đượcxâydựng với đọan [l,m-1] và cây con phải đượcxâydựng với đọan [m+1,r]. Ví dụ:n=10 [3 4] [6,10] 5 82 [1,4] [6 7] [9,10] [1 1] Vớimỗi cây T, ta xây dựng cây mở rộng T 1 sao cho mỗi node củatcóđúng hai con Phạm Thế Bảo [3 , 4] 9 63 [6 , 7] [9,10] 1 [1 , 1] 4 7 10 [4,4] [10,10] [7,7] 28/03/2008 9 • Thuậtngữ: – Node trong (node tròn) của T=node củaT=n – Node ngoài (vuông) của T=node bổ sung=N – Đ ộ dài đườn g đi đến node x: l ( x ) =số c ạ nh từ g ốc ộ g () ạ g đếnx. – Độ dài đường đi trong cây T= Trở lạivídụ trên, độ dài = 0x1+2x1+4x2+3x3=19 – Độ dài đường đi trung bình đếnmỗi node= Trở lại ví dụ = 19/10 = 19 {} trong l(x)=I(T) xnode∈ ∑ () soá node trong IT () l ∑ Trở lại ví dụ , 19/10 1 . 9 – Độ dài đường đi ngòai = E(T) = – Độ dài đường đi ngòai trung bình = Phạm Thế Bảo {} () node ngoaøix l x ∈ ∑ () soá node ngoaøi ET • Mệnh đề: a. Số node ngoài = số node trong +1, N=n+1 b. E(T)=I(T)+2n c. Đ ộ dài đườn g đin g òai trun g b ình = () 2 +1 I Tn + ộ g g g Ví dụ trên, có E(T)= I(T)= E(T) = I(T)+2x10 n +1 E(T) I(T)+2x10 Phạm Thế Bảo 28/03/2008 10 • Nhậnxét: – Khi tìm thấy: dừng ở node tròn x • β=1 và α=l(x)+1 [ ] {} () 1 () dt ø lx IT + ∑ • • Số phép so sánh khóa TB= – Khi không tìm thấy: dừng ở node vuông y • β=0 và α=l(y) {} () 1 no d e t ron x IT nn α ∈ ==+ () () 2211 1 IT IT nn αβ ⎡⎤ − =+−=+ ⎢⎥ ⎣⎦ • • Số phép so sánh khóa TB= Phạm Thế Bảo () () 2 1 E TIT n Nn α + == + () 4 22 1 I Tn n αβ + ⎡ ⎤ −= ⎢ ⎥ + ⎣ ⎦ Sắpxếpchèn • Có n phầntử a[1], …, a[n], ý tưởng: – n=1 hiển nhiên a[1] đượcsắp – Giả sử cókphầntửđầu a[1].key≤… ≤ a[k].key đượcsắp, ta phải tìm cách chèn a[k+1] vào đúng vị trí. Ví dụ:n=7,cómảng:10279615 Lần1chèn2trước10 Lần2chèn7giữa 2 và 10 … Phạm Thế Bảo [...]... hốn vị ban đầu • αj = số phần tử bên trái aj trong σcur mà lớn hơn aj = số phần tử bên trái aj trong σ mà lớn hơn aj Phạm Thế Bảo 11 28/03/2008 n • Vậy ∑ α j =1 j = số nghòch thế của σ n có α1 = 0 ⇒ ∑ α j = số nghòch thế của σ j=2 ⎡ n ⎤ gan so học a a Số phép gán số học = 1 + (n − 1) + ⎢∑ ( gán số hoc P(j)) ⎥ + n + 1 ⎣ ⎦ j=2 ⎧ ⎪ min=0 ⎪ n n(n-1) ⎪ = 2n − 1 + ∑ α j = 2n − 1 + số nghich thế của σ ⎨ max=...28/03/2008 Thuật tốn: j=2; while (j≤n) do i=j-1; k=a[j].key; [j] y r=a[j]; while ((i>0)&&(k . 28/03/2008 1 ÁÁ Ố Đ Á NH GI Á MỘT S Ố THUẬT TOÁN THÔNG DỤNG Phạm Thế Bảo Khoa Toán – Tin học Trường Đại học Khoa học Tự nhiên Tp.HCM Tìm kiếmtuầntự • Xét mộtmảng các phầntử a[1], a[2], …,. else: 1. Thuật toán còn đúng không? 2. Có tăng phép đếm (gán)? 28/03/2008 2 • Ta cần phân biệt:  Phép toán số học: so sánh, gán  Phép toán trên khóa: sao chép, so sánh • Nếutathêmmộtphầntử. khác k) do i= i+1; endw Phạm Thế Bảo • Thuậttoándừng khi nào? – i =n+1 Æ không tìm thấy – i=i 0 , với1≤i 0 ≤n Æ tìm thấy • Để đánh giá ta cần tính α : Để đánh giá , ta cần tính α : – Tìm không thấy:

Ngày đăng: 23/10/2014, 21:05

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan