2014-08-30 2 views
0

У меня есть массив, содержащий версии статьи. Я хочу реализовать функцию двоичного поиска, которая возвращает первую версию, содержащую заданную строку. , например, возвратит 4 для следующего массива:Функция двоичного поиска для первого появления строки в массиве

array[0] = my name is foo and I'm a programmer. 
array[1] = my name is bar and I'm a programmer. 
array[2] = my name is foo and I'm a programmer. 
array[3] = my name is and I'm a programmer. 
array[4] = my name is foo and I'm a programmer. 
array[5] = my name is foo. 

Вот что я сделал до сих пор:

private static Revision binarySearch(Revision[] array, int left, int right, 
    String value) throws IOException { 

    if (left > right) 

     //I don't know what to put here; 

    int middle = (left + right)/2; 
    Revision rv = array[middle]; 
    String text = rv.getText(); 
    if (!containsTemplate(text, value)) 
     return binarySearch(array, left, middle - 1, template); 
    else 
     return binarySearch(array, middle + 1, right, template); 

    } 
+4

Двоичный поиск не делает этого, если нет куча вещей, которые вы не говорят нам. – hobbs

+0

http://stackoverflow.com/questions/3183582/what-is-the-fastest-substring-search-algorithm –

+0

Я хочу, чтобы функция Java выполняла поиск заданной строки в редакции статьи википедии. Существующим является http://wikipedia.ramselehof.de/wikiblame.php?user_lang=en&lang=en&project=wikipedia&article=&needle=&skipversions=0&ignorefirst=0&limit=500&offtag=30&offmon=8&offjahr=2014&searchmethod=int&order=desc&user= – Hunsu

ответ

-1

Если предположить, что это сортируется данные таким образом, бинарный поиск уместен:

1) Двоичный поиск экземпляра значения, которое вы ищете.

2) Затем повторите попытку в начале, чтобы определить, является ли это первым экземпляром, или найти этот первый экземпляр, если он не является.

(Другими словами, так же, как вы бы решить эту проблему вручную.)

Смежные вопросы