B tree là gì

B-TreeB-Tree. Đây là nghĩa tiếng Việt của thuật ngữ B-Tree - một thuật ngữ thuộc nhóm Technology Terms - Công nghệ thông tin.

Độ phổ biến[Factor rating]: 5/10

A B-cây là một loại cây, hoặc cấu trúc dữ liệu, giúp hỗ trợ hệ thống CNTT khác nhau bằng cách cho phép một loạt các số nút con năng động có thể thay đổi theo thời gian. Nó sử dụng một chùm chìa khóa để phân chia các bộ sưu tập của các nút.

Xem thêm: Thuật ngữ công nghệ A-Z

Giải thích ý nghĩa

Nói chung, cây cối là các kiểu dữ liệu trừu tượng [ADT] cho phép đặt hàng cụ thể của các bộ sưu tập nút để chuyển đổi dữ liệu sang định dạng dễ tiếp cận hơn.

What is the B-Tree? - Definition

A B-tree is a type of tree, or data structure, that helps support various IT systems by allowing a range of dynamic child node numbers that can be changed over time. It uses a set of keys to divide these collections of nodes.

Understanding the B-Tree

In general, trees are abstract data types [ADT] that enable the specific ordering of node collections in order to convert data into more accessible formats.

Thuật ngữ liên quan

  • Binary Tree
  • Self-Balancing Binary Search Tree
  • Eucalyptus
  • Lift and Shift
  • Predictive Maintenance
  • Memory Swapping
  • Big Data Visualization
  • BigQuery
  • Elastic MapReduce [EMR]
  • Informatics

Source: B-Tree là gì? Technology Dictionary - Filegi - Techtopedia - Techterm

Trong bài viết này, ta sẽ cùng tìm hiểu về cấu trúc dữ liệu dạng cây B-tree. Ngoài ra, ta sẽ triển khai ví dụ về thao tác tìm kiếm, xóa và chèn trên cây B-tree bằng các hình ảnh minh họa.

Bạn đang xem: B-tree là gì

Trong khoa học máy tính, B-cây là một cấu trúc dữ liệu dạng cây cho phép tìm kiếm, truy cập tuần tự, chèn, xóa trong thời gian lôgarit. B-cây là một tổng quát hóa của cây nhị phân tìm kiếm, trong đó một nút có thể có nhiều hơn hai con. Không như cây nhị phân tìm kiếm tự cân bằng, B-cây được tối ưu hóa cho các hệ thống đọc và ghi dữ liệu lớn. Nó thường được dùng trong các cơ sở dữ liệu và hệ thống tập tin.

Trong B-cây, các nút trong [nút không là lá] có thể có số lượng nút con khác nhau, giới hạn trong một khoảng nhất định. Khi dữ liệu được chèn vào hoặc xóa đi từ một nút, số nút con của nó thay đổi. Khi đó, để duy trì số nút con trong khoảng đã định, các nút trong có thể được hợp hai làm một hoặc chia đôi. Vì số lượng nút con có thể nằm trong một khoảng lớn, B-cây không cần tái cân bằng thường xuyên như cây nhị phân tìm kiếm, nhưng lại sử dụng bộ nhớ lãng phí hơn do các nút không chứa tối đa dữ liệu.

Khi sử dụng B-cây, ta định trước một số nguyên t. Mỗi nút trong của B-cây [trừ nút gốc] có từ t-1 tới 2t-1 khóa. Hệ số 2 đảm bảo rằng các nút có thể được chia đôi hoặc kết hợp. Với một nút trong có 2t-1 khóa, ta có thể lấy khóa giữa trong 2t-1 khóa chèn vào nút cha và chia 2t-2 khóa còn lại vào hai nút mới, mỗi nút t-1 khóa. Tương tự như vậy, khi một nút và nút kế bên đều có t-1 khóa, ta có thể kết hợp hai nút cùng với một khóa từ nút cha thành một nút mới có 2t-1 khóa.

Số lượng nút con của một nút đúng bằng số khóa của nút đó cộng một. Vì vậy, số lượng nút con của một nút trong là từ t tới 2t.

B-cây duy trì tính cân bằng bằng cách đảm bảo các nút lá đều có cùng độ sâu. Chiều cao của cây tăng dần dần khi các nút mới được chèn vào cây, nhưng con số này thay đổi rất chậm. Khi chiều cao của cây tăng lên, độ sâu của tất cả các nút lá tăng lên cùng một lúc.

B-cây có lợi thế hơn các cấu trúc dữ liệu tìm kiếm khác khi thời gian truy cập lớn hơn nhiều lần thời gian đọc dữ liệu liên tiếp nhau. Điều này thường xảy ra khi các nút được lưu trên bộ nhớ ngoài. Bằng cách tăng số lượng nút con của mỗi nút, chiều cao của cây giảm xuống và số lần truy cập cũng giảm. Thêm vào đó, số thao tác tái cân bằng cây cũng giảm đi. Thông thường, tham số t [quyết định số khóa của mỗi nút] được chọn tùy theo lượng thông tin trong mỗi khóa và kích thước mỗi khối đĩa.

Các biến thể

Thuật ngữ B-cây có thể được dùng để chỉ một thiết kế cụ thể, cũng có thể được dùng để chỉ một lớp các thiết kế. Theo nghĩa hẹp, B-cây lưu một số khóa ở các nút trong và không lưu bản sao của các khóa đó ở nút lá. Theo nghĩa rộng, nó còn bao gồm những biến thể khác như B+-cây hay B*-cây.

  • Trong B+-cây, các nút trong lưu bản sao của khóa. Tất cả các khóa, cùng với dữ liệu đi kèm được lưu ở các nút lá. Ngoài ra các nút lá còn có con trỏ đến các nút lá kế bên để tăng tốc truy cập tuần tự.
  • B*-cây thực hiện nhiều thao tác tái cân bằng hơn để lưu trữ dự liệu dày đặc hơn. Mỗi nút trong khác gốc phải đầy tới hai phần ba thay vì chỉ một nửa như trong B-cây.

Có nhiều định nghĩa khác nhau của B-cây trong các tài liệu. Sau đây là một định nghĩa.[1]

  1. Mỗi nút x chứa
    1. số n[x] là số khóa lưu tại x.
    2. n[x] khóa, theo thứ tự tăng dần.
  2. Mỗi nút trong x chứa n[x]+1 con trỏ tới các nút con của x.
  3. Mỗi khóa tại x có giá trị nằm giữa giá trị các khóa tại hai cây con tương ứng của x: khóa thứ i của x lớn hơn hoặc bằng mọi khóa ở cây con thứ i của x và nhỏ hơn hoặc bằng mọi khóa ở cây con thứ i+1 của x.
  4. Mọi nút lá đều có cùng một độ sâu.
  5. Số khóa của mỗi nút nằm trong một khoảng định trước. Khoảng này được quyết định bởi tham số t≥2.
    1. Mỗi nút trong khác gốc có ít nhất t-1 khóa. Nếu cây khác rỗng thì nút gốc phải có ít nhất một khóa.
    2. Mỗi nút có tối đa 2t-1 khóa.

Cũng như các thuật toán cho bộ nhớ ngoài khác, tham số quan trọng nhất cho B-cây không là tổng thời gian tính toán, mà là số lần truy cập bộ nhớ. Số lần truy cập bộ nhớ trong mỗi thao tác trên B-cây tỉ lệ với chiều cao của cây. Một B-cây với n nút có chiều cao không quá log t ⁡ n + 1 2 {\displaystyle \log _{t}{\frac {n+1}{2}}}  [1].

Tìm kiếm trên B-cây cũng tương tự như tìm kiếm trên cây nhị phân tìm kiếm. Giả sử giá trị cần tìm là v. Thuật toán xuất phát từ nút gốc và tìm từ trên xuống dưới. Tại nút x, thuật toán chọn nút con thứ i sao cho mọi khóa tại x với thứ tự nhỏ hơn i đều nhỏ hơn hoặc bằng v, và mọi khóa tại x với thứ tự lớn hơn hoặc bằng i đều lớn hơn hoặc bằng v.

Chèn

Để chèn thêm một khóa mới, trước tiên thực hiện thao tác tìm kiếm để tìm đến nút lá ở vị trí cần chèn. Nếu nút lá đã đầy [chứa 2t-1 khóa], thuật toán lấy khóa ở giữa ra rồi chia các khóa còn lại vào hai nút mới, mỗi nút có t-1 khóa. Sau đó, đặt khóa ở giữa vừa lấy ra vào nút cha để làm điểm chia cho hai nút mới vừa tạo. Nếu nút cha cũng đầy thì lặp lại thao tác chia đôi như trên [có thể phải lặp lại cho tới nút gốc, tạo ra nút gốc mới].

