Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 37 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
37
Dung lượng
820,7 KB
Nội dung
Bài 1: Giớithiệuvề cấu trúcdữliệuvàgiảithuật (Introduction to data structures and algorithms) Lê Sỹ Vinh Bộ môn Khoa Học Máy Tính – Khoa CNTT ðại Học Công Nghệ - ðHQGHN Email: vinhioi@yahoo.com Cấutrúcdữliệu (data structure) - Cấutrúcdữliệu là gì? Cấutrúcdữliệu là cách tổ chức lưu giữ dữliệu trong sao cho hiệu quả nhất - Thế nào là hiệu quả? 1. “Chính xác” 2. Dùng ít bộ nhớ 3. Khả năng tìm kiếm/truy xuất 4. Khả năng cập nhật, thêm bớt (modification, insertion / deletion)4. Khả năng cập nhật, thêm bớt (modification, insertion / deletion) 5. ðơn giản, dễ hiểu - Các kiểu cấu trúcdữliệu cơ bản • Bản ghi (struct) • Danh sách (array) • Danh sách liên kết (list) • Cây (tree) • Bảng băm (hash table) Thuật toán (algorithm) • Thuật toán là gì? Thuật toán là một phương pháp bao gồm một dãy các bước tính toán ñể giải quyết một bài toán. Thuật toán có thể ñược diễn tả dưới dạng ngôn ngữ tự nhiên (tiếng Việt, tiếng Anh…) hay ngôn ngữ lập trình (C++, Java…) • Thế nào là một thuật toán tốt? 1. “ðúng ñắn” 2. Nhanh 3. Ít bộ nhớ 4. ðơn giản, dễ hiểu Ví dụ 1: Sắp xếp danh sách tuyển sinh Năm 2008, ðại học Công Nghệ có N thí sinh tham gia tuyển sinh, hãy viết chương trình sắp xếp các thí sinh theo thứ tự giảm dần của tổng ñiểm thi ba môn Ví dụ: Stt Họ tên Toán Lý Hóa TổngStt Họ tên Toán Lý Hóa Tổng 1 Trần Anh Tuấn 7 8 7 22 2 Bùi Ngọc Thăng 10 10 9 29 3 Lê Sỹ Vinh 10 8 8 26 4 Nguyễn Thị Ánh 8 10 9 27 Sắp xếp nổi bọt (bubble sort) Ý tưởng: Lần lượt duyệt qua danh sách thí sinh, nếu hai thí sinh không ñúng thứ tự, ñổi chỗ hai thí sinh. Lặp lại quá trình trên cho ñến khi danh sách ñược sắp xếp Step 0 Step 1 Step 3 1. (Tuấn, 22) 1. (Thăng, 29) 1. (Thăng, 29)1. (Tuấn, 22) 1. (Thăng, 29) 1. (Thăng, 29) 2. (Thăng , 29) 2. (Tuấn, 22) 2. (Vinh, 26) 3. (Vinh, 26) 3. (Vinh, 26) 3. (Tuấn, 22) 4. (Ánh , 27) 4. (Ánh, 27) 4. (Ánh, 27) Step 4 Step 5 1. (Thăng, 29) 1. (Thăng, 29) 2. (Vinh, 26) 2. (Ánh, 27) 3. (Ánh, 27) 3. (Vinh, 26) 4. (Tuấn, 22) 4. (Tuấn, 22) Sắp xếp nổi bọt (bubble sort) Function bubbleSort (A : danh sách thí sinh) { swapped := false; do swapped := false; for each i = 1 to N – 1 do if A[i].diem < A[i + 1]. diem then { swap (A[i], A[i+1]); swapped := true; } done; while (swapped = true) } Ví dụ 1’: Sắp xếp danh sách website (google search) Google có danh sách N website. Website x có một ñộ ưu tiên là f(x). Hãy sắp xếp các website trên theo ñộ ưu tiên giảm dần Câu hỏi: Có thể dùng bubble sort không?Câu hỏi: Có thể dùng bubble sort không? Trả lời: ðược, nhưng không hiệu quả Ví dụ 2: Danh bạ ñiện thoại Viết một chương trình quản lý danh bạ ñiện thoại của toàn bộ thành phố Hà Nội, sao cho các thao tác sau ñược hiệu quả nhất: 1. Kiểm tra một số ñiện thoại 2. Thêm một số ñiện thoại 3. Xóa một số ñiện thoại Ví dụ 3: Tìm ñường ñi tốt nhất • Xây dựng hệ thống phần mềm chỉ ñường ñi tốt nhất cho người dùng 1. ðường ñi ngắn nhất 2. ðường ñi qua ít ñèn xanh – ñèn ñỏ nhất 3. ðường ñi ít tắc nhất [...]... pointType } start; end; Ki u d li u có c u trúc • Xây d ng c u trúc d li u ñ bi u di n 1 sinh viên (5’) struct studentType { char name[100]; int age; bool sex; } • Xây d ng c u trúc d li u ñ bi u di n danh sách 1 l p h c struct studentClassType{ char className[100]; int numberStudent; studentType studentArr[100]; } Ph m vi và các phép toán trên ki u d li u có c u trúc Xét ki u d li u m i T ñư c t o t nhưng... có c u trúcCâu h i: Làm sao ñ bi u di n d li u v 1 ñi m trên m t ph ng? ðáp án: Ngôn ng lâp trình cung c p cho ta nh ng lu t ñ xây d ng ki u d li u m i T t nh ng ki u d li u ñã bi t t1, t2,…,tn Ví d trong C++: struct T { t1 x1 t2 x2 …… tn xn } Ki u d li u có c u trúc • Xây d ng c u trúc d li u ñ bi u di n d li u c a 1 ñi m trên m t ph ng struct pointType { double x; double y; } • Xây d ng c u trúc d... là s th c n m trong ph m vi ki u ‘double’ Ph m vi và các phép toán trên ki u d li u có c u trúc Phép toán: Do ngư i dùng ñ nh nghĩa Ví d : struct complexType { double real; double image; } complexType createComplex (double real, double image) { complexType c; c.real = real; c.image = image; return c; } Ph m vi và các phép toán trên ki u d li u có c u trúc complexType add (complexType c1, complextType... phép toán Thi t k chương trình • • • • ð ct v nñ Thi t k c u trúc d li u và gi i thu t Cài ñ t (C++, Java…) Th nghi m và s a l i Thi t k chương trình: ð c t v n ñ Chính xác hóa v n ñ c n gi i quy t: - Chúng ta ñư c cho nh ng gì? - Chúng ta c n tìm ra cái gì? - M i quan h gi a chúng là gì? ð c t v n ñ trong khoa h c máy tính: Input: D li u vào, các r ng bu c, ñ nh d ng Ouput: D li u ra, các r ng bu c,... →5 →6 →8→7→X→9→1 Các ví d khác (10’) Th nào là m t chương trình t t? 1 2 3 4 5 ðúng ñ n Hi u qu D hi u D tìm l i D thay ñ i và nâng c p “Thu t toán + C u trúc d li u = Chương trình” N Wirth D li u • D li u là nh ng thông tin mà máy tính có th x lý: s nguyên, s th c, xâu kí t , và các d li u ph c t p ñư c t o t nhi u thành ph n • Trong b nh máy tính, d li u ñư c bi u di n dư i d ng nh phân (dãy các kí... Lâp trình hư ng ñ i tư ng giúp chúng ta cài ñ t các mô t tr u tư ng (ñ i tư ng d li u và các phép toán) thành các ño n mã chương trình • Chương trình ñư c thi t k thành t ng ño n nh , m i ño n mô t v m t ñ i tư ng (thu c tính d li u, các phép toán trên d li u) • Hai thu c tính quan tr ng: ñóng gói (encapsulation) và th a k (inheritance) OOP: Tính ñóng gói (encapsulation) Object: Bi u di n cho m t ñ... cài ñ t bao g m cài ñ t các thành ph n d li u và các phép toán trên d li u Ví d : class complex { private: double real; double image; public: void create (double newReal, double newImage) { real = newReal; image = newImage; } double getReal () { return real; } ………… void print { cout . Email: vinhioi@yahoo.com Cấu trúc dữ liệu (data structure) - Cấu trúc dữ liệu là gì? Cấu trúc dữ liệu là cách tổ chức lưu giữ dữ liệu trong sao cho hiệu. tìm lỗi 5. Dễ thay ñổi và nâng cấp5. Dễ thay ñổi và nâng cấp Thuật toán + Cấu trúc dữ liệu = Chương trình” N. Wirth Dữ liệu • Dữ liệu là những thông tin