Upload
thien-nguyen
View
306
Download
1
Tags:
Embed Size (px)
Citation preview
“ALGORITHMS + DATA STRUCTURES = PROGRAMS”
NIKLAUS WIRTH, 1976
Thiện Nguyễn
August 26th, 2012
DATA STRUCTURES & ALGORITHM
CẤU TRÚC DỮ LIỆU & THUẬT TOÁN ĐỂ LÀM GÌ?
• Ứng dụng để giải quyết các bài toán thực tế
• Cài đặt các chương trình • Tiền đề cho các môn học, lĩnh vực
khác của Máy tính • …
Là một tập hữu hạn các chỉ dẫn để máy tính giải quyết một bài toán.
Thuật toán là gì?
• Tính đơn nghĩa • Tính dừng • Tính đúng • Tính phổ dụng • Tính khả thi.
Các tính chất của Thuật toán
Là khái niệm dùng để đánh giá thời gian thực thi của một thuật toán độc lập với máy tính
Độ phức tạp của Thuật toán
• Quy tắc Loại bỏ hằng số • Quy tắc Cực đại • Quy tắc cộng • Quy tắc nhân.
Các xác định Độ phức tạp của Thuật toán
• O(n) • O(n^k) • O(log(n)) • O(n.log(n)) • O(a^n) • O(n!).
Các độ phức tạp thường gặp
• Danh sách tuyến tính • Hàng đợi • Ngăn xếp • Cây.
Cấu trúc dữ liệu
Là một cấu trúc dữ liệu mà mỗi phần tử chỉ tồn tại tối đa một phần tử liền sau.
Danh sách tuyến tính
Danh sách
Thường
Không thứ tự
Có thứ tự
Ràng buộc
FIFO (queue)
LIFO (stack)
Phân loại Danh sách tuyến tính
• Không có ràng buộc đối với các thao tác trên danh sách.
• Không có ràng buộc khi chèn/xóa phần tử
• Có 2 loại: o Có thứ tự o Không thứ tự.
Danh sách tổng quát
• Ràng buộc đối với các thao tác trên danh sách
• Ràng buộc khi chèn/xóa phần tử. • Có 2 loại: o Queue (FIFO: First-In-First-Out) o Stack (LIFO: Last-In-First-Out).
Danh sách ràng buộc
• Dùng mảng: int a[20];
Cài đặt danh sách • Dùng DS Liên kết: struct Node{ int data; int* next; } struct List{ Node* pHead; int count; }
• Dùng mảng: class Queue{ private: int data[100]; int count; int front; int rear;
public: Queue(); int size(); int front(); int rear(); bool isEmpty(); bool isFull(); bool enQueue(int k); bool deQueue(int k); }
Cài queue dùng mảng Cách cài đặt Queue
Cách cài đặt Queue
class Queue{ private: int* front; int* rear; int count;
public: Queue(); int size(); int front(); int rear(); bool isEmpty(); bool isFull(); bool enQueue(int k); bool deQueue(int k); }
• Dùng danh sách liên kết:
Cài queue bằng danh sách liên kết
Cách cài đặt Stack
class Stack{ private: int data[100]; int count;
public: Stack() int size(); bool isEmpty(); bool isFull(); int top(); void push(int k); int pop(); }
• Dùng mảng:
Cài stack bằng mảng
Ghi chú: Tùy vào mục đích sử và phương pháp sử dụng mà các method push, pop có thể trả về void, bool hay int
Cách cài đặt Stack
class Stack{ private: Node* head Node* tail int count int count;
public: Stack(); int size(); bool isEmpty(); bool isFull(); int top(); void push(int k); int pop(); }
• Dùng danh sách liên kết:
Cài stack bằng danh sách liên kết
Ghi chú: Tùy vào mục đích sử và phương pháp sử dụng mà các method push, pop có thể trả về void, bool hay int
Tree (Cây)
Cây là một cấu trúc dữ liệu gồm một tập hữu hạn các node (nút), giữa các node có một quan hệ phân cấp gọi là quan hệ “cha – con”.
Các khái niệm trong Cây
• Root (node gốc) • Leaf (node lá) • Branch (node nhánh) • Level (cấp) • Height/Depth (chiều cao/chiều sâu) • Sub-tree (cây con).
Cây nhị phân
• Là cây có level bằng 2
Cây k-phân: Cây có level bằng k.
Cài đặt Cây nhị phân
struct Node{ int data; int* left, right; } struct Tree{ Node* root; int count; }
Các phép duyệt cây
• Deep First Traverse: Pre-Oder In-Order Post-Oder
• Breadth First Traverse.
Deep First Traverse
Pre-Oder (NLR)
F->B->A->D->C->E->G->I->H.
Deep First Traverse
In-Oder
A->B->C->D->E->F->G->H->I.
Deep First Traverse
Post-Oder
A->C->E->D->B->H->I->G->F.
MỘT SỐ THƯ VIỆN TRONG C++
• <cstdio> • <iostream> • <cstring> • <cmath>
• <queue> • <stack> • <vector> • <algorithm> • …
THỰC HÀNH NHƯ THẾ NÀO?
• Giải đề trực tuyến.
SIMPLE
• Insomnia cure Problem: http://codeforces.com/problemset/problem/148/A
• Tram Problem: http://codeforces.com/problemset/problem/116/A
• cAPS lOCK Problem: http://codeforces.com/problemset/problem/131/A
• …
SORTING
• Twins Problem: http://codeforces.com/problemset/problem/148/A Solution: http://codeforces.com/contest/160/submission/1646544
DFS
• Party Problem: http://codeforces.com/problemset/problem/115/A Solution: http://codeforces.com/contest/115/submission/703831
GRAPH
• Friend Problem: http://codeforces.com/problemset/problem/94/B Solution: http://codeforces.com/contest/94/submission/787035
QUESTIONS?
THANKS FOR LISTENING!