Я новичок здесь. Будучи студентом-градиентом, я некоторое время занимаюсь мозговым штурмом по алгоритмам. Я ценю любую помощь, которая может быть расширена в отношении проблемы ниже. Я искал достаточно, и я не мог найти никакого близкого решения этой проблемы.Разделите и покорите алгоритмы (применение бинарного поиска ?!)
У нас есть массив отсортированных различных чисел, который бесконечно длинный. Первые n чисел являются дробями, которые больше 0, но меньше 1. Все остальные элементы равны «1», и вам не присваивается значение n. Вам нужно разработать алгоритм, чтобы проверить, имеется ли в этом массиве заданная пользователем фракция F. Проанализируйте временную сложность алгоритма как функцию n. (Пример для n = 8, где 1 начинается с 8-го положения массива)
Мой подход: Я предполагаю, что лучший способ решить это - использовать двоичный поиск. Каждый раз, когда мы можем уменьшить размер массива наполовину и, наконец, придем к найденной части. Предположим, что в массиве есть m элементов, включая 1. Число дробных элементов равно n. Сложность выполнения бинарного поиска по всему массиву равна O (log (m)). Поскольку меня просят выразить временную сложность в терминах n, m = n + k (при условии, что число 1 в массиве равно k) Таким образом, временная сложность этой проблемы равна O (log (n + k)) ,
Пожалуйста, бросьте свои мысли. Спасибо
«У нас есть массив отсортированных различных чисел, который бесконечно длинный». Остановись прямо там. Оставьте факультет информатики прямо сейчас и пойдите в математический отдел по соседству. –
@MikeNakis Почему? Некоторый алгоритм компьютерной науки должен принимать несвязанные значения. – ElderBug
Вы не можете иметь массив бесконечной длины. Вы можете говорить о бесконечном потоке предметов, но не о бесконечном массиве. И, конечно, вы не можете выполнять бинарный поиск в потоке, потому что вам нужно знать общее количество элементов, чтобы вы могли вычислять середину и т. Д. И т. Д. –