11// 设置测试数量
2- var n = 10000 ;
2+ var n = 100000 ;
33// 测试并查集
44console . log ( "=======================测试并查集I============================" ) ;
55// 虽然isConnected只需要O(1)的时间,但由于union操作需要O(n)时间
@@ -58,4 +58,46 @@ for(let i = 0; i < n; i++) {
5858 uf . isConnected ( a , b ) ;
5959}
6060console . timeEnd ( 'UnionFindIII' ) ;
61+ // console.log(uf.parent);
62+
63+ // 测试并查集
64+ console . log ( "=======================测试并查集IV============================" ) ;
65+ // 时间性能是O(n*h)的,h为并查集表达的树的最大高度
66+ // 相对III进行了优化,但优化地方出现情况较少,所以性能更优表现不明显,
67+ // 甚至在一些数据下性能会更差
68+ var UF = require ( './UnionFindIV' ) ;
69+ var uf = new UF ( n ) ;
70+ console . time ( 'UnionFindIV' ) ;
71+ for ( let i = 0 ; i < n ; i ++ ) {
72+ let a = Math . floor ( Math . random ( ) * n ) ;
73+ let b = Math . floor ( Math . random ( ) * n ) ;
74+ uf . unionElements ( a , b ) ;
75+ }
76+ for ( let i = 0 ; i < n ; i ++ ) {
77+ let a = Math . floor ( Math . random ( ) * n ) ;
78+ let b = Math . floor ( Math . random ( ) * n ) ;
79+ uf . isConnected ( a , b ) ;
80+ }
81+ console . timeEnd ( 'UnionFindIV' ) ;
82+ // console.log(uf.parent);
83+
84+ // 测试并查集
85+ console . log ( "=======================测试并查集V============================" ) ;
86+ // 时间性能是O(n*h)的,h为并查集表达的树的最大高度
87+ // 相对III进行了优化,但优化地方出现情况较少,所以性能更优表现不明显,
88+ // 甚至在一些数据下性能会更差
89+ var UF = require ( './UnionFindV' ) ;
90+ var uf = new UF ( n ) ;
91+ console . time ( 'UnionFindV' ) ;
92+ for ( let i = 0 ; i < n ; i ++ ) {
93+ let a = Math . floor ( Math . random ( ) * n ) ;
94+ let b = Math . floor ( Math . random ( ) * n ) ;
95+ uf . unionElements ( a , b ) ;
96+ }
97+ for ( let i = 0 ; i < n ; i ++ ) {
98+ let a = Math . floor ( Math . random ( ) * n ) ;
99+ let b = Math . floor ( Math . random ( ) * n ) ;
100+ uf . isConnected ( a , b ) ;
101+ }
102+ console . timeEnd ( 'UnionFindV' ) ;
61103// console.log(uf.parent);
0 commit comments