Có thể cải tiến để thuật toán chỉ phải đi từ trên xuống đúng một lần bằng cách chia đôi ngay các nút đầy gặp được trên đường đi khi thực hiện thao tác tìm kiếm.

  1. ^ a b Thomas H. Cormen; Leiserson, Charles E.; Rivest, Ronald L.; Stein, Clifford [2009]. Introduction to Algorithms [ấn bản 3]. MIT Press. ISBN 0-262-03384-4.Quản lý CS1: sử dụng tham số tác giả [liên kết]

  • Bayer, Rudolf; McCreight, E. [1970], Organization and Maintenance of Large Ordered Indices, Mathematical and Information Sciences Report No. 20, Boeing Scientific Research Laboratories
  • Bayer, Rudolf [1971], “Binary B-Trees for Virtual Memory”, Proceedings of 1971 ACM-SIGFIDET Workshop on Data Description, Access and Control, San Diego, California |title= trống hay bị thiếu [trợ giúp]

Lấy từ “//vi.wikipedia.org/w/index.php?title=B-cây&oldid=64542483”

Như ta đã biết Index giúp cho MySql tìm kiếm các bản ghi nhanh chóng, có thể hiểu nôm na Index như phần mục lục trong 1 quyển sách, nhờ đó ta có thể tìm kiếm nội dung cần thiết thông qua phần mục lục thay vì lật rở cả cuốn sách.

Bạn đang xem: Tree Là Gì ? Sự Khác Biệt Giữa Cây B Và Cây Nhị Phân

Index được MySql lưu giữ tại B-Trees, trong vài trường hợp ngoại lệ, có thể được lưu tại R-Trees. Vậy B-Trees là gì và được cấu trúc như thế nào.

Introduction

B-Tree là cây tìm kiếm tự cân bằng. Trong hầu hết các cây tìm kiếm tự cân bằng khác [như AVL và Red Black Trees], giả định rằng mọi thứ đều nằm trong bộ nhớ chính. Để hiểu được việc sử dụng B-Trees, chúng ta phải nghĩ đến số lượng dữ liệu khổng lồ mà không thể lưu trong bộ nhớ chính. Khi số lượng keys lớn, dữ liệu được đọc từ hard disk dưới dạng khối [blocks]. Thời gian đọc dữ liệu từ hard disk rất lâu so với thời gian truy xuất bộ nhớ chính, Ý tưởng chính của việc sử dụng B-Trees là giảm số lần truy cập đĩa. Hầu hết các hoạt động của cây [tìm kiếm, chèn, xóa, max, min, ..etc] yêu cầu truy cập đĩa O [h] chính là chiều cao của B-Trees. B-Trees là fat trees. Chiều cao của cây B được hạn chế tối đa bằng việc bố trí nhiều nhất keys tại các node. Nói chung kích thước node tương đương kích thước block. Vì khả năng hạn chế h, tổng số lần đĩa truy cập cho hầu hết các hoạt động được giảm đáng kể so với Cây tìm kiếm cân bằng nhị phân như cây AVL, Red Black Tree, ..etc.

Thuộc tính của B-Tree

Tất cả lá ở cùng cấp.Một B-Tree được xác định bằng thuật ngữ tối thiểu "t". Giá trị của t phụ thuộc vào kích thước khối đĩa.Mỗi node trừ root phải chứa ít nhất t-1 keys. Gốc có thể chứa tối thiểu 1 node.Tất cả các node [bao gồm cả gốc] có thể chứa nhiều nhất 2t - 1 keys.Số con của một node bằng số keys trong đó cộng với 1.Tất cả các keys của một node được sắp xếp theo thứ tự ngày càng tăng. Child giữa hai keys k1 và k2 chứa tất cả các keys nằm trong khoảng từ k1 và k2.B-Tree phát triển và co lại từ gốc mà không giống như cây tìm kiếm nhị phân. Cây tìm kiếm nhị phân phát triển rộng dần.Giống như cây tìm kiếm nhị phân cân bằng, sự phức tạp về thời gian để tìm kiếm, chèn và xóa là khá lớn.

Sau đây là một ví dụ B-Tree mức độ tối thiểu 3. Lưu ý rằng trong thực tế B-Cây, giá trị của mức độ tối thiểu là nhiều hơn 3.

Tìm kiếm

