1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Kĩ thuật heavy light decomposition

8 197 1

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Nội dung

Heavy-Light Decomposition Giới thiệu Kĩ thuật Heavy-Light Decomposition (còn gọi heavy path decomposition, từ xin viết tắt HLD) đưa lần đầu năm 1983 Sleator Tarjan báo "A data structure for dynamic trees", Journal of Computer and System Sciences 26 (3): 362–391 phần phân tích tiệm cận tính hiệu cấu trúc link/cut tree họ Năm 1984, Harel Tarjan lại sử dụng lần kĩ thuật báo "Fast algorithms for finding nearest common ancestors", SIAM Journal on Computing 13 (2): 338–355 tìm tổ tiên chung gần hai nút HLD sớm chứng tỏ sức mạnh nghiên cứu độ phức tạp thuật toán, cấu trúc liệu Tưởng chừng HLD có ý nghĩa chủ yếu phương diện lý thuyết độ phức tạp công cụ chứng minh toán học túy cho báo đến năm 2013-2014, toán nhiều thi lập trình online, HLD bước thực tiễn nhanh chóng thể tính ưu việt việc mô tả xử lí mối quan hệ động đối tượng nhiều toán, đặc biệt cấu trúc với truy vấn online Chúng xin cung cấp nhìn sơ lược HLD vài mở rộng thông qua số toán lập trình thuật toán, quý vị nắm bắt kịp với xu hướng thay đổi chóng mặt giải thuật cấu trúc liệu thi lập trình online, thi lập trình khu vực quốc tế HLD Cây cân Ta biết cân cấu trúc tốt lập trình Một cân nút có độ cao , điều cho ta hai tính chất:  Ta cần duyệt qua không nút để đến nút gốc từ nút cây;  Ta cần duyệt qua không nút để di chuyển từ nút đến nút khác Hệ số tốt cho toán Với cân loạt truy vấn độ phức tạp nút, ta giải Chẳng hạn: khoảng cách hai nút, trọng số lớn/nhỏ đường đi, tổng liên tiếp lớn đoạn liên tiếp, … Chuỗi tuyến tính Một dãy nút nối tiếp tuyến tính cấu trúc tốt Ta xây dựng segment tree hay binary indexed tree (là cân bằng) cho chuỗi để giải độ phức tạp truy vấn dạng max, min, tổng đoạn, … chuỗi Cây không cân Độ cao không cân dao động phạm vi lớn ( trường hợp suy biến, ta phải duyệt qua ) Với nút để từ nút di chuyển đến nút khác Ta xem xét cách đối phó với không cân tương đối đặc biệt Bài toán: cho hình vẽ, tính tổng trọng số nút đường (đơn) hai nút bất kì, giả thiết trọng số nút thay đổi theo thời gian/truy vấn Có thể nhận thấy:  Cây có nút  Ta cần thăm  Ta thăm nút để di chuyển từ đến  Ta thăm nút để di chuyển từ đến nút để di chuyển từ Như rõ ràng cần chi phí đến để di chuyển hai nút tùy ý Để đối phó, ta thử bẻ thành ba chuỗi hình vẽ: Với chuỗi ta xây dựng segment tree cho riêng truy vấn chuỗi xuất yếu tố log Ta nhận thấy:   Cây có nút, phân rã thành ba chuỗi độ dài thuộc chuỗi, truy vấn chúng giải  thuộc hai chuỗi khác nhau, đường chúng tách thành , truy vấn giải , xác hai lần  Tương tự: thuộc hai chuỗi khác nhau, đường chúng tách thành , truy vấn chúng giải , xác là ba lần Như vậy, với cho, phép phân rã thành ba chuỗi xây dựng segment tree kèm theo chuỗi, truy vấn hai nút tốn chi phí Vấn đề là: có hai nút có bậc ba nên ta có phân rã tốt, đường hai nút tách thành không ba đoạn chuỗi Điều xảy tổng quát? Ta cần kĩ thuật phân rã phức tạp nhằm đạt độ phức tạp chấp nhận trường hợp xấu Đó HLD Phân rã Heavy-Light Ta phân rã thành chuỗi rời (không có hai chuỗi có nút chung) theo cách cho đường từ nút gốc đến nút phải chuyển qua không chuỗi Nghĩa phân rã phải thỏa mãn: đường từ nút gốc đến nút tách thành mảnh, mảnh thuộc chuỗi có không Nếu thực phân rã trên, với hai nút thành hai phần: đến ; đến mảnh , ta xét tách đường từ đến , dạng truy vấn chung chúng là: từ nút, lên nút tổ tiên Với giả thiết phân rã có ta thấy độ phức tạp truy vấn Việc lại cách phân rã Xét tổng quát, ta đặt khái niệm:   Nút nặng (heavy): số nút nút, nút ứng với nặng (nhiều nút nhất) gọi nút nặng, nút lại gọi nút nhẹ (light) Mỗi nút có nút nặng Cạnh nặng: với nút trong, cạnh nối nút với nặng gọi cạnh nặng, cạnh lại gọi cạnh nhẹ Bằng việc tô màu tất cạnh nặng, ta thu phân rã HLD, chuỗi dãy cạnh tô màu liên thuộc nối tiếp Do nút có nút nặng nên chuỗi đôi rời Hơn thế, chuỗi đường nối nút đến tổ tiên nút Các cạnh nhẹ đóng vai trò kết nối chuỗi Ta xem xét việc di chuyển từ nút nút nhẹ nên gốc theo cạnh nhẹ xuống nút nhẹ , có kích thước không vượt nửa gốc Lại xem xét việc di chuyển từ nút gốc xuống nút lá, lần vào cạnh nhẹ kích thước giảm nửa nên số cạnh nhẹ phải qua nhiều Vì cạnh nhẹ đóng vai trò kết nối chuỗi nên điều có nghĩa phân rã ta vừa xây dựng hoàn toàn thỏa mãn yêu cầu đề Các vấn đề cài đặt Để khởi tạo HLD giải toán ta cần thực hóa công việc:  Tính kích thước cho gốc    Xác định cạnh nặng, nút nặng, qua kết nối thành chuỗi Xây dựng segment tree cho chuỗi Xây dựng sparse table phục vụ toán tìm tổ tiên chung gần Các thông tin hỗ trợ cần thiết:     Với nút, cần biết thuộc chuỗi Với nút, cần biết vị trí chuỗi Với chuỗi, cần biết nút chuỗi (nút tổ tiên) Với chuỗi, cần biết độ dài chuỗi Với truy vấn cập nhật trọng số, cần thực hiện:   Thay đổi trực tiếp cạnh nhẹ Thay đổi segment tree tương ứng với cạnh nặng Với truy vấn hỏi thông tin hai nút  Xác định  Lấy thông tin đường , cần thực hiện: o Lặp , ta xét tổng quát chuỗi : lấy thông tin từ thông tin cạnh nhẹ nối đầu chuỗi chứa : đến đầu chuỗi chứa , lấy với nút cha trực tiếp, thay nút cha trực tiếp o Khi chuỗi, lấy thông tin đoạn chuỗi o Tổng hợp thông tin Toàn công việc kể có độ phức tạp ) Một ứng dụng tư tưởng HLD Blocking Xét toán bản: cho dãy phần tử, thực truy vấn: cập nhật giá trị phần tử đó, hỏi thông tin không cộng tính (max, min, …) đoạn phần tử liên tiếp Nhớ lại ta thường làm Segment tree, Binary Indexed tree cấu trúc tương tự chưa xuất (chưa biết) Cách Brute force  Thay đổi trực tiếp phần tử với truy vấn cập nhật Độ phức tạp  Duyệt qua tất phần tử đoạn truy vấn hỏi Độ phức tạp Cách Blocking (băm khối) Chia dãy thành đoạn rời, gọi khối, khối đoạn độ dài Duy trì dãy thông tin khối Các truy vấn xử lí sau:  Truy vấn cập nhật: cập nhật phần tử, duyệt cập nhật thông tin khối chứa phần tử Độ phức tạp  Truy vấn hỏi thông tin đoạn : xác định khối chứa phần tử thứ , xác định khối chứa phần tử thứ ; xác định thông tin khối xen hai khối vừa tìm được; xác định thông tin nửa khối phải chứa ; xác định thông tin nửa khối trái chứa ; kết hợp thông tin Độ phức tạp Có thể nhận thấy HLD tư tưởng xuất phát với kĩ thuật blocking Đó phân rã không gian tìm kiếm thành mảnh, khối trì cấu trúc lưu giữ thông tin, hỗ trợ truy vấn thông tin mảnh, khối Điểm đặc biệt HLD ta giữ mối liên hệ khối tốt Sau ta tìm cách kết hợp hai kĩ thuật toán tập hợp HLD cho tập hợp Bài toán: cho dãy số hiệu với tập số Phần tử tập Tổng kích thước tập cỡ kí Giải hai loại truy vấn dãy :  “? K”: tính tổng tất phần tử  : gia tăng lượng có số nằm tập cho tất phần tử có số nằm tập Hướng giải tóm tắt sau:  Coi tập nặng , đưa vào quản lí thông qua vị trí đưa vào   (vì số , tập nặng ) Các tập lại gọi nhẹ Các phần tử tập nặng trì danh sách tập nặng có tham gia Mỗi tập (cả nặng nhẹ) xác định số phần tử mà có chung với tập nặng (nhờ danh sách trên)   Giá trị phần tử lưu giá trị riêng, bỏ qua lần tăng tập nặng Duy trì mảng tổng tập bỏ qua việc tăng tập nặng, mảng ghi nhớ lượng tăng vào tập nặng, chúng gọi tắt tổng riêng lượng tăng  Xét truy vấn o Nếu tập nặng, gia tăng lượng tăng , chi phí o Nếu tập nhẹ, thay đổi trực tiếp phần tử tập, chi phí o Tổng riêng tập nặng tăng theo số phần tử chung với tập phí  , chi Xét truy vấn o Nếu tập nặng, kết là: tổng riêng o Nếu tập nhẹ, kết là: tổng giá trị riêng nặng lượng tăng kích thước, chi phí số lần chung với tập lượng tăng tập Chi phí hai pha duyệt phần tử tập , duyệt tập nặng Trong cách giải trên, việc tách rời hoàn toàn lần tăng tập nặng, ta khéo léo thiết lập mối quan hệ tập nói chung với tập nặng Qua chấp nhận việc duyệt tăng giá trị riêng phần tử tập nhẹ với chi phí chấp nhận Việc kết hợp tiêu chuẩn phân loại Heavy-Light HLD với cận độ phức tạp blocking cho giải thuật đẹp cho toán khó Kết luận Các giải thuật, cấu trúc liệu, kĩ thuật lập trình liên tục nảy sinh theo thời gian Bắt kịp với xu hướng cộng đồng lập trình thuật toán giới nhu cầu Qua HLD ứng dụng kết hợp HLD với blocking trình bày trên, thấy rằng: nhiều chẳng qua tìm tòi, phát triển, kết hợp từ nhiều thứ cũ kĩ, quen thuộc Hy vọng cộng đồng đào sâu nghiên cứu sáng tạo thêm nhiều kết mới, đẹp hơn, hiệu hơn, đóng góp vào dòng chảy tiến lên giới lập trình thuật toán

Ngày đăng: 10/10/2016, 10:19

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w