Tôi đã xem qua những câu dưới đây:Tìm kiếm một phần tử trong log (n) thời gian
Giả sử tôi sửa đổi một danh sách được sắp xếp cho các con số khác biệt 4n như sau:
Giữ yếu tố trong thậm chí vị trí (vị trí 2, 4, 6, ... 4n). Hình thành các cặp phân tách n (i, j) trên các vị trí số lẻ trong đó i = 2k + 1 cho một số k = 0 đến n -1 và j = 2k + 1 cho một số k = n đến 2n − 1.
Bây giờ hoán đổi các phần tử ở các vị trí i và j cho mỗi cặp như vậy. (tức là mọi phần tử trong một vị trí được đánh số lẻ trong nửa đầu của mảng được hoán đổi với một số phần tử ở một vị trí được đánh số lẻ trong nửa thứ hai của mảng. Không có phần tử nào tham gia vào nhiều trao đổi (tức là các giao dịch hoán đổi được phân tách) Bạn không biết những cặp (i, j) này ngoại trừ một phần tử ở một vị trí được đánh số lẻ trong nửa đầu của mảng được hoán đổi với một số phần tử ở một vị trí được đánh số lẻ trong nửa thứ hai. giải thích cách bạn có thể xác định xem liệu x có nằm trong mảng (mới được chỉnh sửa) trong thời gian O (logn) hay không.
Thành thật mà nói, tôi không chắc chắn về cách tiếp cận mảng này. nó tồn tại ở bất kỳ vị trí được đánh số nào bằng cách sử dụng tìm kiếm nhị phân.Nhưng các số ở các vị trí lẻ không còn được sắp xếp.
Bất kỳ trợ giúp nào được đánh giá cao. Cảm ơn!
Tôi cũng bị bối rối. Tôi nghĩ chúng ta cần bằng cách nào đó sử dụng thực tế là nếu x không ở vị trí chẵn, thì nó nằm giữa 2 số chẵn vị trí a và b, và chính xác 1 phần tử vị trí lẻ (ở đâu đó trong nửa đối diện) y sao cho
Theo như tôi có thể hiểu được mô tả bạn không thể. Bạn có thể thử nghiệm với tìm kiếm nhị phân nếu 'x' nằm ở bất kỳ vị trí nào. Nếu không, bạn có thể so sánh với vị trí '2n'th để tìm hiểu xem' x' có nằm ở phần trên hay phần dưới của mảng ban đầu, ngụ ý rằng nó có thể ở vị trí lẻ ở nửa dưới hoặc nửa trên của xáo trộn mảng, tương ứng. Nhưng bạn không thể tìm thấy nó trừ khi quét tất cả các vị trí lẻ 'n' của nửa tương ứng của mảng. Điều đó làm cho O (n) compexity. – CiaPan