1. Trang chủ
  2. » Cao đẳng - Đại học

Thi ket thuc hoc phan cu nhan CNTT lien thong 2012

6 3 0

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

THÔNG TIN TÀI LIỆU

Nội dung

- Vì thế, việc thêm một đối tượng vào Stack hoặc lấy một đối tượng ra khỏi Stack được thực hiện theo cơ chế LIFO Last In First Out - Vào sau ra trước - Các đối tượng có thể được thêm vào[r]

(1)Thi kết thúc học phần CẤU TRÚC DỮ LIỆU VÀ GIÁI THUẬT (Cử nhân CNTT liên thông ) Thời gian: 90 phút ĐỀ Câu 1: (2,0 điểm) a) Thế nào là thuật giải tốt? Mục đích việc nghiên cứu cấu trúc liệu và giải thuật b) Ví dụ minh họa cho thấy tầm quan trọng thuật giải hiệu Câu (3,5 điểm) Sử dụng cấu trúc mảng để thực các yêu cầu sau: a) Định nghĩa ngăn xếp (Stack) b) Cài đặt Stack cấu trúc mảng c) Viết các thủ tục, hàm thao tác trên Stack: Tạo Stack rỗng, Kiểm tra Stack rỗng, Kiểm tra Stack đầy, xoá (lấy) phần tử Stack, Thêm phần tử vào Stack Câu (4,5 điểm): Sử dụng cấu trúc liệu danh sách trên sở mảng để thực các yêu cầu sau: a) Tạo cấu trúc liệu danh sách trên sở mảng để tổ chức quản lý 50 trường học tạo bỡi: Mã trường (MATRUONG), tên trường (TEN), địa (DIACHI), số điện thoại (SODT) b) Xây dựng các thủ tục, hàm: Khởi tạo danh sách rỗng, kiểm tra danh sách rỗng, kiểm tra danh sách đầy c) Thực các thao tác trên danh sách: - Thêm (chèn) phần tử X vào danh sách; - Xây dựng giải thuật tìm kiếm nhị phân để tìm phần tử X danh sách -Hết -DUYỆT ĐỀ RA ĐỀ Ths Hà Văn Dũng (2) Hướng dẫn chấm đề Câu 1: (2,0 điểm) a) - Thế nào là thuật giải tốt (0,5 điểm) ? Có thể nêu hai tiêu chuẩn sau:  Đơn giản, dễ hiểu, dễ lập trình (1)  Cho lời giải nhanh, dùng ít tài nguyên máy tính (2) Nếu dùng thuật giải cho vài lần thì tiêu chuẩn quan trọng tiêu chuẩn thứ Trái lại, đây là bài toán phổ biến, thuật giải còn dùng nhiều lần thì tiêu chuẩn quan trọng tiêu chuẩn - Mục đích việc nghiên cứu cấu trúc liệu và giải thuật (0,5 điểm): Mục đích việc nghiên cứu cấu trúc liệu và giải thuật chính là để xây dựng các chương trình hiệu Tiêu chuẩn chính là tính hiệu thuật giải Một thuật giải gọi là hiệu nó tiết kiệm không gian và thời gian Tiết kiệm không gian là chiếm dụng ít nhớ thời gian thực Tiết kiệm thời gian là chạy nhanh Tiêu chuẩn thời gian thực nhanh là quan trọng hàng đầu Đánh giá độ phức tạp thuật giải là đánh giá thời gian thực nó b) Ví dụ minh họa cho thấy tầm quan trọng thuật giải hiệu (1,0 điểm) Sinh viên tùy chọn ví dụ minh họa, sau đây là ví dụ  Xét bài toán tính định thức cấp n Giả sử M = aij là ma trận vuông n x n Cần tính định thức det(M) a1,1 a12 a1n M= an1 an2 ann Nếu n = thí det(M) = a11 - Trái lại, n > sử dụng công thức khai triển theo định thức hàng để đưa định thức cấp thấp Giải thuật này cần đến n.(n-1).(n-2)… = n! phép tính nhân Mà n! là số lớn n là không lớn Sẽ cần đến (3) hàng triệu năm để tính định thức cấp 100 Rõ ràng là không thể chấp nhận thuật toán - Đưa ma trận dạng đường chéo.Tính định thức tích các phần tử trên đường chéo  Dùng thuật toán này tính định thức cấp n cần n3 phép tính Chỉ cần không quá giây để tính định thức cấp 100 Câu (3,5 điểm) a) Định nghĩa Stack (0,5 điểm) - Stack là danh sách mà các đối tượng thêm vào và lấy đầu danh sách - Vì thế, việc thêm đối tượng vào Stack lấy đối tượng khỏi Stack thực theo chế LIFO (Last In First Out - Vào sau trước) - Các đối tượng có thể thêm vào Stack lúc nào có đối tượng thêm vào sau cùng phép lấy khỏi Stack b) Cài đặt Stack (0,5 điểm) (sinh viên có thể sử dụng ngôn ngữ Pascal C, C++ để minh họa thuật toán, 0,5 điểm/phép toán) CONST maxlength= ; {độ dài mảng} TYPEelementType = ; {kiểu các phần tử ngăn xếp} STACK = record element:array[1 maxlength] of elementtype; top_idx: integer; {giữ đỉnh ngăn xếp} end; c) Các phép toán trên Stack (2,5 điểm: 0,5 điểm/ phép toán) Tạo ngăn xếp rỗng Procedure MAKENULL_STACK(var s:stack); begin s.top_idx:=maxlength+1; end; Kiểm tra ngăn xếp rỗng Function EMPTY_STACK(s:stack):boolean; begin EMPTY_STACK:=(s.top_idx=maxlength+1); (4) end; Kiểm tra ngăn xếp đầy Function FULL_STACK(S:stack):boolean; begin FULL_STACK:=(s.top_idx=1); end; Thủ tục xoá (lấy) phần tử Procedure POP(var S:STACK); begin if not EMPTY_STACK(s) then s.top_idx:=s.top_idx+1; Else writeln('Lỗi: ngăn xếp rỗng'); end; Thêm phần tử vào ngăn xếp Procedure PUSH(x:elementtype;var s:stack); begin if not FULL_STACK(s) then begin S.top_idx:=S.top_idx-1; S.element[S.top_idx]:=x end else writeln('lỗi: ngăn xếp đầy'); end; Câu 3(4,5 điểm) a) Tạo cấu trúc liệu cho danh sách (1,5 điểm) CONST Max = 50; TYPE Truong = record MATRUONG : string [5] TEN: string [30]; DIACHI: string [50]; SODT: word; End; LArray = array [1 max] of truong; List = record Size: word; (5) Data: LArray; End; Var ds: list; b) Xây dựng các thủ tục hàm: Khởi tạo danh sách rỗng, kiểm tra danh sách rỗng, kiểm tra danh sách đầy (1,0 điểm) Procedure InitList (var ds: list); Begin Ds.Size := 0; End; Function Empty (ds: list): boolean; Begin Empty : = ds.size = 0; End; Function Full (ds: list): boolean; Begin Full := ds.size >= max; End; c) Thực các thao tác trên danh sách: - Thêm trường (phần tử) X vào danh sách; (1,0 điểm) Procedure InsertList (X: dataType; var ds: list, i: word); Var j: word; Begin If not Full (ds) then Begin Inc(ds.size) If ( i > = 1) and (I <= ds.size) then For j := ds.size downto I + Ds.data [j - 1] Else I : = ds.size; Ds.data := X (6) End; End; Xây dựng giải thuật tìm kiếm nhị phân để tìm trường (phần tử) X danh sách; (1,0 điểm) Function Search (X: dataType; ds: list): word; Var Lo, Hi, Mid: word; Found: boolean; Begin Lo := 1; Hi := ds.size; Found = false; While (hi > = lo) and (not found) Begin Mid := (lo + hi) div 2; If sless (ds.data[mid], X) then Lo := mid + Else If equal(ds.data[mid], X) then Found := true; Else Hi := Hi – 1; End; If found then Search := mid; Else Search := 0; End; (7)

Ngày đăng: 15/06/2021, 11:20

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w