#c #c 14 #binary-search
#c #c 14 #двоичный поиск
Вопрос:
Я только что узнал, как работает двоичный поиск, и мне нужно найти минимальный и максимальный индекс в векторе. Я пробовал несколько вещей, но каждый раз, когда моя функция избегает части моего кода… У меня больше нет идей, это не кажется таким уж сложным, но все же… Я много борюсь с этой концепцией.
РЕДАКТИРОВАТЬ: я понимаю, что мое объяснение не существовало. Итак, что я хочу сделать, так это для данной ноты я хочу найти наименьший ее индекс в векторе элементов песни.
вот моя ближайшая попытка :
int Song::binarySearchMin(const Noteamp; note)
{
int Min = 0, Max = notes.size() ,ind=0;
while (Min <= Max)
{
int middle = (Min Max) / 2;
if (note == notes[middle])
{
ind = middle;
Max = middle;
while (Min <= Max)
{
middle = (Min Max) / 2;
if ((note == notes[middle]) amp;amp; (middle <= ind))
{
ind = middle;
}
Max = middle - 1;
}
return ind;
}
else if (note < notes[middle])
{
Max = middle-1;
}
else
{
Min = middle 1;
}
}
return -1;
}
Я не могу понять, почему он не охватывает каждую ситуацию. Прямо сейчас это работает, когда мой индекс находится посередине. Но он не может обрабатывать несколько индексов.
Комментарии:
1. Используйте английские имена для вашей переменной, которые помогут не-французскому сообществу понять их использование 😉
2. О, действительно, спасибо, что это сделано.
3. Если вы хотите использовать двоичный поиск, вам нужно отсортировать данные … но если вы сортируете по данным, вам больше не нужно искать минимальные и максимальные значения… для линейного поиска просто используйте
std::minmax_element
.4. Является ли песня набором нот? В таком случае отсортирован ли массив заметок? Звучит как ужасная песня 🙂
5. Хорошо … итак, подумайте об этом еще раз … если данные отсортированы, нужен ли вам поиск, чтобы найти минимальное и максимальное значение. Подумайте очень хорошо! Будут ли они (всегда) находиться на месте? (P.s. вам нужно добавить @ перед моим именем, чтобы пометить меня)
Ответ №1:
насколько я знаю, двоичный поиск работает с отсортированными данными, поэтому я думаю, что не стоит использовать его для несортированных данных, поиск min и max в несортированном векторе требует линейного поиска. и двоичный поиск эффективен при поиске элемента в отсортированном массиве или векторе.
Комментарии:
1. Да, вы правы. Наше упражнение предназначено только для того, чтобы мы поняли все, что касается сложности / сортировки и двоичного поиска. Поэтому нам пришлось создать отсортированную область для этого конкретного вопроса