1. Trang chủ
  2. » Luận Văn - Báo Cáo

báo cáo môn cấu trúc dữ liệu và giải thuật đề tà i quản lý sinh viên trong lớp học

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

Đ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 21
Dung lượng 2,06 MB

Nội dung

Lý do và động lựcĐể đáp ứng yêu cầu môn học cũng như mong muốn tìm hiểu, mở rộng kiếnthức về ngôn ngữ lập trình nói chung và môn cấu trúc dữ liệu và giải thuậtnói riêng, nhóm chúng em đã

Trang 1

ĐẠI HỌC BÁCH KHOA HÀ NỘI

Sinh viên thực hiện: Trần Đình Vương 20214154

Cao Danh Khang 20213967 Ngô Thái Bình 20213820 Cao Việt Bình 20213818

Giảng viên: Trần Thị Thanh Hải

Hà N i-202 ộ 3

Trang 2

Mc lc

I Giới thiệu 2

1 Lý do và động lực 2

2 Định nghĩa bài toán 2

3 Bảng phân công nhiệm vụ và đánh giá mức độ hoàn thành 3

II Phương pháp lựa chọn 4

1 Cấu trúc dữ liệu 4

2. Giải thuật 8

III Triển khai cài đặt 11

1 Ngôn ngữ lập trình và thư viện 11

3 Khó khăn khi học tập môn học 19

VI Tài liệu tham khảo 20 VII Lời cảm ơn 20

Trang 3

I Giới thiệu

1 Lý do và động lực

Để đáp ứng yêu cầu môn học cũng như mong muốn tìm hiểu, mở rộng kiếnthức về ngôn ngữ lập trình nói chung và môn cấu trúc dữ liệu và giải thuậtnói riêng, nhóm chúng em đã cùng nhau hướng đến những đề tài hướng vớinhững tiêu chí:

Đây là một chủ đề mở, có rất nhiều hướng đi cũng như hướng phát triển

2 Định nghĩa bài toán

Input: Dữ liệu của sinh viên:

Output: Những kết quả đã qua xử lý

Danh sách các sinh viên xếp theo MSSV

Điểm quá trình của sinh viên

Sinh viên được tìm kiếm

File danh sách lớp

3 Bảng phân công nhiệm vụ và đánh giá mức độ hoàn thành

Trang 4

Họ và tên MSSV Nhiệm vụ Mức độ

hoàn thành

Trần Đình Vương 20214154

Tìm hiểu đề tàiLên ý tưởngTriển khai và cài đặt chươngtrình- Coder phụ

Phát triển sản phẩmLàm báo cáo phần I,II,II

Đã hoàn thành

Cao Danh Khang 20213967

Tìm hiểu đề tài Lên ý tưởngTriển khai và cài đặt chươngtrình-Coder chính

Phổ biến kiến thức mới cho cảnhóm

Phát triển sản phẩmLàm báo cáo phần I,II,III

Đã hoàn thành

Ngô Thái Bình 20213820

Tìm hiểu đề tàiTìm hiểu CSDL LinkedListTìm hiểu thư việnTheo dõi tiến trình Làm báo cáo phần IV,V

Đã hoàn thành

Cao Việt Bình 20213818

Tìm hiểu đề tài Tìm hiểu giải thuậtBinary Search và QuickSortTìm hiểu thư việnLàm PowerPoint giới thiệuLàm báo cáo phần IV,V,VI

Trang 5

Các phần tử trong linked list được gọi là các node.

Mỗi node sẽ chưa một key và một con trỏ trỏ tới node kế tiếp của nó, được

gọi là next

Thuộc tính tên là head trỏ tới phần tử đầu tiên của linked list

Phần tử cuối cùng của linked list có tên là tail

Một số loại linked list có thể kể tới bao gồm:

Singly linked list: Duyệt qua các phẩn tử chỉ có thể thực hiện theo chiều hướng về phía trước

Doubly linked list: Duyệt qua các phẩn tử có thể thực hiện theo cả chiều tiến

và lùi Các node sẽ bao gồm thêm một con trỏ được gọi là pre, trỏ tới node trước đó

Circular linked list: Là một doubly linked list đặc biệt, khi mà con trỏ prev của head trỏ tới tail và con trỏ next của tail trỏ tới head

Các phép toán trên linked list

Tìm kiếm: Tìm phần tử đầu tiên với key là trong một linked list được cho k

trước được thực hiện đơn giản bằng một quá trình duyệt tuần tự và trả về con trỏ trỏ tới phần tử đó

Thêm: Để thêm một key vào một linked list có sẵn, ta có thể thực hiện theo

3 cách: thêm vào đầu list, thêm vào giữa list hoặc thêm vào cuối của list.Xoá: Xoá một phần tử khỏi một linked list cho trước Ta không thể xoá x

một node với chỉ một bước Việc xoá một node có thể thực hiện theo 3 cách: xoá từ đầu danh sách, xoá từ giữa danh sách hoặc xoá từ cuối danh sách

Ưu điểm:

Tiết kiếm bộ nhớ và cấp phát động: Không như array cần 1 lượng chỉ định ô nhớ trên bộ nhớ ngay khi khỏi tạo Linked list chỉ sử dụng bộ nhớ để lưu trữ khi dữ liệu thực sự được lưu vào linked list

Nó còn có thể lưu các phần tử ở bất cứ đâu được phép trên bộ nhớ mà khôngcần các ô nhớ liền kề nhau như array

Trang 6

Quick insertion (Thêm rất nhanh với complexity chỉ là O(1))

Quick deletion (Xóa nhanh)

Một số áp dụng Linked List trong chương trình:

Xóa sinh viên:

Thêm sinh viên:

Trang 7

Thêm học phần

Xóa học phần

Điểm danh:

Trang 8

2 Giải thuật

Binary Search

Thuật toán tìm kiếm nhị phân (Binary Search) hay còn được gọi là tìm

kiếm một nửa là thụât toán tiếp kiếm được sử dụng rất nhiều trong thực tếcho phép tìm kiếm vị trí của một phần tử trong một mảng đã được sắp xếp

Thụât toán tìm kiếm nhị phân thực hiện tìm kiếm một mảng đã sắp xếp

bằng cách liên tục chia các khoảng tìm kiếm thành 1 nửa

+ Bắt đầu với một khoảng từ phần tử đầu mảng, tới cuối mảng

Trang 9

+ Nếu giá trị của phần tử cần tìm nhỏ hơn giá trị của phần từ nằm ở giữa khoảng thì thu hẹp phạm vi tìm kiếm từ đầu mảng tới giửa mảng và ngược lại.

+ Cứ thế tiếp tục chia phạm vi thành các nửa cho dến khi tìm thấy hoặc đã duyệt hết

Thuật toán tìm kiếm nhị phân tỏ ra tối ưu hơn so với tìm kiếm tuyết tính ở các mảng có độ dài lớn và đã được sắp xếp

Ngược lại, tìm kiếm tuyến tính sẽ tỏ ra hiệu quả hơn khi triển khai trên các mảng nhỏ và chưa được sắp xếp

Ý tưởng triển khai thuật toán

Cho một mảng đã sắp xếp arr[] có n phần tử, viết một hàm tìm kiếm trả vềchỉ số của phần tử có giá trị x trong arr[]

+ Xét một đoạn trong mảng arr[left right] Lúc này giá trị của left và right lần luợt là 0 và số phần tử của mảng - 1

+ So sánh x với phần tử nằm ở vị trí chính giữa của mảng (mid = (left + right) /2) Nếu x bằng arr[mid] thì trả về vị trí và thoát vòng lặp.

+ Nếu x < arr[mid] thì chắc chắn x sẽ nằm ở phía bên trái tức là

từ arr[left mid-1]

+ Nếu x > arr[mid] thì chắc chắn x sẽ nằm ở phía bên phải mid tức là ở khoảng arr[mid+1 right]

+ Tiếp tục thực hiện chia đôi các khoảng tìm kiếm tới khi nào tìm thấy được

