CẤU TRÚC CÂY DỮ LIỆU và GIẢI THUẬT NEU

94 117 0
CẤU TRÚC CÂY DỮ LIỆU và GIẢI THUẬT NEU

Đ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

1 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 d÷ liƯu cã nhiỊu øng dơng thiÕt kế giải thuật 1 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 lµ gèc ( Root) 2 ← 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ã rÊt 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ã bé phËn ë ba vïng l·nh thỉ kh¸c : khu vùc 1( PhÝa B¾c), khu vùc 3( Miền trung), khu vực 2( Phía Nam) Mỗi khu vực quản lý Sỏ điện lực tỉnh, 3 thành phố khu vực Mỗi Sở điện lực tỉnh, thành phố lại có Sở ®iƯn lùc hun, Qn Nh vËy cÊu tróc bé 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ấu trúc tính Tổng chất công ty phân cấp theo thứ bậc nút Các nút đợc phân cÊp theo møc cđa chóng Chóng ta qui íc nót vïng vïng vïng gèc lu«n lu«n 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 Tỉnh 1Tỉnh 2Tỉnh k+1 Bây ta xét vấn đề quét cấu trúc hình 42 Hun Hun Hun Chóng ta gäi phép quét trình thâm nhập vào nót cđa nã mét c¸ch cã hƯ thèng cho nút đợc thâm nhập lần tree) nhị phân (Binary Cây nhị phân trờng hợp riêng tổng quát có rÊt nhiỊu øng dơng thiÕt kÕ gi¶i tht 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 5 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 cđa B lµ E vv 6 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 7 Đố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) - Số lợng tối đa nút nhị phân có chiỊu cao h (h lµ sè møc lín nhÊt cđa nút có cây) đợc xác định công thức: 2h - (h>=1) phơng pháp Lu trữ nhị phân Đối với nhị phân ngời ta thờng dùng phơng pháp lu trữ: Phơng pháp lu trữ mảng 8 Phơng pháp lu trữ danh sách liên kết Phơng pháp lu trữ mảng Xét nhị phân mà giá trị nút chữ số Root A B D H I E G 10 K C 11 12 L R M 13 Q 14 15 X N 10 Hình 5.3 Ta lần lợt đá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 vËy nót cđa nót thø I sÏ lµ nút thứ 2i 2i +1 Ta lu trữ nhị phân mảng gồm 15 thành phần theo qui tắc: Nút thứ i đợc lu trữ thành phần [ i-1] mảng Đây phơng pháp lu trữ Hình ảnh lu trữ nhị phân mảng nh sau ( Hình 5.4 ) : 10 10 80 mạng máy tính sở sử dụng cấu trúc liệu Trong toán lần ngời dùng thâm nhập vào hệ thống cách đa định danh vµ mËt khÈu, hƯ thèng sÏ tiÕn hµnh kiĨm tra tính hợp lệ định danh mật Vì việc kiểm tra phải thực nhiều lần, nên cần phải tổ chức tập hợp thông tin cho tìm chúng cách nhanh chóng Hơn phải cấu trúc động ngời dùng thờng xuyên thâm nhập vào hệ thống.Cấu trúc liệu đợc sử dụng để lu trữ nhị phân tìm kiếm BST ( Binary Search Tree) Gi¶i thuËt nh sau : 80 80 81 Program ValidateUsers1; Const StringLength = 8; Type String = Packed Array[1 StringLength ] of char; UserRecord = Record Id, Password : String End; ElementType = UserRecord; TreePointer = ^ TreeNode; TreeNode = Record Data : ElementType; Lchild , Rchild : TreePointer End; Var UsersFile : text; (* File chøa c¸c định danh ngời dùng mật khẩu*) 81 81 82 UserRec : UserRecord; (* B¶n ghi hiƯn thêi cđa ngờ dùng đợc kiểm tra*) UserTree, (* BST ghi*) LocPtr : TreePointer; (* Con trỏ ®Õn mét nót BST*) Found, (* T×m BST hay không*) Done : boolean; (* Báo hiệu kết thóc xư lý*) Procedure BSTinsert(Var Root:TreePointer; Item : ElementType); (* Thủ tục chèn thêm vào BST ghi ngời dïng*) Var LocPtr, Parent : TreePointer; 82 82 83 Found : boolean; Begin (*BSTInsert* ) LocPtr : = Root; Parent : = nil; Found: = false; While not Found And ( LocPtr < > 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 83 83 84 Else Begin new ( LocPtr ); With LocPtr ^ Begin Data : = Item; Lchild : = NIL; 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 * ); 84 84 85 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 Else Found : = true End (* BSTSearch * ); 85 85 86 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 * ); 86 86 87 Procedure Login ( Var UserRec : UserRecord ; StringLength : integer; Var Done : boolean ); (* Thđ tơc đọc định danh ngời dùng mật khÈu*) 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 ) 87 87 88 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 ) End (* While* ); Login ( UserRec , StringLength , Done ); While Not done Begin 88 88 89 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 89 89 90 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 lu trữ nhị phân? 90 90 91 - Phơng pháp lu trữ liên kết nhị phân? Lợi phơng pháp so với phong pháp lu 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 lu 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.? 12 - Giải thuật loại bỏ nút nhị phân tìm kiếm.? 91 91 92 Bài Biểu diễn phơng pháp lu trữ nhị phân sau sau phơng pháp lu 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ố 92 92 93 Bài Hãy dựng nhị tìm kiếm ứng với với dẫy khoá cho nh sau ( áp dụng giải thuËt BST) HAIPHOG, CANTHO, NHATRANG, DALAT , THAINGUYEN, HANOI, DANANG, HUE, VINH, NAMDINH,SAIGON Đánh dấu đờng thực tìm kiếm khoá HOGAY Bài Hãy dùng c©y 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 93 93 94 Lần lợt bổ sung vào khoá 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 ? 94 94 ... c¸c 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... Nh vËy cÊu tróc bé m¸y tỉ chøc cđa 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ấu trúc tính Tổng chất công ty phân cấp theo thứ bậc nút Các nút đợc phân... nhị phân so với giải thuật không dùng đệ qui đồng thời cho ta hình dung rõ ràng trình tự qui trình duyệt Cây nhị phân tìm kiếm ( Binary Search Tree ) Trong phần nghiên cứu loại cấu trúc nhị phân

Ngày đăng: 30/05/2018, 22:00

Mục lục

  • C©u hái «n tËp ch­¬ng 5

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

Tài liệu liên quan