Tôi có một số phạm vi-đối tượng mà tôi cần phải hợp nhất để tất cả các dãy chồng chéo biến mất:Làm thế nào để chức năng merge chồng chéo số-dao động từ một danh sách
case class Range(from:Int, to:Int)
val rangelist = List(Range(3, 40), Range(1, 45), Range(2, 50), etc)
Dưới đây là các dãy:
3 40
1 45
2 50
70 75
75 90
80 85
100 200
Sau khi hoàn tất, chúng tôi sẽ nhận được:
1 50
70 90
100 200
Imperative Thuật toán:
0.123.- Pop() dải ô đầu tiên và lặp lại thông qua phần còn lại của danh sách so sánh nó với mỗi dải khác.
- nếu có mục chồng chéo, hợp nhất chúng lại với nhau (Điều này mang lại một trường hợp Phạm vi mới) và xóa 2 ứng viên hợp nhất khỏi danh sách nguồn.
- Ở cuối danh sách, thêm đối tượng Phạm vi (có thể thay đổi nhiều lần thông qua hợp nhất) thành danh sách kết quả cuối cùng.
- Lặp lại điều này với phần tiếp theo của các mục còn lại.
- Khi danh sách nguồn bị trống, chúng tôi đã hoàn tất.
Để thực hiện điều này phải nhất thiết chúng ta phải tạo ra rất nhiều biến tạm thời, vòng lập chỉ mục, vv
Vì vậy, tôi tự hỏi nếu có một cách tiếp cận chức năng hơn? Ở góc nhìn đầu tiên, bộ sưu tập nguồn phải có khả năng hoạt động như một Stack trong việc cung cấp pop() PLUS cho khả năng xóa các mục theo chỉ mục trong khi lặp qua nó, nhưng sau đó sẽ không còn chức năng nữa.
Giả định rằng 'rs' được sắp xếp theo các yếu tố ban đầu của dải ô. Nó sẽ là tốt hơn chỉ để làm cho 'x chứa y.from'. –
'hợp nhất' sắp xếp và chuyển đến' thu gọn'. Nếu bạn không thực hiện nó theo cách này, thời gian chạy của bạn là 'O (n^2)' thay vì 'O (n log n)' như nó nên. –
Duh! Tôi không chú ý rằng phương thức 'merge' ... –