1. Trang chủ
  2. » Giáo Dục - Đào Tạo

bài giảng cấu trúc dữ liệu và giải thuật TIẾN SĨ KIM

36 370 0

Đ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

Thông tin cơ bản

Định dạng
Số trang 36
Dung lượng 616,41 KB

Nội dung

tài liệu tham khảo cho những người đang cần những kiến thức về lập trình C++ Trong bộ môn Cấu trúc dữ liệu và giải thuật của TIẾN SĨ KIM. Chúc các bạn thành công. Xin chào và hẹn gặp lại các bạn trong những tài liệu tiếp theo.

Bài gi ng c u trúc d li u gi i thu t Trang 71 Bài gi ng c u trúc d li u gi i thu t Trang KHOA CÔNG NGH THÔNG TIN B MÔN KHOA H C MÁY TÍNH -o0o - Tài li u tham kh o [1] Xuân Lôi, C u trúc d li u gi i thu t, [2]Nguy)n HBK Hà N i c Ngh-a, C u trúc d li u gi i thu t, HBK Hà N i, 2012 [3]Tr n H nh Nhi–D ng Anh c, Nh p môn c u trúc d li u gi i thu t, HKHTN- HQG TPHCM [4]Jhon Bentley, Nh ng viên ng c k thu t l p trình [5]Robert L Kruse, Alexander J Ryba, Data Structures and Program Design in C++, Prentice Hall, 2000 [6]Mark Allen Weiss, Data Structures and Algorithm Analysis in Java, PEARSON, 2012 BÀI GI NG C U TRÚC D LI U VÀ GI I THU T (l u hành n i b ) Bài gi ng c u trúc d li u gi i thu t Trang Bài gi ng c u trúc d li u gi i thu t H4C PH5N C U TRÚC D Trang 70 LI U VÀ GI I THU T ( S7 17) Th"i gian làm bài: 90 phút Câu 1: (3 i m) L i gi i thi u a Cho dãy n s nguyên ao, a1,…,an-1 m t s nguyên x Hãy vi t gi i thu t tìm ki m nh phân ki m tra giá tr x có dãy s hay không ? C u trúc d li u gi i thu t h c ph n b t bu c thu c kh i ki n th c c s ngành c a sinh viên chuyên ngành công ngh thông tin c ng n i dung quan tr ng k thi t t nghi p, thi hoàn ch nh i h c chuyên ngành công ngh thông tin T p gi ng trình bày ch t p v :T ng quan v c u trúc d li u gi i thu t, tìm ki m, s p x p, c u trúc danh sách liên k t c u trúc theo ngôn ng C/C++ M i ch c thi t k g m ph n: Tóm t t lý thuy t, m t s d ng t p i n hình m t s t p ch n l c Ph n cu i c a t p gi ng có b sung m t s thi sinh viên t rèn luy n k n ng phân tích v n toán T p gi ng c biên so n làm tài li u tham kh o gi ng h c ph n c u trúc d li u gi i thu t h i h c Chúng xin trân tr ng gi i thi u v i b n c t p gi ng hy v ng r ng s! giúp cho vi c h c t p h c ph n c u trúc d li u gi i thu t c a sinh viên khoa công ngh thông tin tr "ng # i h c Sài Gòn c thu n l i h n b Hãy vi t gi i thu t Quick Sort c Cho dãy s : s(p x p dãy n s nguyên ao, a1,…,an-1 theo th t t ng Hãy minh h a trình x p t ng d n dãy s theo gi i thu t Quick Sort Câu 2: (4 i m) Cho danh sách liên k t a Hãy n L; m i nút ch a m t s nguyên nh ngh-a c u trúc d li u c a danh sách liên k t L b Hãy vi t gi i thu t s(p x p ph n t l8 n'm v phía tr c c a danh sách ph n t ch7n n'm v phía cu i c a danh sách c Cho hai danh sách liên k t n L1 L2 mà giá tr c a ã gi i thu t tr n hai danh sách L1, L2 thành m t danh sách L c&ng c s(p t ng; vi t c s(p t ng Câu 3: (3 i m) Thành ph H Chí Minh, ngày 06 tháng 09 n m 2009 TÁC GI$ Cho m t nh phân tìm ki m T mà m i nút ch a m t s nguyên; khóa c a nút ó a Hãy nh ngh-a c u trúc d li u c a T b Hãy vi t gi i thu t tính t!ng giá tr c a nút ch có m t c Hãy vi t gi i thu t tìm m c c a nút có khóa k (gi s s k ã có cây) H t - Bài gi ng c u trúc d li u gi i thu t Trang 69 Bài gi ng c u trúc d li u gi i thu t Ch H4C PH5N C U TRÚC D LI U VÀ GI I THU T ( S7 16) Th"i gian làm bài: 90 phút Trang ng T NG QUAN V C U TRÚC D LI U VÀ GI I THU T Câu 1: (3.0 ) a Vi t gi i thu t s(p x p dãy n s th c ao, a1, a2, ,an-1 gi m d n theo gi i thu t Quick sort b Cho dãy s : Hãy minh h a trình s(p t ng d n dãy s theo gi i thu t Quick sort c Ch ng minh gi i thu t Merge sort có ph c t p O(n log n) v i n s ph n t c a dãy d Hãy tr l i ng(n g n câu h"i sau: - M t nh phân có chi u cao h có t i a nút ? - M t nh phân có chi u cao h có t i a có nút ? - M t nh phân * m c i có t i a nút ? - Cây nh phân y (m i nút u có con) có chi u cao h có nút ? 1.1.BÀI TOÁN Khái ni m toán • Trong ph m vi tin h c, ta quan ni m toán m t công vi c ó mà ta mu n • Khi dùng máy tính gi i toán, ta c n quan tâm máy tính th c hi n n ba y u t : (Input), c n l y thông tin (Output) trình ó a vào máy thông tin c x lý nh th ? Ví d v m t s toán tin h c ng trình d ng ax2 + bx + c = • Gi i ph Câu 2: (3.0 ) • Tìm t t c ph Cho danh sách liên k t n L, m i nút ch a m t phân s g m t s m%u s (gi s t s m%u s c a phân s s nguyên d ng) a Hãy nh ngh-a c u trúc d li u danh sách liên k t n bi u di)n phân s b Vi t gi i thu t tìm phân s có giá tr l n nh t c Vi t gi i thu t m s l ng phân s có giá tr n'm kho ng (0,1) • Cho dãy n s , tìm dãy t ng dài nh t (dãy có th không g m ph n t • Tính 21000 Câu 3: (4.0 ) Cho nh phân tìm ki m T m i nút ch a m t s nguyên; khóa c a nút ó a Hãy nh ngh-a c u trúc d li u cho T b Vi t gi i thu t tính t!ng giá tr nút c Vi t gi i thu t m xem T có nút có úng hai d Vi t gi i thu t in khóa c a nút ng i t nút g c n nút có khóa k (gi s giá tr k ã có cây) H t - ng án t n quân h u bàn c n x n liên ti p nhau) Các b c gi i m t toán • Xác • Thi t k gi i thu t • Vi t ch • Ki m th ch • Vi t tài li u (G m: n i dung toán, gi i thu t, toàn v n ch nh toán ng trình ng trình ng trình, b ki m th , thông tin v tác gi c a công o n th i i m ch nh s a cu i công o n,…) 1.2.GI I THU T Khái ni m gi i thu t (thu t gi i/thu t toán) Gi i thu t gi i toán m t th t c xác th c hi n thu c u cho m t nh bao g m m t dãy h u h n b u vào cho tr cc n c c a toán c tr ng c a gi i thu t • • • u vào (Input): Gi i thu t nh n d li u vào t m t t p ó u (Output): V i m i t p d li u u vào, gi i thu t a d li u t ng v i l i gi i c a toán Chính xác (Precision): Các b c c a gi i thu t c mô t xác ng Bài gi ng c u trúc d li u gi i thu t • • • Trang Bài gi ng c u trúc d li u gi i thu t H u h n (Finiteness): Gi i thu t c n ph i a c u sau m t s h u h n (có th r t l n) b c v i m i u vào n tr (Uniqueness): Các k t qu trung gian c a t ng b c th c hi n gi i thu t c xác nh m t cách n tr ch ph thu c vào u vào k t qu c a b c tr c T!ng quát (Generality): Gi i thu t có th áp d ng c xác nh nh l ng tài nguyên lo i • Có hai lo i tài nguyên quan tr ng ó th i gian b nh • Ta n ánh giá th i gian c n thi t th c hi n gi i thu t mà ta s# b'ng m t s quy t(c c nh p theo th t sau: (g c), 34, 2, 1, 15, 9, d Cho dãy ch a n s nguyên a0,a1,…,an-1 ã c (NLR) th t sau (LRN) c s(p t ng m t s nguyên x S d ng qui vi t gi i thu t tìm ki m nh phân ph c t p tính toán c a m t gi i thu t b t k$ có th d%n t i nh ng toán ph c t p Tuy nhiên th c t , b Minh h a trình bi n !i dãy s 26, 8, 24, 16, 4, 20, 12, 34, 2, 10 thành m t heap 41, 6, 16, 40, 12, 45 Duy t T theo th t tr g i th i gian tính c a gi i thu t nh a Minh h a trình s(p t ng d n dãy s 26, 8, 24, 16, 4, 20, 12, 34, 2, 10 theo gi i thu t c V# nh phân tìm ki m T v i nút mà gi i thu t òi h"i s d ng xác Th"i gian làm bài: 90 phút Merge sort ph c t p tính toán c a gi i thu t c bi t quan tâm LI U VÀ GI I THU T ( S7 15) Câu 1: (4 i m) gi i m i toán có d ng ã cho ph c t p c a gi i thu t • H4C PH5N C U TRÚC D Trang 68 i v i m t s gi i thu t ta c&ng có th phân tích c n gi n Quy t(c c ng quy t(c nhân e Cho dãy ch a n s nguyên a0,a1,…,an-1 Vi t gi i thu t s(p dãy s theo th t t ng theo gi i thu t Heap sort Câu 2: (3 i m) a Cho danh sách liên k t M t s l p gi i thu t n L; m i nút ch a m t s nguyên Hãy li u cho danh sách liên k t • O(1): H'ng s (constant) b Vi t gi i thu t • O(log n): Logarithmic Câu 3: (3.0 i m) • O(n): Tuy n tính (linear) • O(n log n): Trên n tính (superlinear) • O(n2): Bình ph • O(n3): B c (cubic) qui nh ngh-a c u trúc d n L Vi t gi i thu t tìm giá tr l n nh t c a danh sách L chuy n !i m t s t h m th p phân sang h m c s b Cho nh phân tìm ki m T; m i nút ch a m t s nguyên; khóa c a nút ó a Hãy ng (quadratic) • O(nk): a th c (polynomial) (k ≥ 1) • O(an): Hàm m& (exponential) (a > 1) nh ngh-a c u trúc d li u cho T b Vi t gi i thu t m xem T có nút ? c Vi t gi i thu t tính chi u cao c a d Vi t gi i thu t tìm m c c a nút có khóa k (gi s s k ã có cây) H t - Bài toán d gi i – khó gi i-không gi i • M t toán c c g i d) gi i n u nh có th gi i c b*i gi i thu t a th c (Bài toán tìm dãy liên ti p có t!ng l n nh t, s(p x p dãy n s ,…) • M t toán c g i khó gi i n u nh không th gi i c b*i gi i thu t a th c (bài toán li t kê hoán v c a n s , toán li t kê dãy nh phân chi u dài n, ) Nh ng toán cho (bài toán túi, toán ng • Bai toán không gi i n hi n t i v%n ch a tìm c gi i thu t a th c gi i i i du l ch,…) c n u nh không t n t i gi i thu t d ng, toán v nghi m nguyên c a a th c,…) gi i (bài toán v tính Bài gi ng c u trúc d li u gi i thu t Trang 67 Bài gi ng c u trúc d li u gi i thu t Trang Ví d 1.1 M t s gi i thu t s h c c b n H4C PH5N C U TRÚC D LI U VÀ GI I THU T ( S7 14) a Ki m tra xem s t nhiên n có ph i s nguyên t hay không ? (S ph hoàn ch nh, S Th"i gian làm bài: 90 phút b Tìm Câu (2 ): c s chung l n nh t c a hai s t nhiên a,b Tìm b i s chung nh" nh t c Tìm USCLN, BSCNN c a n s nguyên d Hãy vi t hàm quy( s d ng mã gi ) g n ý t *ng hi n th hoán v b n s 1,2,3,4 Hãy trình bày ng(n ph c t p gi i thu t ng, S i x ng, S Armstrong, S fibonacci) ng d Phân tích m t s t nhiên n thành tích th a s nguyên t e ms l ng c s tính t!ng c s c a m t s t nhiên n Câu (2.0 ): Cho procedure nh sau: Ví d 1.2 Procedure P(n,a,b,c,d) a Dãy có t!ng l n nh t Begin Cho dãy n s nguyên {a} Dãy liên ti p dãy mà thành ph n c a thành ph n if n=1 then liên ti p {a}, ta g i t!ng c a dãy t!ng t t c thành ph n c a Tìm else t!ng l n nh t t t c t!ng c a dãy c a {a} P(n-1,a,b,c,d); Ch+ng h n n = s sau: P(1,a,b,c,d); –5 b end Hãy vi t hàm s d ng C/C++ tr n hai danh sách (g m hai thành ph n: Int Inf ListNode* c cho b*i hai tr" head1, head2- s(p x p t ng d n theo tr t n m thành m t danh sách ng Inf, có c cho b*i head 3- s(p x p gi m d n theo tr dài n + m Hãy trình bày ng(n g n cách tính dài l n ph c t p gi i thu t o ng c ch s c a ta ng (left!=NULL && root->right!=NULL && nguyento(root->info) && nguyento(root->left->info) && nguyento(root->right->info)) return 1+demnut2connt(root->left)+demnut2connt(root->right); return demnut2connt(root->left)+demnut2connt(root->right); } } void danhsachchendau(List &l) { int x,n; coutn; for (int i=1;i>x; chennutvaodau(l,taonut(x)); } } Ví d 4.5: Chi u cao c a cây, m c c a nút // -Chi u cao c a int chieucao(tree root) { if (root==NULL) return 0; else { long hl=chieucao(root->left); long hr=chieucao(root->right); return 1+((hlinfo==x) return 0; if (root->info>x) return 1+muccuanut(root->left,x); if (root->inforight,x); } return 0; } // -In nút * m c k c a void duyetnutmuck(tree root, int k) { if (root!=NULL) { duyetnutmuck(root->left,k); if (muccuanut(root1,root->info)==k) Chèn new_elelment vào cu i danh sách • Gi i thu t : N u danh sách r ng l.head = new_elelment; l.tail = head; ng c l i l.tail ->next = new_elelment; l.tail = new_elelment ; Cài t void { Trang 22 chennutvaocuoi(List &l,Node *p) if (l.head==NULL) { l.head=p; l.tail=p; } else { l.tail->next=p; l.tail=p; } } Nh v y t o m t danh sách b'ng cách chèn cu i ta có th vi t hàm nh sau: Bài gi ng c u trúc d li u gi i thu t Trang 23 void danhsachchencuoi(List &l) { int x,n; coutn; for (int i=1;i>x; chennutvaocuoi(l,taonut(x)); } } Chèn vào danh sách sau m t ph n t q • Gi i thu t : N u ( q != NULL) new_ele -> next = q->next; q->next = new_ele ; void chensaunutq(List &l,Node *q,int x) { Node *p=taonut(x); if (p==NULL) exit(1); if (q!=NULL) { p->next=q->next; q->next=p; if (q==l.tail) l.tail=p; } else chennutvaodau(l,p); } 3.2.2.2 Tìm m t ph(n t danh sách n Gi i thu t : Xâu n òi h"i truy xu t tu n t , ó ch có th áp d ng gi i thu t tìm n tính xác nh ph n t xâu có khoá k S d ng m t tr" ph tr p l n l t tr" n ph n t xâu Gi i thu t c th hi n nh sau : • Bài gi ng c u trúc d li u gi i thu t Trang 48 // - m s nút có úng m t int demnut1caycon(tree root) { if (root==NULL) return 0; else { if ((root->left!=NULL && root->right==NULL) || (root->left==NULL && root->right!=NULL)) return 1+demnut1caycon(root->left)+demnut1caycon(root->right); return demnut1caycon(root->left)+demnut1caycon(root->right); } } // - m s nút có hai int demnut2caycon(tree root) { if (root==NULL) return 0; else { if (root->left!=NULL && root->right!=NULL) return 1+demnut2caycon(root->left)+demnut2caycon(root->right); return demnut2caycon(root->left)+demnut2caycon(root->right); } } int nguyento(int n) { if (nleft)+demnutnguyento(root->right); } // -Dem so nut co dung cay u s nguyên t - Bài gi ng c u trúc d li u gi i thu t Trang 47 L u ý: Hãy vi t l i hàm b'ng cách không s d ng ph ng pháp quy Ki m tra xem k có root hay không ? N u có tr v giá tr 1; n u tr v giá tr int timkiem01(tree root,int k) { if (root==NULL) return 0; else if (root->info==k) return 1; if (k>root->info) return timkiem01(root->right,k); else return timkiem01(root->left,k); } D) dàng th y r'ng s l n so sánh t i a ph i th c hi n tìm ph n t k h, v i h chi u cao c a Nh v y thao tác tìm ki m CNPTK có n nút t!ng chi phí trung bình kho ng O(log2n) Ví d 4.4: 2ng d ng phép t // Tính t!ng giá tr c a nút -int tong(tree root) { if (root==NULL) return 0; return root->info+tong(root->left)+tong(root->right); } // -Tìm giá tr l n nh t c a int giatrilonnhat(tree root) { while (root->right!=NULL) root=root->right; return root->info; } // m s nút c a -int demnut(tree root) { if (root==NULL) return 0; return demnut(root->left)+demnut(root->right)+1; } // - m s nút c a int demnutla(tree root) { if (root==NULL) return 0; if ((root->left==NULL) && (root->right==NULL)) return 1; else return demnutla(root->left)+demnutla(root->right); } Bài gi ng c u trúc d li u gi i thu t Trang 24 B c 1: p = Head; //Cho p tr" n ph n t u danh sách B c 2: Trong (p != NULL) (p->next != k ) th c hi n: p:=p->next;// Cho p tr" t i ph n t k c 3: N u p != NULL p tr" t i ph n t c n tìm Ng c l i: ph n t c n tìm Cài t: Node* Search(List l,int x) { p=l.pH; while ((p!=NULL)&&(p->Info!=x)) p=p->next; return p; } B 3.2.2.3 Duy t danh sách Duy t danh sách thao tác th ng c th c hi n có nhu c u x lý ph n t c a danh sách theo m t cách th c ho c c n l y thông tin t!ng h p t ph n t c a danh sách nh : Ð m ph n t c a danh sách, - Tìm t t c ph n t thoã i u ki n, Hu4 toàn b danh sách (và gi i phóng b nh ) Ð t danh sách (và x lý t ng ph n t ) ta th c hi n thao tác sau: • Gi i thu t : B B c 1: p = Head; //Cho p tr" n ph n t u danh sách c 2: Trong (Danh sách ch a h t) th c hi n B21 : X lý ph n t p; B22 : p:=p->pNext; // Cho p tr" t i ph n t k Cài t: void ProcessList(List &l) { p=l.pH; while (p!=NULL) { coutpNext) { Node *min=p; for (Node *q=p->pNext;q!=NULL;q=q->pNext) if (q->InfoInfo) min=q; int temp=min->Info; min->Info=p->Info; p->Info=temp; } } Cài t gi i thu t s(p x p !i ch tr c ti p xâu : void ListInterchengeSort(List &l) { for (Node *p=l.head;p!=NULL;p=p->pNext) for (Node *q=p->pNext;q!=NULL;q=q->pNext) if (p->Info>q->Info) { int temp=p->Info; p->Info=q->Info; q->Info=temp; } } Trang 44 Duy t Thao tác t nh phân tìm ki m hoàn toàn gi ng nh nh phân Ch có m t l u ý nh" t theo th t gi a, trình t nút t qua s# cho ta m t dãy nút theo th t t ng d n c a khóa ch+ng h Theo th Theo th Theo th Ví d 4.1 n v i hình 4.4 k t tr c: t gi a: t sau: t qu c a phép t nh sau: 4,2,1,3,6,5,7 1,2,3,4,5,6,7 1,3,2,5,7,6,4 Hãy v# nh phân tìm ki m T bi t r'ng th t s nh p vào là: 8, 3, 5, 2, 20, 11, 30, 9, 18, a.Hãy t T theo th t b.N u h y l n l b NLR, LNR, LRN, NRL, RNL, RLN t nút 5, 20 (theo th t c h y (v# l i cho m i b ó) s# thay !i nh th t ng c) cho v%n nh phân tìm ki m Ví d 4.2 T o nh" phân tìm ki!m, t #include #include #include struct node { int info; struct node *left,*right; }; typedef node *tree; int chennutvaoBST(tree &root,int k); void taoBST(tree &root); void LNR(tree root); void NLR(tree root); void LRN(tree root); void main() { clrscr(); tree root; taoBST(root); LNR(root); getch(); } Bài gi ng c u trúc d li u gi i thu t Trang 43 Duy t theo th t sau (left-right-node) Ki u t tr c tiên th m nút c a trái sau ó th m n ph i r i cu i m i th m nút g c rooth t c t có th trình bày n gi n nh sau: Ch+ng h n v i hình 4.3.sau ây A B C D E dãy tên ng v i nút Theo th t tr c: Theo th t gi a: Theo th t sau: B n c li t kê nút F G Hình 4.3 c th m phép t là: A,B,D,E,C,F,G D,B,E,A,F,C,G D,E,B,F,G,C,A c th m ng v i cách t: NRL, RNL, RLN 4.3.CÂY NH1 PHÂN TÌM KI M 4.3.1 Cây nh" phân tìm ki!m "nh ngh'a: Cây nh phân tìm ki m (CNPTK) nh phân ó t i m i nút, khóa c a nút ang xét l n h n khóa c a t t c nút thu c trái nh" h n khóa c a t t c nút thu c ph i Nh ràng bu c v khóa CNPTK, vi c tìm ki m tr* nên có nh h ng H n n a, c u trúc vi c tìm ki m tr* nên nhanh k N u s nút N chi phí tìm ki m trung bình ch kho ng log2N Trong th c t , xét n nh phân ch y u ng i ta xét CNPTK Sau ây m t ví d v nh phân tìm ki m: Trang 28 Ph ng án 2: Thay !i m i liên k t (thao tác vùng Next) Do nh c i m c a ph ng pháp s(p x p theo ph ng án 1, li u l u t i m i ph n t xâu có kích th c l n ng i ta th ng dùng m t cách ti p c n khác Thay hoán !i giá tr , ta s# tìm cách thay !i trình t móc n i c a • ph n t cho t o l p nên c th t mong mu n Cách ti p c n s# cho phép ta ch thao tác móc n i (tr ng pNext) Nh ta ã bi t, kích th c c a tr ng không ph thu c vào b n ch t d li u l u xâu có b'ng úng m t tr" (2 byte ho c byte môi tr ng 16 bit byte ho c byte môi tr ng 32 bit, ) Tuy nhiên thao tác m c n i th ng s# ph c t p h n thao tác tr c ti p d li u Vì v y, ta c n cân nh(c k5 l 6ng tr c ch n cách ti p c n N u d& li u không l n ta nên ch n ph ng án ho c m t gi i thu t hi u qu ó M t nh ng cách thay !i móc n i n gi n nh t t o m t danh sách m i danh sách có th t t danh sách c& ( ng th i h y danh sách c&) Gi s danh sách m i s# c qu n lý b'ng tr" u xâu Result, ta có ph ng án c a gi i thu t ch n tr c ti p nh sau : B c1: Kh*i t o danh sách m i Result r ng; B c2: Tìm danh sách c& l ph n t nh" nh t; B c3: Tách kh"i danh sách l; B c4: Chèn vào cu i danh sách Result; B c5: L p l i b c ch a h t danh sách Head; 3.3.DANH SÁCH H+N CH 3.3.1.Stack Khái ni m Ng n x p d ng c bi t c a danh sách n tính ó i t ng vào l y (pop) ch t m t u c g i nh (top) c a danh sách Nguyên t$c: Vào tr c - tr c (last in- first out- LIFO) Phép toán c n p (push) Các phép toán c b n: • Push: B! sung vào m t ph n t , g i t(t n p vào • Pop:Lo i b" tr l i ph n t c n p sau cùng, g i t(t l y Hình 4.4 Bài gi ng c u trúc d li u gi i thu t Các phép toán h, tr : • Top():Tr l i ph n t n p vào sau mà không lo i kh"i ng n x p • Size():Tr l i s l ng ph n t c l u • Isempty():Nh n bi t ng n x p r ng T! ch c ng n x p • S d ng m ng chi u Bài gi ng c u trúc d li u gi i thu t • Trang 29 Trang 42 S d ng danh sách liên k t 4.2.3 Bi u di n nh" phân T Cây nh phân m t c u trúc bao g m ph n t (nút) c k t n i v i theo quan h “cha-con” v i m i cha có t i a bi u di)n nh phân ta ch n ph ng pháp c p Ví d 3.1: Parentheses Matching M i ‘(‘, ‘{‘, ‘[‘ ph i i ôi v i ‘)’, ‘}’, ‘]’ Input: Cho m ng X g m n ký hi u, m i ký hi u d u ngo c ho c bi n ho c phép toán s h c ho c s Ouput:True ho c False Ví d 3.2: Bài toán %i c s Vi t m t s n h m th p phân thành s h Ví d :5310=1101012 Ví d 3.3: Bài toán tính giá tr bi u th c s h c Ký hi u trung t (infix Notation) M i phép toán hai c t gi a toán h ng M i phép toán m t i tr c toán h ng Ví d : -2 + 3*5 ⇔ (-2) + (3*5) Vi c tính giá tr c a bi u th c trung t s# li u khác nhau: • M t ng n x p c th c hi n nh s d ng hai ng n x p có ki u d gi toán h ng • Ng n x p gi phép toán Vi c tính giá tr c a bi u th c trung t s# li u khác nhau: • M t ng n x p gi toán h ng • Ng n x p gi phép toán c th c hi n nh s d ng hai ng n x p có ki u d Ký hi u h u t (Postfix Notation) • Còn c g i ký pháp o Ba Lan ó toán h ng c t tr c phép toán • Ví d : ký pháp h u t ab*c+ t ng ng v i ký pháp trung t a*b+c • Không c n s d ng d u ngo c v%n xác nh c trình t th c hi n phép toán bi u th c s h c Tính giá tr bi u th c d ng h u t (s d ng ng n x p toán hang): Duy t bi u th c t trái qua ph i phát liên k t 9ng v i m t nút, ta dùng m t bi n ng l u tr thông tin: -Thông tin l u tr t i nút - a ch nút g c c a trái b nh - a ch nút g c c a ph i b nh Khai báo t ng ng ngôn ng C/C++ có th nh sau: m c s b Gi i thu t dùng ng-n x!p gi i Ch s hàng n v c a n n% b, push vào stack Thay n b'ng n/b L p l i b c 1,2 cho n n/b=0 ,y s kh"i ng n x p in chúng • Bài gi ng c u trúc d li u gi i thu t struct node { Data info; struct node *left,*right; }; typedef node *tree; tree root; Do tính ch t m m d8o c a cách bi u di)n b'ng c p phát liên k t, ph ng pháp c dùng ch y u bi u di)n nh phân T ây tr* i, nói v nh phân, s# dùng ph ng pháp bi u di)n 4.2.4 Duy t nh" phân N u nh kh o sát c u trúc d li u d ng danh sách liên k t ta không quan tâm nhi u n toán t qua t t c ph n t c a chúng toán t h t s c quan tr ng Nó c t lõi c a nhi u thao tác quan khác Do nh phân m t c u trúc d li u phi n nên toán t toán không t m th ng Có nhi u ki u t khác nhau, chúng c&ng có nh ng ng d ng khác i v i nh phân, c u trúc qui c a nó, vi c t ti p c n theo ki u qui h p lý n gi n nh t Sau ây s# xem xét m t s ki u t thông d ng Có ki u t có th áp d ng nh phân: t theo th t tr c (NLR), th t gi a (LNR) th t sau (LRN) Tên c a ki u t c t d a trình t c a vi c th m nút g c so v i vi c th m T ng t nh v y ta có cách t khác là: NRL, RNL, RLN Duy t theo th t tr c (node-left-right) Ki u t tr c tiên th m nút g c sau ó th m nút c a trái r i n ph i Th t c t có th trình bày n gi n nh sau: (trong m c vi c x lý nút ch in giá tr c a ph n t ó) Duy t theo th t gi a (Left- Node-Right) Ki u t tr c tiên th m nút c a trái sau ó th m nút g c r i n ph i Th t c t có th trình bày n gi n nh sau: Bài gi ng c u trúc d li u gi i thu t Trang 41 Nút nhánh: Là nút có b c khác không ph i g c Ví d B,D,H…là nút nhánh M c c a m t nút: m c (g c (T) ) = g i T1, T2, T3, , Tn c a T0 m c (T1) = m c (T2) = = m c (Tn) = m c (T0) + ch+ng h n nút A có m c 0, D có m c 1, G có m c 2, J có m c dài ng i t g c n nút x: B'ng s nút ng i ó tr i ch+ng h n ng i t A n G 2, ng i t A n K Chi u cao c a m t Là s m c l n nh t c a nút có ó c ng thêm ch+ng h n có chi u cao Bài gi ng c u trúc d li u gi i thu t Trang 30 • G p toán h ng n p vào (push) giá tr c a vào ng n x p • G p phép toán th c hi n phép toán v i toán h ng c l y (pop) t ng n x p • C(t gi giá tr (push) tính toán h ng) c vào ng n x p (ngh-a ký hi u c thay b'ng m t Ti p t c t cho n ng n x p ch m t giá tr nh t- k t qu c a bi u th c Th i gian tính c a bi u th c ? Gi i thu t chuy n bi u di)n t d ng trung t sang d ng h u t : Duy t bi u th c t trái sang ph i N u g p toán h ng: a t c N u g p d u m* ngo c: n p vào ng n x p N u g p d u óng ngo c: ,y ký hi u kh"i ng n x p cho n g p d u m* ngo c u tiên c ,y N u g p phép toán: a kh"i ng n x p t t c phép toán cho n g p phép • 4.2.CÂY NH1 PHÂN 4.2.1 "nh ngh'a Cây nh& phân mà m i nút có t i a Trong th c t th ng g p c u trúc có d ng nh phân M t t!ng quát có th toán có t t u tiên th p h n ho c g p phép toán có tính k t h p ph i có th t u tiên Sau ó n p phép toán ang xét vào ng n x p Khi t h t bi u th c a t t c phép toán l i kh"i ng n x p bi u di)n thông qua nh phân 4.2.2 M t s tính ch t c a nh" phân: Ví d 3.4: S nút n'm * m c i ≤ 2i Ng-n x!p qui M t nh ng ng d ng quan tr ng c a ng n x p hi n gi i thu t qui V i h chi u cao c a S nút ≤ 2h-1 t! ch c th c Có th nói: log2(s nút cây) ≤ h M i hàm S nút ≤ 2h –1 qui u có th cài t s d ng ng n x p l p M i hàm l p có s d ng ng n x p ch+ng h n cho m t nh phân có chi u cao nh sau: Ví d (ng-n x!p Hình 4.2 c s d ng A u có th cài t s d ng qui qui) Cho x s nguyên n s nguyên d ng, c n tính xn HD: N u tính tr c ti p c n n phép nhân B D E Sau ây m t gi i thu t H G qui gi i: Phân tích: I -N u n s ch7n thì: J K L M N O P Q Thì s nút n'm * m c 1, s nút n'm * m c 2, s nút n'm * m c 4, s nút n'm * m c s nút c a xn=x(n/2) x x(n/2) Công th c giúp ta chuy n vi c tính xn v vi c tính l&y th a gi m i m t n a c a x sau ó th c hi n phép nhân -N u n s l8 thì: xn=x(n-1)/2 x x(n-1)/2 x x Bài gi ng c u trúc d li u gi i thu t Trang 31 Ch Và chuy n v tính l&y th a ch7n c a x Nh v y n u n ch7n ta chuy n n l&y th a n/2 n u n l8 ta chuy n Nh v y sau không x logn l n chuy n, ta i có ph c t p O(log n) ch không ph i O(n) Hãy cài t gi i thu t 3.3.2 Hàng i (Queue) Bài gi ng c u trúc d li u gi i thu t n l&y th a n=0 T n l&y th a (n-1)/2 Trang 40 ng C U TRÚC CÂY ó gi i thu t qui Hàng i m t v t ch a (container) i t ng làm vi c theo c ch FIFO (First In First Out) ngh-a vi c thêm m t i t ng vào hàng i ho c l y m t i t ng kh"i hàng i c th c hi n theo c ch "Vào tr c tr c" Các i t ng có th c thêm vào hàng i b t k$ lúc nh ng ch có i t ng thêm vào u tiên m i c phép l y kh"i hàng i Thao tác thêm m t i t ng vào hàng i l y m t i t ng kh"i hàng i l n l t c g i "enqueue" "dequeue" Vi c thêm m t i t ng vào hàng i di)n * cu i hàng i m t ph n t c l y t u hàng i Trong tin h c, CTDL hàng i có nhi u ng d ng: kh qui, t! ch c l u v t trình tìm ki m theo chi u r ng quay lui, vét c n, t! ch c qu n lý phân ph i ti n trình h i u hành, t! ch c b m bàn phím, Ta có th nh ngh-a CTDL hàng i nh sau: hàng i m t CTDL tr u t ng (ADT) n tính T ng t nh stack, hàng i h tr thao tác: EnQueue(o): Thêm i t ng o vào cu i hàng i DeQueue(): L y i t ng * u queue kh"i hàng i tr v giá tr c a N u hàng i r ng l i s# x y IsEmpty(): Ki m tra xem hàng i có r ng không Front(): Tr v giá tr c a ph n t n'm * u hàng i mà không h y N u hàng i r ng l i s# x y Các thao tác thêm, trích hu4 m t ph n t ph i c th c hi n * phía khác c a hàng i ó ho t ng c a hàng i c th c hi n theo nguyên t(c FIFO (First In First Out vào tr c tr c) C&ng nh stack, ta có th dùng c u trúc m ng chi u ho c c u trúc danh sách liên k t bi u di)n c u trúc hàng i Ví d 3.5: a.Tính giá tr c a bi u th c h u t sau: 34+35+*7+8* 35+24+*22+6*/ b.Hãy trình di)n cách tính giá tr c a bi u th c h u t sau ây nh s d ng ng n x p 34+35+*7+8* 4.1.C U TRÚC CÂY 4.1.1 "nh ngh'a Cây m t t p h p T ph n t (g i nút c a cây) ó có m t nút c bi t c g i g c, nút l i c chia thành nh ng t p r i T1, T2 , , Tn theo quan h phân c p ó Ti c&ng m t M i nút * c p i s# qu n lý m t s nút * c p i+1, ây g i quan h cha-con Ch+ng h n sau ây hình nh c a m t A B Hình 4.1 E C F D G H J I K Nút A g i nút g c c a Các nút B,C,D g c c a c a A Nút A cha c a nút B,C,D B,C,D nút c a A 4.1.2.M t s khái ni m c b n B c c a m t nút: Là s c a nút ó Ví d b c c a A 3, b c c a H 2, b c c a D B c c a m t cây: Là b c l n nh t c a nút (s t i a c a m t nút thu c cây) Cây có b c n g i n-phân Ví d có b c Nút g c: Là nút nút cha Ví d A nút g c c a Nút lá: Là nút có b c b'ng Ví d E,C,K,I,… nút Bài gi ng c u trúc d li u gi i thu t Trang 39 BÀI T P BT3-1 a Cho danh sách liên k t n l, m i nút ch a m t s nguyên Hãy vi t hàm tìm ki m m t ph n t x danh sách (tr v 0/1), s(p x p danh sách theo th t t ng, xóa nút có giá tr x, chèn m t nút có giá tr x vào sau s nút có giá tr l n nh t danh sách b Hãy t o danh sách l1 ch a s nguyên t t danh sách l c Cho m t danh sách liên k t n l ch a s nguyên Hãy xóa m t s ph n t danh sách l ch ch a ph n t riêng bi t s l ng ph n t c a l nhi u nh t d Trình bày gi i thu t o ng c m t danh sách b'ng hai cách: !i giá tr c a ph n t !i liên k t c a ph n t BT3-2 Cho hai danh sách liên k t n l1,l2 ch a s nguyên ã c s(p t ng Hãy tr n ph n t c a l1 l2 thành danh sách l3 cho l3 c&ng c s(p x p t ng BT3-3.Dùng danh sách liên k t n bi u di)n m t a th c Nêu gi i thu t cài t hàm sau: a Nh p a th c, b Xu t m t a th c, c Tính giá tr c a a th c t i i m xo, d C ng a th c, e Nhân a th c BT3-4.Dùng danh sách liên k t n ó ph n t s nguyên Hãy cài t hàm sau: a Thêm m t ph n t vào t p h p, b Lo i m t ph n t kh"i t p h p, c Ki m tra m t ph n t có t p h p hay không ? d Giao hai t p h p, e H p hai t p h p, f Hi u hai t p h p BT3-5 a S d ng Stack, vi t ch ng trình chuy n !i m t s nguyên n h th p phân (h 10) sang bi u di)n h nh phân (h 2) b S d ng Stack, vi t ch ng trình nh p vào m t s nguyên, không âm b t k$, sau ó xu t hình s o ng c th t ch s c a s nh p vào c L y ph n t (s nguyên) cu i c a ng n x p l y ph n t th n c a ng n x p, v i n s nguyên d ng BT3-6 a o ng c th t m t hàng i b Tìm m t ph n t có khóa x hàng i BT3-7 Tính bi u th c s h c b'ng cách chuy n bi u th c trung t thành bi u th c h u t dùng ký pháp Ba Lan Gi i h n ch xét bi u th c s h c g m phép toán hai ngôi: +- */ s có m t ch s Bài gi ng c u trúc d li u gi i thu t Trang 32 c.Hãy áp d ng gi i thu t o Balan bi n !i bi u th c sau thành d ng postfit: (a+b/(c-d))*e Hãy trình di)n stack sau m i l n có s thay !i d.Hãy trình di)n cách tính giá tr c a bi u th c h u t sau ây nh s d ng ng n x p: 12+31+*11+1+/ e.Hãy trình di)n cách s d ng ng n x p h ut : a*b*c*d*e*f 1+(-5)/(6*(7+8)) 3.4 chuy n bi u th c d ng trung t sau ây thành d ng U NH C I/M C0A DANH SÁCH LIÊN K T Do ph n t (nút) c l u tr không liên ti p b nh , v y danh sách liên k t có u nh c i m sau ây: -M t s d ng b nh c a danh sách liên k t không t i u t i ([...]... bên trái c a x s# nh" h n x và các ph n t bên ph i c a x s# l n h n x Sau b c này ta ã chia dãy thành hai dãy con; ta l i ti p t c phân ho ch theo ki u qui cho m i dãy con này H t - Bài gi ng c u trúc d li u và gi i thu t H4C PH5N C U TRÚC D Trang 57 LI U VÀ GI I THU T ( 6 S7 4) Th"i gian làm bài: 90 phút Bài gi ng c u trúc d li u và gi i thu t Trang 14 Ví... - Bài gi ng c u trúc d li u và gi i thu t H4C PH5N C U TRÚC D Trang 59 Bài gi ng c u trúc d li u và gi i thu t void selectionsort(int a[],int n) { for(int i = 0;i < n -1; i++) { int min = i; for ( int j = i+1; j < n; j++) if (a[j] < a[min]) min = j; swap( a[min], a[i] ); } } ph c t p tính toán c a gi i thu t là: O(n2) LI U VÀ GI I THU T ( 6 S7 6) Th"i gian làm bài: 90 phút Câu 1 (2... t t ng ng trong c p ngh ch th L p l i quá trình trên v i các ph n t ti p theo trong dãy Bài gi ng c u trúc d li u và gi i thu t Trang 11 Bài gi ng c u trúc d li u và gi i thu t Ví d 2.2: Cho dãy s 5 6 1 9 8 6 Thì k t qu t ng b c nh sau: H4C PH5N C U TRÚC D Trang 60 LI U VÀ GI I THU T ( 6 S7 7) Th"i gian làm bài: 90 phút dòng i j a[0] a[1] a[2] a[3] a[4] a[5] 0 0 2 5 6 1 9 8 6 Cho cây nh phân tìm... a thành b,c Dãy b: 8 Dãy c: 5 1 3 6 9 12 4 7 10 Tr n : 5 8 1 3 6 10 Bài gi ng c u trúc d li u và gi i thu t Trang 17 Bài gi ng c u trúc d li u và gi i thu t Trang 54 k=2; B c tách a thành b,c Dãy b: 5 8 6 Dãy c: 1 3 4 9 12 7 10 Tr n : 1 8 4 6 3 5 M TS 9 12 7 10 H4C PH5N C U TRÚC D THI M U LI U VÀ GI I THU T ( 6 S7 1) Th"i gian làm bài: 90 phút k=4; B c tách a thành b,c Dãy b: 1 3 5 8 7 10 Dãy c: 4... toàn là s nguyên t H t - Bài gi ng c u trúc d li u và gi i thu t Trang 53 BÀI T P Bài gi ng c u trúc d li u và gi i thu t Trang 18 BÀI T P BT4-1.Cho cây nh phân tìm ki m T, m i nút ch a m t s nguyên Hãy vi t các hàm th c BT2-1 Cho dãy n s nguyên a0,a1,…,an-1 hi n các yêu c u sau: a Chèn nút vào cây, duy t cây theo các th t L p trình hoàn ch nh các gi i thu... i t(t là n p vào • Pop:Lo i b" và tr l i ph n t c n p sau cùng, g i t(t là l y ra 4 Hình 4.4 Bài gi ng c u trúc d li u và gi i thu t 5 7 Các phép toán h, tr : • Top():Tr l i ph n t n p vào sau cùng mà không lo i nó ra kh"i ng n x p • Size():Tr l i s l ng ph n t c l u • Isempty():Nh n bi t ng n x p r ng T! ch c ng n x p • S d ng m ng 1 chi u Bài gi ng c u trúc d li u và gi i thu t • Trang 29 Trang 42... thêm vào u tiên m i c phép l y ra kh"i hàng i Thao tác thêm m t i t ng vào hàng i và l y m t i t ng ra kh"i hàng i l n l t c g i là "enqueue" và "dequeue" Vi c thêm m t i t ng vào hàng i luôn di)n ra * cu i hàng i và m t ph n t luôn c l y ra t u hàng i Trong tin h c, CTDL hàng i có nhi u ng d ng: kh qui, t! ch c l u v t các quá trình tìm ki m theo chi u r ng và quay lui, vét c n, t! ch c qu n lý và phân... Ph n t l n nh t (ph i nh t) trên cây con trái Vi c ch n l a ph n t nào là ph n t th m ng hoàn toàn ph thu c vào ý thích c a ng i l p trình : ây, chúng tôi s# ch n ph n t (ph i nh t trên cây con trái làm phân t th m ng Bài gi ng c u trúc d li u và gi i thu t Trang 49 Bài gi ng c u trúc d li u và gi i thu t int demnut2connt(tree root) { if (root==NULL) return 0; else { if (root->left!=NULL && root->right!=NULL... return timkiem(root->right,k); else return timkiem(root->left,k); } n nút tìm c; Bài gi ng c u trúc d li u và gi i thu t Trang 45 // -Chèn nút có giá tr k vào cây có g c là root -Vi c thêm m t ph n t X vào cây ph i b o m i u ki n ràng bu c c a CNPTK Ta có th thêm vào nhi u ch khác nhau trên cây, nh ng n u thêm vào m t nút lá s# là ti n l i nh t do ta có th th c hi n quá trình t ng t thao... u T và xây d ng các hàm sau: for (int j=n-1;j>=i;j ) if (a[j] ... chennutvaoBST tr v giá tr –1, 0, không b nh , g p nút c& hay thành công: int chennutvaoBST(tree &root,int k) { if (root!=NULL) { if (root->info==k) return 0; if (root->info>k) return chennutvaoBST(root->left,k);... demnut2connt(root->left)+demnut2connt(root->right); } } void danhsachchendau(List &l) { int x,n; coutn; for (int i=1;i>x; chennutvaodau(l,taonut(x)); } } Ví d 4.5: Chi u cao c a cây, m c c a nút... heap) ph n t l n nh t Heap Tính ch t 3: M i dãy al,al+1,…,ar v i 2l > r m t Heap •Gi i thu t Giai o n 1: Giai o n 2: B c 1: LI U VÀ GI I THU T ( S7 3) H4C PH5N C U TRÚC D Th"i gian làm bài: 90 phút

Ngày đăng: 07/03/2016, 14:18

TỪ KHÓA LIÊN QUAN

w