两个数组比较(算法) 怎样算最优化!

friendyours 2003-05-19 05:40:05
两个数组比较(算法) 怎样算最优化!
有两个数组,他们包含的元素 有部分相同,arrayOne,arrayTwo;
目的是将他们的交集存储在 temp数组中;arrayOne中除交集外的部分存储在tempOne数组中;arrayTwo中除交集外的部分存储在tempTwo数组中;
怎样的算法最优化!
...全文
1306 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
emu 2003-05-20
  • 打赏
  • 举报
回复
llrock(百乐宝||昨夜星辰):
----------------------------------------------------------
以比较为基本操作的时间复杂度为o(a1.length * a2.length)。
----------------------------------------------------------

那要是a1.length=100,a2.length=100,时间复杂度就是O(10000)咯!?

至于排序或者构建二叉树,没有compare算法怎么排怎么构?
llrock 2003-05-19
  • 打赏
  • 举报
回复
修正一下,创建的前序(或后序)遍历二叉树才是排序好的所有差异元素
llrock 2003-05-19
  • 打赏
  • 举报
回复
我说一个方法:

·利用二叉树排序算法,需要修改一下,添加一个条件如果想等就存起来,否则创建二叉树
最终你将得到一个排序好的树组,这个数组将是存在差异的所有元素,而之前保存起来的就是你要的相同元素,一举两得。

这种算法的时间复杂度为O(a1.length + a2.length),但是基本操作为想二叉树中添加节点的操作。

llrock 2003-05-19
  • 打赏
  • 举报
回复
回复人: cpp2017(慕白兄) ( ) 信誉:100 2003-05-19 18:05:00 得分:0


不论怎样算,总之是要遍历两个数组

要比较
a1.length * a2.length次
</慕白兄>

双手同意,但我想时间复杂度肯定不是O(2),只见过0(1)的,从没见过o(2)的,以比较为基本操作的时间复杂度为o(a1.length * a2.length)。

emu 2003-05-19
  • 打赏
  • 举报
回复
简单数据类型这样就够了,对于对象类型要考虑到对象的toString方法能否为不同的对象返回不同值,因为sort方法在不指定比较函数是默认使用toString方法来比较的。

考虑下面的例子:
function myObj(n){
this.emu=n;
}
var myAr=[new myObj(5),new myObj(3),new myObj(3),new myObj(7),new myObj(2),new myObj(6)];
myAr.sort();
for (var i=0;i<myAr.length;i++)
document.write(myAr[i].emu+"<Br>");

当然这个例子中改一下比较函数就成了:
myAr.sort(function (a,b){return a.emu-b.emu});

但是更复杂的情形下就未必了,比尔有多个属性和方法的对象,怎么compare?
imafool 2003-05-19
  • 打赏
  • 举报
回复
我说说我的一点浅见:
考虑到是在JavaScript中实现,先利用String.sort()对两个数组排序,再将数组的最小值与数组的最小值比较……排除比它小的再比权。基本思路就是这样了……

emu 2003-05-19
  • 打赏
  • 举报
回复
如果要设计一个通用的哈希算法恐怕计算量大了点(因为系统没有提供现成的,自己做要考虑到每个元素的构造器和递归遍历元素的所有属性值),如果知道了元素的类型有针对性的做一个就高效的多。具体的例子就不给了。
emu 2003-05-19
  • 打赏
  • 举报
回复
cpp2017(慕白兄) :这样做的时间复杂度为O(2)。其实可以优化一下:

1 为每个对象定义哈希算法,
2 把每个数组按哈希值排序,
3 从头到尾比较数组的元素

排序时间复杂度为O(1.3),之后的遍历过程时间复杂度就降到O(1)了。
cpp2017 2003-05-19
  • 打赏
  • 举报
回复
不论怎样算,总之是要遍历两个数组

要比较
a1.length * a2.length次
</慕白兄>

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