Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.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
MATLAB有一个不连续的列表吗?_Matlab - Fatal编程技术网

MATLAB有一个不连续的列表吗?

MATLAB有一个不连续的列表吗?,matlab,Matlab,MATLAB的列表/数组具有连续内存。所以我猜追加/连接必须需要重新分配和数据拷贝,尽管我不确定它是否在内部保留了空间 MATLAB是否有一个具有不连续内存的列表,以便我们可以以恒定的开销附加元素?它有一个containers.Map。它有固定的访问时间吗?如果是这样,我可以用它来模拟一个列表 根据澄清,我会选择使用containers.Map,或者使用单元格数组,如果可以编写自己的例程,以更大的步骤(比如每次加倍)不频繁地增长它。我会选择哪一个取决于正在做什么,因为与他们一起工作是完全不同的

MATLAB的列表/数组具有连续内存。所以我猜追加/连接必须需要重新分配和数据拷贝,尽管我不确定它是否在内部保留了空间


MATLAB是否有一个具有不连续内存的列表,以便我们可以以恒定的开销附加元素?它有一个containers.Map。它有固定的访问时间吗?如果是这样,我可以用它来模拟一个列表

根据澄清,我会选择使用
containers.Map
,或者使用
单元格数组
,如果可以编写自己的例程,以更大的步骤(比如每次加倍)不频繁地增长它。我会选择哪一个取决于正在做什么,因为与他们一起工作是完全不同的


有两种接近的数据结构和另一种解决方案

  • 。我不确定确切的复杂性,而且我从未找到关于它的确切说法。它应该是一个哈希表,因此原则上您应该有
    O(1)
    。然而,我不知道,在所有条件下,你们会得到完全恒定的。如果您无法提前分配,或者无法根据需要将大小增加一倍(左右),则可能需要使用此选项

  • 细胞阵列。根据我的经验,它几乎相当于一个带指针的数组,访问时间正如人们所期望的那样,不管里面是什么。我不知道所谓的复杂性是什么。单元阵列有多种类型,性能取决于它们,例如,请参见单元阵列类型之间的差异。它告诉我们生成的代码将是C数组或C结构。我认为可以从中安全地推断性能

  • 是的,如果您愿意,您可以在MEX中实现其中的任何一个



您可以要求提前预订内存:设置所需大小的结构。如果没有可以初始化的值,请使用相应的赋值将其清空(例如,数组的
=[]
等)。我就是这么做的。您可以根据需要定期执行此操作(例如在循环中)。不应该有数据拷贝或新的内存分配。

我通过mex实现了一个类似std::vector的单元。所以它有预先分配的内存,当它达到最大大小时,内存会被重新分配。

你能有恒定访问时间的不连续内存吗?至少您需要一个可能需要重新分配的查找表?或者说,访问不是恒定的。或者我遗漏了一些东西……关于附加/串联,您是对的,它确实需要重新分配,并且可能会降低代码的速度。我不确定containers.Map是否有hashmap或BST实现,文档中没有说明任何内容complexity@zeeMonkeez:我的意思是一段时间。如果我必须按顺序逐个访问元素,我很好。我们真的可以定义在C语言中内部使用列表的mex函数吗?我很好奇这到底是怎么回事?考虑到Matlab构建数据结构的工具有限(特别是与C相比),这是一个我考虑过多次的好问题。@zdim我通过mex实现了一个std::vector-like单元。所以它有预先分配的内存,当它达到最大大小时,内存被重新分配,我在问题中使用了类似C的列表,当在尾部和头部添加元素时,它的开销是恒定的。我认为单元格数组类似于普通数组,但可以包含任何类型。因此,在其界限之外分配新元素仍然会导致重新分配,不是吗?或者我错过了任何东西。@JoeC根据我刚刚运行的复习,最接近的匹配项是
containers.Map
,它毕竟是一个哈希表,具有预期的
O(1)
复杂性。(然而,我不知道你会得到一个常数。)@JoeC好吧,没错。您能预先分配所需的尺寸吗?你提到了这种可能性。