algorithm - 为什么redis命令'LLEN'具有恒定的时间复杂度而不是O(n)?
问题描述
我知道redis列表是由引擎盖下的链表实现的。但是在计算列表长度的时间复杂度时,不应该是O(n)吗?</p>
解决方案
您可以在https://github.com/redis/redis/blob/unstable/src/adlist.h找到列表类型的声明。如果您查看第 50 行附近的部分,您会发现:
typedef struct list {
listNode *head;
listNode *tail;
void *(*dup)(void *ptr);
void (*free)(void *ptr);
int (*match)(void *ptr, void *key);
unsigned long len;
} list;
请注意,unsigned long len
它存储列表的长度。这就是为什么O(1)
。
推荐阅读
- java - 符合 FIPS 140-2 - Oracle 开源“jdk1.8.0_151”
- sql - SQL - 用+=连接变量while循环中的字符串
- php - Symfony - 有没有办法将实体设置为全局?
- wpf - 需要使用 WPF 中的控件模板和数据触发器更改网格中的边框颜色
- html - 禁用时如何为选择占位符提供样式?
- r - lapply函数下的Sys.time
- c++ - C ++如何一起使用 std::adjacent 和 std::count_if 来计算向量中条件的出现次数
- youtube - 在网页上显示 youtube 播放列表标题
- c# - 如何获取 HoloLens 1 的相机流
- r - 初始化 renv 导致 RStudio 崩溃