我最近与我的同事就一个超简单算法的运行时复杂性进行了非常非常激烈的辩论.最后我们都同意不同意,但正如我一直在考虑的那样,它挑战了我对计算机科学基础的基本理解,因此我必须对这个问题有更多的了解.
鉴于以下python,Big-O运行时复杂性是什么:
for c in "How are you today?":
print c
Run Code Online (Sandbox Code Playgroud)
现在,我立刻喊出这只是O(n)又名线性的顺序.这意味着它取决于字符串的长度,因此这个循环将随着字符串长度的增长而线性增长.
我的同事随后说:"不,它是常数,因为我们知道对于我们正在处理的所有字符串集合(在我们的例子中),最大字符串总是255个字符长(在我们的例子中),因此它必须是常量. " 他接着说:"因为我们在字符串的字符长度上有一个最大上限,这导致O(255)减少到O(1)."
无论如何,我们回到了第四,在我们两个人画了草图的45分钟后,我们都死在这个问题上.
我的问题是在一个恒定时间循环之上的循环是什么世界或什么数学系统?如果我们知道我们的上限是1,000,000个字符,并且所有字符串的集合可以是从0到1,000,000的任何地方,那么这个循环显然会表现出线性运行时间,具体取决于字符串的大小.
我还问他,如果n的上限大小已知,他是否还认为以下代码是O(1).这意味着我们确定这段代码只会在255个字符的最大上限上运行:
s = "How are you today?"
for c in s:
for d in s:
print c+d
Run Code Online (Sandbox Code Playgroud)
他说这也是恒定时间....即使在我解释这是一个O(n ^ 2)算法并证明以下代码将产生二次曲线.
那么,我是否缺少一些理论概念,其中任何一个都是真的,这取决于理论如何发展? 只是要清楚他的理解是,如果不知道n,我是正确的.如果n的上限总是已知的,那么他断言这篇文章中的两个算法都具有恒定的运行时复杂性.
只是想保持我的理智,但也许如果我错了,肯定会有一些额外的学习,我可以从中受益.我的好同事非常有说服力.此外,如果任何人有关于此问题的主题的其他链接或材料,请添加评论.
根据Rust文档:
向量总是在堆上分配它们的数据.
据我了解,这意味着:
T以连续的方式存储类型.换句话说,如果我向向量添加一些整数,而Vec将分配足够的存储空间来存储这些整数,那么它也不会将这些整数存储起来; 引入另一层间接.
我不确定如何使用代码示例来说明或确认这一点,但我们非常感谢您的帮助.
根据Apple关于UISplitViewController(在新的iPad 3.2 SDK中)的文档,看起来他们打算只将它用作应用程序的根控制器.换句话说......就像你不能将UISplitViewController推到UINavigationController上一样,因为显然UINavigationController需要保持拆分视图.
任何人都可以确认这是否是UISplitViewController的真正限制?我希望在我的应用程序中使用我的UINavigationController层次结构中的几个级别的拆分视图,但看起来除非有办法,否则我将无法做到这一点.
谢谢!
对于Objective-C大师:
假设我有一个简单的方法:
-(id)getValue{ return [NSNumber numberWithDouble:5.0]; }
Run Code Online (Sandbox Code Playgroud)
现在,假设在其他方法中我调用(id)getValue方法,如下所示:
NSNumber* myValue = [self getValue];
Run Code Online (Sandbox Code Playgroud)
或者如果我这样称呼它:
NSNumber* myValue = (NSNumber*)[self getValue];
Run Code Online (Sandbox Code Playgroud)
问题是:显然这些线条是等效的,但其中一条线条使用了明确的演员阵容.那么这样做的正确或最佳实践方式是什么.它接触到我的演员是不必要的,因为当它被放置在指针myValue时,它在这一点上将是类型安全的(这是我想要的东西)所以演员基本没有意义.
我要补充一点,我相信人们会指出:你为什么不从getValue方法返回(NSNumber*),但在我的情况下,我希望能够灵活地返回我想要的内容,就像内置的NSDictionary当您调用objectForKey时,class返回id,因为它允许您在其中放置任何类型的NSObject或子类.换句话说,我的getValue方法并不总是返回NSNumber.还要考虑这个例子是设计的,因为我只关心是否要施放.
先感谢您,
-Ralph
给出以下代码(不编译):
fn main() {
let mut v = vec!();
{
let name = "Bob the Builder".to_string();
v.push(&name);
}
for m in &v{
println!("{}", m);
}
}
Run Code Online (Sandbox Code Playgroud)
我创建了一个绑定到Rust String类型的变量,它将超出第一组花括号中的范围.有没有办法以某种方式移动String的所有权,使得向量本身拥有它?
这是一个任意的例子,但我只是想了解这个概念是否可行.
我已经知道,如果我使用字符串文字,这将被视为一个静态字符串,它将在整个应用程序的生命周期中存在,因此这段代码将编译但我只是想了解Rust中的集合是否可以拥有数据.我知道Rust不是Objective-C,但Objective-C的集合能够保留他们的数据.
例:
typedef void(^responseBlock)(NSDictionary*, NSError *);
@interface MyClass : NSObject
{
[??] responseBlock responseHandler;
}
我应该在[??]括号中放置什么限定词?
我已经读过作为属性的块应该使用复制限定符设置...但是在这种情况下我不需要将块暴露为属性.我只是希望它仍然是一个ivar但我怎么能指定副本?而且,没有指定什么是使用的默认限定符?是__strong和其他一切一样吗?
我在ios5上使用ARC.