Wyszukiwanie binarne 1-szego elementu

0

Hej, mam uporządkowaną tablicę typu int. Chcę wyszukać daną wartość i podać liczbę jej wystąpień. Napisałem algorytm zwykłego wyszukiwania binarnego i potem na piechotę sprawdzałem wartości z lewej i z prawej strony znalezionego przeze mnie indeksu by określić jaka jest ich ogólna liczba. Niestety wykładowca stwierdził że w pesymistycznym przypadku tablica będzie zawierać dokładnie takie same elementy i w efekcie mój algorytm może mieć złożoność liniową co jest niedozwolone. Zadanie należy rozwiązać tak by znaleźć indeks pierwszego i ostatniego wystąpienia danego elementu w tablicy, odjąć indeks ostatni od pierwszego i w ten sposób uzyskać ilość duplikatów. Jednak mnie się wydaje że aby znaleźć pierwsze wystąpienie elementu np. 9 to trzeba najpierw znaleźć ostatnie wystąpienie elementu 8, czyli znów algorytm wyszukiwania binarnego i przesuwanie się w prawo aż do liczby 9, a co jeśli 8 nie ma w tablicy? Szukam 7, jak 7 nie ma to 6, jak 6 nie ma to 5 i tak aż do najmniejszego możliwego inta? Może ja czegoś w tym algorytmie nie ogarniam, proszę o pomoc. Pozdrawiam

0

W normalnym wyszukiwaniu binarnym rozpatrujesz trzy warianty: tb[i]<x, tb[i]=x, tb[i]>x
W tym przypadku musisz:

  • najpierw wyszukać rozpatrując dwa warianty: tb[i]<=x, tb[i]>x
  • potem wyszukać rozpatrując dwa warianty: tb[i]<x, tb[i]>=x

1 użytkowników online, w tym zalogowanych: 0, gości: 1