请协助确认该算法的Big O时间复杂度,我判断为O(n²)需验证
算法时间复杂度验证:O(n²)判断是否正确?
我想确认以下算法的Big O表示法类型,自己初步判断其时间复杂度为O(n²),希望得到专业验证确认。
相关代码
function uniqueQuadratic(words) { const unique = []; // * = O(?) for ( let i = 0; // * = O(?) i < words.length; // * = O(?) i++ // * = O(?) ) { const word = words[i]; // * = O(?) let isUnique = true; // * = O(?) for ( let c = 0; // * = O(?) c < i; // * = O(?) c++ // * = O(?) ) { const comparing = words[c]; // * = O(?) if (comparing === word) { // * = O(?) isUnique = false; // * = O(?) } } if (isUnique) { // * = O(?) unique[unique.length] = word; // * = O(?) } } return unique; }
逐行时间复杂度分析
const unique = [];:O(1),仅初始化空数组,属于常数时间操作。- 外层for循环:
let i = 0;:O(1),仅执行一次初始化。i < words.length;:O(n),外层循环共执行n次(n为words数组长度),每次循环都要执行该判断。i++:O(n),外层循环每轮执行一次,共n次。
- 外层循环内:
const word = words[i];:O(n),每轮外层循环执行一次,共n次。let isUnique = true;:O(n),每轮外层循环执行一次,共n次。
- 内层for循环:
let c = 0;:O(n),每轮外层循环执行一次初始化,共n次。c < i;:O(n²),内层循环的执行次数随外层循环的i递增:当i=1时执行1次,i=2时执行2次……i=n-1时执行n-1次,总次数为1+2+...+(n-1) = n(n-1)/2,属于O(n²)量级。c++:O(n²),执行次数与上述判断一致,总次数为n(n-1)/2,属于O(n²)量级。const comparing = words[c];:O(n²),执行次数与内层循环总次数一致,属于O(n²)量级。if (comparing === word)及内部的isUnique = false;:O(n²),比较操作按常数时间O(1)计算(若考虑字符串长度则为O(k),但通常忽略此细节),总执行次数为n(n-1)/2,属于O(n²)量级。
- 外层循环末尾:
if (isUnique):O(n),每轮外层循环执行一次判断,共n次。unique[unique.length] = word;:平均O(n),数组末尾赋值操作平均为O(1),最多执行n次(当所有元素都唯一时)。
整体复杂度结论
内层循环的核心操作总次数为O(n²),其余操作均为O(n)或O(1),在Big O表示法中我们只保留最高量级的项,因此该算法的时间复杂度确实为O(n²),你的初步判断正确。
内容的提问来源于stack exchange,提问作者ketchupenjoyer
相关产品推荐
相关产品推荐

