1. Trang chủ
  2. » Công Nghệ Thông Tin

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

40 1,8K 24

Đ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

Thông tin cơ bản

Định dạng
Số trang 40
Dung lượng 613 KB

Nội dung

{ Loai bo phan tu khoi danh sanh}Procedure loaibovar s:nx; var x:integer ; Đị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 t

Trang 1

ĐỀ CƯƠNG ÔN THI HỌC KỲ 4Mô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

procedure sapxepchon (var a:mang; n:integer);

var j,k,i:integer; tg:longint;

Trang 2

procedure sapxepchen (var a:mang; n:integer);

var j,k,i:integer; x:longint;

Trang 3

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]

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

Trang 4

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]

Trang 5

{ctc sap xep nhanh}

procedure sapxepnhanh( m,l:longint);

Trang 7

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);

Trang 8

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ủabiể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 - / - *

Trang 9

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

1 2

1 2

1 2

2

1 2

2

1 2

1 2

26 4

264

-Kết quả: -264

Trang 10

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ố?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 thimộ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áccâ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ủaCTC) Đ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ạikhố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 2số

type mang=array[1 50] of longint;

var a:mang; i:integer;

procedure max_2so( a, b:longint);

Trang 11

Var d,t :integer;

begin

d :=2; t :=0;

while(n<>1) do begin

while(n mod d=0) do begin

p^.next:=nil;

head:=p;

end else

Trang 12

{ day mot phan tu vao ngan xep}

Procedure them(var s:nx; x:integer);

Trang 13

{ Loai bo phan tu khoi danh sanh}

Procedure loaibo(var s:nx; var x:integer );

Đị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ệunà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 Hiển nhiên đây là một đòi hỏi rất quantrọng Bởi vì, nếu một bước có thể hiểu theo nhiều cách 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ếtquả 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ànhtheo qui tắc cú pháp nghiêm ngặt và chỉ có một ý nghĩa duy nhất

Trang 14

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ản Điều này có nghĩa là, người lập trình có thể thực hiện chỉ bằnggiấy trắng và bút trong khoảng thời gian hữu hạn

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 1: Tìm r, phần dư của phép chia m cho n

Bước 2: Nếu r = 0, thì d  n (gán giá trị của n cho d) và dừng lại

Ngược lại, thì m  n, n  r và quay lại bước 1

Tính khả thi: ta chỉ cần thực hiện các phép chia các số nguyên các sốnguyên, các phép gán và các phép so sánh để biết được r = 0 hay r  0

Tính dừng: khi thực hiện bước 1 thì giá trị của r nhỏ hơn n, nếu r  0 thì giátrị của n ở bước 2 là giá trị của r ở bước trước, ta có n > r = n1> r1 = n2 > r2 Dãy

số nguyên dương giảm dần cần phải kết thúc ở 0, do đó sau một số bước nào đó giátrị của r phải bằng 0, thuật toán dừng

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ộtphần tử khỏi Queue (hàng đợi )

Trang 15

{Them mot phan tu vao hang doi}

Procedure them_hd(var q:hd; x:integer);

{Loại bo mot phan tu khoi hang doi}

Procedure loai_hd(var q:hd ;x:integer);

Trang 16

Ngăn xếp là một danh sách mà trong dó thao tác thêm một phần tử và thaotác lấy ra một phần tử từ trong danh sách được thực hiện ở cùng một đầu gọi làđỉnh ngăn xếp Như vậy, các phần tử được đưa vào trong ngăn xếp sau sẽ được lấy

ra trước, phần tử đưa vào đầu tiên sẽ được lấy ra cuối cùng Do đó mà ngăn xếpcò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ấutrú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

{ day mot phan tu vao ngan xep}

Procedure them(var S:nx; x:integer);

{Loai bo phan tu khoi danh sanh}

Procedure loaibo(var S:nx; x:integer );

Trang 17

1 Định nghĩa biểu thức hậu tố

Biểu thức dạng hậu tố là biểu thức có toán tử được đặt sau toán hạng 1 vàtoán hạng 2

Ví dụ: Biểu thức ở đạng trung tố:

(a+b)/(c-d)+e*f /(g-h) thì được chuyển sang dạng hậu tố

a b+ c d - / e f * g h - / +

