Bài giảng Cấu trúc dữ liệu và giải thuật - Bài 1: Giới thiệu về cấu trúc dữ liệu và giải thuật - Lê Sỹ Vinh
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Cấu trúc dữ liệu và giải thuật - Bài 1: Giới thiệu về cấu trúc dữ liệu và giải thuật - Lê Sỹ Vinh", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Tài liệu đính kèm:
- bai_giang_cau_truc_du_lieu_va_giai_thuat_bai_1_gioi_thieu_ve.pdf
Nội dung text: Bài giảng Cấu trúc dữ liệu và giải thuật - Bài 1: Giới thiệu về cấu trúc dữ liệu và giải thuật - Lê Sỹ Vinh
- Bài 1: Giới thiệu về cấu trúc dữ liệu và giải thuậ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 Nghe - ĐHQGHN 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 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) 5. ðơn gi n, d hi u Các ki u c u trúc d 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 tốn (algorithm) • Thu t tốn là gì? Thu t tốn là m t phương pháp bao g m m t dãy các bư c tính tốn đ gi i quy t m t bài tốn. Thu t tố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 tố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 Tố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) 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? 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 tồ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
- Ví d 3: Tìm đư ng đi t t nh t (google map)
- Ví d 3: Tìm đư ng đi t t nh t (google map)
- Ví d 4: Xây d ng h th ng t đi n Vi t chương trình t đi n Anh – Vi t, cho phép th c hi n các thao tác sau: 1. Tìm m t t 2. Thêm m t t 3. Xĩa m t t 4. S a m t t 5. Tìm t đ ng nghĩa
- Ví d 5: Ngư i bán hàng traveling salesman problem (TSP) M t ngư i bán hàng c n đ n thăm N khách hàng N đ a đi m khác nhau. Tìm m t hành trình cho ngư i bán hàng trên sao cho: 1. M i đ a đi m thăm đúng 1 l n, sau đĩ quay v đi m xu t phát 2. T ng chi phí đi l i là ít nh t
- Ngư i bán hàng Thu t tốn: Thăm đ a đi m g n nh t (nearest neighbor tour) T đi m xu t phát, l n lư t đi thăm các đi m theo quy t c: “ð n thăm đi m chưa đư c thăm g n v i đi m hi n t i nh t”
- Ngư i bán hàng Nearest neighbor tour: 1 → 2 → 3 → X → 7 → 8 → 6 → 5 → 4 → 9 → 1 ðương đi t i ưu: 1 → 2 → 3 → 4 → 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. ðúng đ n 2. Hi u qu 3. D hi u 4. D tìm l i 5. D thay đ i và nâng c p “Thu t tố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í t 0, 1) • Trong các ngơn ng l p trình b c cao (C++, Java ), d li u đư c bi u di n dư i d ng tr u tư ng, xu t phát t bi u di n tốn h c và d hi u cho con ngư i: – int age – double weight
- Ki u d li u cơ b n Ki u d li u đư c xác đ nh b i: 1. Ph m vi giá tr 2. Các phép tốn Ví d trong C++ ki u ph m vi phép tốn thư ng dùng bool true / false and, or, not char 127 > 127 ‘ ’, ‘=’ int 32,767 > 32,767 ‘ ’, ‘=’, ‘+’, ‘ ’, ‘*’, ‘/’ float ~1E 37 > ~1E+37 ‘ ’, ‘=’, ‘+’, ‘ ’, ‘*’, ‘/’ double ~1.7E 308 > ~1.7E+308 ‘ ’, ‘=’, ‘+’, ‘ ’, ‘*’, ‘/’
- Ki u d li u cĩ c u trúc Câ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, t 2, ,t n. 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 li u đ bi u di n d li u c a 1 đo n th ng trên m t ph ng struct lineType { point Type start; pointType 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 tố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 ki u d li u đã bi t t1, t 2, ,t n, Ví d : struct complexType { double real; double image; } Ph m vi: Xác đ nh b i ph m vi c a các ki u d li u thành ph n – real: là s th c n m trong ph m vi ki u ‘double’ – image: là s th c n m trong ph m vi ki u ‘double’
- Ph m vi và các phép tốn trên ki u d li u cĩ c u trúc Phép tố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 tốn trên ki u d li u cĩ c u trúc complexType add (complexType c1, complextType c2) { complexType c12; c12.real = c1.real + c2.real; c12.image = c1.image + c2.image; return c12; } complexType multiply (complexType c1, complextType c2) { complexType c12; c12.real = (c1.real * c2.real) – (c1.image * c2.image); c12.image = (c1.real * c2.image) + (c1.image * c2.real); return c12; }
- Ph m vi và các phép tốn trên ki u d li u cĩ c u trúc complexType getReal (complexType c) { c.real } complexType getImage (complexType c) { c.image } void printComplex (complexType c) { cout << c.real << “ +i ” << c.image << “ \ n” ; }
- Tr u tư ng hĩa d li u (abstraction data type) 1. ð c t đ i tư ng d li u (các thành ph n d li u c a đ i tư ng) Ví d : đ i tư ng s ph c (complex) – real – image 2. ð c t các phép tốn trên đ i tư ng d li u (operations) Ví d : ð i tư ng s ph c (complex): – createComplex (real, image) – getReal (complexNumber) – getImage (complexNumber) – add (complexNumber1, complexNumber2) – multiply (complexNumber2, complexNumber2) – print (complexNumber)
- Tr u tư ng hĩa d li u Tr u tư ng hĩa đ i tư ng sinh viên (student ) (5’) 1. ð c t đ i tư ng d li u name, age, sex, address 2. ð c t các phép tốn trên đ i tư ng d li u createStudent (name, age, sex, address) compare (student1, student2) getName (student) getAge (student) getSex (student) getAdd (student)
- Tr u tư ng hĩa d li u • studentClass 1. ð c t đ i tư ng d li u className, numberStudent, studentArr, Address 2. ð c t các phép tốn trên đ i tư ng d li u addStudent (studentClass, student) findStudent (studentClass, student) deleteStudent (studentClass, student) getClassName (studentClass) getNumberStudent (studentClass) getStudentArr (studentClass) getStudentAddress (studentClass)
- L p trình hư ng đ i tư ng Object oriented programming (OOP) • 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 tố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 tố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) • Class : Cài đ t m t l p đ i tư ng d li u tr u tư ng. Vi c cài đ t bao g m cài đ t các thành ph n d li u và các phép tốn trên d li u Ví d : class complex { • Liên k t ch t ch gi a d li u và private: double real; phép tốn double image; public: • Che d u d li u void create (double newReal, double newImage) { real = newReal; image = newImage; • D dàng tìm l i } double getReal () { return real; • Các đ i tư ng liên k t v i nhau } thơng qua các phép tốn void print { cout << real << “ +i ” << image << “ \ n” ; } };
- OOP: Tính đĩng gĩi (encapsulation) Object: Bi u di n cho m t đ i tư ng c th c a m t l p complex c1; complex c2;
- Thi t k chương trình • ð c t 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, đ nh d ng
- ð c t v n đ Ví d : Cho m t dãy s ph c, hãy 1. Tính t ng c a dãy s ph c 2. Tính tích c a dãy s ph c 3. Tìm s ph c cĩ ph n th c (real) l n nh t 4. Tìm s ph c cĩ ph n o (image) l n nh t ð c t v n đ : • Input: M t dãy s ph c, m i s ph c đư c bi u di n b i 2 s th c mơ t ph n th c (real) và ph n o (image) • Output: – c1 (s ph c bi u di n t ng c a dãy s ph c) – c2 (s ph c bi u di n tích c a dãy s ph c) – c3 (s ph c cĩ ph n th c l n nh t) – c4 (s ph c cĩ ph n o l n nh t)
- Bài t p ð c t v n đ cho các bài tốn dư i đây 1. S p x p danh sách website 2. H th ng t đi n 3. Tìm đư ng đi t t nh t 4. Ngư i bán hàng