2015-05-04 1 views
0

У меня есть быстрый быстрый вопрос, но у меня возникли проблемы с пониманием, пример кода ниже с комментариями.с ошибкой сравнения, считая в то время как в двоичном поиске и последовательном, нужна ясность

При поиске по массиву элементов с использованием binarySearch, что такое сравнение?

или в случае массива int, содержащего 178,384,471,478,487,576,617,630,649,817,821,915,917,972,975 с 821, являющимся целью, с которой будет считаться сравнение ???

Я разместил там, где я думаю, что происходит сравнение, пожалуйста, исправьте меня, если я ошибаюсь, или скажите мне, правильно ли я :) спасибо всем.

public static int binarySearch(String[] data, String target, int first, int last) 
{ 
    if(first > last) 
    return -1; 
    else 
    int middle = (first+last)/2; 
    int result = data[first].compareTo(data[middle]) 
    if(result == 0) //IS THIS A COMPARISON? (I THINK YES) 
     return middle; 
    else if(result < 0) // IS THIS A COMPARISON (I THINK YES) 
     return binarySearch(data,target.first,middle-1); 
    else 
     return binarySearch(data,target,middle+1,last); // IS THIS A COMPARISON? (I THINK NO) 
} 

ответ

0

На самом деле это реально сравнение int result = data[first].compareTo(data[middle]) КРП-заявление делать только разные вещи, основанные на «реальное» сравнении.

+0

Ну, сколько раз это было бы рассчитано в массиве 'int', содержащем' 178,384,471,478,487,576,617,630,649,817,821,915,917,972,975' с '821' является целью. – Kevin

+0

вы можете добавить инструкцию печати' System.out.println («execute») 'после/перед линией сравнения. Затем подсчитайте строки в выходном потоке. – tkokasih

0

Таким образом, почти по определению любой equality or relational operator или метод, который обертывает такой оператор, будет сравнением.

В общем, то, что вы, вероятно, хотите оценить, это порядок ваших алгоритмов по мере того, как увеличивается вход, достаточно рассчитать время разговора, вызываемое функцией, даже если внутри есть 3 сравнения, например. Порядок (в этом случае O (log (n)) не изменится.

Примечания: вы можете использовать фактический массив целых чисел вместо сравнения строк, что может быть дорогостоящим и сложным (т.е. «12», > 110). Кроме того, это устранило бы необходимость получить «результат», просто сравните с сохраненными значениями.

+0

Да, извините, я просто хотел предоставить как пример строки и целое число. Хорошо, вы можете попытаться сломать этот первый и второй абзацы вниз e для меня..если возможно. im rusty on my bigO stuff – Kevin

+0

Ответьте мне что-то первое: почему именно вам нужно знать, что такое сравнение? У меня есть предположение, но я могу, вероятно, дать вам лучший ответ с небольшим контекстом. Какая у вас конечная цель? –

+0

поэтому, когда вам задан массив и цель для поиска, я должен подсчитать количество сравнений (только на бумаге) и указать, сколько сравнений, полученных от этого массива, до цели. это необходимо сделать как для последовательного, так и для двоичного поиска. только на бумаге. – Kevin

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