程序运行时硬件问题

时间:2009-10-02 18:09:27

标签: big-o

  

算法需要0.5毫秒秒   输入大小为100,它会多长时间   如果输入大小为500,则运行   程序是O(n lg(n))?

我的书说当输入大小加倍时,n lg(n),“略长于两倍”。这对我帮助不大。

我一直在做的方式是解决常数乘数(本书没有谈到,所以我不知道它是否有效):

.5ms = c * 100 * lg(100)=> c = .000753

所以

.000753 * 500 * lg(500)= 3.37562ms

这是计算运行时间的有效方法吗?有没有更好的方法来解决它?

2 个答案:

答案 0 :(得分:1)

是。这正是它的工作原理。

当然,这会忽略任何可能的初始化开销,因为这没有在big-o表示法中指定,但这与大多数算法无关。

答案 1 :(得分:1)

这不完全正确。 Tomas说得很开心,真正的等式更像是

runtime = inputSize * lg(inputSize) * singleInputProcessTime + overhead

singleInputProcessTime与机器操作有关,例如加载地址空间,算术或每次与输入交互时必须完成的任何操作。这通常具有从几个CPU周期到几秒或几分钟的运行时间,具体取决于您的域。重要的是要理解这个时间大致是常数,因此在大的输入尺寸非常大的情况下不会影响整体运行时间。

开销是设置问题/解决方案的成本,例如将算法读入内存,在服务器/进程之间传播输入或任何只需要发生一次或一定次数的操作,这些操作不依赖于输入大小。此成本也是恒定的,可以在几个CPU周期到几分钟的任何时间范围内,具体取决于用于解决问题的方法。

你已经知道的inputSize和n * lg(n),但至于你的作业问题,只要你解释你如何解决问题,你应该没问题。