Nêu phương pháp để loại bỏ một đỉnh x= 39 trên cây, sao cho cây sau khi loại bỏ đỉnh đó vẫn là cây nhị phân tìm kiếm

Một phần của tài liệu Bài những đề thi và lời giải chi tiết cấu trúc dữ liệu (Trang 62 - 72)

bỏ đỉnh đó vẫn là cây nhị phân tìm kiếm

5) Hủy cây

………Hết……….

Thí sinh không được sử dụng tài liệu, không ghi vào đề thi

CB coi thi không giải thích gì thêm và nộp lại đề thi cho phòng chức năng theo quy chế của bộ Câu 1

+ Tác dụng của hàm băm h(hash function) : Phân chia các phần tử của tập hợp vào trong các lớp. Nếu x là giá trị khóa của môt phần tử nào đó của tập hợp thì h(x) là chỉ số nào đó của mảng T, h(x) được gọi là giá trị băm của x, ta nói x thuộc lớp h(x); (1 đ)

+ Các tiêu chuẩn để lựa chọn một hàm băm: (0.5 đ)

- Hàm băm phải cho phép tính được dễ dàng và nhanh chóng giá trị băm của mỗi khóa

- Phân bố đều các khóa vào các lớp + Một số phương pháp băm:

phương pháp băm gấp: (0.5 đ)

Giả sử khóa là số nguyên, ta phân chia khóa thành một số phần, sau đoa kết hợp các phần lại bằng một phương pháp nào đó(có thể dùng phép cộng hoặc phép nhân) để nhận được giá trị băm

Ví dụ: Nếu khóa là số nguyên gồm 10 chữ số, N= 1000, ta phân thành các nhóm 3,3,2,2 chữ số từ bên trái và công các nhòm lại, sau đó cắt cụt nếu cần thiết, ta sẽ nhận được giá trị băm 1229876087 được biến đổi thành: 122+987+60+87=1256, do ó ta có giá trị băm là: 256

Phương pháp băm cắt bỏ: (0.5 đ)

Giả sử khóa là số nguyên ( nếu khóa không là số nguyên ta xét đến mã của chúng). Ta sẽ bỏ đi một phần nào đó của khóa và lấy phần còn lại làm giá trị băm của khóa

Ví dụ:: Nếu khóa là số nguyên gồm 10 chữ số, N= 1000, ta lấy các chữ số thứ nhất, thứ 3, thứ 6 làm giá trị băm, giả sử khóa x= 1229876087 ta có h(x) = 126 là giá trị băm

Phương pháp băm lấy phần dư(0.5 đ)

Giả sử khóa là số nguyên, và giả sử ta muốn chia tập hợp các khóa thành N lớp. Ta chia khóa cho N, rồi lấy phần dư làm giá trị băm.

Ví dụ: Viết một hàm băm để băm các khóa là các xâu k{ tự có độ dài 10 thành các giá trị từ 0 đến N- 1

Type keytype= string[10]; Function h(x: keytype): 0..N-1; Var I,sum:integer;

Begin

Sum:=0;

For i:=1 to 10 do Sum:=Sum+ord(x[i]); H:= Sum mod N;

End;

Câu 2

+ Dạng cài đặt cây: (1 đ)

Type TreeBSearch = ^Nut; Nut = Record

Infor: Integer;

Left, Right: TreeBSearch; End;

Var T : TreeBSearch; 1) Tạo cây nhị phân tìm kiếm: (1 đ)

* Sử dụng con trỏ phụ M chứa địa chỉ của nút cần thêm * Xin MT cấp phát ô nhớ cho M

* Đổ dữ liệu cần thêm vào ô nhớ có địa chỉ M * Gắn M vào cây: (adsbygoogle = window.adsbygoogle || []).push({});

Nếu Cây rỗng (T = nil): T := M

Nếu cây không rỗng: Xác định vị trí thêm M: If (x<T^.info) then Insert (x, T^.Left)

Else if (x>T^.info) then Insert(x, T^.right); else thông báo x đã có trên cây

- Trong khi điều kiện nhập chưa thỏa mãn tính dừng (x<>0):  Nhập dữ liệu mới cần thêm x,

 Liên tiếp gọi thủ tục thêm đỉnh mới vào cây: Insert(x,T);

2) Tìm xem trên cây T có nút chứa thông tin = x không: Search(x, T) (1 đ)

- Nhâp x = ?

- Nếu cây rỗng (T = nil): Thông báo không tìm thấy

- Nếu cây không rỗng:

a) Sử dụng con trỏ phụ M di chuyển đến các đỉnh trên cây bắt đầu từ gốc:

b) Nếu M^.info = x: thông báo tìm thấy(found := true), thoát

c) Nếu (x<M^.info) thì tìm x trên cây con trái của M: M := M^.Left, ngược lại tìm x trên cây con phải của M : M := M^.Right;

d) Phép di chuyển M kết thúc khi m = nil(duyệt hết cây mà vẫn không thấy) hoặc found = true (tìm thấy) thì dừng

3) Thủ tục loại bỏ đỉnh x = 39 ra khỏi cây sao cho cây sau khi laọi bỏ vẫn là cây NPTK: (1 đ)

- Nếu không có thì thông báo và thoát khỏi chương trình

- Nếu x có trên cây:

 Di con trỏ P đến vị trí loại bỏ  Nếu p không có con: giải phóng p

 Nếu p có 1 cây con khác rỗng: treo cây con khác rỗng vào vị trí loại bỏ, giải phóng p

 Nếu p có cả hai cây con khác rỗng: treo cây con trái vào vị trí trái nhất của cây con phải, treo cây con phải vào vị trí loại bỏ, giải phóng p

5) Hủy cây: Duyệt cây theo thứ tự sau để hủy các đỉnh có trên cây, Duyệt đến đỉnh nào gọi thủ tục loại bỏ đỉnh đó (1 đ)

ĐẠI HỌC THÁI NGUYÊN

KHOA CÔNG NGHỆ THÔNG TIN ………

Câu 1( 3 điểm)

Trình bày một phương pháp cài đặt cây nhị phân tìm kiếm. Dựng một cây nhị phân tìm kiếm có 13 nút, các đỉnh nhận giá trị là các số chẵn 2, 4, 6, … Viết thuật toán thêm một đỉnh mới x = 13 vào cây nhị phân tìm kiếm với cách cài đặt trên và minh hoạ trên cây vừa dựng. Kết quả của từng phép duỵệt cây theo thứ tự trước, giữa, sau

Mã đề thi: 17

ĐỀ THI HẾT HỌC PHẦN Môn thi: Cấu trúc dữ liệu và giải thuật; Hệ: Chính quy Môn thi: Cấu trúc dữ liệu và giải thuật; Hệ: Chính quy

Câu 2( 3 điểm )

Anh (chi) hãy viết dạng cài đặt từ điển bởi bảng băm đóng. Nếu thêm một từ vào từ điển cài đặt bởi bảng băm đóng thì khi nào xảy ra hiện tượng đụng khóa, ví dụ minh họa. Khi nào cần băm lại, Hãy trình bày các phương pháp băm lại.

Câu 3 (2 điểm)

Nêu các cách cài đặt danh sách? viết dạng cài đặt tương ứng? ưu nhược điểm của từng cách cài đặt. (adsbygoogle = window.adsbygoogle || []).push({});

………Hết……….

Thí sinh không được sử dụng tài liệu, không ghi vào đề thi

CB coi thi không giải thích gì thêm và nộp lại đề thi cho phòng chức năng theo quy chế của bộ

Câu 1

+ Có thể cài đặt cây NPTK bởi con trỏ như sau: (0.5 đ)

Dạng cài đặt cây:

Type TreeBSearch = ^Nut; Nut = Record

Infor: Integer;

End; Var T : TreeBSearch;

+ Dựng một cây NPTK có 13 nút, lưu các số nguyên chẵn, cây sau khi thêm đỉnh 13 như hình vẽ: (0.5 đ)

+ Thủ tục thêm đỉnh x= 13 vào cây T: Insert(x, T): (1 đ)

* Sử dụng con trỏ phụ M chứa địa chỉ của nút cần thêm * Xin MT cấp phát ô nhớ cho M

* Đổ dữ liệu cần thêm vào ô nhớ có địa chỉ M * Gắn M vào cây:

Nếu Cây rỗng (T = nil): T := M

Nếu cây không rỗng: Xác định vị trí thêm M: If (x<T^.info) then Insert (x, T^.Left)

Else if (x>T^.info) then Insert(x, T^.right); else thông báo x đã có trên cây + Kết quả duyệt cây theo thứ tự trước, giữa, sau: (1 đ)

- Trước: 26 14 8 2 10 13 16 40 36 32 30 34 28 42 - Giữa: 2 8 10 13 14 16 26 30 32 34 36 38 40 42 26 14 40 8 16 36 42 2 10 32 38 30 34 13

- Sau: 2 13 10 8 16 14 30 34 32 38 36 42 40 26

Câu 2

+ Dạng cài đặt từ điển bởi bảng băm đóng: (0.5 đ)

type Dictionary = array[0..N-1] of keytype; var T: dictionary;

+ Đụng khóa, giải quyết đụng khóa(1 đ)

- Dụng khóa xảy ra khi thêm một phần tử vào từ điển: Giả sử muồn thêm phần tử có khóa x và từ điển T, ta muốn đặt khóa x vào thành phần T[h(x)] của mảng, như ở vị trí đó đã lưu giữ một giá trị khóa khác, hoàn cảnh này còn gọi là sự va chạm (đụng khóa)

