1 [Kinh nghiệm]Nói về B++ tree Sun Jan 29, 2012 10:57 pm
Admin
Quản trị viên
Các tài liệu về B+ tree toàn bằng tiếng Anh (Kể cả của thầy và cả trên Internet, có google cũng không có bản tiếng Việt nào nên hồn) thôi thì gõ một ít ra đây để tiện trao đổi. Một số bạn có hỏi gì thì hỏi lên diễn đàn, đừng có bom vào thùng thư của tôi, mỗi ngày nhận tới vài trăm thư, nên tôi chỉ đọc những thư quan trọng thôi còn lại là AutoDelete, nên hết sức thông cảm.
Tiện thể nhắc luôn mấy cái anh chàng và cô nàng không chịu đọc kỹ, mà đã nhắc lại nhiều lần rồi là đã ở nhóm "Học viên DS" thì đừng có đòi tham gia vào nhóm khác (Thành viên đọc được mọi thứ) vì có tham gia vào thì sẽ đảo bit = 0 sẽ bị cấm không đọc được đâu. Đã nhắc đi nhắc lại rồi mà vẫn cứ lao đầu xin chết thì cũng lạ đấy nhé.
Thôi năm mới nói tý cho vui, gõ một ít về bài học cho những người lười học thì lên đây đọc. Mà nói thật là nếu cứ học kiểu này có khi phải thuê bạn Hải Yến ở trường Mầm Non Hoa Phượng Đỏ học hộ và thi hộ mất thôi.
B+ Tree là một cấu trúc dữ liệu dạng cây ‘đa phân cân bằng’. Cấu trúc một node của nó thường được chia làm nhiều phần. Cây được tổ chức với một qui tắc nhất định được tạo ra từ đầu. Thường thì giá trị của các node tăng dần từ trái qua phải, node con bên trái sẽ chứa giá trị nhỏ hơn node con bên phải...
[You must be registered and logged in to see this image.]
B + Tree là một sự tổng quát hóa của cây nhị phân tìm kiếm (BST). Sự khác biệt chính giữa chúng là số lượng node con của B+Tree nó sẽ nhiều hơn chứ không bị giới hạn bởi hai phần tử như của cây nhị phân tìm kiếm. Mục tiêu ở đây là làm sao để giảm tối đa số lần truy xuất các thiết bị ngoại vi (ở đây là đĩa). Tại bất cứ thời điểm nào chúng ta sẽ thử định vị những bản ghi, chúng ta muốn độ cao của cây đa phân này phải là nhỏ nhất để giảm chi phí tìm kiếm, để đạt được mục tiêu này thì số lượng nhánh trong cây phải lớn.
Nếu B+Tree có bậc là m thì môt node của nó sẽ có tối đa m nhánh con và có m-1 khóa để tìm kiếm.
• Các record chỉ được lưu ở nút lá của cây
• Tất cả các nút (ngoại trừ nút gốc) có tối thiểu là m/2 (ở đây phép chia nguyên làm tròn về phía trên, nếu lẻ) và tối đa là m nhánh con.
• Nút gốc và lá phải ít nhất có 2 con.
• Bên trong một node lưu giá trị tìm kiếm, một vài khóa được sử dụng như những “người chỉ đường” cho quá trình tìm kiếm. Những khóa này cần phải được sắp xếp theo môt thứ tự thống nhất trừ trước (tăng dần từ trái qua phải).
• Tùy thuộc vào kích thước của một record so với kích thước của một khóa thì node lá của B+Tree bậc m có thể lưu nhiều hơn hoặc ít hơn m records. Thông thường kích thước của một node là bội số của một khối dữ liệu trong ổ đĩa (bên windows mặc định là 512byte).
• Các node lá của cây thường được liên kết với nhau để tạo thành một danh sách liên kết, điều này nhằm mục tiêu là để không phải duyệt trở lại node gốc trong quá trình duyệt tìm kiếm.
Ví dụ một cây B+Tree:
[You must be registered and logged in to see this image.]
Tiện thể nhắc luôn mấy cái anh chàng và cô nàng không chịu đọc kỹ, mà đã nhắc lại nhiều lần rồi là đã ở nhóm "Học viên DS" thì đừng có đòi tham gia vào nhóm khác (Thành viên đọc được mọi thứ) vì có tham gia vào thì sẽ đảo bit = 0 sẽ bị cấm không đọc được đâu. Đã nhắc đi nhắc lại rồi mà vẫn cứ lao đầu xin chết thì cũng lạ đấy nhé.
Thôi năm mới nói tý cho vui, gõ một ít về bài học cho những người lười học thì lên đây đọc. Mà nói thật là nếu cứ học kiểu này có khi phải thuê bạn Hải Yến ở trường Mầm Non Hoa Phượng Đỏ học hộ và thi hộ mất thôi.
B+ Tree là một cấu trúc dữ liệu dạng cây ‘đa phân cân bằng’. Cấu trúc một node của nó thường được chia làm nhiều phần. Cây được tổ chức với một qui tắc nhất định được tạo ra từ đầu. Thường thì giá trị của các node tăng dần từ trái qua phải, node con bên trái sẽ chứa giá trị nhỏ hơn node con bên phải...
[You must be registered and logged in to see this image.]
B + Tree là một sự tổng quát hóa của cây nhị phân tìm kiếm (BST). Sự khác biệt chính giữa chúng là số lượng node con của B+Tree nó sẽ nhiều hơn chứ không bị giới hạn bởi hai phần tử như của cây nhị phân tìm kiếm. Mục tiêu ở đây là làm sao để giảm tối đa số lần truy xuất các thiết bị ngoại vi (ở đây là đĩa). Tại bất cứ thời điểm nào chúng ta sẽ thử định vị những bản ghi, chúng ta muốn độ cao của cây đa phân này phải là nhỏ nhất để giảm chi phí tìm kiếm, để đạt được mục tiêu này thì số lượng nhánh trong cây phải lớn.
Nếu B+Tree có bậc là m thì môt node của nó sẽ có tối đa m nhánh con và có m-1 khóa để tìm kiếm.
• Các record chỉ được lưu ở nút lá của cây
• Tất cả các nút (ngoại trừ nút gốc) có tối thiểu là m/2 (ở đây phép chia nguyên làm tròn về phía trên, nếu lẻ) và tối đa là m nhánh con.
• Nút gốc và lá phải ít nhất có 2 con.
• Bên trong một node lưu giá trị tìm kiếm, một vài khóa được sử dụng như những “người chỉ đường” cho quá trình tìm kiếm. Những khóa này cần phải được sắp xếp theo môt thứ tự thống nhất trừ trước (tăng dần từ trái qua phải).
• Tùy thuộc vào kích thước của một record so với kích thước của một khóa thì node lá của B+Tree bậc m có thể lưu nhiều hơn hoặc ít hơn m records. Thông thường kích thước của một node là bội số của một khối dữ liệu trong ổ đĩa (bên windows mặc định là 512byte).
• Các node lá của cây thường được liên kết với nhau để tạo thành một danh sách liên kết, điều này nhằm mục tiêu là để không phải duyệt trở lại node gốc trong quá trình duyệt tìm kiếm.
Ví dụ một cây B+Tree:
[You must be registered and logged in to see this image.]