Các giải thuật duyệ t: chiều sâu (1 đ), chiều rộng (1đ)

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 41 - 54)

Câu 3

* khái niệm cây nhị phân tìm kiếm (0.5 đ): Cây NPTK là một cây nhị phân thỏa mản 3 điều kiện: Điều kiện 1: Khóa tại các đỉnh của cây con trái nhỏ hơn khóa tại gốc

Điều kiện 2: Khóa tại gốc > khóa tại các đỉnh của cây con bên phải Điều kiện 3: Cây con bên trái và cây con bên phải đều là cây NPTK

* Cấu trúc cây NPTK trước hết thuận lợi chi phép toán tìm kiếm, độ phức tạp trong trường hợp xấu nhất về mặt thời gian O(h), với h là chiều cao của cây. Từ đó kéo theo các phép toán khác cũng thuận lợi như phép toán: Thêm, sửa, xóa, ... (0.5 đ)

* Phân tích để thể hiện điều trên: Phân tích dựa vào độ phức tạp xâu nhất về mặt thời gian, với các dạng tồn tại của cây NPTK như: Dạng cây suy biến, cây đầy đủ hoặc hoàn chỉnh, cây bình thường(1 đ)

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

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

Câu 1(2 điểm)

Nêu khái niệm cây nhị phân (binary tree)? Các cách cài đặt cây nhị phân? Ưu nhược điểm của từng cách cài đặt.

Mã đề thi: 12

ĐỀ 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(4 điểm ):Cho một cây nhị phân tìm kiếm, các nút có khóa là các số nguyên. Hãy viết dạng cài đặt

cây đã cho bằng con trỏ, gốc của cây được trỏ bởi con trỏ R. Với dạng cài đặt này viết các thủ tục tương ứng với các yêu cầu sau:

1) Tạo cây nhị phân tìm kiếm (Điều kiện dừng là nhập nút có giá trị là 0), 2) Cài đặt phép toàn tìm đỉnh có khóa x trên cây

3) Loại bỏ đỉnh có khóa x trên cây 4) Đếm số đỉnh hiện có trên cây

Câu 3 (2 điểm)

Cho biểu thức E = (2*x+y)*(5*a - b)3

a) Hãy vẽ cây nhị phân T biểu diễn biểu thức trung tố E như trên

b) Muốn có biểu thức dạng tiền tố, dạng hậu tố thì phải duyệt cây T theo thứ tự nào? Kết quả duyệt ?

………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

* khái niệm cây nhị phân: (0.5 đ)

Cây nhị phân là một cây, trong đó số con tại mỗi đỉnh trên cây tối đa là 2 con và được sắp thành cây con trái và cây con phải

* Có hai phương pháp cơ bản để cài đặt cây nhị phân: b) Cài đặt cây nhị phân bởi con trỏ: (0.5 đ)

Type TreeBina = ^ Nut; Nut = Record

Infor: Integer; Left, Right: TreeBina; End;

Var T : TreeBina;

* Ưu nhược điểm của từng dạng cài đặt: (0.5 đ)

a) Cài đặt bởi mảng: (adsbygoogle = window.adsbygoogle || []).push({});

Ưu điểm: - Các phép toán thực hiện tương đối dễ dàng

- việc truy cập đến các đỉnh trên cây là trực tiếp, tốc độ truy cập là nhanh và đồng đều đối với mọi phần tử

Hạn chế: - Khi cài đặt gây hiện tựợng dư thừa bộ nhớ... b) Cài đặt bởi con trỏ

Ưu điểm: - Không có hiện tượng dư thừa bộ nhớ

Hạn chế: - Truy cập đến các phần tử trên cây là truy cập tuần tự, bao giờ cũng xuất phát từ gốc, nên tốc đọ truy cập là chậm

- ...

Câu 2

+ Dạng cài đặt cây NPTK sử dụng con trỏ: (0.5 đ)

Type TreeBSearch = ^Nut; Nut = Record

Infor: Integer;

Left, Right: TreeBSearch; End;

Var R : TreeBSearch;

- Viết thủ tục thêm một đỉnh x vào cây R: Insert(x, R): * 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 (R = nil): R := M

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

Else if (x>R^.info) then Insert(x, R^.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,R); + Tìm xem trên cây có đỉnh nào có thông tin = x không? (1 đ)

- Nhập x

- Sử dụng con trỏ phụ p duyệt bắt đầu từ gốc đến khi p = nil hoặc tìm thấy thì dừng: Nếu p^.info = x => thông báo tìm thấy và dừng giải thuật, Nếu x< P^.Infor: Tìm nhánh trái p => p := p^.left, ngược lại tìm nhánh phải P => p := p^.right (Có thể viết giải thuật dưới dạng đệ quy)

+ Loại bỏ đỉnh có khóa x trên cây: (1 đ)

Cách làm:

- Tìm x, p là con trỏ trỏ tới đỉnh có khóa x trên cây

- Nếu đỉnh loại bỏ là lá ( p^.left = nil; p^.right = nil): Dispose(p)