2 CTC tính giá trị biểu thức dạng hậu tố bằng ngăn xếp

{Khai bao ngan xep}

{khai bao mang}

type mang=array[1 100] of string;

{CTC day mot phan tu vao ngan xep}

procedure them(var s:nx; x: integer);

{CTC loai bo mot phan tu khoi ngan xep}

procedure loai( var s:nx; x:integer);

{CTC tinh bieu thuc dang hau to}

procedure hauto( a: mang);

Trang 18

- 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 1 sẽ được vị trí chèn

- Khi chèn X thì mảng mới có n+1 phần tử Khi vị trí còn nhỏ hơn n+1 thì chuyển

các phần tử về phía sau for i=n downto i>vt do a[i]=a[i-1];

Thuật toán:

type mang=[1 100] of real;

var a:mang;

{Chen vao mang}

Procedure chen(a:mang; var n: integer; x:real);

- Dùng mảng c để lưu mảng sau khi trộn Mảng c có n+m phần tử

- So sánh 2 phần tử đầu của mảng a và mảng b phần tử nào nhỏ hơnđược đưa vào mảng c và loại bỏ phần tử đó khỏi mảng gốc tiếp tụccho đến khi loại bỏ hết phần tử ở một mảng a hoặc b

Trang 19

- Chuyển phần tử còn lại vào mảng c

CTC trộn 2 mảng theo ý tưởng trên:

{ctc tron}

type mang=array[1 100] of real;

procedure tron(a:mang; n:integer; b:mang; m:integer; c: mang); var i,j,t,k:integer;

else

for t :=0 to n-i do c[k+t] :=a[i+t];

Type mang=array[1 100] of real;

{Chen vao mang}

Procedure chen(var a:mang; var n: integer; x:real);

Trang 20

Mô tả cách dùng ngăn xếp để chuyển đổi cơ số? Viết CTC chuyển đổi 1 số

từ hệ thập phân sang hệ nhị phân dùng ngăn xếp?

Giải:

1 Mô tả cách dùng ngăn xếp để chuyển đổi cơ số

Ta dùng một stack (ngăn xếp) để lưu trữ số dư qua từng phép chia: Khi thựchiện phép chia thì nạp số dư vào ngăn xếp Sau đó lấy chúng lần lượt từ ngăn xếp

ra để hiển thị sẽ được số cần chuyển đổi

2 CTC chuyển đổi 1 số từ hệ thập phân sang hệ nhị phân dùng ngăn xếp

Trang 21

write(‘kq’,y);

end ; end ;

Giải thuật đệ quy

Type keytype =array[1 max] of real; {kiểu dữ liệu của mỗi nút}

Tree = ^ node;

Node = record

Trang 22

if x> info then insert (Right, x)

else if x < info then insert (left, x);

End;

Giải thuật lặp

Trong thủ tục này ta sử dụng biến con trỏ địa phương q chạy trên các đỉnhcủa cây bắt đầu từ gốc Khi đang ở một đỉnh nào đó, q sẽ xuống đỉnh con trái(phải) tuỳ theo khoá ở đỉnh lớn hơn (nhỏ hơn) khoá x Ở tại một đỉnh nào đó khi pmuốn xuống đỉnh con trái (phải) thì phải kiểm tra xem đỉnh này có đỉnh con trái(phải) không Nếu có thì tiếp tục xuống, ngược lại thì treo đỉnh mới vào bên trái(phải) đỉnh đó Điều kiện q = nil sẽ kết thúc vòng lặp Quá trình này được lại lặpkhi có đỉnh mới được chèn vào

procedure Insert (var Root : Tree; x: keytype)

Trang 23

if q^.right <> nil then q:=q^.right

else begin q^.right :=p;

q =nil;

end;

end;

end;

Ví dụ: Để dựng được cây TKNP ứng với một dãy khoá đưa vào bằng cách

liên tục bổ các nút ứng với từng khoá, bắt đầu từ cây rỗng Ban đầu phải dựng lêncây với nút gốc là khoá đầu tiên sau đó đối với các khoá tiếp theo, tìm trên câykhông có thì bổ sung vào

Ví dụ với dãy khoá: 42 23 74 11 65 58 94 36 99 87thì cây nhị phân tìm kiếm dựng được sẽ có dạng ở hình dưới đây

