Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 19 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
19
Dung lượng
91,55 KB
Nội dung
TRƯỜNG CAO ĐẲNG NGHỀ ĐẠI HỌC BÁCH KHOA Báo cáo Nhóm 2: Dịch nội dung tài liệu Data Structures Using C And C++ Page 13 – Page 27 Môn: Anh Văn Chuyên Ngành Sinh viên thực hiện: Hà Tiến Dũng Nguyễn Duy Bình Đỗ Trung Đông Nguyễn Trường Giang Đinh Sơn Hải Lớp: QTM1-K4 Hà nội, 2013 ADT (Những kiểu liệu trừu tượng) Một công cụ hữu dụng dành cho việc mơ tả thuộc tính logic kiểu liệu kiểu liệu trừu tượng, ADT.Về bản, kiểu liệu trừu tượng tập hợp giá trị phép tốn giá trị Chúng tạo thành cấu trúc tốn học mà thực phần cứng phần mềm cấu trúc liệu Thuật ngữ “Dữ liệu trừu tượng” liên kết với khái niệm toán học sở để định nghĩa loại liệu Khi định nghĩa kiểu liệu trừu tượng khái niệm thuộc toán học, quan tâm đến vấn đề giải thuật, khơng cần tới tính hiệu không gian hay thời gian Trên thực tế, định nghĩa loại liệu trừu tượng chẳng đề cập tới việc thực thi tiểu tiết chút Nó chí cịn chẳng thể thực loại liệu trừu tượng đặc thù phần đặc thù phần cứng hay sử dụng hệ thống phần mềm đặc thù Chẳng hạn, vừa nhận loại liệu trừu tượng số nguyên sử dụng lúc Tuy nhiên, đặc tả thuộc tính thuộc toán học logic kiểu liệu cấu trúc, loại liệu trừu tượng nguyên tắc đạo hữu dụng cho người cài đặt cơng cụ có ích cho lập trình viên người ước mong để sử dụng loại liệu cách đắn Có số phương pháp để miêu tả loại liệu trừu tượng Phương pháp mà sử dụng bán thức vay mượn nhiều từ ký hiệu Lập trình C mở rộng ký hiệu nơi cần thiết Để minh họa khái niệm loại liệu trừu tượng phương pháp miêu tả chúng ta, xem xét loại liệu trừu tượng hữu tỷ, mà tương ứng với khái niệm toán học số hữu tỷ Một số hữu tỷ số mà biểu diễn thương hai số nguyên Các phép toán thực số hữu tỷ mà ta định nghĩa sáng tạo số hữu tỷ từ hai số nguyên, cộng thêm vào, nhân lên, kiểm tra Sau phần mở đầu đặc tả loại liệu trừu tượng này: /*value definition*/ abstract typedef RATIONAL; condition RATIONAL[1] != 0; /*operator defintion*/ abstract RATIONAL makerational(a,b) int a,b; precondtion b !=0; postcondition makerational[0] == a; makerational[1] == b; abstract RATIONAL add(a,b) /* written a + b */ RATIONAL a,b; postcondition add[1] == a[1] * b[1]; add[0] == a[0] * b[1] + b[0] * a[1]; abstract RATIONAL mult(a,b) /* written a * b*/ RATIONAL a,b; postcondtion mult[0] == a[0] * b[0]; mult[1] == a[1] * b[1]; abstract equal(a,b) /*written a == b */ RATIONAL a,b; postcondition equal == (a[0]*b[1] == b[0]*a[1]); Một loại liệu trừu tượng gồm có hai phần: Một giá trị định nghĩa Một toán tử định nghĩa Giá trị định nghĩa xác định tập giá trị cho loại liệu trừu tượng bao gồm hai phần: Một mệnh đề định nghĩa mệnh đề điều kiện Chẳng hạn, giá trị định nghĩa cho loại liệu trừu tượng hữu tỷ cho biết giá trị hữu tỷ gồm hai số nguyên, số thứ hai chúng không Dĩ nhiên, hai số nguyên tố tạo thành số hữu tỷ tử số mẫu số Chúng ta dùng ký hiệu bảng (trong ngoặc vuông) để phần kiểu trừu tượng Các từ khóa abstract typedef giới thiệu giá trị định nghĩa, từ khóa condition dùng để định rõ điều kiện kiểu vừa định nghĩa Trong định nghĩa này, điều kiện rõ thương số không Mệnh đề định nghĩa yêu cầu bắt buộc, mệnh đề điều kiện khơng cần thiết cho loại liệu trừu tượng Giá trị định nghĩa sau đem tới toán tử định nghĩa Mỗi toán tử định nghĩa hàm trừu tượng với phần: Phần đầu, phần tùy ý điều kiện trước, phần điều kiện sau Ví dụ, toán tử định nghĩa loại liệu trừu tượng hữu tỷ, kể tạo lập phép toán ( makerational), phép cộng (add) phép nhân (mult), việc kiểm tra Nào ta xem xét đặc tả cho phép tính nhân trước tiên, phép tính đơn giản Nó chứa đựng phần đầu điều kiện sau, khơng có tiền điều kiện: abstract RATIONAL mult(a,b) /*written a*b */ RATIONAL a,b; postcondition mult[0] == a[0] * b[0]; mult[1] == a[1] * b[1]; Phần đầu định nghĩa hai dịng đầu tiên, chúng phần đầu hàm C Từ khóa “abstract” khơng phải hàm C mà toán tử định nghĩa loại liệu trừu tượng Chú thích bắt đầu với từ khóa “written” cho biết cách khác để viết hàm Điều kiện sau rõ việc tính tốn Trong điều kiện sau, tên hàm ( trường hợp này, mult) dùng để biểu thị kết phép tính Do vậy, mult[0] đại diện cho phần tử số kết quả, mult[1] phần mẫu số kết Đó là, định rõ điều kiện trở thành sau phép tốn thực Trong ví dụ này, phần điều kiện sau rõ phần tử số kết phép nhân hữu tỷ số nguyên kết phần tử thức hai số đầu vào, phần mẫu thức số nguyên kết hai mẫu thức Sự đặc tả phép cộng giản đơn sau: a0 + b0 a1 a0 * b1 + a1 * b0 b1 a1 * b1 Phép toán sáng tạo xây dựng số hữu tỷ từ hai số nguyên chứa đựng ví dụ phần tiền điều kiện Nói chung, điều kiện trước đặc tả hạn chế mà phải thỏa mãn trước phép tính thực Trong ví dụ này, điều kiện trước nói rõ makerational thực tham số thứ hai khác Đặc tả phép tính có ý nghĩa phức tạp mặt khái niệm Nói cách tổng quát, hai giá trị loại liệu trừu tượng “bằng nhau” giá trị thành phần chúng Thực vậy, thường cho phép tính (và phép tính khơng bằng) phép tốn tồn định nghĩa theo cách đó, toán tử định nghĩa rõ ràng khơng bắt buộc Phép tốn đặt ( cài đặt giá trị mục tiêu trước tới giá trị mục tiêu khác) ví dụ khác phép tính mà thường cho loại liệu trừu tượng không đặc tả cách chi tiết Tuy nhiên, với vài loại liệu, hai giá trị với thành phần không coi Thật vậy, trường hợp với số hữu tỷ; ví dụ, số hữu tỷ 1/2, 2/4, 3/6, 18/36 tất dù thành phần chúng không Hai số hữu tỷ xem thành phần chúng số giảm tới số hạng bé ( là, tử số mẫu số chúng hai chia bới số chia chung lớn nhất) Một cách kiểm tra hữu tỷ giảm hai số tới số hạng bé sau kiểm tra tử số mẫu số Một cách kiểm tra khác kiểm tra hữu tỷ kết chéo (đó là, tử số lần, mẫu số lần khác) Đây phương pháp mà ta sử dụng để đặc tả trừu tượng phép toán Sự đặc tả trừu tượng làm rõ vai trò loại liệu trừu tượng định nghĩa hoàn toàn hợp lý loại liệu Như sưu tập hai số nguyên, hai cặp xếp không thành phần chúng không nhau; song số hữu tỷ, chúng Khơng thực tính tốn số hữu tỷ tiến hành kiểm tra nhau, thật tạo thành tích trực tiếp; chúng q lớn để đại diện số nguyên máy Rất có thể, thi hành đầy đủ trước tiên giảm liệu nhập tới số hạng bé sau kiểm tra thành phần.Thực vậy, tiến hành có lý khăng khăng đòi makerational, add, mult tạo số hữu tỷ số hạng bé Tuy nhiên, định nghĩa thuộc toán học đặc tả loại liệu trừu tượng khơng cần nói đến việc thi hành chi tiết Thực vậy, phép thể hai số hữu tỷ thể chúng thành phần không buộc ta viết lại điều kiện sau cho makerational, add, mult Đó là, m0 = = a0 * b0 m1 a1 b1 Nó khơng cần thiết m0 = a0 * b0 m1 = a1 * b1, cần m0 * a1 * b1 = m1 * a0 * b0 Một đặc tả loại liệu trừu tượng xác cho RATIONAL đây: /* value definition*/ abstract typedef Nếu S chứa đựng n phần tử, S nhắc đến độ dài n Chúng ta giả sử tồn hàm có chiều dài len len(S) chiều dài dãy S Chúng ta giả sử hàm first(S), hàm mà trả giá trị phần tử S (S0 điều đề cập đến ví dụ), last(S), hàm mà trả giá trị phần tử cuối S(Sn-1 điều đề cập đến ví dụ).Có dãy đặc biệt với với chiều dài 0, gọi nilseq, dãy mà không chứa phần tử nào, first(nilseq) last(nilseq) không định nghĩa Chúng ta ước muốn định nghĩa loại liệu trừu tượng stp1 loại mà giá trị phần tử dãy Nếu dãy tùy ý chiều dài gồm có tất phần tử chúng loại, tp, sau stp1 định nghĩa abstract typedef stp1; Ngoài ra, muốn định nghĩa loại liệu trừu tượng stp2 loại mà giá trị dãy có chiều dài cố định mà phần tử dãy loại đặc trưng Trong trường hợp này, ta đặc tả định nghĩa: abstract typedef stp2; Dĩ nhiên, muốn định rõ dãy với chiều dài cố định mà tất phần tử loại Chúng ta sau viết abstract typedef stp3; Trong trường hợp stp3 đại diện cho dãy với chiều dài n, tất phần tử loại Chẳng hạn, việc sử dụng ký hiệu đề cập đến định nghĩa loại sau đây: abstract typedef > intseq; /* sequence of integers of */ /* any length */ abstract typedef seq3; /* squence of length */ /* consisting of an integer, */ /* a character and a */ /* floating-point number */ abstract typedef intseq; /* sequence of 10 integers */ abstract typedef pair; /* arbitrary sequence of */ /* */ length Hai dãy phần tử tương ứng với phần tử thứ hai Một dãy phần chia liên tiếp dãy Nếu S dãy, hàm sub(S,i,j) nghĩa dãy S bắt đầu vị trí i S gồm có j phần tử liên tiếp Do vậy, T sub(S,i,k), T dãy , t0 = s(i+1), , t(k-1) = s(i+k-1) Nếu i không nằm len(S) – k, sau sub(S,i,k), định nghĩa nilseq Sự nối kết hai dãy, viết S+T, dãy gồm có tất phần tử S theo sau tất phần tử T Đôi ao ước để đặc tả đưa vào phần tử dãy, place(S,i,x) định nghĩa dãy S với phần tử x chèn vào vị trí tiếp sau i (hoặc vào phần tử dãy i -1) Tất phần tử dãy vị trí chúng chuyển Đó , place(S, i, x) sub(S, 0, i+1) + + sub(S, i+1, len(S) – i-1) Việc xóa phần tử từ dãy được đặc tả theo hai cách Nếu x phần tử dãy S, S - cho dãy S mà phần tử x Dãy delete(S, i) dãy S với phần tử vị trí i xóa delete(S, i) viết thuật ngữ phép toán khác sub( S, 0, i) + sub( S, i+1, len(S) – i – 1) ADT cho xâu ký tự với chiều dài thay đổi Như minh họa việc dùng ký hiệu dãy định nghĩa loại liệu trừu tượng, phát triển đặc tả loại liệu trừu tượng với xâu ký tự có chiều dài thay đổi Có bốn phép tốn sở (ngoại trừ phép tính phép gán) thơng thường kể hệ thống mà hỗ trợ xâu ký tự như: length hàm mà trả xâu ký tự có chiều dài concat hàm mà trả nối kết hai xâu ký tự đầu vào substr hàm mà trả chuỗi xâu ký tự cho pos hàm mà trả vị trí xâu ký tự chuỗi khác abstract typedef STRING; abstract length(s) STRING s; postcondition length == len(s); abstract STRING concat(s1,s2) STRING s1.s2; postconidtion concat == s1 + s2; abstract STRING substr(s1, i, j) STRING s1; int i, j; precondition