Удалить внешний ключ, добавленный по соглашению в Entity Framework Core

Нет, на мой взгляд, первое решение - это не O (log n), как утверждают другие ответы, это действительно O (n) наихудший случай (в худшем случае ему все равно нужно пройти через все элементы, рассмотрите массив эквивалентности

Причина, по которой это не O (log n), заключается в том, что она должна искать по обе стороны от середины (двоичный поиск проверяет только одну сторону середины поэтому это O (log n)).

Позволяет пропускать элементы, если вам повезло, однако ваше второе итеративное решение пропускает элементы, если не нужно смотреть на них (потому что вы знаете, что не может быть волшебный индекс в таком диапазоне, как массив сортируется), поэтому, на мой взгляд, второе решение лучше (такая же сложность + итеративная, то есть лучшая пространственная сложность и отсутствие рекурсивных вызовов, которые относительно дороги).

EDIT: Однако когда я снова подумал о первом решении, он с другой стороны позволяет «пропустить назад», если это возможно, итерационное решение не позволяет - рассмотрим например, массив, например {-10, -9, -8, -7, -6, -5}, итерационное решение должно будет проверять все элементы, поскольку оно начинается с начала, а значения не позволяют пропустить вперед, тогда как при старте с середины, алго может полностью пропустить проверку первой половины, затем первой половины второй половины и т. д.

0
задан Vladimir Perevalov 16 January 2019 в 07:26
поделиться