ĐỀ CƯƠNG ÔN TẬP MÔN CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT pptx

40 1.7K 24
ĐỀ CƯƠNG ÔN TẬP MÔN CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT pptx

Đ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

Khoa CNTT  Trường CĐCN Việt Đức ĐỀ CƯƠNG ÔN THI HỌC KỲ 4 Môn: Chuyên ngành ( CTDL & GT) Khóa: 4_2009-2012_Ngành: Công nghệ thông tin Lớp: K4 CĐ Tin Khoa: CNTT ĐỀ CƯƠNG ÔN TẬP MÔN CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Câu số 1 Cho dãy số: 8, 12, 3, 4, 6, 1, 7, 9, 33, 22. Ứng dụng thuật toán sắp xếp Chọn để sắp xếp dãy số trên. Giải: Thuật toán: type mang = array [1 100] of integer; var a:mang; {sx chon} procedure sapxepchon (var a:mang; n:integer); var j,k,i:integer; tg:longint; begin for i:=1 to n-1 do begin k:=i; for j:=i+1 to n do if a[j]<a[k] then k:=j; begin tg:=a[i]; a[i]:=a[k]; a[k]:=tg; end; end; end; CTDL&GT - 1 - Khoa CNTT  Trường CĐCN Việt Đức ví dụ lượt 8 12 3 4 6 1 7 9 33 22 1 1 12 3 4 6 8 7 9 33 22 2 3 12 4 6 8 7 9 33 22 3 4 12 6 8 7 9 33 22 4 6 12 8 7 9 33 22 5 7 8 12 9 33 22 6 8 12 9 33 22 7 9 12 33 22 8 12 33 22 9 22 33 Kq 1 3 4 6 7 8 9 12 22 33 Câu số 2 Cho dãy số: 8, 12, 3, 4, 6, 1, 7, 9, 33, 22. Ứng dụng thuật toán sắp xếp Chèn để sắp xếp dãy số trên. Giải: Thuật toán sắp xếp chèn type mang = array [1 100] of integer; var a:mang; {sx chen} procedure sapxepchen (var a:mang; n:integer); var j,k,i:integer; x:longint; begin for i:=2 to n do begin x:=a[i]; j:=i-1; while (x<a[j]) and (j>0) do begin a[j+1]:=a[j]; j:=j-1; a[j+1]:=x; end; CTDL&GT - 2 - Khoa CNTT  Trường CĐCN Việt Đức end; end; ví dụ Bảng sau ghi lại các giá trị khoá tương ứng với từng bước. a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] a[10] Ban đầu 8 12 3 4 6 1 7 9 33 22 8 12 3 4 6 6 7 9 33 22 8 12 3 4 4 6 7 9 33 22 8 12 3 3 4 6 7 9 33 22 8 12 12 3 4 6 7 9 33 22 8 8 12 3 4 6 7 9 33 22 Bước 1 1 8 12 3 4 6 7 9 33 22 8 12 12 4 6 7 9 33 22 8 8 12 4 6 7 9 33 22 Bước 2 3 8 12 4 6 7 9 33 22 8 12 12 6 7 9 33 22 8 8 12 6 7 9 33 22 Bước 3 4 8 12 6 7 9 33 22 8 12 12 7 9 33 22 8 8 12 7 9 33 22 Bước 4 6 8 12 7 9 33 22 8 12 12 9 33 22 8 8 12 9 33 22 Bước 5 7 8 12 9 33 22 Bước 6 8 12 9 33 22 12 12 33 22 Bước 7 9 12 33 22 Bước 8 12 33 22 33 33 Bước 9 22 33 Kết quả 1 3 4 6 7 8 9 12 22 33 Câu 3: Cho dãy số: 8,12,3,4,6,1,7,9,33,22. Ứng dụng thuật toán sắp xếp nổi bọn (bubble sort) để sắp xếp dãy số trên. Giải: Thuật toán sắp xếp nổi bọt : {sx noi bon} procedure bubblesort (var a:mang; n:integer); var j,k:integer; tg:longint; begin for i:=1 to n-1 do CTDL&GT - 3 - Khoa CNTT  Trường CĐCN Việt Đức begin {write('luot',i);} for j:=n downto i+1 do if a[j]<a[j-1] then begin tg:=a[j]; a[j]:=a[j-1]; a[j-1]:=tg; end; end; end; Bảng sau ghi lại các giá trị khoá tương ứng với từng bước. a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] a[10] Ban đầu 8 12 3 4 6 1 7 9 33 22 8 12 3 4 6 1 7 9 22 33 8 12 3 4 1 6 7 9 22 33 8 12 3 1 4 6 7 9 22 33 8 12 1 3 4 6 7 9 22 33 8 1 12 3 4 6 7 9 22 33 Bước 1 1 8 12 3 4 6 7 9 22 33 8 3 12 4 6 7 9 22 33 Bước 2 3 8 12 4 6 7 9 22 33 8 4 12 6 7 9 22 33 Bước 3 4 8 12 6 7 9 22 33 8 6 12 7 9 22 33 Bước 4 6 8 12 7 9 22 33 8 7 12 9 22 33 Bước 5 7 8 12 9 22 33 Bước 6 8 12 9 22 33 Bước 7 9 12 22 33 Bước 8 12 22 33 Bước 9 22 33 Kết quả 1 3 4 6 7 8 9 12 22 33 Câu số 4 Cho dãy số: 8, 12, 3, 4, 6, 1, 7, 9, 33, 22. CTDL&GT - 4 - Khoa CNTT  Trường CĐCN Việt Đức Ứng dụng thuật toán sắp xếp Quicksort (nhanh) để sắp xếp dãy số trên. Giải: type mang = array [1 250] of longint; var a:mang; {ctc hoan vi} procedure hoanvi(p,q:longint); var x:longint; begin x:=a[i]; a[i]:=a[j]; a[j]:=x; end; {ctc sap xep nhanh} procedure sapxepnhanh( m,l:longint); var y:longint; begin i:=m; j:=l; y:=a[(i+j) div 2]; while (i<=j) do begin while (a[i]<y) do i:=i+1; while (a[j]>y) do j:=j-1; if (i<=j) then begin hoanvi(a[i],a[j]); i:=i+1; j:=j-1; end; if (m<j) then sapxepnhanh(m,j); if (i<l) then sapxepnhanh(i,l); end; end; Chọn chốt là phần tử đầu lượt 8 12 3 4 6 1 7 9 33 22 CTDL&GT - 5 - Khoa CNTT  Trường CĐCN Việt Đức 1 [1 7 3 4 6] [8] [12 9 33 22] 2 [1] [7 3 4 6] [8] [9] [12 33 22] 3 [1] [6 3 4] [7] [8] [9] [12] [33 22] 4 [1] [4 3] [6] [7] [8] [9] [12] [22] [33] 5 [1] [3] [4] [6] [7] [8] [9] [12] [22] [33] Kq 1 3 4 6 7 8 9 12 22 33 Câu số 5 Cho dãy số: 8, 12, 3, 4, 6, 1, 7, 9, 33, 22. Ứng dụng thuật toán sắp xếp Mergesort (hòa nhập) để sắp xếp dãy số trên. Giải: Thuật toán: {ctc tron 2 mang} procedure sxtron(var X, Y: mang; a, b, c: Integer); var j, p: Integer; begin p := a; i := a; j := b + 1; while (i <= b) and (j <= c) do begin if X[i] <= X[j] then begin Y[p] := X[i]; i:=i+1; end else begin Y[p] := X[j]; j:=j+1; end; p:=p+1;{hoac la:Inc(p):day la ham tu dong tang bien len 1} end; if i <= b then Move(X[i], Y[p], (b - i + 1) * SizeOf(X[1])) {sizeof:tinh kich thuoc cua mang} else Move(X[j], Y[p], (c - j + 1) * SizeOf(X[1])); end; procedure hoatron(var X, Y: mang; len: Integer); CTDL&GT - 6 - Khoa CNTT  Trường CĐCN Việt Đức var a, b, c: Integer; begin a := 1; b := len; c := len * 2; while c <= n do begin sxtron(X, Y, a, b, c); a := a + len * 2; b := b + len * 2; c := c + len * 2; end; if b < n then sxtron(X, Y, a, b, n) else if a <= n then Move(X[a], Y[a], (n - a + 1) * SizeOf(X[1])); end; Ví dụ: lượt 8 12 3 4 6 1 7 9 33 22 1 [8 12] [3 4] [1 6] [7 9] [22 33] 2 [3 4 8 12] [1 6 7 9] [22 33] 3 [1 3 4 6 7 8 9 12] [22 33] 4 1 3 4 6 7 8 9 12 22 33 Kq 1 3 4 6 7 8 9 12 22 33 Câu số 6 Trình bày thuật toán sàng số nguyên tố. Lấy ví dụ minh họa. Giải: Thuật toán sàng nguyên tố - Giới hạn sàng nguyên tố là n. Như vậy ta phải sàng lấy các số nguyên tố từ 1 đến n - Kiểm tra từ 2 đến n giả sử là số i - loại bỏ tất cả những số là bội của số i lớn hơn i. Số đầu tiên của dãy này là số nguyên tố type mang=array[1 10000] of longint; var a:mang; n:longint; procedure sang( n:longint); var i,j:integer; begin for i:=2 to n do CTDL&GT - 7 - Khoa CNTT  Trường CĐCN Việt Đức a[i]:=1; for i:=2 to n do if a[i]=1 then for j:=i to n div i do a[i*j]:=0; for i:=2 to n do if a[i]=1 then write(' ',i,' '); end; Ví dụ: sàng các số nhỏ hơn 60 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 lượt 1 khi số đầu tiên của dãy là 2 ta loại bỏ được các số là bội của 2 là: 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60. lươt 2: số kt là 3 loại bỏ được các số: 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48,51, 54, 57,60. Tưng tự, số nào chưa bị loại bỏ là số nguyên tố dãy chưa bị loại bỏ là: 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59. Câu số 7 cho biểu thức toán học sau: Chuyển biểu thức trên về dạng hậu tố. Ứng dụng stack để tính giá trị của biểu thức trên. Giải: 1. Chuyển biểu thức về dạng hậu tố 10 2 + 2 2 + / 3 6 * 9 7 - / + 6 2 – 2 / 8 9 * 15 12 - / - * 2. Ứng dụng Stack để tính biểu thức trên Đi từ đầu biểu thức đến cuối biểu thức: Nếu là toán hạng thì đẩy vào ngăn xếp, nếu là toán tử thì lấy phần tử trên cùng top và top-1 thực hiện phép toán của toán tử giữa toán hạng top-1 và top sau đó đẩy kết quả vào ngăn xếp CTDL&GT - 8 - Khoa CNTT  Trường CĐCN Việt Đức 10 2 + 2 2 + / 3 6 * 9 7 - / + 10+2=12 2+2=4 12/4=3 3*6=18 9-7=2 18/2=9 9+3=12 7 2 6 9 9 2 2 2 2 4 3 3 18 1 8 1 8 1 8 9 10 1 0 12 1 2 1 2 12 3 3 3 3 3 3 3 3 12 6 2 - 2 / 8 9 * 1 5 12 - / - * Kq 6-2=4 4/2=2 8*9=72 15-12 =3 72/3 =24 2-24 =-22 12*(-22) =-264 12 9 1 5 15 3 2 2 8 8 7 2 7 2 72 7 2 2 4 6 6 4 4 2 2 2 2 2 2 2 2 - 22 1 2 1 2 1 2 1 2 1 2 1 2 12 1 2 1 2 12 1 2 1 2 1 2 - 26 4 - 264 Kết quả: -264 Câu số 8 Khái niệm CTC? Nêu ý nghĩa của việc sử dụng CTC? Viết CTC tìm phần tử lớn nhất trên mảng có sử dụng CTC tính giá trị lớn nhất của 2 số? CTDL&GT - 9 - Khoa CNTT  Trường CĐCN Việt Đức Giải: 1. Khái niệm CTC. Nêu ý nghĩa của việc sử dụng CTC - Khái niệm CTC CTC (hay còn gọi là hàm, thủ tục, thủ tục con) là một chuỗi mã để thực thi một thao tác đặc thù nào đó như một phần của chương trình lớn hơn. Đây là các câu lệnh được nhóm vào một khối và được đặt tên và tên này tuỳ theo ngôn ngữ có thể gán với một kiểu dữ liệu. Những khối mã này có thể tập trung lại thành một thư viện phần mềm. Các CTC có thể được gọi ra để thi hành (thường thông qua tên của CTC). Điều này có nghĩa là cho phép sử dụng CTC nhiều lần mà không cần viết lại khối mã, khối mã đó chỉ được viết một lần. - Ý nghĩa của việc sử dụng CTC + Tránh lặp đi lặp lại một đoạn chương trình + Giúp chương trình ngắn gọn, dễ sửa đổi bổ sung + Có thể sử dụng trong các chương trình khác nếu được tạo vào thư viện. + Tránh được việc khai báo nhiều biến trong chương trình chính 2. CTC tìm phần tử lớn nhất trên mảng có sử dụng CTC tính giá trị lớn nhất của 2 số type mang=array[1 50] of longint; var a:mang; i:integer; procedure max_2so( a, b:longint); begin if (a>b) then max_2so :=a else max_2so :=b; end; procedure max_mang( a:mang; n:integer); begin for i=2 to n do a[i]=max_2so(a[i-1],a[i]); max_mang:= a[n-1]; end; Câu số 9 Trình bày thuật toán phân tích một số nguyên thành tích các thừa số nguyên tố. Giải: - Một số nguyên không là số nguyên tố sẽ là tích của các số nguyên tố - Procedure pt_nto(n:integer); Var d,t :integer; begin d :=2; t :=0; CTDL&GT - 10 - [...]... niệm thuật toán và nêu các đặc trưng của thuật toán Lấy ví dụ minh họa Giải: Định nghĩa: Thuật toán là một dãy hữu hạn các bước, mỗi bước mô tả chính xác các phép toán hoặc hành động cần thực hiện để giải quyết vấn đề đặt ra Đặc trưng của thuật toán 1 Bộ dữ liệu vào: Mỗi thuật toán cần có một số (có thể bằng 0) dữ liệu vào (input) Đó là các giá trị cần đưa vào khi thuật toán bắt đầu làm việc Các dữ liệu. .. cần đưa vào khi thuật toán bắt đầu làm việc Các dữ liệu này cần được lấy từ các tập hợp giá trị cụ thể nào đó 2 Dữ liệu ra: Mỗi thuật toán cần có một hoặc nhiều dữ liệu ra (output) Đó là các giá trị có quan hệ hoàn toàn xác định với các dữ liệu vào và là kết quả của sự thực hiện thuật toán 3 Tính xác định: Mỗi bước của thuật toán cần phải được mô tả một các chính xác, chỉ có một cách hiểu duy nhất... chỉ bằng giấy trắng và bút trong khoảng thời gian hữu hạn CTDL> - 13 - Khoa CNTT  Trường CĐCN Việt Đức 5.Tính dừng : Với mọi bộ dữ liệu vào thoả mãn các điều kiện của dữ liệu vào, thuật toán phải dừng lại sau một số hữu hạn các bước cần thực hiện Ví dụ : Thuật toán tìm UCLN theo phương pháp chia liên tiếp Thuật toán Vào : m, n nguyên dương Ra : d, ước chung lớn nhất của m và n Phương pháp Bước... hàng đợi trước sẽ được lấy ra trước Do đó hàng đợi còn gọi là danh sách vào trước ra trước (FIFO List) và cấu trúc này được gọi là cấu trúc FIFO (First In First Out) Ví dụ: Xếp hàng mua vé tàu, vé xem phim, vé vào xem bóng đá Trình bày thuật toán đẩy một phần tử vào Queue và thuật toán loại bỏ một phần tử khỏi Queue (hàng đợi ) Giải: {Khai báo hàng đợi} const max=100; type hd=record d,c,count:integer;... đó mà ngăn xếp CTDL> - 15 - Khoa CNTT  Trường CĐCN Việt Đức còn gọi là danh sách vào sau ra trước (LIFO List) và cấu trúc này được gọi là cấu trúc LIFO (Last In First Out) Ví dụ: Xếp đĩa, mua vé, đổi nhị phân, thập phân Trình bày thuật toán đẩy một giá trị vào Stack và thuật toán loại bỏ một phần tử khỏi Stack Giải: {Khai bao Stack} const max=100; type nx=record top:integer; a:array[1 max] of integer... khác nhau, thì cùng một dữ liệu vào, những người thực hiện thuật toán khác nhau có thể dẫn đến các kết quả khác nhau Để đảm bảo được tính xác định thuật toán cần phải được mô tả trong các ngôn ngữ lập trình Trong các ngôn ngữ này, các mệnh đề được tạo thành theo qui tắc cú pháp nghiêm ngặt và chỉ có một ý nghĩa duy nhất 4 Tính khả thi: Tất cả các phép toán có mặt trong các bước của thuật toán phải đủ đơn... đó giá trị của r phải bằng 0, thuật toán dừng Câu số 13 Định nghĩa hàng đợi ? Cho ví dụ? Viết CTC đẩy 1 phần tử vào hàng đợi? Giải: Định nghĩa hàng đợi Hàng đợi là một danh sách mà trong đó các thao tác thêm một phần tử vào trong danh sách được thực hiện ở một đầu này và thao tác lấy ra một phần tử từ trong danh sách lại được thực hiện ở đầu kia Như vậy, các phần tử đưa vào trong hàng đợi trước sẽ được... (s.top>0) do begin loaibo(s,y); write(‘kq’,y); end ; end ; Câu số 19 Trình bày thuật toán chèn thêm một nút mới vào cây tìm kiếm nhị phân Lấy ví dụ minh họa Giải: Việc thêm một một nút có trường khoá bằng x vào cây phải đảm bảo điều kiện ràng buộc của Cây TKNP Ta có thể thêm vào nhiều chỗ khác nhau trên cây, nhưng nếu thêm vào một nút lá sẽ là tiện lợi nhất do ta có thể thực hiện quá trình tương tự như... (upcase(a[i])=’E’); loai(s,t); writeln(‘Ket qua cua bieu thuc la: ‘, t); end; CTDL> - 17 - Khoa CNTT  Trường CĐCN Việt Đức Câu số 16 Trình bày thuật toán chèn thêm một phần tử vào mảng đã được sắp xếp sao cho sau khi chèn mảng không mất tính sắp xếp Giải: - Giả sử chèn X vào mảng a có n phần tử đã sắp xếp tăng - Trong khi giá trị của mảng ở vị trí cần chèn còn nhỏ hơn giá trị của X thì vị trí được tăng lên... var ok:boolean); Var rear:integer; Begin With Q do If rear=max then ok:=false Else begin Rear:=rear+1; Element[rear]:=x; Ok:=true; End; End; Câu số 11 Trình bày thuật toán đẩy một giá trị vào Stack và thuật toán loại bỏ một phần tử khỏi Stack Giải: {Khai bao Stack} const max=100; type nx=record top:integer; a: array[1 max] of integer; end; { day mot phan tu vao ngan xep} Procedure them(var s:nx; x:integer); . Việt Đức ĐỀ CƯƠNG ÔN THI HỌC KỲ 4 Môn: Chuyên ngành ( CTDL & GT) Khóa: 4_2009-2012_Ngành: Công nghệ thông tin Lớp: K4 CĐ Tin Khoa: CNTT ĐỀ CƯƠNG ÔN TẬP MÔN CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Câu. thực hiện để giải quyết vấn đề đặt ra. Đặc trưng của thuật toán 1. Bộ dữ liệu vào: Mỗi thuật toán cần có một số (có thể bằng 0) dữ liệu vào (input). Đó là các giá trị cần đưa vào khi thuật toán. trước (LIFO List) và cấu trúc này được gọi là cấu trúc LIFO (Last In First Out). Ví dụ: Xếp đĩa, mua vé, đổi nhị phân, thập phân. Trình bày thuật toán đẩy một giá trị vào Stack và thuật toán loại

Ngày đăng: 06/08/2014, 04:20

Từ khóa liên quan

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

Tài liệu liên quan