Lưu ý: Tôi đã chuyển câu hỏi này từ stackoverflow.com
Tôi có một vấn đề thuật toán mà tôi muốn xem liệu nó có thể được giải quyết tốt hơn không :
Tôi đã đưa ra một bảng của các phần tử trong đó mỗi phần tử là một tuple với và , tức là mỗi tuple là một loại khoảng. Tôi phải tìm tất cả các khoảng trùng lặp với một khoảng nhất định với và . Hơn nữa, tôi có sẵn hai danh sách được sắp xếp và , chứa các giá trị hoặc giá trị tương ứng, cùng với chỉ mục trỏ đến mục tương ứng trong. Các danh sách được sắp xếp theo giá trị, hoặc các giá trị tương ứng. (Hãy giả sử cả hai, và các giá trị, là duy nhất.)
Vấn đề:
Chúng ta phải tìm từng khoảng / tuple Ở đâu và .
Suy nghĩ của tôi cho đến nay:
Chúng ta có thể loại trừ một số yếu tố của một trong hai cách áp dụng các giới hạn khoảng cách, tức là tìm kiếm trong hoặc tại . Điều này cung cấp cho chúng tôi danh sách gồm các phần tử còn lại: Tuy nhiên , không có ràng buộc thấp hơn về số lượng phần tử trong , bất kể chúng tôi thực hiện tìm kiếm nào. Hơn nữa, chúng tôi phải kiểm tra mọi phần tử trong nếu hoặc tương ứng tùy thuộc vào tìm kiếm nào chúng tôi đã thực hiện trước đó.
Độ phức tạp của giải pháp này là .
Tuy nhiên, giả sử là số phần tử tối đa chồng chéo với khoảng . Nếu chúng ta giả , sau đó mức độ phức tạp là vì chúng ta có thể loại trừ ít nhất yếu tố bằng cách chọn tìm kiếm phù hợp với . Vẫn là trong .
Bạn có thể nghĩ ra một cách tiếp cận tốt hơn để giải quyết vấn đề này?
Cho kỷ lục:
Độ phức tạp để tìm tất cả các khoảng trùng lặp với một khoảng nhất định bằng cách sử dụng cây khoảng là trong đó là số lượng khoảng chồng lấp. Tuy nhiên, trong trường hợp thực tế của tôi, tôi đang sử dụng cơ sở dữ liệu MySQL cung cấp các cây chỉ mục cho từng giá trị, tức là và , riêng biệt. Bằng cách này, tôi không thể tìm thấy các khoảng chồng lấp trong ít hơn . Tôi sẽ cần tạo một cây khoảng là cây tìm kiếm lưu trữ cả hai ranh giới khoảng, tức là và , trong một cấu trúc dữ liệu. Độ phức tạp để xây dựng cây khoảng là . [http://www.dgp.utoronto.ca/people/JamesStewart/378notes/22inter đạn /]