Đề cương ôn thi Cấu trúc dữ liệu và giải thuật Cao học CNTT

58 943 3
Đề cương ôn thi Cấu trúc dữ liệu và giải thuật  Cao học CNTT

Đ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ất cả các dạng bài tập môn Cấu trúc dữ liệu và giải thuật được biên soạn chi tiết theo từng phần một cách khoa học và dễ hiểu nhất;Đề cương ôn thi cao học công nghệ thông tin tại MTA chi tiết và đầy đủ nhất

Ke ban hanh _ CNTT K29 Bổ sung phần tử vào Stack • Procedure Push(S, T, X) {Giải thuật bổ sung phần tử X vào stack lưu trữ vector S có n phần tử T trỏ, trỏ tới đỉnh stack)} {Xem xét stack có TRÀN (overflow) không? Hiện tượng tràn xảy S không chỗ để tiếp tục lưu trữ phần tử stack Lúc in thông báo tràn kết thúc} if T≥n then begin write(‘Stack tràn’); return end; {chuyển trỏ} T:=T+1; {Bổ sung phần tử X} S[T]:=X; return Loại bỏ phần tử khỏi Stack • Function POP(S, T) {hàm thực việc loại bỏ phần tử đỉnh stack S mà T trỏ tới Phần tử bị loại thu nhận đưa ra} {Xem xét stack có CẠN (underflow) không? Hiện tượng CẠN xảy stack rỗng, không phần tử để loại nữa, lúc in thông báo CẠN kết thúc} if T≤0 then begin write(‘STACK CẠN’); return end; {chuyển trỏ} T:=T-1; {Đưa phần tử bị loại ra} POP:=S[T+1] return Bổ sung phần tử Hàng đợi • Procedure CQINSERT(F,R,Q,n, X) {Cho trỏ F R trỏ tới lối trước lối sau queue lưu trữ vector gồm n phần tử, theo kiểu vòng tròn Giải thuật thực bổ sung phần tử X vào lối sau queue Ban đầu queue rỗng F=R=0} {Chỉnh lại trỏ R} if R=n then R:=1 else R:=R+1; {Kiểm tra TRÀN} Ke ban hanh _ CNTT K29 if F=R then begin write(‘TRÀN’); return end {Bổ sung X vào} Q[R]:=X; {Điều chỉnh trỏ F bổ sung lần đầu} if F=0 then F:=1; return Loại bỏ phần tử khỏi hàng đợi • Function CQDELETE(F, R, Q, n) {Cho F R trỏ tới lối trước lối sau queue kiểu vòng tròn, lưu trữ vector Q có n phần tử Hàm thực việc loại bỏ phần tử lối trước queue đưa nội dung phần tử ra} {Kiểm tra CẠN} if F=0 then begin write(‘CẠN’); return (0); end; {Loại bỏ} Y: = Q[F]; {Xử lý trường hợp queue trở thành rỗng sau phép loại bỏ} if F=R then {F = R tức lúc queue có phần tử} begin F:=R:=0; return (Y) end; {Chỉnh lại trỏ F sau phép loại bỏ} if F=n then F:=1 else F:=F+1 Return (Y) Bài tập Các ma trận thưa có kích thước mxn có cấu trúc Matrix = Record spt: Số phần tử khác không mảng; D: Array[1 max] of Giá trị; C: Array[1 max] of Chỉ số; End; Trong max số phần tử khác không tối đa ma trận, phần tử khác không thứ k, tính từ xuống dưới, từ trái qua phải, A(i, j) lưu vào C[k] = (i-1)*n + j D[k] = A(i, j) Ke ban hanh _ CNTT K29 Cho trước hai ma trận thưa A B theo cấu trúc Matrix Viết thủ tục tính T = A+B Procedure TongMatran(A: Matrix; B: Matrix; Var T: Matrix); Var ka, kb: integer; Co: Array[1 max] of Boolean; Begin T.spt:=0; for kb:=1 to B.spt co[kb]:=false; for ka:=1 to A.spt begin kb:=1; while ((kb không giảm; Bước 2: Lặp lại thủ tục với X(i+1), i = n; Input: Dãy X(1), X(2), , X(n) Output: Dãy X(1), X(2), , X(n) không giảm; Chi tiết: Bắt đầu với B(1) = < X(1) >; For i:=2 to n 1) tg := X(i); 2) j := i - 1; 3) While (j>0) and (tg < X(j)) X(j+1):= X(j); j := j-1; End While; 4) X(j+1):=tg; End For; 52 Ke ban hanh _ CNTT K29 Ví dụ xét dãy: X = 1, 3, 5, 7, 8, 9, 12, 4, 5, 6, B(7) = , Xét i = 8, Đặt j = i-1 = Đổi dần tg = lùi phía trước; sau bước X = 1, 3, 5, 7, 8, 9, 12, 12, 5, 6, 2, j=6 X = 1, 3, 5, 7, 8, 9, 9, 12, 5, 6, 2, j=5 X = 1, 3, 5, 7, 8, 8, 9, 12, 5, 6, 2, j=4 X = 1, 3, 5, 7, 7, 8, 9, 12, 5, 6, 2, j=3 X = 1, 3, 5, 5, 7, 8, 9, 12, 5, 6, 2, j=2 Tại bước j=2 Gán X(j+1):=tg => X(3) = Kết quả: X = 1, 3, 4, 5, 7, 8, 9, 12, 5, 6, Sắp xếp bọt Bài toán: Cho mảng n số nguyên X(1), X(2), , X(n) Hãy xếp lại mảng theo thứ tự không giảm Ý tưởng Về thuật toán xếp bọt gần giống với thuật toán xếp Điểm khác biệt chỗ bước lặp để tìm giá trị dãy X(i), X(i+1), X(i+2), , X(n) xuất phát từ “dưới lên” so sánh cặp một, phần tử đứng sau X(j+1) mà nhỏ so với phần tử đứng truoc X(j) đổi chỗ chúng cho Thuật toán Đầu vào: Dãy X(1), X(2),…,X(n) Đầu ra: Dãy X(1), X(2),…,X(n) xếp không giảm For i=1 to n -1 for j=n down to i+1 if X(j) < X(j-1) then Đổi chỗ ( X(j), X(j-1) ) 53 Ke ban hanh _ CNTT K29 Sắp xếp phân đoạn/sắp xếp nhanh Thuật phân đoạn Sau phần tử chốt chọn giải thuật phân đoạn nên tiến hành nào? Một giải pháp đơn giản cho vấn đề duyệt từ đầu đến cuối so sánh phần tử danh sách với phần tử chốt Theo cách này, ta phải tiến hành n phép so sánh, phải dành n đơn vị nhớ để lưu giữ giá trị trung gian Một giải pháp khác đề nghị duyệt theo hai đường Một đường từ đầu danh sách, đường từ cuối danh sách Theo cách này, ta tìm phần tử tính từ trái lớn phần tử chốt phần tử đầu 54 Ke ban hanh _ CNTT K29 tiên phía phải nhỏ phần tử chốt đổi chỗ cho Tiếp tục hai đường gặp Để gọi đệ quy ta xét toán phân chia danh sách a: thành hai danh sách Đầu vào: Mảng X[1 n] số nguyên Đầu ra: Mảng X sau xếp không giảm + Gọi SXN(1, n) + Chi tiết thủ tục xếp nhanh procedure SXN(L,R:integer); var key,i,j:integer; begin if L

Ngày đăng: 18/10/2017, 08:27

Từ khóa liên quan

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

Tài liệu liên quan