Trình bày thuật loại bỏ một nút khỏi cây tìm kiếm nhị phân Lấy vi dụ minhhọa

Giải:

Đối lập với phép toán chèn vào là phép toán loại bỏ Chúng ta cần phải loại

bỏ khỏi Cây TKNP một đỉnh có khoá x (ta gọi tắt là nút x) cho trước, sao cho việchuỷ một nút ra khỏi cây cũng phải bảo đảm điều kiện ràng buộc của Cây TKNP

Có ba trường hợp khi huỷ một nút x có thể xảy ra:

 X là nút lá

 X là nút nửa lá ( chỉ có một con trái hoặc con phải)

4242

Trang 24

 X có đủ hai con (trường hợp tổng quát)

Trường hợp thứ nhất: chỉ đơn giản huỷ nút x vì nó không liên quan đến

phần tử nào khác

Trường hợp thứ hai: Trước khi xoá nút x cần móc nối cha của x với nút

con (nút con trái hoặc nút con phải) của nó

Trường hợp tổng quát: khi nút bị loại bỏ có cả cây con trái và cây con

phải, thì nút thay thế nó hoặc là nút ứng với khoá nhỏ hơn ngay sát trước nó (nútcực phải của cây con trái nó) hoặc nút ứng với khoá lớn hơn ngay sát sau nó (nútcực trái của cây con phải nó) Như vậy ta sẽ phải thay đổi một số mối nối ở cácnút:

 Nút cha của nút bị loại bỏ

 Nút được chọn làm nút thay thế

 Nút cha của nút được chọn làm nút thay thế

Thủ tục xoá một nút được trỏ bởi con trỏ q

Type keytype =[1 max] of real;{kiểu dữ liệu của mỗi nút}

Q:=P ^ right ;{R ^ left := P ^ right}

Dispose(P);{Đây là thủ tục thu hồi bộ nhớ của biến động}

Trang 25

Q := T;

Dispose (P);{Đây là thủ tục thu hồi bộ nhớ của biến động}

end else begin

S := T ^ right; {Tìm nút thay thế, là nút cực phải của cây } while S ^ right <> nil do

procedure Delete (var Root :Tree ; x : keytype);

begin

if Root <> nil then

if x < Root ^ info then Delete (Root ^ left, x) else if x > Root ^ info then Delete (Root ^ right, x) else Del(Root);

T

S

T

3

Trang 26

Định nghĩa 2: Cây được định nghĩa đệ qui như sau

1 Một nút là một cây và nút này cũng là gốc của cây

2 Giả sử T1, T2, …,Tk (k  1) là các cây có gốc tương ứng n1, n2,…, nk n làmột nút và n có quan hệ cha con với n1, n2,…, nk Khi đó cây T với gốc n đượchình thành bằng cách cho n trở thành nút cha của các nút n1, n2,…, nk Các cây T1,

T2, …,Tk được gọi là cây con của n

Trang 27

Độ cao của cây: là số mức lớn nhất có trên cây đó

Cho dãy các đỉnh 8, 124, 3, 4, 6, 1, 7, 9, 33, 22, 11, 24 được duyệt theo thứ

tự trước Hãy xây dựng cây tương ứng với điệu kiện độ cao của cây bằng 3

Trang 28

Cho dãy các đỉnh 18, 12, 3, 24, 6, 41, 7, 9, 33, 22, 11, 24 được duyệt theothứ tự sau Hãy xây dựng cây tương ứng với điệu kiện độ cao của cây bằng 3.

Xây dựng cây tìm kiếm nhị phân:

- Duyệt lần lượt các phần tử từ đầu dãy đến cuối dãy

- Chọn phần tử đầu dãy làm gốc

- Từ đỉnh thứ 2 so sánh với gốc nếu lớn hơn thì tiếp tục so sánh vớicây con phải, nếu nhỏ hơn thì so sánh với con trái Nếu nhỏ hơn vàbên trái rỗng thì chèn vào bên trái, nếu lớn hơn và bên phải rỗng thìchèn vào bên phải

-2 4 1

1 2 1

1 7 8

3

11

2 2

2 4

6

1 0

