Chương 5 cấu trúc cây (tree)

59 123 0
Chương 5   cấu trúc cây (tree)

Đ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

209 Chương Cấu trúc Cây (TREE) Trong chương trước đây, nghiên cứu loại cấu trúc liệu tuyến tính Trong chương nghiên cứu loại cấu trúc liệu phi tuyến đồ thị Đây loại cấu trúc liệu có nhiều ứng dụng thiết kế giải thuật 5.1 Một số khái niệm Trước hết , xem xét khái niệm cây, khái niệm nhị phân, phương pháp “quét” nhị phân Chúng ta nghiên cứu giải thuật bổ sung ,loại bỏ cấu trúc liệu ứng dụng loại cáu trúc liệu toán thực tế Định nghĩa Cây tập hợp hữu hạn nút có mối quan hệ phân cấp xuất phát từ nút gọi gốc ( Root) 209 210  Root A B E C F D G H Hình 5.1 - Cấu trúc Ta thấy thực tiễn có nhiều ví dụ cho loại cấu trúc liệu Sau ví dụ minh hoạ Tổng cơng ty Điện lực Việt nam có phận Tổn ba vùng lãnh thổ khác : khu vực 1( Phía g Bắc), khu vực 3( Miền trung), khu vực 2( Phía Nam) Mỗi ty khu vực quản lý Sỏ điện lực tỉnh,vùn thànhgvùn phố khu vực Mỗi Sở điện lựcg tỉnh, g vùn thành phố lại có Sở điện lực huyện, Quận Như g cấu trúc máy tổ chức Tổng công ty điện lực hình ảnh cấu trúc liệu loại tổng quát Một đặc điểm quan trọng cấuTỉntrúcTỉn Tỉn h1 h2 h3 tính chất phân cấp theo thứ bậc nút Các nút phân cấp theo mức chúng Chúng ta 210 H H H ện ện ện 211 qui ước nút gốc ln ln có mức 1, nút nút gốc có mức tăng dần Giả sử ,nút thứ i có mức k nút nút i có mức k+1 Bây ta xét vấn đề “quét” cấu trúc hình Chúng ta gọi phép “quét” q trình thâm nhập vào nút cách có hệ thống cho nút thâm nhập lần nhị phân (Binary tree) Cây nhị phân trường hợp riêng tổng quát có nhiều ứng dụng thiết kế giải thuật Trong trường hợp này, nút có nút gọi nút trái ( LChild ) nút phải (RChild) Hình ảnh nhị phân biểu diễn hình vẽ sau Trong hình vẽ , A nút gốc( Root) LChild A B RChild A C Đến lượt mình, nút B lại có hai nút : LChild B D RChild B E vv 211 212 Root A B C D H E I K G L R M Q X N Hình 5.2 Cây nhị phân Đối với nhị phân ta có kết sau [2]: - Số lượng tối đa nút mức I là: I+1 (I>= 1) 212 213 - Số lượng tối đa nút nhị phân có chiều cao h (h số mức lớn nút có cây) xác định công thức: h - (h>=1) phương pháp Lưu trữ nhị phân Đối với nhị phân người ta thường dùng phương pháp lưu trữ: Phương pháp lưu trữ mảng Phương pháp lưu trữ danh sách liên kết Phương pháp lưu trữ mảng Xét nhị phân mà giá trị nút chữ số 213 214 Root A B H D I E G 10 K C 11 12 L R M 13 Q 14 15 X N Hình 5.3 Ta đánh số cho nút từ mức trở đi, hết mức sang mức khác từ trái sang phải từ đến 15 Như nút nút thứ I nút thứ 2i 2i +1 Ta lưu trữ nhị phân mảng gồm 15 thành phần theo qui tắc: Nút thứ i lưu trữ thành phần  i-1 mảng Đây phương pháp lưu trữ Hình ảnh lưu trữ nhị phân mảng sau ( Hỡnh 5.4 ) : 214 215 Đ ịa Vù ng nhớ Phần tử mảng Base (B)+0 Base (B)+1 Base (B)+2 Base (B)+3 Base (B)+4 Base (B)+5 Base(B)+8 Base (B)+9 Base (B)+14 11001010111001  15 Hình 5.4 Khi biết địa nút, tính địa nút Ví dụ: Nút C chứa nút E  3 có địa Hai nút có địa là:3 x = x +1 = Dễ dàng thấy trường hợp lưu trữ nhị phân khơng đầy đủ, có nhiều rỗng ta phải lưu trữ nhiều phần tử rỗng ( mà ta qui ước ký hiệu phần tử  ) Phương pháp lưu trữ kế tiếp, trường hợp 215 216 nhị phân lớn, không đầy đủ dẫn đến tốn nhiều nhớ ( Vì phải chứa tất thành phần rỗng) Chẳng hạn xét nhị phân không đầy đủ sau đây: 12 20 60 10 11 11 65 Hình 5.5 Rõ ràng trường hợp phải lưu trữ thêm nút trống Đó RChild nút , RChild nút 5, RChild nút RChild nút Nếu nhị phân có kích thước lớn 216 217 việc phải lưu trữ nhiều phần tử rỗng cách vơ ích tốn nhớ không hiệu giải thuật xử lý Phương pháp Lưu trữ danh sách liên kết Trong trường hợp nút lưu trữ theo cấu trúc sau đây: LChi Data RChild ld Trường Data chứa liệu nút Trường LChild trỏ, trỏ tới trái nút Trường RChild trỏ, trỏ tới phải nút Ví dụ : Cho nhị phân hình vẽ 217 218 12 20 60 21 10 11 11 65 Hình 5.6 Cây lưu trữ theo qui tắc sau đây: Nếu nút P tận khơng có nút thì: P^ Child = NIL P ^ Child = NIL Ta dùng trỏ T ,trỏ tới gốc nhị phân để truy nhập từ gốc,nếu rỗng T = nil 218 253 k2 k3 k3 k4 Hình 17 Với ba nút ứng với ba khoá k 1, k2, k3 đáng nhẽ ta phải xét tới năm trường hợp hình 5.13, theo nguyên tắc ta cần ý đến có (ứng với nút đó) nhị phân tìm kiếm tối ưu (cây tối ưu nút hai nút, nêu) Do phải xét ba sau : k3 k2 k1 k1 k2 k2 k3 k1 k3 Hình 5.18 253 254 Ta có: P(a) = 1.1 + 2.6 + 3.4 + 2.3 + 3.8 + 4.4 + 4.2 = 79 P(c) = 1.6 + 2.1 + 2.4 + 3.3 + 3.8 + 3.4 + 3.2 = 67 P(e) = 1.4 + 2.6 + 3.1 + 4.3 + 4.8 + 3.4 + 2.2 = 79 Vậy nhị phân tìm kiếm tối ưu c) Tương tự, ứng với khoá k 2, k3, k4 ta có tối ưu : k2 k3 k4 Hình 5.19 Cuối khoá k1, k2, k3, k4 đáng nhẽ ta phải xét 8! C84  14 n1 5! trường hợp, ta xét bốn trường hợp sau : 254 255 a) b) k2 k1 k1 k2 k3 k3 k4 k4 k2 k1 c) d) k3 k4 k4 k2 k1 k3 Hình 5.20 Và từ ta xác định tối ưu : 255 256 k2 k1 k3 k4 Hình 21 Người ta chứng minh với phương pháp dựng nhị phân tìm kiếm tối ưu chi phí khơng gian nhớ tỉ lệ với n : 0(n2) thời gian 0(n3) D Knut chứng minh : gọi Tị nhị phân tìm kiếm ứng với khố ki< ki+1 < nil ) Begin Parent : = LocPtr; If Item.Id < LocPtr ^ Data.Id then LocPtr : = LocPtr ^ LChild Else If Item.Id > LocPtr ^ Data.Id then LocPtr : = LocPtr ^ Rchild Else Found : = true End (* While *); If Found then writeln Else Begin new ( LocPtr ); With LocPtr ^ Begin Data : = Item; Lchild : = NIL; 260 261 Rchild : = NIL End ( * With* ); If Parent = NIL then Root: = LocPtr Else With Parent ^ If Item.Id < Data.Id then Lchild : = LocPtr Else Rchild : = LocPtr End (* Else* ) End( *BSTInsert * ); Procedure BSTSearch ( Root : TreePointer; Item : ElementType; Var Found: boolean; Var LocPtr : TreePointer ); (* thủ tục tìm ghi người dùng BST *) Begin (* BSTSearch * ) LocPtr : = Root; Found : = false; While Not Found And ( LocPtr < > NIL ) With LocPtr ^ If Item.Id < Data.Id then LocPtr: = LChild Else If Item.Id > Data.Id then LocPtr : = RChild 261 262 Else Found : = true End (* BSTSearch * ); Procedure ReadString(Var TextFile: text;Var Str : String; MaxString : integer); (* Thủ tục đọc ký tự vào biến Str từ TextFile kho kết thúc hàng đạt đến giới hạn trên*) Var I : integer; Begin (* ReadString * ) For I:= to MaxString If Not eoln ( TextFile ) then read ( TextFile , Str[i] ) Else Str[i] : = ‘ ‘; readln ( TextFile ) End ( * ReadString * ); Procedure Login ( Var UserRec : UserRecord ; StringLength : integer; Var Done : boolean ); (* Thủ tục đọc định danh người dùng mật khẩu*) 262 263 Const QuitSignal = ‘ Quit ‘; Begin ( * Login * ) write ReadString ( input, UserRec.Id , StringLength ); If UserRec.Id = QuitSignal then Done : = true Else Begin Done : = false; write ReadString ( input, UserRec.Password, StringLength ) End (* Else * ) End (*Login* ); Begin (* Chương trình chính*) assign ( usersFile , ‘usersFile’); reset ( UsersFile ); UserTree : = NIL; While Not eof ( UsersFile ) Begin ReadString ( UsersFile , UserRec.Id , StringLength ); ReadString ( UsersFile , UserRec.Password , StringLength ); BSTInsert ( UserTree , UserRec ) 263 264 End (* While* ); Login ( UserRec , StringLength , Done ); While Not done Begin BSTSearch ( UserTree ,UserRec , Found, LocPtr ); If Found then If LocPtr ^ Data.Password = UserRec.Password then writeln (‘Người dùng hợp lệ’) Else writeln (‘ Mậtkhẩu không hợp lệ’) Else writeln (‘ Định danh không hợp lệ’) writeln; Login ( UserRec , StringLength , Done ) End (* While* ) End - 264 265 Câu hỏi ơn tập chương - Trình bày khái niệm Cho ví dụ - Khái niệm nhị phân? Cho ví dụ minh hoạ - Phương pháp lưu trữ nhị phân? - Phương pháp lưu trữ liên kết nhị phân? Lợi phương pháp so với phưong pháp lưu trữ kế tiếp? - Trình bày phương pháp duyệt nhị phân Cho ví dụ - Trình bày giải thuật duyệt nhị phân theo thứ tự sau - Trình bày giải thuật duyệt nhị phân theo thứ tự trước - Các giải thuật đệ qui duyệt nhị phân? - Khái niệm nhị phân tìm kiếm , nguyên tắc lưu trữ nó? 10 - Giải thuật tạo lập nhị phân tìm kiếm? 11 - Giải thuật tìm nút nhị phân tìm kiếm.? 265 266 12 - Giải thuật loại bỏ nút nhị phân tìm kiếm.? Bài Biểu diễn phương pháp lưu trữ nhị phân sau sau phương pháp lưu trữ liên kết 12 23 21 31 10 34 56 11 90 Bài Cho dãy số 25,15,26,1, 13, 40, 78, 9, 12,21 Biểu diễn nhị phân tìm kiếm mà nút số dãy số Hãy dựng nhị tìm kiếm ứng với với dẫy khố cho sau ( áp dụng giải thuật BST) HAIPHOG, CANTHO, NHATRANG, DALAT , THAINGUYEN, HANOI, DANANG, HUE, VINH, NAMDINH,SAIGON Bài 266 267 Đánh dấu đường thực tìm kiếm khố HOGAY Bài Hãy dựng Fibonacci với chiều cao h = 5; số nút bao nhiêu? Bài Cho nhị phân tìm kiếm AVL Lần lượt bổ sung vào khố 7, 2,1,3,6 Hãy nêu rõ tình xảy ứng với trường hợp cách giải ? 267 ... phố lại có Sở điện lực huyện, Quận Như g cấu trúc máy tổ chức Tổng cơng ty điện lực hình ảnh cấu trúc liệu loại tổng quát Một đặc điểm quan trọng cấuTỉntrúcTỉn Tỉn h1 h2 h3 tính chất phân cấp... giá trị nút số sau ( Hình 5. 9 ) 228 229 23 12 34 21 31 56 Hình 5. 9 Ví dụ Sau hình ảnh nhị phân tìm kiếm mà giá trị nút chữ ( Hình 5. 10 ) : 229 230 D E G C L B A Hình 5. 10 5. 4.2 Giải thuật tạo lập... sau ( Hình 5. 4 ) : 214 2 15 Đ ịa Vù ng nhớ Phần tư m¶ng  Base (B)+0 Base (B)+1 Base (B)+2 Base (B)+3 Base (B)+4 Base (B) +5 Base(B)+8 Base (B)+9 Base (B)+14 11001010111001  15 Hình 5. 4 Khi

Ngày đăng: 28/06/2018, 20:38

Từ khóa liên quan

Mục lục

  • Câu hỏi ôn tập chương 5

  • Bài 2

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

  • Đang cập nhật ...

Tài liệu liên quan