javascript - 无穷大最坏情况的大 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 表示法是什么。有人可以解释一下吗?
解决方案
推荐阅读
- angular - Angular 7 路由在部署到 Apache 2 HTTPD 服务器时不起作用
- jquery - 如何在html列表视图中隐藏和显示哪个是IEnumerable模型表的一部分
- mariadb - 当 my.cnf 中的 innodb 未注释时,MariaDB 列存储未启动
- java - Java 计算一个布尔数组
- c++ - 使用 argv 和 argc 打开一个 txt 文件
- wordpress - 值在定制器的定制控件中输出两次
- php - 在 php 中解码 JSON 文件时出现无效参数错误
- r - 正则表达式查看 R 中的限制
- php - 使用条件语句将值插入另一个表
- python - 如何从另一个类和文件中调用实例变量