Làm sao để thuật toán binary search có thể tìm ra được nhiều vị trí?

mọi người cho mình hỏi là
trong một mảng có 2 phần tử giống nhau ở 2 vị trí khác nhau thì làm cách nào cho thuật toán binary có thể search ra được cả 2 vị trí,mình đã cố thử nhưng kết quả toàn cho ra 1 vị trí đầu tiên

1 Like

Cái này chỉ cần thay đổi cách nhìn 1 chút: giờ chia mảng thành hai phần theo x, vậy bạn chia ntn?

8 Likes

binary search mảng đã được xếp sẵn vì vậy bạn chỉ cần lấy 1 lèo toàn bộ những ô giống nhau là được :crazy_face: :crazy_face: :crazy_face: :crazy_face: :crazy_face:
Ví dụ bạn sẽ lấy được index chú hà mã đầu tiên, vậy thì tăng index lấy tiếp cho đến khi không còn hà mã :hippopotamus: nữa:
:poop: :ghost::hippopotamus: :hippopotamus: :hippopotamus: :hippopotamus: :hippopotamus: :skull_and_crossbones:

9 Likes

để phủ được trường hợp này thì bạn cần chạy 2 loop, ví dụ như lấy được index của chú :hippopotamus: thứ 3 thì bạn cần 1 loop giảm index để bắt toàn bộ :hippopotamus: bên trái và 1 loop tăng index để bắt toàn bộ :hippopotamus: bên phải.
vậy là sẽ bắt được toàn bộ 5 :hippopotamus:.

8 Likes

Mọi người đừng bị chủ thớt lừa.
Thực ra đề là:
“Cho một mảng các số nguyên các số khác nhau đôi một, chỉ duy nhất 1 cặp trùng nhau. Tìm cặp số đó”
Chủ thớt nghĩ rằng dùng binary search sẽ ra nên hỏi vậy.
Ahihi, đoán đại vậy thôi.

8 Likes

:scream: ủa làm được vậy à? Hay vậy? :scream_cat:

5 Likes

Dùng chia để trị thôi, chia như phần chia partition của QuickSort ấy.

Mà thớt sao có thể nhầm phần tạo partition thành binary search hay vậy? :zipper_mouth_face:

6 Likes

Nếu làm được thì lên đây hỏi làm giề :stuck_out_tongue:

5 Likes

đề yêu cầu tìm chỉ 2 phần tử thôi à?
đề cho mảng đã sắp xếp chưa mà xài binary search?
nếu đã sắp xếp rồi, tìm được vị trí phần tử đầu tiên thì phần tử thứ 2 ở ngay cạnh nó chứ ở đâu nữa >_>

9 Likes

mọi người cho mình hỏi là
trong một mảng có 2 phần tử giống nhau ở 2 vị trí khác nhau thì làm cách nào cho thuật toán binary có thể search ra được cả 2 vị trí,mình đã cố thử nhưng kết quả toàn cho ra 1 vị trí đầu tiên

  • nếu bạn vẫn kiên quyết dùng binary search thì nó sẽ nằm ở bên trái hoặc phải của cái vị trí, tùy RNG của bạn như nào :v (tất nhiên là yêu cầu của binary search là mảng phải được sắp xếp)
  • hoặc có thể dùng cái này
8 Likes

Mảng nhiều phần tử đó thì thành O(n) :smiley: chia mảng làm đôi là chắc cú.

Nhưng do đặc điểm này nên ta có thể tìm kiếm theo kiểu ±1, ±2, ±4, ±8…

5 Likes
  • Cách đơn giản nhất là duyệt từ đầu mảng đến cuối mảng a[i] = key thì vứt i vào stack nào đó.Độ phức tạp O(n).
  • Nếu mảng đã sắp xếp rồi thì ý tưởng là dùng binary_search nhưng vấn đề là binary_search cần phải cải tiến cho 2 nhiệm vụ dùng để tìm vị trí đầu tiên sao cho giá trị = key và một biến thể # của binary_search để đếm tất cả phần tử key trong mảng.Độ phức tập O(log n).
3 Likes

key ở đâu ra vậy bạn? :laughing:

5 Likes

Thật ra bài này dùng thuật toán Rùa và Thỏ như bạn Đạt đưa link là tối ưu nhất. Nhưng thớt đang cố áp dụng 1 thuật toán có dạng binary search để giải.

6 Likes

Binary search chỉ dùng được với mảng đã sắp xếp rồi. Vì vậy các phần tử bằng nhau luôn đứng kề nhau. Chỉ cần tìm được vị trí đầu tiên rồi cho 1 vòng lặp là biết được tất cả vị trí có giá trị bằng nhau rồi còn gì.

4 Likes
6 Likes

Đúng cái video mình từng xem luôn =]]

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?