Báo cáo cuối kì môn cấu trúc dữ liệu và giải thuật

20 0 0
Báo cáo cuối kì môn cấu trúc dữ liệu và giải thuật

Đ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

Câu 2: Sắp xếp 2.1 Yêu cầu:Sinh viên tự cho một mảng số nguyên gồm 10 phần tử thứ tự của phần tử phải là ngẫu nhiên, không được nằm trong các trường hợp mảng đã có thứ tự sẵn hoặc một ph

Trang 1

aTỔNG LIÊN ĐOÀN LAO ĐỘNG VIỆT NAM

TRƯỜNG ĐẠI HỌC TÔN ĐỨC THẮNG KHOA CÔNG NGHỆ THÔNG TIN

BÁO CÁO CUỐI KÌ MÔN CẤU TRÚC DỮ LIỆU VÀ

Người hướng dẫn: GV TRẦN THANH PHƯỚC Người thực hiện: NGUYỄN GIA BẢO – 52000631

Lớp : 20050281 Khoá : 24

THÀNH PHỐ HỒ CHÍ MINH, NĂM 2022

TỔNG LIÊN ĐOÀN LAO ĐỘNG VIỆT NAM

TRƯỜNG ĐẠI HỌC TÔN ĐỨC THẮNG KHOA CÔNG NGHỆ THÔNG TIN

Trang 2

BÁO CÁO CUỐI KÌ MÔN CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT

BÁO CÁO CUỐI KÌ

Người hướng dẫn: GV TRẦN THANH PHƯỚC Người thực hiện: NGUYỄN GIA BẢO– 52000631

Lớp : 20050281 Khoá : 24

THÀNH PHỐ HỒ CHÍ MINH, NĂM 2022

Trang 3

LỜI CẢM ƠN

Em xin bày tỏ lòng biết ơn sâu sắc và chân thành nhất đến Thầy Trần Thanh Phước, người đã tận tình chỉ bảo và dìu dắt em trong suốt thời gian học tập và thực hiện bài báo cáo này Cảm ơn những lời chia sẻ tận tình, tâm huyết của thầy đã giúp em hoàn thành bài báo cáo tốt nhất

Em xin chân thành cảm ơn!

TP Hồ Chí Minh, ngày 20 tháng 1 năm 2022 Tác giả

Bảo Nguyễn Gia Bảo

Trang 4

BÁO CÁO ĐƯỢC HOÀN THÀNHTẠI TRƯỜNG ĐẠI HỌC TÔN ĐỨC THẮNG

Tôi xin cam đoan đây là công trình nghiên cứu của riêng tôi và được sự hướng dẫn khoa học của thầy Trần Thanh Phước Các nội dung nghiên cứu, kết quả trong đề tài này là trung thực và chưa công bố dưới bất kỳ hình thức nào trước đây Những số liệu trong các bảng biểu phục vụ cho việc phân tích, nhận xét, đánh giá được chính tác giả thu thập từ các nguồn khác nhau có ghi rõ trong phần tài liệu tham khảo

Ngoài ra, trong bài báo cáo còn sử dụng một số nhận xét, đánh giá cũng như số liệu của các tác giả khác, cơ quan tổ chức khác đều có trích dẫn và chú thích nguồn gốc

Nếu phát hiện có bất kỳ sự gian lận nào tôi xin hoàn toàn chịu trách nhiệm về nội dung bài báo cáo của mình Trường Đại học Tôn Đức Thắng

không liên quan đến những vi phạm tác quyền, bản quyền do tôi gây ra trong quá

Trang 5

TÓM TẮT

Trang 7

NỘI DUNG Câu 1: Đệ quy

1.1 Yêu cầu:

a (0.5 điểm – Lý thuyết) Chọn mỗi nhóm 01 bài toán và giải thích tính đệ quy (diễn giải, vẽ cây đệ quy với một ví dụ gồm ít nhất 5 lần gọi đệ quy):

i Nhóm 1: • Giải bài toán xy

• Giải bài toán tính tổng các chữ số của một số nguyên dương gồm n chữ số ii Nhóm 2:

• Giải bài toán tính số fibonacci thứ n • Giải bài toán tính tổ hợp chập k của n phần tử • Giải bài toán tìm số lớn nhất trong một mảng

b (0.5 điểm – Thực hành) Tạo một lớp bất kỳ để định nghĩa code bằng đệ quy cho 02 ví dụ đã chọn bên trên và tạo phương thức main() để kiểm tra lại kết quả.

