首页 > 解决方案 > 无穷大最坏情况的大 O 表示法

问题描述

所以我写了一个小程序,它试图返回一个随机但唯一的值数组。这意味着这些值将是随机的,但它们不会重复。

这是代码

const randArr = (length) => {
  let a = [];
  let usedNums = {};

  for (let i = 0; i < length; ) {
    let randNum = Math.ceil(Math.random() * (length * 1.5));
    if (!usedNums[randNum]) {
      a.push(randNum);
      usedNums[randNum] = randNum;
      i++;
    }
  }
  
  return a;
}; // makes a random array of size "length" which contains unique values in a random pattern.

显然,时间复杂度和空间复杂度取决于输入,但如果仔细观察,“I”只有在数字不在新创建的数组中时才会增加。这意味着在最坏的情况下,即使数字有些随机,您也可以一遍又一遍地获得相同的数字,这意味着这可能会一直延伸到无穷大。

您也可以调整代码以实现这一点 let randNum = Math.ceil(Math.random() * (length * 1.5) % 1);注意每次您将如何获得相同的数字,这意味着“我”永远不会增加,因此循环将永远运行。

由于它的工作方式,以及我不熟悉在时间复杂性和空间复杂性方面谈论程序的事实,我不确定这段代码的大 O 表示法是什么。有人可以解释一下吗?

标签: javascriptbig-o

解决方案


推荐阅读