33
“ALGORITHMS + DATA STRUCTURES = PROGRAMSNIKLAUS WIRTH, 1976 Thiện Nguyễn August 26 th , 2012 D ATA STRUCTURES & ALGORITHM

DS&A Reviews

Embed Size (px)

Citation preview

Page 1: DS&A Reviews

“ALGORITHMS + DATA STRUCTURES = PROGRAMS”

NIKLAUS WIRTH, 1976

Thiện Nguyễn

August 26th, 2012

DATA STRUCTURES & ALGORITHM

Page 2: DS&A Reviews

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 • …

Page 3: DS&A Reviews

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ì?

Page 4: DS&A Reviews

• 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

Page 5: DS&A Reviews

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

Page 6: DS&A Reviews

• 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

Page 7: DS&A Reviews

• 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

Page 8: DS&A Reviews

• Danh sách tuyến tính • Hàng đợi • Ngăn xếp • Cây.

Cấu trúc dữ liệu

Page 9: DS&A Reviews

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

Page 10: DS&A Reviews

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

Page 11: DS&A Reviews

• 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

Page 12: DS&A Reviews

• 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

Page 13: DS&A Reviews

• 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; }

Page 14: DS&A Reviews

• 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

Page 15: DS&A Reviews

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

Page 16: DS&A Reviews

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

Page 17: DS&A Reviews

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

Page 18: DS&A Reviews

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”.

Page 19: DS&A Reviews

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).

Page 20: DS&A Reviews

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.

Page 21: DS&A Reviews

Cài đặt Cây nhị phân

struct Node{ int data; int* left, right; } struct Tree{ Node* root; int count; }

Page 22: DS&A Reviews

Các phép duyệt cây

• Deep First Traverse: Pre-Oder In-Order Post-Oder

• Breadth First Traverse.

Page 23: DS&A Reviews

Deep First Traverse

Pre-Oder (NLR)

F->B->A->D->C->E->G->I->H.

Page 24: DS&A Reviews

Deep First Traverse

In-Oder

A->B->C->D->E->F->G->H->I.

Page 25: DS&A Reviews

Deep First Traverse

Post-Oder

A->C->E->D->B->H->I->G->F.

Page 26: DS&A Reviews

MỘT SỐ THƯ VIỆN TRONG C++

• <cstdio> • <iostream> • <cstring> • <cmath>

• <queue> • <stack> • <vector> • <algorithm> • …

Page 27: DS&A Reviews

THỰC HÀNH NHƯ THẾ NÀO?

• Giải đề trực tuyến.

Page 28: DS&A Reviews

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

• …

Page 30: DS&A Reviews

DFS

• Party Problem: http://codeforces.com/problemset/problem/115/A Solution: http://codeforces.com/contest/115/submission/703831

Page 31: DS&A Reviews

GRAPH

• Friend Problem: http://codeforces.com/problemset/problem/94/B Solution: http://codeforces.com/contest/94/submission/787035

Page 32: DS&A Reviews

QUESTIONS?

Page 33: DS&A Reviews

THANKS FOR LISTENING!