算法需要0.5毫秒秒 输入大小为100,它会多长时间 如果输入大小为500,则运行 程序是O(n lg(n))?
我的书说当输入大小加倍时,n lg(n),“略长于两倍”。这对我帮助不大。
我一直在做的方式是解决常数乘数(本书没有谈到,所以我不知道它是否有效):
.5ms = c * 100 * lg(100)=> c = .000753
所以
.000753 * 500 * lg(500)= 3.37562ms
这是计算运行时间的有效方法吗?有没有更好的方法来解决它?
答案 0 :(得分:1)
是。这正是它的工作原理。
当然,这会忽略任何可能的初始化开销,因为这没有在big-o表示法中指定,但这与大多数算法无关。
答案 1 :(得分:1)
这不完全正确。 Tomas说得很开心,真正的等式更像是
runtime = inputSize * lg(inputSize) * singleInputProcessTime + overhead
singleInputProcessTime与机器操作有关,例如加载地址空间,算术或每次与输入交互时必须完成的任何操作。这通常具有从几个CPU周期到几秒或几分钟的运行时间,具体取决于您的域。重要的是要理解这个时间大致是常数,因此在大的输入尺寸非常大的情况下不会影响整体运行时间。
开销是设置问题/解决方案的成本,例如将算法读入内存,在服务器/进程之间传播输入或任何只需要发生一次或一定次数的操作,这些操作不依赖于输入大小。此成本也是恒定的,可以在几个CPU周期到几分钟的任何时间范围内,具体取决于用于解决问题的方法。
你已经知道的inputSize和n * lg(n),但至于你的作业问题,只要你解释你如何解决问题,你应该没问题。