- Nếu đỉnh loại bỏ có một con khác rỗng, một con = rỗng: Treo cây con khác rỗng vào vị trí loại bỏ, giải phóng p

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

+ Đếm số đỉnh hiện có trên cây: (0.5 đ)

Cách làm: Có thể sử dụng một trong các phương pháp duyệt cây để đếm số đỉnh

Câu 3 (adsbygoogle = window.adsbygoogle || []).push({});

a) Cây biểu thức: (1 đ)

b)

+ Duyệt cây biểu thức theo thứ tự trước => Kết quả là biểu thức tiền tố: *+*2xy**-*5ab-*5ab- *5ab (0.5 đ)

+ Duyệt cây biểu thức theo thứ tự sau = > Kết quả là biểu thức hậu tố: 2x*y+*5a+-b5a*-b*5a*- b** (0.5 đ) * + * * y 2 x * - - - * b 5 a * 5 a b * b 5 a

Câu 1

* khái niệm cây nhị phân: (0.5 đ)

Cây nhị phân là một cây, trong đó số con tại mỗi đỉnh trên cây tối đa là 2 con và được sắp thành cây con trái và cây con phải

* Có hai phương pháp cơ bản để cài đặt cây nhị phân: b) Cài đặt cây nhị phân bởi con trỏ: (0.5 đ)

Type TreeBina = ^ Nut; Nut = Record

Infor: Integer; Left, Right: TreeBina; End;

Var T : TreeBina;

* Ưu nhược điểm của từng dạng cài đặt: (0.5 đ)

a) Cài đặt bởi mảng:

Ưu điểm: - Các phép toán thực hiện tương đối dễ dàng

- việc truy cập đến các đỉnh trên cây là trực tiếp, tốc độ truy cập là nhanh và đồng đều đối với mọi phần tử

Hạn chế: - Khi cài đặt gây hiện tựợng dư thừa bộ nhớ... b) Cài đặt bởi con trỏ

Ưu điểm: - Không có hiện tượng dư thừa bộ nhớ

Hạn chế: - Truy cập đến các phần tử trên cây là truy cập tuần tự, bao giờ cũng xuất phát từ gốc, nên tốc đọ truy cập là chậm

- ...

Câu 2

Type TreeBSearch = ^Nut; Nut = Record

Infor: Integer;

Left, Right: TreeBSearch; End;

Var R : TreeBSearch;

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

- Viết thủ tục thêm một đỉnh x vào cây R: Insert(x, R): * 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 (R = nil): R := M

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

Else if (x>R^.info) then Insert(x, R^.right); else thông báo x đã có trên cây (adsbygoogle = window.adsbygoogle || []).push({});

- 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,R); + Tìm xem trên cây có đỉnh nào có thông tin = x không? (1 đ)

- Sử dụng con trỏ phụ p duyệt bắt đầu từ gốc đến khi p = nil hoặc tìm thấy thì dừng: Nếu p^.info = x => thông báo tìm thấy và dừng giải thuật, Nếu x< P^.Infor: Tìm nhánh trái p => p := p^.left, ngược lại tìm nhánh phải P => p := p^.right (Có thể viết giải thuật dưới dạng đệ quy)

+ Loại bỏ đỉnh có khóa x trên cây: (1 đ)

Cách làm:

- Tìm x, p là con trỏ trỏ tới đỉnh có khóa x trên cây

- Nếu đỉnh loại bỏ là lá ( p^.left = nil; p^.right = nil): Dispose(p)

- Nếu đỉnh loại bỏ có một con khác rỗng, một con = rỗng: Treo cây con khác rỗng vào vị trí loại bỏ, giải phóng p

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

+ Đếm số đỉnh hiện có trên cây: (0.5 đ)

Cách làm: Có thể sử dụng một trong các phương pháp duyệt cây để đếm số đỉnh

Câu 3 b) Cây biểu thức: (1 đ) * + * * y 2 x * - - - * b 5 a * 5 a b * b 5 a

b)

+ Duyệt cây biểu thức theo thứ tự trước => Kết quả là biểu thức tiền tố: *+*2xy**-*5ab-*5ab- *5ab (0.5 đ)

+ Duyệt cây biểu thức theo thứ tự sau = > Kết quả là biểu thức hậu tố: 2x*y+*5a+-b5a*-b*5a*- b** (0.5 đ)

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

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

Câu 1(2 điểm)

Nêu khái niệm cây? đường đi trên cây? chiều cao của cây? Hãy vẽ một cây và minh họa trên cây đó. Viết dạng cài đặt cây bằng danh sách các con của mỗi đỉnh.

Câu 2(4 điểm )

Cho một cây nhị phân tìm kiếm lưu các sinh viên, mỗi nút trên cây lưu các thông tin của một sinh viên, các thông tin cần quản l{ của sinh viên: số báo danh(duy nhất cho mỗi sinh viên), họ tên, lớp. Giả sử khóa của nút là trường số báo danh.

1. Hãy viết dạng cài đặt cây đã cho bằng con trỏ, gốc của cây được trỏ bởi con trỏ R. 2. Với dạng cài đặt trên viết các thủ tục tương ứng với các yêu cầu sau:

 Tạo cây nhị phân tìm kiếm có n đỉnh (n là số nguyên dương nhập từ bàn phím)  Loại bỏ đỉnh khóa là x trên cây

Mã đề thi: 13

ĐỀ 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ài đặt phép toán thêm đỉnh có khóa x

3. Anh(chị) hãy nêu cách tìm kiếm một sinh viên có trên cây hay không, nếu biết tên của sinh viên mà không biết khóa(sbd) của sinh viên đó

Câu 3 (2 điểm)

Cho biểu thức E = (2*x+y)*(5*a - b)3

a) Hãy vẽ cây nhị phân T biểu diễn biểu thức trung tố E như trên (adsbygoogle = window.adsbygoogle || []).push({});

b) Muốn có biểu thức dạng tiền tố, dạng hậu tố thì phải duyệt cây T theo thứ tự nào? Kết quả duyệt ?

………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

+ Khái niệm cây: Cây là một đồ thị vô hướng liên thông phi chu trình

+ Đường đi trên cây từ a1-> an là một dãy các đỉnh a1, a2, a3, ...an-1, an, sao cho ai có quan hệ với ai+1, i: 1->n-1

+ Chiều cao của cây bằng số mức lớn nhất của đỉnh có trên cây Ví dụ:

+ Dạng cài đặt cây bằng danh sách các con của mỗi đỉnh:

Const n = <số các đỉnh tối đa trên cây>; Type Pointer = ^ Member;

Member = Record

Id: 1..n;

Next : Pointer; // trỏ tới em liền kề End;

Node = Record

Info: Integer; Child: Pointer; End;

Tree = Array [1..n ] of Node; Var T: Tree;

Câu 2

1) Dạng cài đặt cây NPTK sử dụng con trỏ:

Type TreeBSearch = ^Nut; Nut = Record

Infor: Integer;

Left, Right: TreeBSearch; End;

Var R : TreeBSearch;

2)

+ Tạo cây nhị phân tìm kiếm:

- Viết thủ tục thêm một đỉnh x vào cây R: Insert(x, R): * 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 không rỗng: Xác định vị trí thêm M: If (x<R^.info) then Insert (x, R^.Left)

Else if (x>R^.info) then Insert(x, R^.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 (số phần tử <n):  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); + Thủ tục loại bỏ đỉnh x ra khỏi cây sao cho cây sau khi laọi bỏ vẫn là cây NPTK:

- Tìm xem x có trên cây không:? (adsbygoogle = window.adsbygoogle || []).push({});

- 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

+ Viết thủ tục thêm một đỉnh x vào cây R: Insert(x, R):

* 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 (R = nil): R := M

If (x<R^.info) then Insert (x, R^.Left)

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

3) Nêu cách tìm kiếm theo tên sv: Tìm kiếm tuần tự trên cây theo tên sv đã biết

Câu 3

a) Cây biểu thức:

b) + Duyệt cây biểu thức theo thứ tự trước => Kết quả là biểu thức tiền tố: *+*2xy**-*5ab-*5ab- *5ab

+ Duyệt cây biểu thức theo thứ tự sau = > Kết quả là biểu thức hậu tố: 2x*y+*5a+-b5a*-b*5a*- b**

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

KHOA CÔNG NGHỆ THÔNG TIN ……… * + * * y 2 x * - - - * b 5 a * 5 a b * b 5 a Mã đề thi: 14 ĐỀ 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

Câu 1(2 điểm)

Nêu khái niệm cây? Viết dạng cài đặt cây bằng danh sách cha của mỗi đỉnh. Với cách cài đặt này, viết thủ tục tìm cha của đỉnh thứ k trên cây (giả sử các đỉnh trên cây được đánh số theo một thứ tự nào đó, k là số nguyên nhập từ bàn phím)

Câu 2(4 điểm )

Các phương pháp để định nghĩa một tập hợp. Giả sử cần quản l{ các tập hợp A, B chứa các số nguyên, các số nguyên này có giá trị thuộc đoạn *1..n+ (n là một hằng số nào đó). Anh (chị) hãy:

1) Viết dạng cài đặt của tập hợp trên bởi véc tơ bít

2) Với dạng cài đặt trên, hãy viết các thủ tục tương ứng với các yêu cầu sau: i. Nhập giá trị cho tập hợp A, B

ii. Tìm tập C = A∩B; C = AUB; C= A\B

iii. Xác định xem số nguyên x có thuộc tập A hay không? iv. Thêm, loại bỏ số nguyên x vào, ra khỏi tập hợp

3) Anh(chị) hãy cho biết một tập hợp phải thỏa mãn điều kiện gì thì mới có thể cài đặt bằng phương pháp vecto bít

Câu 3 (2 điểm)

Cho biểu thức E = (2*x+y)*(5*a - b)3

c) Hãy vẽ cây nhị phân T biểu diễn biểu thức trung tố E như trên (adsbygoogle = window.adsbygoogle || []).push({});

d) Muốn có biểu thức dạng tiền tố, dạng hậu tố thì phải duyệt cây T theo thứ tự nào? Kết quả duyệt ?

………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

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 41 - 54)