Я попытался отчаянно найти ответ через Google и не смог. Я собираюсь сделать сам тест, но подумал, что, может быть, кто-то здесь знает ответ или, по крайней мере, ссылку, где это документировано.Какова временная сложность поиска имени в списке R?
Чтобы расширить на мой вопрос: предположим, у меня есть список L
в R длины N
, где N
является довольно большим (скажем, 10000, 100000, 1 млн или более). Предположим, что в моем списке есть имена для каждого элемента. `
Интересно, сколько времени потребуется для получения одного имени записи, например, сделать
L[[ "any_random_name" ]]
ли на этот раз O(N)
, т.е. пропорционально длине списка, или это O(1)
, что является константой, независимой от имени списка. или это может быть O(log N)
?
Это настоятельно указывает на то, что это не 'O (1)': https://www.r-bloggers.com/hash-table-performance-in-r-part-i/ Также см. этот вопрос: http://stackoverflow.com/q/3470447/4996248 (Первая ссылка показывает, что это 'O (n)'. Они определяют результат поиска * всех * ключей, которые квадратичны, хотя они ошибочно говорят, что они экспоненциальны). –
Для поиска по одному значению (например, '" any_random_name "'), соответствующей части ['do_subset2_dflt'] (https://github.com/wch/r-source/blob/d8f952565bb9c48bd524c368f3e4ac0d3de096b0/src/main/subset.C# L1018-L1030) должен быть вызов ['get1index'] (https://github.com/wch/r-source/blob/af7f52f70101960861e5d995d3a4bec010bc89e6/src/main/subscript.c#L224-L233), который появляется быть линейным. – nrussell
[быстрый тест] (https://gist.github.com/nathan-russell/d09e220899115d85b10c0959188a287b), похоже, подтверждает это. – nrussell