【问题标题】:Dynamic balanced data structure in Matlab?Matlab中的动态平衡数据结构?
【发布时间】:2013-08-31 20:26:34
【问题描述】:

这个answer 状态

我认为您(或我)无法在 MATLAB 中执行动态数据结构。 我们必须使用 MATLAB OO 功能和 MATLAB 类。既然我认为 这些设施实际上是我制作的 Java 的 MATLAB 包装器 大胆声称这些设施在 MATLAB 之外。一个问题 语义,我承认。如果你想做动态数据结构 MATLAB,你必须使用 OO 和类,你不能用我做的 认为是核心语言,在用户层面缺乏指针。

现在假设一个包。新号码以随机顺序添加到包中,但仍应订购号码。数字的数量是未知的。因此我需要一个动态数据结构:结构的大小必须能够改变。此外,结构必须能够平衡,即我需要订购它。

我应该使用哪种数据结构来满足 Matlab 中的动态平衡数据结构要求?

【问题讨论】:

  • 这个答案已经完全过时了,自从我编写它以来的 4 年里,Matlab 的内在 OO 工具已经取得了巨大的进步。对我来说,这表明您没有正确完成研究,没有查看有关 Matlab 当前 OO 和其他数据结构功能的大量文档。
  • @HighPerformanceMark Matlab 最适用于矩阵,我无法理解您关于 OO 的说法。假设需要一个动态矩阵,有没有类似的东西?还是需要不时更新列大小的矩阵?
  • 您也可以使用Java data structures,例如收藏和地图。
  • @EitanT 是的,但在这里使用Java data structures 有意义吗?根据 Luis,Matlab 的矩阵本质上是动态的。
  • @hhh MATLAB 在更改数组大小时会重新分配内存,这使得效率非常低。

标签: matlab data-structures


【解决方案1】:

Matlab 的矩阵本质上是动态的。如果您有一个vector 的有序数字并想在其适当的位置插入一个新的number(保持有序向量),您可以简单地做

[~, ind] = find(number<=vector,1,'first'); % determine where to insert
if isempty(ind), ind = numel(vector)+1; end % in this case, insert at the end
vector = [vector(1:ind-1) number vector(ind:end)]; % do the insert, extending the vector

当然这不是很快,因为需要重新分配内存。

【讨论】:

  • 此方法与其他方法相比如何?我对 HPM 的 OO 以及为什么将其称为 "Of course -- not very fast" 感到困惑。用一些新颖的链表实现来实现它会更快吗? Matlab 是否隐式实现了平衡?
  • Matlab 不允许您直接控制内存分配(没有 malloc、指针等)。当您将向量重新定义为比原来更大时,Matlab 会重新分配内存。根据 Matlab 的处理方式,它可能会很慢。
  • 不错。当 ind 为空时允许 ind:xxx 是 matlab 的奇迹之一。
  • @TryHard 哇,我不知道!无论如何,这不允许我删除第 2 行,因为那样 1:ind-1 也将是空的。
  • @LuisMendo 你能更新你的答案吗,我没有遵循这一点——花点时间……为 cmets +1。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-11
  • 1970-01-01
  • 2011-06-06
  • 2020-10-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多