Điều kiện dừng: Nếu y = 0 thì trả về 1; Biểu thức trả về đệ quy: x^y = x * x^(y-1)

Hàm đệ quy sẽ thực hiện theo biểu thức trả về đệ quy 2 * 2^4 và y sẽ giảm dần và dừng lại cho đến khi đạt giá trị y = 0 là điều kiện dừng

+ Cây đệ quy:

Trang 8

Hàm đệ quy sẽ thực hiện theo biểu thức trả về đệ quy Fibo5) + Fibo(4) và sẽ giảm dần và dừng lại đến khi n đạt giá trị n < 2 là điều kiện dừng

+ Cây đệ quy:

Trang 9

Câu 2: Sắp xếp

2.1 Yêu cầu:

Sinh viên tự cho một mảng số nguyên gồm 10 phần tử (thứ tự của phần tử phải là ngẫu nhiên, không được nằm trong các trường hợp mảng đã có thứ tự sẵn hoặc một phần mảng đã có thứ tự)

a (0.5 điểm – Lý thuyết) Cho ví dụ chạy từng bước việc sắp xếp mảng dùng 02 trong 03 giải thuật Bubble Sort, Insertion Sort hoặc Selection Sort (Sinh viên lưu ý phải thể hiện rõ sự thay đổi của các phần tử trong mảng qua từng bước)

b (0.5 điểm – Lý thuyết) Cho ví dụ chạy từng bước việc sắp xếp mảng dùng 01 trong 02 giải thuật Merge Sort hoặc Quick Sort (Sinh viên lưu ý phải thể hiện rõ sự thay đổi của các phần tử trong mảng qua từng bước)

2.2 Câu trả lời:

Cho mảng số nguyên: 8,10,1,6,5,7,2,20,11,9

Bubble sort: Duyệt từ cuối mảng, và ở bubble sort ta sẽ so sánh liên tục 2 phần tử kề nhau, đưa phần tử nhỏ lên trước (sắp xếp tang dần)

Trang 10

Selection sort: Giả sử sắp xếp tăng dần thì tìm phần tử bé nhất từ mảng chưa được sắp xếp và đưa nó vào đầu mảng

Trang 11

Câu 3: Stack:

3.1 Yêu cầu:

a) (1 điểm – Lý thuyết) Trình bày giải thuật ) Giải thuật này chuyển một biểu thức từ dạng trung tố (infix) sang dạng hậu tố (postfix) Cho ví dụ một biểu thức infix gồm ít nhất 6 phép toán (có đủ phép cộng (+), trừ ( ), nhân (*) và chia (/)) và chứa ít -nhất 2 cặp ngoặc, áp dụng giải thuật để chuyển biểu thức này thành dạng postfix

b) (1 điểm – Lý thuyết) Trình bày giải thuật sử dụng Stack để tính kết quả từ biểu thức postfix Áp dụng giải thuật tính toán biểu thức postfix tại câu a) 3.2 Câu trả lời:

a)

Bởi cách viết của chúng ta gây khó chịu và không tường minh với máy tính, do đó, sử dụng biểu thức Ba Lan ngược để máy tính dễ hiểu hơn, và nó là một cách viết không dùng dấu ngoặc và thực hiện từ trái sang phải

Ta có chuỗi biểu thức đơn giản có cấu trúc như sau:

Trang 12

- Toán tử: cộng ‘+’ , trừ ‘-‘, nhân ‘*’, chia ‘/’ - Toán hạng: Là các số nguyên có 1 chữ số từ 0 đến 9 - Dấu mở ‘(‘ và đóng’)’

- Khoảng trắng

Để thực hiện thuật toán Ba Lan ngược: B1 Khởi tạo Stack rỗng để chứa phép toán B2 Nếu phần tử là

‘(‘: Đưa vào stack

‘)’: Lấy các phần tử đưa vào queue cho đến khi gặp ‘(‘ trong Stack Toán hạng: Đưa vào queue

Toán tử: Nếu Stack rỗng thì thêm vào Stack

Nếu toán tử có độ ưu tiên cao hơn phần tử ở đầu Stack : Đưa vào Stack Lấy phần tử của Stack đưa vào queue, lặp lại so sánh với phần tử đầu Stack B3 Lấy các phần tử còn lại trong Stack và đưa vào chuỗi q

Trang 13

3 / - 7 3 2 * + 4 / 9 3 Null Null 7 3 2 * + 4 / 9 3 / -

b)

Thực hiện duyệt từng biểu thức hậu tố cho đến hết Nếu là toán hạng: Đưa vào Stack

