Giới thiệu về lập trình cấu trúc dữ liệu và giải thuật

200 220 0
Giới thiệu về lập trình 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

Bài 1: Giới thiệu cấu trúc liệu 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 Nghệ - ðHQGHN Email: vinhioi@yahoo.com Cấu trúc liệu (data structure) - Cấu trúc liệu gì? Cấu trúc liệu cách tổ chức lưu giữ liệu cho hiệu - Thế hiệu quả? “Chính xác” Dùng nhớ Khả tìm kiếm/truy xuất Khả cập nhật, thêm bớt (modification, insertion / deletion) ðơn giản, dễ hiểu - Các kiểu cấu trúc liệu • 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 gì? Thuật toán phương pháp bao gồm dãy bước tính toán ñể giải toán Thuật toán ñược diễn tả 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ế thuật toán tốt? “ðúng ñắn” Nhanh Ít nhớ ðơ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, viết chương trình xếp thí sinh theo thứ tự giảm dần tổng ñiểm thi ba môn Ví dụ: Stt Họ tên Trần Anh Tuấn Bùi Ngọc Thăng Lê Sỹ Vinh Nguyễn Thị Ánh Toán 10 10 Lý 10 10 Hóa 9 Tổng 22 29 26 27 Sắp xếp bọt (bubble sort) Ý tưởng: Lần lượt duyệt qua danh sách thí sinh, hai thí sinh không ñúng thứ tự, ñổi chỗ hai thí sinh Lặp lại trình cho ñến danh sách ñược xếp Step (Tuấn, 22) (Thăng , 29) (Vinh, 26) (Ánh , 27) Step 4 (Thăng, 29) (Vinh, 26) (Ánh, 27) (Tuấn, 22) Step 1 (Thăng, 29) (Tuấn, 22) (Vinh, 26) (Ánh, 27) Step (Thăng, 29) (Ánh, 27) (Vinh, 26) (Tuấn, 22) Step (Thăng, 29) (Vinh, 26) (Tuấn, 22) (Ánh, 27) Sắp xếp bọt (bubble sort) Function bubbleSort (A : danh sách thí sinh) { swapped := false; swapped := false; for each i = to N – 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ó ñộ ưu tiên f(x) Hãy xếp website theo ñộ ưu tiên giảm dần Câu hỏi: Có thể dùng bubble sort không? Trả lời: ðược, không hiệu Ví dụ 2: Danh bạ ñiện thoại Viết chương trình quản lý danh bạ ñiện thoại toàn thành phố Hà Nội, cho thao tác sau ñược hiệu nhất: Kiểm tra số ñiện thoại Thêm số ñiện thoại Xóa số ñiện thoại Ví dụ 3: Tìm ñường ñi tốt • Xây dựng hệ thống phần mềm ñường ñi tốt cho người dùng ðường ñi ngắn ðường ñi qua ñèn xanh – ñèn ñỏ ðường ñi tắc Thiết kế thuật toán 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 Chiến lược vét cạn Tư tưởng: Duyệt tất nghiệm không gian nghiệm để tìm nghiệm tốt Ví dụ: Tìm đường ngắn qua tất đỉnh Ba lô Chia Chi kẹo k quân hậu Chiến lược tham ăn (G d strategy)) (Greedy Ý tưởng: Quá trình xây dựng nghiệm tiến hành qua N bước, bước thay xét tất khả có thể, ta xét khả cho tốt Nghiệm tìm thường nghiệm gần tối ưu Ví dụ: Bài toán người bán hàng Bài toán ba lô Bài toán chia kẹo Thuật toán leo đồi (hill climbing) Ý tưởng: Từ nghiệm ban đầu, cải tiến liên tục để thu nghiệm tốt không cải tiến Ví dụ: Bài toán chia kẹo Bài toán người bán hàng Bảng băm 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 Dữ liệu từ điển Ba phép toán liệu từ điển: Tìm kiếm Thêm vào Xóa Các cấu trúc: - Danh h sách h - Cây tìm kiếm nhị phân - Bảng băm … Tính địa i … Hàm băm Tập SIZE-1 giá trị khoá Mảng T Các hàm băm Các hàm băm • Phương pháp lấy phần dư h(k) = k % SIZE Size: Số nguyên tố có dạng 4K+3 (811) • Phương pháp nhân h(k) = ⎣(αk ⎣( k - ⎣αk⎦) ⎣ k⎦) SIZE⎦ S ⎦ α: Là số thực dương (0,61803399) Ví dụ: SIZE = 1024, 1024 k = 1849970 h(k) = ⎣(α.1849970 - ⎣α.1849970⎦).1024⎦ =348 Hàm băm với giá trị khóa xâu kí tự • S = s0…sk key(s) = s0 * 1280 + …si * 128i + …+ sk * 128k h(s) = key(s) % SIZE Giải va chạm • Phương pháp xác định địa mở T • 13 388 14 926 130 Phương pháp tạo dây chuyền … … Hàm băm h … … T Tính hiệu bảng băm Mức độ đầy: α = N SIZE Thời gian tìm kiếm trung bình bảng băm địa mở sử dụng thăm dò tuyến ế tính: Thành công: 1⎛ ⎞ + ⎟ ⎜ ⎝ 1−α ⎠ Thất bại: 1⎛ ⎞ ⎜⎜1 + ⎟ ⎟ ⎝ (1 − α ) ⎠ Giới thiệu môn học Cấu trúc liệu giải thuật 2008 - 2009 Thông tin giáo viên • Giáo viên chính: Ts Lê Sỹ Vinh Bộ môn Khoa Học Máy Tính Phòng 306, nhà E3 Email: vinhioi@yahoo.com • Trợ giảng: Ths Bùi Ngọc Thăng Bộ môn Khoa Học Máy Tính Phòng 306, nhà E3 Email: thangbn@coltech.vnu.vn Cách tính ñiểm Tổng thời gian học: 15 tuần Yêu cầu: Biết ngôn ngữ lập trình C++ Phân bố ñiểm: • Kiểm tra lần (10%): Tuần thứ • Kiểm kì (20%): Tuần thứ • Kiểm tra lần (10%): Tuần thứ 12 • Thi hết môn (60%) Thi hết môn: ðiểm lần kiểm tra d1, d2, d3, ñiều kiện cần ñể ñược thi hết môn d123 = (d1 + d2 * + d3) / >= Khuyến khích ([...]... ‘’, ‘=’, ‘+’, ‘-’, ‘*’, ‘/’ 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, 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... 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í 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... 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 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{... 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 kiểu dữ liệu ñã biết t1, t2,…,tn, 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 toán trên kiểu dữ liệu có cấu trúc. .. (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 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ế... n” ; } }; • Liên kết chặt chẽ giữa dữ liệu và phép toán • Che dấu dữ liệu • Dễ dàng tìm lỗi • Các ñối tượng liên kết với nhau thông qua các phép toán 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... (c1.image * c2.real); return c12; } Phạm vi và các phép toá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 ... x2 …… tn xn } Kiểu liệu có cấu trúc • Xây dựng cấu trúc liệu ñể biểu diễn liệu ñiểm mặt phẳng struct pointType { double x; double y; } • Xây dựng cấu trúc liệu ñể biểu diễn liệu ñoạn thẳng mặt... Các ví dụ khác (10’) Thế chương trình tốt? ðúng ñắn Hiệu Dễ hiểu Dễ tìm lỗi Dễ thay ñổi nâng cấp Thuật toán + Cấu trúc liệu = Chương trình N Wirth Dữ liệu • Dữ liệu thông tin mà máy tính xử lý:.. .Cấu trúc liệu (data structure) - Cấu trúc liệu gì? Cấu trúc liệu cách tổ chức lưu giữ liệu cho hiệu - Thế hiệu quả? “Chính xác” Dùng nhớ Khả

Ngày đăng: 03/12/2015, 03:42

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan