【发布时间】:2011-03-16 17:20:02
【问题描述】:
我在一次采访中被问到这个问题。 我使用 Eratosthenes 筛概念和一个数组实现了一个算法。
有没有更好的方法来解决这个问题 对于那些不知道筛子的人,这里是链接:
http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes
编辑:就时间和空间复杂性而言最好。 我刚刚告诉他们 SoE 的缺陷是空间复杂性。 所以他们问我能不能做点什么。 以下是采访的过程: 1) 实现一个打印从 1 到 n 的素数的算法 Ans:我使用 SoE 实现 2)这是最好的方法吗 答:???
【问题讨论】:
-
如果被问到这个问题,我可能会退出面试。谜题表明他们正在寻找有智慧的人。像这样的问题只是意味着面试官很傲慢。
-
等等...他们是问你是否有比埃拉托色尼筛更好的东西,还是他们只是问质数?后者很好,如果是这样的话,筛子是一个很好的答案。如果他们问前者,那他们只是傲慢。
-
@Stargazer712:说真的,如果他们问你你的解决方案是否最好,你会退出面试吗?为什么不直接回答问题?例如,说“有更快的筛子,但这是我能从记忆中编码的最好的”。或者说,“我不知道,但我不是数论家”。我不认为想知道候选人是否可以聪明地讨论他们的算法选择是傲慢的。
-
@Steve Jessop,这取决于问题。当我第一次阅读这个问题时,我假设他们说,“这是埃拉托色尼筛子。你能改进它吗?”这个问题太自大了,因为它需要大量可笑的知识,而你不禁希望人们无法凭记忆回答。正如我在第二条评论中所说,如果他们问,“写一个算法来找出所有质数到 N”,然后接着说,“你能做得更好吗?”那么就可以了。
-
@Stargazer712:好的,我明白了,我误解了你的第二条评论,意思是他们不应该问是否有比 SoE 更好的东西。我可能会说,“给我 Google 和半天时间,我可能可以给你一个稍微有问题的阿特金筛子”,只是为了炫耀我实际上听说过它:-) 或者我可能会看看他们的 Eratosthenes 实现,看看他们是否遗漏了任何明显的调整。但你是对的,如果他们希望某人在面试中凭记忆产生阿特金的塞夫,那么要么这是一个非常专业的角色,要么他们有很长的搜索......
标签: algorithm primes sieve-of-eratosthenes