微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

比较两个应用模式的功能的性能

如何解决比较两个应用模式的功能的性能

我将两个函数与performance.Now()进行了比较,因此我认为第二个函数会比第一个更好,但是相反。我不知道为什么会这样? same1在for循环中有一个indexOf和splice函数,每个函数代表一个O(n),因此我们有一个O(n ^ 2)。在same2中,我应用了频率计数器模式,其中三个用于表示O(3N)的for循环。

第二功能应该比第一功能快吗?

    function same1(arr1,arr2) {
        // compare length of both arrays
        if (arr1.length !== arr2.length) return false
     
        for (let i = 0; i < arr1.length; i++) {
            const indexArra2 = arr2.indexOf(arr1[i] ** 2);
            if (indexArra2 === -1) return false;
            arr2.splice(indexArra2,1);
        }
        return true;
    } 
     
    function same2(arr1,arr2) {
        if (arr1.length !== arr2.length) return false;
     
        let arrObj1 = {};
        let arrObj2 = {};
     
        // { 1: 1,2: 2,3: 1 }
        for(let val of arr1) {
            arrObj1[val] = (arrObj1[val] || 0) + 1;
        }
     
        // { 1: 1,4: 2,9: 1 }
        for(let val of arr2) {
            arrObj2[val] = (arrObj2[val] || 0) + 1;
        }
     
        for(key in arrObj1) {
            if(!(key ** 2 in arrObj2)) {
                return false;
            }
            if(arrObj2[key ** 2] !== arrObj1[key]) {
                return false;
            }
        }
        return true;
    }
     
    const t0 = performance.Now();
    same1([1,2,3,2],[9,1,4,4]);
    const t1 = performance.Now();
     
    const t2 = performance.Now();
    same2([1,4]);
    const t3 = performance.Now();
     
    console.log(`Call to same1 took ${t1 - t0} milliseconds.`);
    console.log(`Call to same2 took ${t3 - t2} milliseconds.`);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。