Ví dụ: N=10, các khóa a,b,c,d,e có các giá trị băm như sau: h(a)=7, h(b)=1, h(c)=4, h(d)=3, h(e)=3, Giả sử ban đầu bảng rỗng, tức là tất cả các thành phần của bảng đều chứa giá trị rỗng.ta đưa lần lượt các giá trị khóa a,b,c,d,e vào bảng, khi đó a,b,c,d lần lượt được đặt vào vị trí 7,1,4,3. Vì h(e)=3,ta tìm đến vị trí thứ 3 của mảng, ta thấy vị trí này đã chứa d => xẩy ra hiện tượng đụng khóa khi thêm e vào bảng.

- Khi xảy ra hiện tượng đụng khóa ta cần băm lại: ta lần lượt xét các vị trí h1(x), h2(x),…..hi(x) – băm lại lần thứ i cho đến khi nào tìm thấy vị trí trống để đặt x vào. Nếu không tìm được vị trí trống, ta nói bảng đã đầy không thể thêm x được nữa ,

+ Một số phương pháp băm lại: (1.5 đ)

a) Băm lại tuyến tính

Các hàm hi(x) được xác định như sau: hi(x) = (h(x) = i ) mod N

Tức ta xem mảng là mảng vòng tròn và lần lượt xét đến các vị trí h(x)+1, h(x)+2, …… b) Băm lại bình phương (adsbygoogle = window.adsbygoogle || []).push({});

hi(x) = (h(x) + i2) mod N

Câu 3

ĐẠI HỌC THÁI NGUYÊN

KHOA CÔNG NGHỆ THÔNG TIN ………

Câu 1( 3 điểm)

Tác dụng của hàm băm trong việc tạo một từ điển cài đặt bởi bảng băm, các tiêu chuẩn để lựa chọn một hàm băm. Trình bày các phương pháp băm gấp, băm cắt bỏ, băm lấy phần dư. Cho ví dụ minh họa.

Câu 2(3 điểm )

Viết dạng cài đặt cây nhị phân bằng mảng các nút. Với cách cài đặt này, viết các giải thuật duyệt cây theo thứ tự trước, giữa, sau. Nêu ưu nhược điểm của cách cài đặt này?

Câu 3 (2điểm)

Vẽ cây nhị phân biểu diễn các biểu thức sau đây và viết chúng dưới dạng tiền tố, hậu tố a) A/(B+C)+D*E-A*C a) A/(B+C)+D*E-A*C

b) (x1 ^x2)v(x1^x2); với ^ là phép và(AND); v là phép hoặc (OR)

………Hết……….

Thí sinh không được sử dụng tài liệu, không ghi vào đề thi

Mã đề thi: 18

ĐỀ THI HẾT HỌC PHẦN Môn thi: Cấu trúc dữ liệu và giải thuật; Hệ: Chính quy Môn thi: Cấu trúc dữ liệu và giải thuật; Hệ: Chính quy

CB coi thi không giải thích gì thêm và nộp lại đề thi cho phòng chức năng theo quy chế của bộ Câu 1

Tương tự câu 3 đề 16

Câu 2

+ Cài đặt cây nhị phân bằng mảng các nút: (0.5 đ)

Const n = <số đỉnh tối đa trên cây> ; Type Nut = Record

Infor: Integer; Left, Right: 0 .. n; End;

TreeBina = array[1..n] of Nut; Var T : TreeBina;

+ Giải thuật duyệt cây theo thứ tự trước: (0.5 đ)

PreOrder(T):

1) Visit (T);

2) preOrder(T.Left); 3) preOrder (T, Right);

+ Giải thuật duyệt cây theo thứ tự giữa (0.5 đ)

InOrder(T):

InOrder(T.Left); Visit (T);

InOrder (T, Right); (adsbygoogle = window.adsbygoogle || []).push({});

postOrder(T):

InOrder(T.Left); InOrder (T, Right); Visit (T);

+ Ưu nhược điểm của cây NP cài đặt bởi mảng (1 đ)

Ưu điểm:

- Truy cập đến các nút là trực tiếp, do đó tốc độ truy cập là nhanh

- Dễ thực hiện các thao tác Nhược điểm:

- Tốn bộ nhớ khi cài đặt, vì có hiện tượng giữ chỗ để đấy mà không dùng đến

- bị quy định bởi không gian nhớ kế tiếp của mảng

Câu 3

a) (1 đ)

Biểu thức tiền tố: //A+bc-d*ef Biểu thức hậu tố: Abc+/def*-/

/ A - / + B C D * E F

b) (1 đ)

Biểu thức tiền tố: v^x1x2^x1x2 Biểu thức hậu tố: x1x2^x1x2^v

ĐẠI HỌC THÁI NGUYÊN KHOA CÔNG NGHỆ THÔNG TIN

………

Câu 1( 4 điểm)

Xây dựng một cấu trúc dữ liệu thích hợp để biễu diễn đa thức P(x) có dạng : P(x) = c1xn1 + c2xn2 +...+ck xnk

Một phần của tài liệu Bài những đề thi và lời giải chi tiết cấu trúc dữ liệu (Trang 62 - 72)