vị trí của x trong mảng hoặc khi đã duyệt hết mảng

Độ phức tạp:

+ Trường hợp tốt nhất là O(1)

+ Trường hợp xấu nhất là O(log2n)

+ Trung bình cũng là O(log2n)

Trang 10

Áp dụng giải thuật Binary Search trong chương trình:

Giải thuật sắp xếp nhanh QuickSort:

- Quick sort là thuật toán sắp xếp, hoạt động theo cách sau: Chọn một phần

tử trong mảng làm điểm đánh dấu và sau đó chia mảng thành hai mảng conbằng cách so sánh các phần tử trong mảng với điểm đánh dấu Mảng 1 sẽchứ các phần tử nhỏ hơn hoặc bằng điểm đánh dấu và mảng 2 sẽ gồm cácphần tử lớn hơn điểm đánh dấu

- Thực hiện:

Chọn phần tử chốt

Khai báo 2 biến con trỏ để trỏ để duyệt 2 phía của phần tử chốt

Biến bên trái trỏ đến từng phần tử mảng con bên trái của phần tử chốt.Biến bên phải trỏ đến từng phần tử mảng con bên phải của phần tử chốt.Khi biến bên trái nhỏ hơn phần tử chốt thì di chuyển sang phải

Khi biến bên phải nhỏ hơn phần tử chốt thì di chuyển sang trái

Trang 11

Nếu không xảy ra trưởng hợp 5 và 6 thì tráo đổi giá trị 2 biến trái và phải.Nếu trái lớn hơn phải thì đây là giá trị chốt mới.

- Áp dụng QuickSort trong chương trình:

III Triển khai cài đặt

Trang 12

1 Ngôn ngữ lập trình và thư viện

Tính thực thi nhanh: Nếu bạn đã sành sỏi về C++ thì bạn có thể lập trình

rất nhanh Một trong những mục tiêu của C++ chính là khả năng thực thi Vànếu bạn cần thêm các tính năng cho chương trình, C++ cho phép bạn sử dụng ngôn ngữ Assembly (Hợp ngữ) – Ngôn ngữ lập trình bậc thấp nhất dùng để giao tiếp trực tiếp với phần cứng của máy tính

Thư viện đầy đủ: Có rất nhiều tài nguyên sử dụng cho người lập trình bằng

C++, bao gồm cả đồ hoạ API, 2D, 3D, vật lý các thiết bị âm thanh hỗ trợ giúp cho lập trình viên dễ dàng thực thi

Đa mô hình: C++ cũng cho phép bạn lập trình theo cấu trúc tuyến tính,

hướng chức năng, hướng đối tượng đa dạng tuỳ theo yêu cầu của người lập trình

Thư viện:

Sử dụng thư viện trong c++

Sử dụng MySQL: hệ thống quản trị cơ sở dữ liệu mã nguồn mở (RelationalDatabase Management System, viết tắt là RDBMS) hoạt động theo môhình client-server RDBMS là một phần mềm hay dịch vụ dùng để tạo vàquản lý các cơ sở dữ liệu (Database) theo hình thức quản lý các mối liên

Bài báo cáo: Nhom_11_Report.docx

Video chạy thực nghiệm: Nhom_11_Demo.mp4

Trang 13

IV Kết quả thực nghiệm

- Tính năng 1: Thêm sinh viên

Ví dụ: Thêm một sinh viên có MSSV = 2021007

+ Trước:

Trang 14

+ Sau:

Trang 15

- Tính năng 2: Xóa sinh viên

Ví dụ: Xóa sinh viên có MSSV=2021007

+ Trước:

Trang 16

+ Sau:

- Chức năng 3: Thêm học phần

Ví dụ: Thêm học phần GT1 cho sinh viên có MSSV = 2021007

+ Trước:

Trang 18

+ Sau:

- Chức năng 6: Tìm kiếm sinh viên

Ví dụ: Tìm kiếm sinh viên có MSSV = 2021005

- Chức năng 7: In ra số sinh viên trong danh sách

- Chức năng 8: In ra danh sách

Trang 19