Tìm kiếm tương tự như tìm kiếm trong Cây tìm kiếm nhị phân. Hãy tìm chìa khóa để tìm k. Chúng ta bắt đầu từ gốc và đệ quy đi qua. Đối với mỗi node không có nhánh sẽ không xét đến, nếu node có key, chúng ta chỉ cần trả lại node. Nếu không, chúng ta sẽ quay trở lại child thích hợp [The child ngay trước key] của node. Nếu chúng ta đạt đến một node và không tìm thấy k trong node leaf, chúng ta sẽ trả về NULL.

Traverse

Traversal cũng tương tự như Invers traversal của cây nhị phân. Chúng tôi bắt đầu từ child ở bên trái, in lại các child còn lại bên trái, sau đó lặp lại quá trình tương tự cho child và key còn lại. Cuối cùng, in ngược lại child đầu bên phải.

Xem thêm: Giãi Mã Thuật Ngữ Fit Là Viết Tắt Của Từ Gì ? Fit Viết Tắt Là Gì

Insert

Một key mới luôn được chèn vào tại node leaf. Gọi key được chèn vào là k. Giống như BST, chúng ta bắt đầu từ gốc và đi xuống cho đến khi chúng ta tìm được một node leaf. Khi chúng ta tìm được một node leaf, chúng ta chèn keys vào node leaf đó. Không giống như BST, chúng ta có một phạm vi được xác định trước về số lượng các keys mà một node có thể chứa. Vì vậy, trước khi chèn một key vào node, chúng tôi đảm bảo rằng node có thể được add thêm key.

Làm thế nào để đảm bảo rằng một node có không gian có sẵn cho key trước khi key được chèn vào? Chúng tôi sử dụng một method được gọi là splitChild [] được sử dụng để phân chia một child của một node. Xem biểu đồ dưới đây để hiểu được sự phân chia. Trong sơ đồ sau, child y của x đang được chia thành hai node y và z. Lưu ý rằng các method splitChild di chuyển một key lên và đây là lý do B-Trees lớn lên không giống như BSTs phát triển.

Như đã thảo luận ở trên, để chèn một key mới, chúng ta đi từ gốc tới leaf. Trước khi đi qua một node, đầu tiên chúng ta kiểm tra xem node đã đầy. Nếu node là đầy, chúng tôi chia nó để tạo không gian.

Deletion process

Xoá từ B-Trees là phức tạp hơn là chèn, bởi vì chúng ta có thể xóa một khoá từ bất kỳ node nào - không chỉ là leaf - và khi chúng ta xóa một key một node, chúng ta sẽ phải sắp xếp lại các child của node.

Như trong chèn, chúng ta phải đảm bảo xóa không vi phạm các thuộc tính của cây B. Cũng như chúng ta phải đảm bảo rằng một node không bị quá lớn do chèn, chúng ta phải đảm bảo rằng một node không quá nhỏ trong quá trình xóa [ngoại trừ gốc được phép có ít hơn t-1 số tối thiểu của các keys]. Cũng giống như một thuật toán chèn đơn giản có thể phải sao lưu nếu một node trên đường dẫn đến nơi keys được chèn vào đầy đủ, một cách tiếp cận đơn giản để xóa có thể phải sao lưu nếu một node [khác với gốc] dọc theo đường dẫn đến nơi key được xóa sẽ có số keys tối thiểu.

Delete method xóa k khỏi cây con được bắt nguồn từ x. Method này đảm bảo rằng bất cứ khi nào nó tự gọi mình một cách đệ quy trên một nút x, số keý trong x ít nhất là mức tối thiểu t. Lưu ý rằng điều kiện này đòi hỏi một keys quan trọng hơn mức tối thiểu yêu cầu bởi điều kiện cây B thông thường, do đó đôi khi một keys có thể phải được di chuyển vào một child node trước khi đệ quy child đó. Điều kiện được tăng cường này cho phép chúng ta xóa một key cây mà không cần phải "sao lưu" [với một ngoại lệ, chúng ta sẽ giải thích]. Bạn nên giải thích các đặc tả sau để xóa từ cây B với sự hiểu biết rằng nếu node gốc x trở thành node bên trong không có keys [tình huống này có thể xảy ra trong trường hợp 2c và 3b sau đó chúng ta xóa x, và x chỉ có con x .c1 trở thành gốc mới của cây, giảm độ cao của cây bằng một cây và bảo quản tài sản mà gốc của cây chứa ít nhất một keys [trừ khi cây trống].

Để hiểu rõ hơn về các thuật toán sử dụng trong B-Trees cần có thêm tìm hiểu khác.

Video liên quan

Chủ Đề