【发布时间】:2014-09-25 03:39:55
【问题描述】:
是否有一个概念和/或算法来处理基本操作的最小序列来处理结构化对象(例如数组/列表/哈希)之间的差异?我正在想象类似字符串距离的各种概念,但我不仅想处理字符串。比如下面第一个和第二个数组的区别:
["a", {b: 1}, false, "b"]
[{b: 1}, "a", false, true]
可以用两种操作表示:转置索引0 和1 处的元素,并将索引3 处的元素替换为true。替换整个数组可能看起来似乎更少(单个)操作,但这涉及更大的对象,不应该算作最小操作。编程中有这样的概念吗?
我不知道究竟应该将什么视为有意义的基本操作。我想象插入、删除(以及在散列的情况下可能在不同键下的转置、替换和/或赋值)。他们都应该处理结构差异。我显然不想包含诸如“将 +3 添加到数字”之类的操作。
【问题讨论】:
-
我的第一印象是这是对停机问题的伪装。
-
这一切都取决于哪些操作是基本的。
-
@VaughnCato 这是问题的一部分。
-
这可以通过动态规划来解决,只要状态图形成一个树宽小的k-tree即可。
-
根据您的示例,您的问题基本上仍然是编辑距离问题,您的字母表仅包含结构化项目和原始项目。如果您还想包括编辑结构化项目的成本,这可以通过递归地考虑一对结构化项目的权重作为这些结构的编辑距离来完成。
标签: algorithm computer-science difference