Hướng dẫn giải bài MEDIAN

Trùm CUỐI 2019-12-23 2:21:13 2019-12-23 2:22:15

Ta xét bài toán: Cho hai dãy số a_1, a_2, \ldots, a_n b_1, b_2, \ldots, b_m đã được sắp xếp không giảm. Tìm số trung vị của dãy số c_1, c_2, \ldots, c_{n+m} là dãy gộp của hai dãy số trên.

Do hai dãy số ban đầu đã sắp xếp nên ta có thể tạo dãy \{c\} cũng sắp xếp không giảm bằng cách trộn hai dãy \{a\} \{b\} với độ phức tạp O(n + m) , khi đó có thể có ngay trung vị của dãy \{c\} .

Tuy nhiên, ta có thể lợi dụng tính có thứ tự của hai dãy ban đầu để đưa ra thuật toán chặt nhị phân: Ta sẽ chặt nhị phân để tìm số k mà trên hai dãy \{a\} \{b\} có đúng \lfloor \frac{n+m}{2} \rfloor số \le k . Độ phức tạp cho một truy vấn bằng O(log(n+m)\times maxV)