С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.81/21: Рейтинг темы: голосов - 21, средняя оценка - 4.81
1 / 1 / 0
Регистрация: 23.11.2015
Сообщений: 24

Оптимизированный бинарный поиск

24.09.2017, 13:10. Показов 4576. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть типичный код бинарного поиска, вопрос в том в чем его смысл, много перечитано, не понимаю, что обозначает key и как возможно его оптимизировать путем выбора не серединного значения, а значения, вычисленного из предположения о линейном возрастании значений элементов массива в текущем интервале поиска
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.09.2017, 13:10
Ответы с готовыми решениями:

Бинарный поиск На c#
В институте сразу же начали писать на C#, конечно же, никто ничего не объяснил. Второй день мучаюсь с поиском. Видела здесь тему попыталась...

Бинарный поиск
Элементы массивов вводятся пользователем вручную с клавиатуры. При вводе данных предусмотреть проверку правильности ввода элементов...

Бинарный поиск
Доброе время суток! Подскажите пожалуйста, в чем заключается ошибка? иногда выводит все правильно, но в некоторых случаях вот такое ...

3
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
24.09.2017, 14:21
Лучший ответ Сообщение было отмечено vikvikich как решение

Решение

Цитата Сообщение от vikvikich Посмотреть сообщение
вопрос в том в чем его смысл
Смысл в очень быстром нахождении нужного элемента в упорядоченной последовательности.

Цитата Сообщение от vikvikich Посмотреть сообщение
не понимаю, что обозначает key
Обычно в описании алгоритма он обозначает искомый элемент.

Цитата Сообщение от vikvikich Посмотреть сообщение
как возможно его оптимизировать путем выбора не серединного значения, а значения, вычисленного из предположения о линейном возрастании значений элементов массива в текущем интервале поиска
Если предположить, что значения в последовательности возрастают линейно, то можно попытаться "угадать" местоположение искомого элемента, высчитав его из первого и последнего значений последовательности.

Например, имеется массив из 100 элементов, заполненный следующими значениями:
0 2 4 6 8 10 ... 194 196 198

Допустим, мы ищем элемент 86.

Если предположить или заранее известно, что значения в массиве увеличиваются линейно, то нехитрыми вычислениями можно получить значение шага:
(Макс_значение - мин_значение) / (макс_индекс - мин_индекс) = (198 - 0) / (99 - 0) = 2

Если шаг 2, то элемент 86 должен находиться на позиции 86 / 2 = 43.

Если предположение о линейном возрастании последовательности истинно, то мы нашли элемент за О(1), если нет, то вычисляем тем же методом, но уже на новом промежутке: если элемент на позиции 43 меньше 86-и, то на промежутке [44; 99], если больше, то на промежутке [0, 42]. В среднем это даст сложность O(loglogn), что является приростом по сравнению с O(logn) классического алгоритма.
В худшем случае — O(n), что является ухудшением по сравнению с классическим алгоритмом.
2
1 / 1 / 0
Регистрация: 23.11.2015
Сообщений: 24
24.09.2017, 16:12  [ТС]
спасибо большое за содержательный ответ, буду пытаться реализовать это в коде

Добавлено через 45 минут
то есть, можно считать что такой код - это простейший алгоритм нахождения элемента зная его индекс?
или всё же надо через цикл?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
class Program
        {
            static void Main(string[] args)
            {
                Sort();
            }
            static void Sort()
            {
 
 
                Console.WriteLine("Введите через пробел элементы массива");
                int[] myint = Console.ReadLine().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).Select(n => int.Parse(n)).ToArray();
 
                 Optimize(myint);
                Console.ReadLine();
            }
            
            static void Optimize(int[] myint)
            {
            Console.WriteLine("Введите index");
            int index = Console.Read();
            int maxValue = myint.Max();
            int minValue = myint.Min();
            int max = myint.Max();
            int min = myint.Min();
            int maxIndex = Array.FindLastIndex(myint, delegate (int i) { return i == max; });
            int mixIndex = 0;
            double h = (maxValue - minValue) / (maxIndex - mixIndex);
            double el = index * h;
            Console.WriteLine("Искомый элемент", el);
            Console.ReadKey();
 
        }
 
            }
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
24.09.2017, 16:16
Цитата Сообщение от vikvikich Посмотреть сообщение
можно считать что такой код - это простейший алгоритм нахождения элемента зная его индекс?
Код делает что-то очень странное.
Но вот что он точно не делает, так это не ищет элементы.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.09.2017, 16:16
Помогаю со студенческими работами здесь

Бинарный поиск
Найти в массиве елемент со значением Х с помощью бинарного поиска. Добавлено через 1 минуту Если можно, то сделать отдельную...

Бинарный поиск
Как осуществить бинарный поиск, например числа 27. Как это работает понимаю, но не могу написать это на коде. В интернете нормального...

Оптимизированный поиск
Задача простая: есть 2 листа, в каждом по два столбца с данными. Необходимо сравнить эти таблицы на полное совпадение смежных ячеек, и все...

Оптимизированный поиск в БД
Прошу подскажите формы и метода работы с массивом данных, в котором я ищу конкретное значение. Есть ли какие более удобные способы поиска...

Оптимизированный поиск
Доброе утро. У меня такая пробела возникла. У меня в базе есть 40 000 информаций, и мне надо по ним сделать мгновенный поиск. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru