Динамизация

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

В информатике, динамизация - это процесс преобразования a в единицу. Хотя статические структуры данных могут обеспечивать очень хорошую функциональность и быстрые запросы, их полезность ограничена из-за их неспособности быстро увеличиваться / уменьшаться, что делает их неприменимыми для решения динамических проблем, где объем входных данных изменения данных. Методы динамизации обеспечивают единообразные способы создания динамических структур данных.

Разложимые задачи поиска

Мы определяем задачу P {\ displaystyle P}P поиска предиката M {\ displaystyle M}M соответствует в наборе S {\ displaystyle S}S как P (M, S) {\ displaystyle P (M, S)}P(M,S). Задача P {\ displaystyle P}P является разложимой, если набор S {\ displaystyle S}S можно разложить на подмножества S i {\ displaystyle S_ {i}}S_ {i} и существует операция + {\ displaystyle +}+ объединения результатов такая, что P (M, S) = P (M, S 0) + P (M, S 1) + ⋯ + P (M, S n) {\ displaystyle P (M, S) = P (M, S_ {0}) + P (M, S_ {1}) + \ dots + P (M, S_ {n})}P (M, S) = P (M, S_0) + P (M, S_1) + \ dots + P (M, S_n) .

Декомпозиция

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

Если используется двоичная система, набор из n {\ displaystyle n}n элементов разбивается на подмножества размеров с

2 i ∗ ni {\ displaystyle 2 ^ {i} * n_ {i}}2 ^ {i} * n_ {i}

элементы, где ni {\ displaystyle n_ {i}}n_ {i} - это i {\ displaystyle i}i -й бит n {\ displaystyle n}n в двоичном формате. Это означает, что если n {\ displaystyle n}n имеет i {\ displaystyle i}i -й бит, равный 0, соответствующий набор не содержит никаких элементов. Каждое подмножество имеет то же свойство, что и исходная статическая структура данных. Операции, выполняемые с новой динамической структурой данных, могут включать просмотр наборов log 2 ⁡ (n) {\ displaystyle \ log _ {2} \ left (n \ right)}\ log_ {2} \ left (n \ right) , сформированных путем декомпозиции. В результате это добавит коэффициент O (log ⁡ (n)) {\ displaystyle O (\ log \ left (n \ right))}O (\ log \ left (n \ right)) в отличие от операций со статической структурой данных, но позволит добавить операцию вставки / удаления.

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

Если

PS (n) {\ displaystyle P_ {S} \ left (n \ right) \, \!}P_S \ left (n \ right) \, \! = время для построения статической структуры данных QS (n) {\ displaystyle Q_ {S} \ left (n \ right) \, \!}Q_S\left(n\right)\,\!= время для запроса статической структуры данных QD (n) {\ displaystyle Q_ {D } \ left (n \ right) \, \!}Q_D \ left ( n \ right) \, \! = время для запроса динамической структуры данных, сформированной разложением I ¯ {\ displaystyle {\ overline {I}}}\ overline {I} = амортизированное время вставки

, затем

QD (n) = O (QS (n) log ⁡ (n)) {\ displaystyle Q_ {D} \ left (n \ right) = O ( Q_ {S} \ left (n \ right) \ log \ left (n \ right)) \, \!}Q_D \ left (n \ right) = O (Q_S \ left (n \ right) \ log \ left (n \ right)) \, \! I ¯ = O ((PS (n) / n) log ⁡ (n)) {\ displaystyle {\ overline {I}} = O (\ left (P_ {S} \ left (n \ right) / n \ right) \ log \ left (n \ right))}\ overline {I} = O (\ left (P_S \ left (n \ right) / n \ right) \ log \ left (n \ right)) 

Если QS ( n) {\ displaystyle Q_ {S} \ left (n \ right)}Q_S \ left (n \ right) не менее многочлен, тогда QD (n) = O (QS (n)) {\ displaystyle Q_ {D} \ left (n \ right) = O \ left (Q_ {S} \ left (n \ right) \ right)}Q_D \ left (n \ right) = O \ left (Q_S \ left (n \ right) \ right) .

Дополнительная литература
Последняя правка сделана 2021-05-18 07:29:03
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте