1. Trang chủ
  2. » Tất cả

Đề thi môn cấu trúc dữ liệu và giải thuật final solution

5 1 0
Tài liệu đã được kiểm tra trùng lặp

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Đề thi môn cấu trúc dữ liệu và giải thuật final solution
Trường học Trường ĐH Bách Khoa Tp.HCM
Chuyên ngành Cấu trúc dữ liệu và Giải thuật
Thể loại Đáp án
Năm xuất bản 2009
Thành phố Tp.HCM
Định dạng
Số trang 5
Dung lượng 206,48 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Đề thi cuối kỳ HK1/2009 Môn Cấu trúc dữ liệu và Giải thuật Thời gian 120 phút (Không sử dụng tài liệu) Ghi chú đề thi gồm tất cả 7 câu Sinh viên lớp KSTN làm hết 7 câu, thang điểm 11 (sẽ được chuyển t[.]

Trang 1

Đề thi cuối kỳ HK1/2009 Môn: Cấu trúc dữ liệu và Giải thuật Thời gian: 120 phút (Không sử dụng tài liệu)

Ghi chú: đề thi gồm tất cả 7 câu Sinh viên lớp KSTN làm hết 7 câu, thang điểm 11 (sẽ được chuyển thành thang điểm 10 tương ứng) Sinh viên lớp thường làm 6 câu (từ câu 1 đến câu 6), thang diểm 10

Câu 1 (0.5 điểm):

Cho biết các giải thuật sau sẽ thực hiện tốt nhất và xấu nhất trong những trường hợp nào? Số lần so sánh trên khóa là bao nhiêu khi sắp xếp một danh sách có N phần tử trong những trường hợp đó?

straight insertion sort Danh sách đang có thứ tự C=N-1 Danh sách đang có thứ tự ngược C=N(N-1)/2 straight selection sort Trong bất kỳ trường hợp nào: C=N(N-1)/2

Câu 2 (1.5 điểm):

Cho danh sách sau {13, 27, 8, 3, 21, 17, 32}, hãy thực hiện từng bước quá trình sắp xếp danh sách trên bằng giải thuật sắp xếp cho trong hình vẽ

Số lần so sánh trên khóa và số lần đổi chỗ (swap) các phần tử là bao nhiêu?

algorithm sort

1 recursive_sort (0, count-1)

end sort

algorithm recursive_sort (val low <int>,

val high <int>)

1 if (low < high)

1 pivot_position = divide(low, high)

2 recursive_sort (low, pivot_position-1)

3 recursive_sort (pivot_position+1, high)

2 end if

end recursive_sort

algorithm divide (val low <int>, val high <int>)

1 pivot = data low //dùng phần tử đầu tiên làm pivot

2 last_small = low

3 idx = low+1

4 loop (idx<= high)

1 if (dataidx < pivot)

1 last_small = last_small+ 1

2 swap (last_small, idx)

2 end if

5 end loop

6 if (low != last_small)

1 swap(low, last_small) //chuyển pivot về vị trí “giữa”

7 end if

8 return last_small

end divide

s l n swap so sánh

Trường ĐH Bách Khoa Tp.HCM

Trang 2

Câu 3 (4 điểm):

Dựa trên cấu trúc dữ liệu cây nhị phân tìm kiếm (BST) cho như hình bên cạnh, hãy

viết các phương thức bằng mã giả (pseudocode) làm các việc như sau:

a (1 diểm) Tìm giá trị lớn nhất và nhỏ nhất của cây Nếu cây đang rỗng thì

các giá trị này là không xác định (không cần quan tâm)

algorithm bst_min_max(ref min <datatype>, ref max <datatype>)

1 call bst_min_max_aux(root, min, max)

end bst_min_max

algorithm bst_min_max_aux(val subroot <pointer>, ref min <datatype>, ref max <datatype>)

1 if (subroot is not null)

1 p=subroot

2 loop (p->left is not null)

1 p=p->left

3 end loop

4 min=p->data

5 p=subroot

6 loop (p->right is not null)

1 p=p->right

7 end loop

8 max=p->data

2 end if

end bst_min_max_aux

b (1 điểm) Nhận vào một giá trị rồi chèn vào trong cây Nếu giá trị này đã có trong cây thì lần lượt

tăng giá trị này lên một rồi chèn vào trong cây cho đến khi nào chèn được thành công Giả sử rằng quá trình tăng giá trị đã nói không làm tràn số (overflow)

algorithm bst_insert_inc(val x <datatype>)

1 call bst_insert_inc_aux(root, x)

end bst_insert_inc

algorithm bst_insert_inc_aux(ref subroot <pointer>, val x <datatype>)

1 if (subroot is null)

1 allocate subroot

2 subroot->data = x

2 else if (subroot->data = x)

1 bst_insert_inc_aux(subroot->right, x+1)

3 else if (subroot->data > x)

1 bst_insert_inc_aux(subroot->left, x)

4 else

1 bst_insert_inc_aux(subroot->right, x)

5 end if

end bst_insert_inc_aux

BinTreeNode

data <int>

left, right <pointer>

end BinTreeNode BST

root <pointer>

end BST

Trang 3

c (2 điểm) Nhận vào một BST rồi chèn vào cây hiện hành Việc chèn diễn ra theo nguyên tắc sau:

- Nếu cây nhập rỗng thì kết quả không thay đổi

- Nếu có thể gắn cây nhập thành một nhánh con của cây hiện hành (hoặc cây hiện hành rỗng) sao cho cây kết quả là một BST thì gắn chúng lại với nhau Cây nhập sẽ trở thành một phần của cây kết quả, root của cây nhập sẽ là NULL

- Nếu không gắn được như vậy thì kết quả không thay đổi

algorithm bst_insert_bst(ref tree <BST>)

1 if (tree.root is not null)

1 call bst_min_max(input_root, min, max)

2 call bst_insert_bst_aux(root, tree.root)

2 end if

end bst_insert_inc

algorithm bst_insert_bst_aux(ref subroot <pointer>, ref input_root <pointer>,

val min <datatype>, val max <datatype>)

1 if (subroot is null)

1 subroot = input_root

2 input_root = null

2 else if (subroot->data > max)

1 bst_insert_bst_aux(subroot->left, input_root, min, max)

4 else if (subroot->data < min)

1 bst_insert_bst_aux(subroot->right, input_root, min, max)

5 end if

end bst_insert_bst_aux

Câu 4 (1.5 điểm):

Cho một đồ thị như hình bên, thực hiện các việc

sau:

a Hãy cho biết một thứ tự topo của đồ thị này

(1) Breadth topo sort: A B E D F G C M H

K J

Hoặc (2) Depth topo sort: A E B D G M K F H J

C

b Hãy bỏ đi toàn bộ chiều của đường đi (để biến đồ thị

trên thành độ thị vô hướng) rồi tìm cây phủ tối thiểu của

đồ thị dùng giải thuật Prim

A

B

C

G

M

J

D

E

F

H

K

12

3

8

27

5 11

23

2

4

5

7

6

1

2

4

A

B

C

G

M

J

D

12

3

8 27

23

2

4

8

2

5

7

6

1

2

4

Trang 4

Câu 5 (1.5 điểm):

Cho một bảng băm (hash table) như hình vẽ bên cạnh Hãy lần lượt thêm vào bảng băm này các khóa sau đây: 12, 8, 25, 13, 9 Ghi kết quả của bảng băm sau từng giá trị thêm vào

Biết rằng:

(1) Hàm băm (hash function) dùng một hàm sinh số ngẫu nhiên giả (pseudorandom)

h(x) = (ax + c) mod size, trong đó a=17, c=7, size=13

Ví dụ: key = 121267 => address = h(121267) = (17*121267 + 7) mod 13 = 6

(2) Phương pháp giải quyết đụng độ là phương pháp địa chỉ mở (open addressing) dùng cách dò tuyến tính (linear probing) Nghĩa là nếu tại ví trí cần thêm vào một phần tử đã có phần tử khác chiếm dụng, vị trí kế tiếp (address + 1) sẽ được xem xét

Trang 5

Câu 6 (1 điểm):

Cho một danh sách số nguyên như sau (45,79,81,1,18,6,17,49,61,47) Hãy xây dựng cây B-tree bậc 3 (m=3) ứng với danh sách trên, giả sử các phần tử sẽ được lần lượt thêm vào cây rỗng ban đầu theo đúng thứ tự xuất

hiện trong danh sách Chú ý: chỉ cần trình bày các cây kết quả

Câu 7 (1 điểm): (Dành riêng cho lớp KSTN)

a Cho danh sách như trong câu 6 Hãy xây dựng cây B-tree bậc 5 (m=5) ứng với danh sách trên

b Cho biết cây kết quả khi xoá phần tử 18 ra khỏi các cây đã xây dựng ở câu 6 và câu 7a Biết rằng nếu phần

tử bị xoá nằm trên một nút trung gian, phần tử này sẽ được thay thế bằng phần tử có giá trị lớn nhất nằm trên cây con bên trái của nút này

Chú ý: chỉ cần trình bày các cây kết quả

- Hết -

45 61

45 61

49

17

79

Ngày đăng: 25/03/2023, 08:37

w