Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.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
Go 戈朗的大O_Go_Append_Complexity Theory_Slice - Fatal编程技术网

Go 戈朗的大O

Go 戈朗的大O,go,append,complexity-theory,slice,Go,Append,Complexity Theory,Slice,Go的内置append函数有多复杂?使用+进行字符串连接怎么样 我想通过附加两个不包括该元素的片段来从片段中删除元素,例如 表示如果目标具有足够的容量,则该片将被重新许可。我希望“重新洗牌”是一个固定的时间操作。我也希望这同样适用于使用+的字符串连接。这一切都取决于实际使用的实现,但我是基于标准Go和gccgo 切片 Reslicing意味着更改结构中的整数(切片是一个包含三个字段的结构:长度、容量和指向备份内存的指针) 如果片没有足够的容量,append将需要分配新内存并复制旧内存。对于102

Go的内置
append
函数有多复杂?使用
+
进行字符串连接怎么样

我想通过附加两个不包括该元素的片段来从片段中删除元素,例如


表示如果目标具有足够的容量,则该片将被重新许可。我希望“重新洗牌”是一个固定的时间操作。我也希望这同样适用于使用
+

的字符串连接。这一切都取决于实际使用的实现,但我是基于标准Go和gccgo

切片

Reslicing意味着更改结构中的整数(切片是一个包含三个字段的结构:长度、容量和指向备份内存的指针)

如果片没有足够的容量,append将需要分配新内存并复制旧内存。对于1024个元素的切片,它将增加系数1.25

字符串


由于字符串是不可变的,因此使用
+
连接的每个字符串将创建一个新字符串,这意味着复制旧字符串。所以,如果在一个循环中执行N次,您将分配N个字符串并复制大约N次内存

谢谢!将uint8的一部分传递给
字符串
函数怎么样?那是
O(1)
还是
O(n)
?(标准Go实施)O(n)。片是可变的,字符串不是→ 它必须复制数据。换句话说,将一个元素附加到一个切片上是摊销的O(1)。这在任何地方都有记录吗?@Bryan在这篇文章中指出,你可以在这里找到这种行为硬编码的一些行为参考:
nums := []int{0, 1, 2, 3, 4, 5, 6, 7}
fmt.Println(append(nums[:4], nums[5:]...))

=> [0 1 2 3 5 6 7]