Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Data structures 为什么在redis集合中插入的时间复杂度为O(n)?_Data Structures_Redis_Set - Fatal编程技术网

Data structures 为什么在redis集合中插入的时间复杂度为O(n)?

Data structures 为什么在redis集合中插入的时间复杂度为O(n)?,data-structures,redis,set,Data Structures,Redis,Set,我正在阅读redis的SADD命令帮助页面 然后我发现有人在问下面的问题 我想知道,对于N个成员,这个操作的复杂性是如何达到O(N)的 补充?如何执行唯一性检查?redis是否存储哈希 包含所有集合的所有成员的表 事实证明,这是一个好问题,我很好奇为什么对于集合插入是O(n)?对于添加的n个成员,复杂性不是O(n),而是O(n)。具体地说,这意味着可以考虑每个插入操作都是在常数时间O(1)中完成的,这只是渐近真实的。 下面,我们假设n是集合中的项数 要执行SADD操作,Redis必须首先查找表示

我正在阅读redis的SADD命令帮助页面

然后我发现有人在问下面的问题

我想知道,对于N个成员,这个操作的复杂性是如何达到O(N)的 补充?如何执行唯一性检查?redis是否存储哈希 包含所有集合的所有成员的表

事实证明,这是一个好问题,我很好奇为什么对于集合插入是O(n)?

对于添加的n个成员,复杂性不是O(n),而是O(n)。具体地说,这意味着可以考虑每个插入操作都是在常数时间O(1)中完成的,这只是渐近真实的。 下面,我们假设n是集合中的项数

要执行SADD操作,Redis必须首先查找表示集合的对象(哈希查找-复杂性O(1)),然后尝试在对象本身中添加该项

该集合可以在内存中表示为整数集或哈希表

如果对象是一个整数集(即整数的排序向量),它将执行二进制搜索以搜索项-O(logn)的位置,然后最终插入项-O(n)-但是这仅适用于小值n。必须选择set max intset条目,以便整个对象适合CPU缓存以获得最佳性能

如果对象是一个哈希表,那么Redis将必须执行查找并在需要时添加该项-复杂性为O(1)

由于SADD命令可以添加N个项,因此产生的渐进复杂性为O(N)。

灵感来自:

SADD
当只传递1个值以添加到集合中时,命令时间复杂度为O(1)

因此,以下命令的复杂性为O(1):

O(N)表示将多个值传递给
SADD
命令时(N=传递的参数数)

所以下面的命令的复杂性是O(3)


阅读更多信息。

这是你见过的将新元素添加到唯一随机字符串列表中的最佳算法。
SADD my_set_name "a_new_value"
SADD my_set_name "a_new_value" "another_new_value" "another_new_value"