Ngược lại, Lấy 2 phần tử của Stack

Áp dụng phép toán cho 2 phần tử vừa lấy được, bên trái là phần tử đầu, ở giữa là phép toán, bên phải là phần tử thứ hai

Đưa hết quả vào Stack và xuất phần tử cuối cùng của Stack là giá trị biểu thức – Tính toán biểu thức postfix: 7 3 2 * + 4 / 9 3 / -

Trang 14

Phân tích bài toán quản lý sinh viên bằng Mảng (Array), Linked List và bằng cây AVL Nêu ưu điểm và nhược điểm, so sánh hiệu suất của các cấu trúc dữ liệu trên các thao tác:

a) (0.25 điểm) Thêm một sinh viên mới b) (0.25 điểm) Xóa sinh viên c) (0.25 điểm) Tìm kiếm sinh viên Thực hành (1.5 điểm):

Cài đặt bài toán trên bằng Linked List (không sử dụng thư viện) và bằng cây AVL với dữ liệu tự cho Tối thiếu 15 đối tượng sinh viên Mỗi đối tượng sinh viên có các thuộc tính: mã số sinh viên (mã 8 ký tự, ký tự đầu có thể là chữ cái), họ tên sinh viên, điểm trung bình tích lũy và 2 thuộc tính khác sinh viên tự cho thêm Hiện thực phương thức cho các thao tác sau trên cả hai cấu trúc dữ liệu (cây AVL lưu trữ theo mã số sinh viên)

a) (0.25 điểm) Hiện thực thao tác thêm một sinh viên mới b) (0.25 điểm) Hiện thực thao tác xóa một sinh viên

c) (0.25 điểm) Hiện thực thao tác tìm kiếm thông tin theo mã số sinh viên

Trang 15

+ Nhược điểm: Không - Cây AVL:

+ Ưu điểm: Đỡ tốn bộ nhớ hơn mảng.

+ Nhược điểm, sau khi thêm node có thể dẫn tới mất cân bằng của cây và ta cần thực hiện cân bằng lại cho cây

b) Xóa sinh viên: - Mảng:

+ Ưu điểm: Không + Nhược điểm:

Cũng như khi thêm thì xoá một sinh viên mới sẽ rất tốn tài nguyên và bộ nhớ vì phải gán lại và xê dịch các phần tử

- Danh sách liên kết:

+ Ưu điểm: Cũng như thêm thì danh sách liên kết rất dễ để xoá phần tử của mảng bằng cách trỏ con trỏ của phần từ trước đó đến node sau đó hoặc null

+ Nhược điểm: Không

- Cây AVL:

+ Ưu điểm: Đỡ tốn bộ nhớ hơn mảng.

+ Nhược điểm: sau khi xoá node có thể dẫn tới mất cân bằng của cây và ta cần thực hiện một vài thao tác giúp cân bằng lại cho cây

c) Tìm kiếm sinh viên: - Mảng:

+ Ưu điểm: Tìm kiếm nhanh, đỡ tốn bộ nhớ và tài nguyên + Nhược điểm: Không

Trang 16

- Danh sách liên kết: + Ưu điểm: Không

+ Nhược điểm: Khi tìm một phần tử ta bắt buộc phải tìm tuần tự từng phần tử khiến dẫn tới tốn tài nguyên và mất nhiều thời gian

- Cây AVL:

+ Ưu điểm: Đỡ tốn bộ nhớ và thời gian hơn danh sách liên kết + Nhược điểm: Để tìm sinh viên, ta cần chạy từ root và đi qua các node khác đồng thời phải so sánh với các node đó dẫn tới tốn thời gian

Câu 5: Đồ thị:

5.1 Yêu cầu:

Xây dựng đồ thị biểu diễn người dùng của một mạng xã hội mỗi người dùng gồm các thông tin sau mã người dùng, tên người dùng, số tuổi, giới tính, nghề nghiệp

Lý thuyết (1.5 điểm):

a) (0.25 điểm) Vẽ đồ thị trên với ký hiệu đỉnh là mã người dùng, mỗi người dùng có kết bạn với nhau sẽ được biểu diễn bằng cạnh nối giữa hai đỉnh người dùng Đồ thị gồm ít nhất 30 đỉnh và 50 cạnh Đồ thị có thể chứa một vài đỉnh cô lập

b) (0.5 điểm) Viết kết quả duyệt đồ thị bằng giải thuật BFS và DFS bắt đầu từ

Ngày đăng: 14/04/2024, 23:23