javascript – 算法:将列表从一个订单重新排列到另一个订单的最佳方法?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 算法:将列表从一个订单重新排列到另一个订单的最佳方法?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1629字,纯文字阅读大概需要3分钟。
内容图文
![javascript – 算法:将列表从一个订单重新排列到另一个订单的最佳方法?](/upload/InfoBanner/zyjiaocheng/701/15dd236ab3e04194831d747e9e1befdb.jpg)
编辑:我不确定我原来的问题是否足够明确.我需要一种算法来计算最小的移动顺序,以便将数组从一个顺序重新排列到另一个顺序.众所周知,两个数组都包含相同的元素(没有重复)并且具有相同的长度.例如:
reorder(
['d', 'a', 'c', 'b', 'e'],
['a', 'b', 'c', 'd', 'e']
)
应该返回类似的东西:
[
{move:'d', after:'b'},
{move:'c', after:'b'}
]
这表明我应该首先将元素’d’移动到’b’之后,然后将’c’移动到’b’之后,数组将按所需顺序移动.
背景:我正在开发一个项目(实际上将rtgui中的大部分功能移到客户端).现在我正在进行排序.基本上我有一个div列表,我想按任意顺序排序.我可以按如下方式获得所需的订单:
var hashes = {
before: [],
after: [],
};
var els = $('div.interesting-class').toArray();
var len = els.length;
for(var i = 0; i < len; i++) hashes.before.push(els[i].id);
els.sort(getSortComparator());
for(var i = 0; i < len; i++) hashes.after.push(els[i].id);
现在hashes.before和hashes.after包含无序和有序的元素ID列表.重新排序列表时,到目前为止,最昂贵的操作实际上是移动DOM元素.我这样做的情况如下:
var c = $('#container-id');
$(els).each(function() {
c.append(this);
});
这可行,但速度比必要慢,因为平均来说,实际上只需要移动2或3个元素.因此,我需要一种算法来计算最小的移动顺序,以便将数组从一个顺序重新排列到另一个顺序(在这种情况下,在hashes.before和hashes.after上运行).任何人都可以建议或提出任何想法吗?
到目前为止,我已经尝试了几种通用的“diff”算法,但它们并没有真正给我我想要的东西.我认为我需要的是这样,但更专业.
解决方法:
http://en.wikipedia.org/wiki/Longest_increasing_subsequence
找到增长最长的子序列(根据新的排序顺序).然后将不在该序列中的每个元素移动到相对于序列中已有元素的位置.
在您的示例中,’a,b,e’和’a,c,e’与最长的子序列相关联.你能做的最好就是选择其中一个,然后移动其他元素.
内容总结
以上是互联网集市为您收集整理的javascript – 算法:将列表从一个订单重新排列到另一个订单的最佳方法?全部内容,希望文章能够帮你解决javascript – 算法:将列表从一个订单重新排列到另一个订单的最佳方法?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。