Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 01.09.2013
Сообщений: 23

Поиск в сломанном массиве

22.10.2021, 16:44. Показов 1640. Ответов 3

Студворк — интернет-сервис помощи студентам
Помогите укоротить решение, с помощью цикла, и избавиться от некоторых if-ов пожалуста. Моя голова смогла выдать только такое решение данной задачи.

Задача: Алла ошиблась при копировании из одной структуры данных в другую. Она хранила массив чисел в кольцевом буфере. Массив был отсортирован по возрастанию, и в нём можно было найти элемент за логарифмическое время. Алла скопировала данные из кольцевого буфера в обычный массив, но сдвинула данные исходной отсортированной последовательности. Теперь массив не является отсортированным. Тем не менее, нужно обеспечить возможность находить в нем элемент за O(logn).
Можно предполагать, что в массиве только уникальные элементы.


Решение:


Python
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
def binary_search(array, target, left=0, right=None):
    if right is None:
        right = len(array) - 1
    if not array:
        return -1
    mid = (left + right + 1) // 2
    if array[mid] == target:
        return mid
    if left == right:
        return -1
    if array[0] < array[mid]:
        if target >= array[0]:
            if target > array[mid]:
                return binary_search(array, target, mid, right)
            return binary_search(array, target, left, mid - 1)
        return binary_search(array, target, mid, right)
    if target < array[0]:
        if target < array[mid]:
            return binary_search(array, target, left, mid - 1)
        return binary_search(array, target, mid, right)
    return binary_search(array, target, left, mid - 1)
 
 
def broken_search(array, target):
    return binary_search(array, target, 0, len(array) - 1)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.10.2021, 16:44
Ответы с готовыми решениями:

Поиск в сломанном массиве
Формат ввода Функция принимает массив натуральных чисел и искомое число k. Длина массива не превосходит 10000. Элементы массива и число k...

Поиск в сломанном массиве
Алла ошиблась при копировании из одной структуры данных в другую. Она хранила массив чисел в кольцевом буфере. Массив был отсортирован по...

Поиск в сломанном массиве
Алла ошиблась при копировании из одной структуры данных в другую. Она хранила массив чисел в кольцевом буфере. Массив был отсортирован по...

3
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
22.10.2021, 17:14
Поиск в сломанном массиве
0
0 / 0 / 0
Регистрация: 01.09.2013
Сообщений: 23
22.10.2021, 22:30  [ТС]
да я там видел, пробовал. но все что там естть не очень подходит. тесты не проходятся, поэтому решил попросить помочь отрефакторить уже мой рабочий код))
0
0 / 0 / 0
Регистрация: 01.09.2013
Сообщений: 23
27.10.2021, 14:45  [ТС]
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
def broken_search(array, target):
    start_target = array[0]
    right = 0
    left = len(array) - 1
    while right <= left:
        middle = right + (left-right) // 2
        if target == array[middle]:
            return middle
        if (array[middle] < start_target) is not (target < start_target) or array[middle] > target:
            left = middle - 1
        else:
            right = middle + 1
    return -1
я почти сделал. не работает только в случаях, когда array[middle] > target

например, в случае если массив из двух числел 5, 1. А найти нужно индекс единицы. Выдает -1 вместо 1. Наверное логику не могу сформулировать. Помогите пожалуйста
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.10.2021, 14:45
Помогаю со студенческими работами здесь

Поиск в сломанном массиве
Подскажите пожалуйста есть такое замечание по коду, строка def binary_search(arr: list, x: int, left: int, right: int) -&gt; int:...

Задача Поиск в сломанном массиве
Добрый день! Имеется задача такая задача: Алла ошиблась при копировании из одной структуры данных в другую. Она хранила массив чисел...

Максимум на сломанном калькуляторе
Максимум на сломанном калькуляторе Петя Торопыжкин познакомился с гипотезой Коллатца: какое бы натуральное число a0 ни взять,...

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

Максимум на сломанном калькуляторе Pyhon
Петя Торопыжкин познакомился с гипотезой Коллатца: какое бы натуральное число a0 ни взять, последовательность (часто называемая сиракузской...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru