Thuật toán tìm sự khác biệt nhỏ nhất trong mảng


8

Chúng tôi muốn một thuật toán, đưa ra một mảng có độ dài số nguyên, tìm sự khác biệt tối thiểu giữa hai số nguyên trong mảng.n

Một thuật toán như vậy là sắp xếp mảng và kiểm tra các cặp số liền kề. Điều này làm mất thời gian .O(nlogn)

Có cách nào nhanh hơn, ví dụ thuật toán không?O(n)


không nhanh hơn O ( n log n )O(n)O(nlogn)
David Merinos

Câu trả lời:


7

Ω(nlogn)

xixj

o(nlogn)


xixjΘ(n2)Ω(n2)

x1x2>x3x4x1+5x817x3<5O(nlogn)xi>xjO(n)xixj>xkx

Không chắc chắn tôi hiểu ý nghĩa thực tế của ràng buộc này đối với tính khác biệt của yếu tố. Bạn sẽ không có O (n) dự kiến ​​với bảng băm chứ?
jkff

ω(n)o(nlogn)

-1

Nếu số nguyên trong mảng có số chữ số giới hạn, bạn có thể sắp xếp một mảng bằng thuật toán sắp xếp cơ số , đó là O (kN) và hơn là kiểm tra các cặp số liền kề (O (N))? Kết quả phức tạp sẽ là O ((k + 1) N), tuyến tính.


1
Hãy chú ý đến các điều kiện theo đó thời gian chạy của loại cơ số thực sự tốt.
Raphael

@Raphael Vâng, câu hỏi ban đầu là thuật toán tuyến tính có tồn tại không, vì vậy tôi nghĩ về nó. Bạn có nghĩa là k sẽ lớn hơn log (N) cho N nhỏ?
Pavel Davydov

kNΩ(nlogn)

@Raphael Có, nhưng đối với mảng các số nguyên ít hơn 64 bit (đó là trường hợp khá phổ biến) thì nó sẽ là tuyến tính. Tôi sẽ chỉnh sửa câu trả lời của tôi. Cảm ơn ý kiến ​​của bạn.
Pavel Davydov
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.