Trang 29

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ềukiệ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ìnhtương tự như thao tác tìm kiếm Khi kết thúc việc tìm kiếm cũng chính là lúc tìmđược chỗ cần chèn.

Type keytype =array[1 100] of integer; {kiểu dữ liệu của mỗi nút}

if x> info then insert (Right, x)

else if x < info then insert (left, x);

2

10 0

8

3 0

2 2

5

9

7

3

Trang 30

Cây TKNP sau khi chèn thêm nút có nhãn 19

Câu số 25

Giả sử L là danh sách gồm các phần tử: L = (1, 2, 3) Hãy cho biết:

- L có độ dài bằng bao nhiêu?

- Hãy chỉ ra tất cả các danh sách con của L

- Hãy chỉ ra tất cả các dãy con của L

Giải:

L=(1, 2, 3) thì:

- Độ dài của danh sách là số phần tử của danh sách L có độ dài bằng 3

- Danh sách con của danh sách gồm các phần tử từ ai đến aj

(1<=i<=j<=n)Các danh sách con của L là: (1); (2); (3); (1, 2); (2, 3)

- Dãy con của một danh sách là một danh sách được loại bỏ một sốphần tử Các dãy con của L: (1); (2); (3); (1, 2); (2, 3); (1,3)

Câu số 26

1 0

2

10 0

8

3 0

2 2

Trang 31

Cho dãy các đỉnh HÀ-NỘI, THÁI-NGUYÊN, TUYÊN-QUANG, GIANG, BẮC-NINH, PHÚ-THỌ, YÊN-BÁI, LÀO-CAI, THÁI-BÌNH, NINH-BÌNH, NAM-ĐỊNH Xây dựng cây tìm kiếm nhị phân tương ứng

Xây dựng cây tìm kiếm nhị phân:

- Duyệt lần lượt các phần tử từ đầu dãy đến cuối dãy

- Chọn phần tử đầu dãy làm gốc

- Từ đỉnh thứ 2 so sánh với gốc nếu lớn hơn thì tiếp tục so sánh vớicây con phải, nếu nhỏ hơn thì so sánh với con trái Nếu nhỏ hơn vàbên trái rỗng thì chèn vào bên trái, nếu lớn hơn và bên phải rỗng thìchèn vào bên phải

HÀ - NỘ I

HÀ - NỘ I BẮC-

GIAN G

BẮC - NIN H

NGUYÊ N

THÁI-TUYÊ N- QUAN G

PHÚ THỌ

- BÁI THÁI

YÊN BÌNH LÀO-

CAI

NINH -BÌNH

ĐỊNH

NAM-1

Trang 32

Xoá nút trên cây

- Nếu nút cần xoá là lá thì chỉ xoá

- Nếu nút cần xoá là nửa lá nghĩa là chỉ có một cây con thì xoá xongthì nút thay thế là gốc của cây con

- Nếu nút cần xoá có cả 2 con thì khi xoá xong sẽ lấy nút nhỏ hơnngay sát trước nó (nút cực phải của cây con trái) hay nút lớn hơnngay sát nó (nút trái của cây con phái) để thay thê

Trường hợp xoá nút có nhãn 9 trên cây là nút nửa là nên nút thay thế sẽ làgốc của nút con và cây sau khi xoá là:

CTC xoá nút trên cây:

{Khai báo cây nhị phân, bởi con trỏ}

Type keytype =array[1 100] of integer; {kiểu dữ liệu của mỗi nút}

Tree = ^ node;

Type Node = record

Info : keytype;

1 2 1

7

8

3 0 3

2 2 9

1 2 1

0

3 0 3

2 2 7

1 0

8

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

HÌNH ẢNH LIÊN QUAN

Bảng sau ghi lại các giá trị khoá tương ứng với từng bước. - ĐỀ CƯƠNG ÔN TẬP MÔN CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT pptx
Bảng sau ghi lại các giá trị khoá tương ứng với từng bước (Trang 3)
Bảng sau ghi lại các giá trị khoá tương ứng với từng bước. - ĐỀ CƯƠNG ÔN TẬP MÔN CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT pptx
Bảng sau ghi lại các giá trị khoá tương ứng với từng bước (Trang 4)

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

TÀI LIỆU LIÊN QUAN

w