- Chức năng 9: In ra danh sách sinh viên theo thứ tự tăng dần của điểm trungbình giữa kì

V Kết luận

1 Đánh giá về mức độ hoàn thành

Mặt ưu điểm

Project của nhóm đã hoàn thành đúng với mục tiêu ban đầu đề

ra và có thể hoạt động với lượng data tương đối lớn

Các thành viên trong nhóm đã biết ứng dụng kiến thức để bắttay vào làm 1 dự án nhỏ

Đã ứng dụng được kiến thức đã học của môn học, kết hợp vớikiến thức tự tìm hiểu để làm sản phẩm

Mặt khác, sản phẩm này của chúng em vẫn cần phát triển thêm một sốphương diện như:

Về mặt trình bày code: Cần rút ngắn, tối giản

Về độ phức tạp thuật toán: Cần tối ưu thêm thời gian chạy để cóthể xử lý được lượng data vô cùng lớn

Trang 20

Về các chức năng khác của sản phẩm: Cần nghiên cứu nhiềukiến thức để tạo ra nhiều chức năng hữu ích hơn nữa

Về mặt hình thức sản phẩm: Cần nghiên cứu kiến thức để hìnhthức sản phẩm trở thành 1 web hay app đặc thù

Khi bắt đầu làm một bài tập lớn, sản phẩm, dự án bất kỳ thì chúng tađều cần lên kế hoạch cụ thể

Chọn đề tài vừa trong khả năng của bản thân, vừa có sự thử thách nhấtđịnh

Sau khi hoàn thành sản phẩm, cần phải suy nghĩ thêm để phát triểnsản phẩm, khắc phục những hạn chế của sản phẩm

Kỹ năng làm việc nhóm rất quan trọng, cần phải phân chia công việc

rõ ràng và giúp đỡ nhau trong quá trình làm việc, hiểu được điểmmạnh yếu của nhau

3 Khó khăn khi học tập môn học

Để học tốt môn Cấu trúc dữ liệu và giải thuật, chúng em cần phải nắmvững kiến thức môn Kỹ thuật lập trình C/C++

Cần hiểu bản chất khi học vì thường xuyên phải code giấy, khôngđược phụ thuộc vào máy tính

Lượng kiến thức lớn, cần phải đầu tư nhiều thời gian học và thực hành

để nắm được kiến thức

Cần phải nắm vững từng phần kiến thức mới ứng dụng được vài mộtbài tập lớn

Trang 21

Những khó khăn trên chỉ là những thử thách của môn học, nếu làm tốtthì kiến thức đã học ở môn Cấu trúc dữ liệu và giải thuật sẽ giúp íchrất nhiều cho bản thân sinh viên chúng em.

VI Tài liệu tham khảo:

Tài liệu trong teams lớp

Tài liệu về MySQL: phuc-tap-L4x5xamOKBM

https://viblo.asia/p/mysql-tu-don-gian-den-VII Lời cảm ơn

Cấu trúc dữ liệu và giải thuật là môn học quan trọng đối với sinh viên nhữngngành liên quan CNTT nói chung và ngành Điện tử-Viễn thông nói riêng.Chúng em đã hiểu rằng ngôn ngữ lập trình có thể thay đổi nhưng cốt lõi làcấu trúc giữ liệu và giải thuật sẽ giúp chúng em học được ngôn ngữ mớinhanh chóng

Chúng em xin chân thành cảm ơn sự chỉ dạy nhiệt tình và những ví dụ minhhọa của cô giúp chúng em học tập Cảm ơn cô vì đã giao một bài tập lớn đểchúng em được có cơ hội thử thách bản than vào một project không chỉ đơngiản là code mà còn là tinh thần làm việc, tìm hiểu những thứ mới mẻCuối cùng, sản phẩm của chúng em vẫn còn nhiều thiếu sót do thiếu nhiềukinh nghiệm cũng như kĩ năng, mong cô nhận xét, góp ý để chúng em hoànthiện hơn

Ngày đăng: 29/05/2024, 18:12

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

TÀI LIỆU LIÊN QUAN

w