我一直在做Big-O的自学.我理解如何给算法提供以下符号的示例:
上):
for(int i = 0; i < n; i++)
sum++;
Run Code Online (Sandbox Code Playgroud)
O(N ^ 2):
for(int i = 0; i < n; i++)
for( int j = 0; j < n; j++)
sum++;
Run Code Online (Sandbox Code Playgroud)
O(N ^ 3):
for(int i = 0; i < n; i++)
for( int j = 0; j < n * n; j++)
sum++;
Run Code Online (Sandbox Code Playgroud)
我遇到过这些我不太了解的符号.如何根据算法提供这些示例?
也许我应该这样说:写一个算法,运行时间与以下成比例:
可能重复:
Big O的简单英文解释
我最近被问及关于如何使用Big O表示法的知识,因为我之前从未遇到过Big O,所以我很难过.我已经阅读了关于Big O的维基百科页面,并查看了Stackoverflow中发布的一些问题,但我只是不明白.
我的问题:有人可以用最简单的形式提供Big O的解释,并提供一个如何在以下Java方法中使用它的示例:
public int getScore(int[] dice)
{
int[][] dups;
dups = possibleDups(dice);
// Set catScore
for (int[] i : dups)
{
for (int k = 0; k < i.length; k++)
{
if (i[k] > 0)
{
switch (i[k]) {
case 1:
catScore = Category.ONES;
break;
case 2:
catScore = Category.TWOS;
break;
case 3:
catScore = Category.THREES;
break;
case 4:
catScore = Category.FOURS;
break;
case 5:
catScore = Category.FIVES;
break; …Run Code Online (Sandbox Code Playgroud) 我是算法分析领域的新手.我在这里阅读Stack Overflow问题" 什么是"大O"符号的简单英语解释? " O(2n^2)和O(100 n^2)那些相同O(n^2).我不明白这一点,因为如果我们采用n = 4,操作次数将为:
O(2 n^2) = 32次操作O(100 n^2) = 1600次操作 O(n^2) = 16次操作任何人都可以解释为什么我们应该将这些不同的操作计数视为等效吗?
仍然掌握对数与指数的对立面.(将它们描述为指数的反转也是正确的吗?)
Big-O符号上已经有很多很棒的SO条目,包括O(log n)和QuickSort n(log n).找到了一些有用的图表.
在看Divide and Conquer算法时,我遇到了n log n,我认为这个算法n乘以它的值log n.我经常尝试100 log 100这样的具体例子,以帮助可视化抽象方程式中发生的事情.
只是阅读log n假设base 10.是否n log n翻译成:
"数量n乘以10的数量需要提高到等于n的数量"?
所以100 log 100相等,200因为10需要被提升到2的幂,等于100?
当算法迭代一组时,基数是否会发生变化?如果我们正在谈论抽象,那么基数是否重要?
我的教授分配了一个函数来编写一个函数,该函数接受一个整数数组并将所有零排序到数组的末尾,同时保持当前非零整数的顺序.限制是:
不能使用STL或其他模板化容器.必须有两个解决方案:一个强调速度,另一个强调清晰度.
我写了这个尝试速度的函数:
#include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std;
void sortArray(int array[], int size)
{
int i = 0;
int j = 1;
int n = 0;
for (i = j; i < size;)
{
if (array[i] == 0)
{
n++;
i++;
}
else if (array[i] != 0 && j != i)
{
array[j++] = array[i++];
}
else
{
i++;
n++;
}
}
while (j < size)
{
array[j++] = 0;
}
}
int main()
{
//Example …Run Code Online (Sandbox Code Playgroud) 2^n是的顺序3^n.
这两个功能相关2^n = O(3^n).
或者更恰当地说,我们可以说2^n = o(3^n).
我怀疑这究竟是什么命令.是说同样的渐近秩序?
Wikipidia,大O符号说,这两个函数没有相同的顺序.
Plz,澄清我,这里的实际订单是什么.
我是算法的新手,所以如果我问的是愚蠢的问题,那么请纠正我.
在我正在工作的项目中,我需要生成n个随机double数(取决于输入文件的内容)或者doubles如果我从输入文件中将它们转换为它们.逗号后面的这些数字应该只有2位小数(例如:)0.98.
我知道在Java 8中,有两种方法可以做到这一点:
nthNumber = Double.parseDouble(new DecimalFormat("#.##").format(ThreadLocalRandom.current().nextDouble(0,1)).replace(",","."));nthNumber = Double.parseDouble(new DecimalFormat("#.##").format(new Random().nextDouble()).replace(",", "."));渐渐地说,哪个是最快的?根据我对ADS的不了解,我会说它会是同一时间(O(n)?),但我并不是百分百肯定
除了这两种方式外,还有什么其他的方法来生成随机doubles之间0以及1它们更快,渐进地说,比我的建议?(相反,是否有方法可以做任何事情O(n)或O(1)?)
提前感谢所有花一分钟回答我这个问题的人
我正在研究并试图实现一些算法.我正在尝试理解Big O表示法,我无法弄清楚下面算法的Big O复杂性:
while (a != 0 && b != 0)
{
if (a > b)
a %= b;
else
b %= a;
}
if (a == 0)
common=b;
else
common=a;
Run Code Online (Sandbox Code Playgroud) 你能解释是什么让算法成为O(log n)吗?
如果您能用简单的代码展示它,我将不胜感激.
谢谢
我真的无法弄清楚"Big-O"是什么以及如何在实践中使用它,所以我希望有人可以给我一个简单的解释,也许在java中有一点编程实例.
我有以下问题:
这些术语的含义是什么(尽可能简单)以及如何在java中使用:BigO(1),BigO(n),BigO(n2)和BigO(log(n))?
如何从现有的Java代码中计算Big-O?
希望有人能够提供帮助.
谢谢你的优势