4.2.5.1. Cấu trúc Bucket
Thuật toán Thorup cơ bản dựa trên việc thăm nút của cây thành phần T theo thứ tự nhƣ đã nêu ở trên. Bất cứ khi nào thành phần
đƣợc thăm, tất cả các con của
tại T sẽ đƣợc thăm. Cấu trúc Bucket tƣơng tự nhƣ thuật toán Dial Dijkstra.
Tại mỗi cây con
khi đƣợc thăm sẽ tiến hành tạo bucket B
với độ rộng bucket đƣợc tính bằng DIAM
+ 1 với DIAM là tổng các cạnh trong . Gọi S là tập các đỉnh đã đƣợc thăm, ký hiệu rằng
là x>>i, là . Chúng ta sẽ đƣa con của thành phần dựa theo (với ) , chèn vào bucket B( .
Vì vậy, chúng ta cần 2 thuộc tính cho tất cả các thành phần: Giá trị
luôn luôn nhỏ hơn hoặc bằng chỉ mục nhỏ nhất của bucket không rỗng của . Đúng hơn bằng . Số lƣợng bucket B
đã nêu ở trên. Thorup đã chứng minh tổng số bucket cần thiết không vƣợt quá 8n.
67
Tập các đỉnh chƣa thăm đƣợc sử dụng để duy trì khoảng cách giữa từng đỉnh và thành phần hay tập các đỉnh chƣa thăm đại diện cho rừng con của cây phân tầng T (Ký hiệu U) . Nó duy trì sự thay đổi giá trị
cho việc thay đổi giá trị của danh sách các gốc
trong phân tầng T trong thời gian tuyến tính.
là gốc của thành phầnn trong U nếu
là con chƣa thăm của thành phần đã đƣợc thăm trong T (Khi tất cả các gốc chƣa đƣợc thăm
).
Cấu trúc của U hỗ trợ hai hàm khấu hao thời gian liên tục: 1. Cập nhật
) bất cứ khi nào
giảm giá trị với các đỉnh
với gốc chƣa thăm 2. Đƣa tất cả con
của trong cây phân tầng T vào các gốc U và tính
cho tất cả bất cứ khi nào gốc đƣợc thăm.
Giả sử lấy là danh sách các đỉnh đƣợc sắp xếp theo thứ tự là con của các thành phần trong cây T . Tất cả các đỉnh chƣa thăm của các gốc
trong U đều là các lá dƣới
,có dạng thuộc và nhiệm vụ duy trì quản lý giá trị nhỏ nhất
) với
. Chúng ta thực hiện giải pháp nhƣ sau: lấy
dƣới dạng một đoạn kết nối đơn. Với , . 1. Mỗi lần giảm
với đỉnh với gốc chƣa thăm , chúng tôi giảm giá trị tối thiểu của phân khúc chứa .
2. Bất cứ khi nào xóa gốc chƣa thăm trong U, tiến hành chia phân đoạn ra thành từng phân khúc của cây thành phần con. Tính toán lại giá trị nhỏ nhất của tất cả các phân khúc trừ phân khúc mới kế thừa giá trị nhỏ nhất ban đầu.
Theo lý thuyết, thuật toán Thorup duy trì khoảng cách trong thời gian tuyến tính bằng cách sử dụng đống atomic [10] để xây dựng cấu trúc của tập các đỉnh chƣa thăm thời gian khấu hao sẽ bằng
nhƣng đống atomic [10] để thực hiện thời gian tuyến tính số lƣợng đỉnh phải lớn hơn (không khả thi
68
với máy tính hiện nay). Thorup đã thay thế bằng cách sử dụng thuật toán split-
findmin của Gabow[13]. Cho
, để chia phân đoạn thành từng phần chúng tôi cần ( -1)/2. Với
, chúng tôi có (
và có lần giảm ứng với số cạnh của đồ thị. Thuật toán split-findmin của Gabow xử lý tính toán tăng lên
, với
là tổng trọng số các cạnh trong cây khung nhỏ nhất và là giá trị hàm ngƣợc Ackerman với độ tăng trƣởng chậm. Nếu số lƣợng đỉnh thấp hơn 1080
,
sẽ bằng hoặc nhỏ hơn 4.
Thuật toán split-findmin tách danh sách các phần tử thành nút khác nhau. Các nút có khóa là khóa nhỏ nhất của các phần tử bên trong nút. Thorup sử dụng
split-findmin để duy trì khoảng cách của các cây thành phần bằng cách ánh xạ tất
cả các đỉnh của cây thành phần từ mức 0 vào cấu trúc của split-findmin. Ví dụ minh họa nhƣ hình 4.8 cứ 4 phần tử sẽ tập hợp lại thành một nút đƣợc gọi là
super element. Cứ 4 super element ở cùng mức sẽ hợp thành nút cha super
element. Tuy nhiên vẫn có những phần tử super element không đƣợc sử dụng để
hợp thành nút. Tất cả các phần tử còn lại của từng mức không đủ để tạo thành nút
super element đƣợc chèn vào danh sách singleton element. Các singleton element
sẽ không đƣợc sử dụng để tạo thêm super element. Khóa của singleton element
và super element bằng khóa nhỏ nhất của các phần duy trì bởi chúng.
Hình 4. 8.Mô tả về cấu trúc split - findmin: 1 là danh sách các phần tử; 2 là các singleton element; 3 là super element.