我更喜欢尽可能少的正式定义和简单的数学.
algorithm complexity-theory big-o computer-science time-complexity
我目前正在学习Big O Notation运行时间和摊销时间.我理解O(n)线性时间的概念,意味着输入的大小成比例地影响算法的增长...例如,二次时间O(n 2)等也是如此.即使算法也是如此. ,例如置换生成器,具有O(n!)倍,通过阶乘生长.
例如,以下函数是O(n),因为算法与其输入n成比例增长:
f(int n) {
int i;
for (i = 0; i < n; ++i)
printf("%d", i);
}
Run Code Online (Sandbox Code Playgroud)
同样,如果有嵌套循环,则时间为O(n 2).
但究竟什么是O(log n)?例如,说完整二叉树的高度是O(log n)是什么意思?
我知道(可能不是非常详细)什么是对数,在这个意义上:log 10 100 = 2,但我无法理解如何识别具有对数时间的函数.
我已经看到这个术语"O(1)访问时间"曾经意味着"快速",但我不明白这意味着什么.我在同一个上下文中看到的另一个术语是"O(n)访问时间".有人可以用简单的方式解释这些术语的含义吗?
也可以看看
什么是大O符号?你用它吗?
我猜错了这个大学课:D
有没有人使用它并给出一些他们使用它的真实例子?
我试图在两个不同的词典中找到相应的键.每个都有大约600k条目.
比如说:
myRDP = { 'Actinobacter': 'GATCGA...TCA', 'subtilus sp.': 'ATCGATT...ACT' }
myNames = { 'Actinobacter': '8924342' }
Run Code Online (Sandbox Code Playgroud)
我想打印出Actinobacter(8924342)的值,因为它匹配myRDP中的值.
以下代码有效,但速度很慢:
for key in myRDP:
for jey in myNames:
if key == jey:
print key, myNames[key]
Run Code Online (Sandbox Code Playgroud)
我尝试了以下但它总是导致KeyError:
for key in myRDP:
print myNames[key]
Run Code Online (Sandbox Code Playgroud)
是否有一个功能在C中实现这样做?我用Google搜索,但似乎没有任何效果.
谢谢.
如果我将整个Delphi应用程序编译为单个exe文件,那么该文件将增长到5MB,10MB,甚至更多.什么时候那么大?这有什么问题?这是一个商业应用程序,目前在Delphi XE上.
我知道使用运行时包构建的选项.这听起来是个好主意,但我在这里看到的评论指出存在一些问题和缺点.
我一直在注意使用这些术语的堆栈溢出的答案,但我不知道它们是什么意思.他们叫什么,是否有一个很好的资源,可以用简单的术语解释它们?
我一直在研究RTOS和Linux驱动程序开发.现在我在半导体公司面试,没有回答有关字符串算法,时间和空间复杂性的问题.我没有研究离散数学和算法,因为我有电子背景.
我怎样才能克服这个差距?
我已经阅读了一些算法书中的算法运行时,它表示为,O(n).例如,给定代码将在O(n)时间内运行以获得最佳情况并且在最坏情况下运行O(n 3).它是什么意思以及如何根据自己的代码计算它?它是否像线性时间一样,是否就像每个预定义的库函数都有自己的运行时一样,在调用它之前应该记住它?谢谢...