Jump to content

Чувствительный к выходу алгоритм

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

Деление вычитанием

[ редактировать ]

Простым примером алгоритма, чувствительного к выходу, является алгоритм деления вычитанием , который вычисляет частное и остаток от деления двух положительных целых чисел, используя только сложение, вычитание и сравнение:

def divide(number: int, divisor: int) -> Tuple[int, int]:
    """Division by subtraction."""
    if divisor == 0:
        raise ZeroDivisionError
    if number < 1 or divisor < 1:
        raise ValueError(
            f"Positive integers only for "
            f"dividend ({number}) and divisor ({divisor})."
        )
    q = 0
    r = number
    while r >= divisor:
        q += 1
        r -= divisor
    return q, r

Пример вывода:

>>> divide(10, 2)
(5, 0)
>>> divide(10, 3)
(3, 1)

Этот алгоритм требует времени Θ (Q) и поэтому может быть быстрым в сценариях, где известно, что фактор Q мал. Однако в тех случаях, когда Q велико, его превосходят более сложные алгоритмы, такие как длинное деление .

Вычислительная геометрия

[ редактировать ]

Алгоритмы выпуклой оболочки для нахождения выпуклой оболочки конечного набора точек на плоскости требуют Ω( n log n ) времени для n точек; даже относительно простые алгоритмы, такие как сканирование Грэма, достигают этой нижней границы. Если выпуклая оболочка использует все n точек, это лучшее, что мы можем сделать; однако для многих практических наборов точек, и в частности для случайных наборов точек, количество точек h в выпуклой оболочке обычно намного меньше, чем n . Следовательно, чувствительные к выходу алгоритмы, такие как окончательный алгоритм выпуклой оболочки и алгоритм Чана , которые требуют только времени O ( n log h ), работают значительно быстрее для таких наборов точек.

Алгоритмы, чувствительные к выходным данным, часто возникают в приложениях вычислительной геометрии и были описаны для таких задач, как удаление скрытых поверхностей. [1] и разрешение конфликтов фильтров диапазона в таблицах маршрутизации. [2]

Фрэнк Нильсен описывает общую парадигму алгоритмов, чувствительных к выходным данным, известных как группировка и запрос , и дает такой алгоритм для вычисления ячеек диаграммы Вороного . [3] Нильсен разбивает эти алгоритмы на два этапа: оценка размера выходных данных, а затем построение структур данных на основе этой оценки, которые запрашиваются для построения окончательного решения.

Обобщения

[ редактировать ]

Более общий вид алгоритмов, чувствительных к выходным данным, — это алгоритмы перечисления , которые пересчитывают множество решений проблемы. В этом контексте производительность алгоритмов также измеряется с учетом выходных данных, в дополнение к более чувствительным мерам, например, ограниченной задержке между любыми двумя последовательными решениями.

См. также

[ редактировать ]
  1. ^ Шарир, М .; Овермарс, Миннесота (1992). «Простой чувствительный к выходным данным алгоритм удаления скрытых поверхностей». Транзакции ACM с графикой . 11 : 1–11. дои : 10.1145/102377.112141 . hdl : 1874/16612 .
  2. ^ Хайрил А. Мохамед и Кристин Купич. Чувствительный к выходу алгоритм O( n log n ) для обнаружения и разрешения конфликтов для одномерных фильтров диапазона в таблицах маршрутизации. Институт информатики. 5 августа 2006 г. ftp://ftp.informatik.uni-freiburg.de/documents/reports/report226/report00226.ps.gz.
  3. ^ Фрэнк Нильсен. Группировка и запросы: парадигма получения алгоритмов, чувствительных к выходным данным. Пересмотренные статьи Японской конференции по дискретной и вычислительной геометрии, стр. 250–257. 1998. ISBN   3-540-67181-1 . http://www.sonycsl.co.jp/person/nielsen/PT/groupingquerying/n-grouping.ps
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 9408e187342da9aa0df5947bcfac0fae__1681413780
URL1:https://arc.ask3.ru/arc/aa/94/ae/9408e187342da9aa0df5947bcfac0fae.html
Заголовок, (Title) документа по адресу, URL1:
Output-sensitive algorithm - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)