Должен ли я рассмотреть memmove () O (n) или O (1)? - PullRequest
7 голосов
/ 26 апреля 2010

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

Можете ли вы помочь / объяснить?

void * memmove ( void * destination, const void * source, size_t num );

Так же сложность O (num) или O (1).Я предполагаю, что это O (num), но я не уверен, так как мне пока не хватает понимания того, что происходит под капотом.

Ответы [ 2 ]

11 голосов
/ 26 апреля 2010

Поскольку время выполнения memmove увеличивается прямо пропорционально количеству байтов, которое требуется переместить, оно равно O (n).

2 голосов
/ 26 апреля 2010

Что вы применяете операцию memmove() к выбранным элементам в алгоритме или ко всем из них? Применяете ли вы memmove() к элементам более одного раза?

Это те вещи, которые будут иметь значение для сложности алгоритма.

Этот ответ может отличаться от сложности самого memmove() в отношении массивов char элементов, с которыми имеет дело memmove() (для которых memmove() - операция O (n)).

...