如何找出这些算法的大O表示法?

时间:2019-04-10 18:37:33

标签: algorithm big-o

我遇到了一个问题,我在这两个算法上有一系列问题,但是我一直在努力理解大O表示法的概念,我觉得这很简单。

本质上,我需要找出O的大记号是什么,每种算法要解决一百万个和200万个运算的问题需要花费多长时间。

算法A:

SET sum TO 0
FOR i=1 to size
   FOR j=1 to 10000
   sum=sum+1

算法B:

SET sum TO 0
FOR i=1 to size
    FOR j=1 to size
    sum = sum + 1

这是假设计算机每秒可以执行一百万次操作

1 个答案:

答案 0 :(得分:1)

从您的帖子的最后一句话开始:算法的时间复杂度不取决于计算机每秒可以执行的操作数。没关系。

我假设<!DOCTYPE DOC PUBLIC "-//USA-DOD//DTD 38784STD-BV7//EN"[ <!ENTITY cdcs_2-24.wmf SYSTEM "graphics\CDCS_2-24.wmf" NDATA wmf> <!ENTITY cdcs_2-5.wmf SYSTEM "graphics\CDCS_2-5.wmf" NDATA wmf> <!ENTITY cdcs_4-48.wmf SYSTEM "graphics\CDCS_4-48.wmf" NDATA wmf> <!ENTITY cdcs_3-5.wmf SYSTEM "graphics\CDCS_3-5.wmf" NDATA wmf> <!ENTITY cdcs_2-19.wmf SYSTEM "graphics\CDCS_2-19.wmf" NDATA wmf> <!NOTATION png SYSTEM "png"> <!NOTATION svg SYSTEM "svg"> <!NOTATION bmp SYSTEM "bmp"> <!ENTITY cdcs_2-2a.wmf SYSTEM "graphics\CDCS_2-2A.wmf" NDATA wmf> <!ENTITY cdcs_5-35.wmf SYSTEM "graphics\CDCS_5-35.wmf" NDATA wmf> <doc service="xs" docid="BKw46" docstat="formal" verstatpg="ver" cycle="1" chglevel="1"> <front numcols="1"> <idinfo> <?Pub Lcl _divid="100" _parentid="0"> <tmidno>Life with Pets</tmidno> <chgnum>Change 1</chgnum> <chgdate>2 August 2018</chgdate> <chghistory> <chginfo> <chgtxt>Change 1</chgtxt> <date>2 August 2018</date> </front> <body numcols="1"> <chapter> <title>This is chapter 1</title> <para0> <title>Climb the ladder immedietly</title> <para>Retrieve the cat.</para></para0></chapter> <chapter> <title>Don't forget to feed the dog</title> <para0> <title>Prep for puppies</title> <para>Puppies are cute</para></para0> </chapter> </body> </doc> 语句位于内部sum = sum + 1循环内的 内-缩进并不明确。

两种算法都执行FOR多次。我们可能认为一次执行sum = sum + 1花费的时间是恒定的。

现在,两种算法之间的区别是内部循环运行的次数。在第一个版本中,这是一个常量(10000)。这意味着一个完整的sum = sum + 1循环的执行将花费固定的时间。它不取决于 size

这意味着第一个算法只有一个取决于 size 的循环:它执行内部循环 size 次。因此,时间复杂度为 O(size)

但是在第二个版本中,内循环 也运行 size 次。因此,它显然取决于 size 。现在,最里面的语句的执行次数为 size 2 。因此,时间复杂度为 O(size 2