计算机科学

为学生,研究人员和计算机科学从业者提供的问答

8
不含空格的摩尔斯电码是否可以唯一识别?
所有摩尔斯电码字符串都可以唯一识别吗?没有空格 ......-...-..---.-----.-..-..-.. 可能是,Hello World但第一个字母可能是5-实际上,它看起来不太可能任意点和破折号序列都具有唯一的翻译。 一个人可能会使用Kraft不等式,但这仅适用于前缀代码。 带空格的摩尔斯电码是前缀代码,在其中始终可以唯一地解码消息。一旦我们删除了空格,这将不再成立。 在我是对的情况下,不能完全解码所有摩尔斯电码消息的情况,有没有办法列出所有可能的消息?这是我在codegolf.SE上发现的一些相关练习 https://codegolf.stackexchange.com/questions/36735/morse-decode-golf https://codegolf.stackexchange.com/questions/131/morse-code-translator

4
编译器的时间复杂度
我对编译器的时间复杂度感兴趣。显然,这是一个非常复杂的问题,因为要考虑许多编译器,编译器选项和变量。具体来说,我对LLVM感兴趣,但是对人们有什么想法或开始研究的地方感兴趣。一个相当谷歌似乎没有什么亮点。 我的猜测是有些优化步骤是指数级的,但对实际时间影响很小。例如,基于数字的指数是函数的参数。 从我的头顶上,我会说生成AST树将是线性的。IR生成将需要在不断增长的表中查找值时单步执行树,因此或。代码生成和链接将是类似的操作类型。因此,如果我们删除不实际增长的变量的指数,我的猜测将是。O(n2)O(n2)O(n^2)O(nlogn)O(nlog⁡n)O(n\log n)O(n2)O(n2)O(n^2) 我可能完全错了。有人对此有任何想法吗?
54 compilers 

7
图灵机“按定义”是功能最强大的机器吗?
我同意图灵机可以解决“所有可能的数学问题”。但这是因为它只是算法的机器表示:首先执行此操作,然后执行该操作,最后输出该算法。 我的意思是,任何可以解决的问题都可以用算法来表示(因为这正是“可解决”的定义)。这只是一个重言式。我在这里没说新话。 通过创建算法的机器表示,它也将解决所有可能的问题也不是什么新鲜事。这也仅仅是重言式。因此,当说图灵机是最强大的机器时,实际上,这实际上意味着最强大的机器是最强大的机器! “最强大”的定义:可以接受任何语言的语言。 “算法”的定义:做任何事情的过程。“算法”的机器表示:一台可以做任何事情的机器。 因此,合乎逻辑的是算法的机器表示将成为功能最强大的机器。艾伦·图灵给我们带来了什么新东西?


5
在最坏的情况下,这种分类算法是Θ(n³)而不是Θ(n²)。
我刚开始学习数据结构和算法课程,我的助教为我们提供了以下用于对整数数组进行排序的伪代码: void F3() { for (int i = 1; i < n; i++) { if (A[i-1] > A[i]) { swap(i-1, i) i = 0 } } } 可能还不清楚,但是这里是我们要排序的数组的大小。nnnA 无论如何,助教都会向全班解释该算法的时间是(我认为是最坏的情况),但是无论我用反向排列的数组遍历多少次,在我看来,它应该是而不是。Θ (n 2)Θ (n 3)Θ(n3)Θ(n3)\Theta(n^3)Θ(n2)Θ(n2)\Theta(n^2)Θ(n3)Θ(n3)\Theta(n^3) 有人可以向我解释为什么这是Θ(n3)Θ(n3)Θ(n^3)而不是Θ(n2)Θ(n2)Θ(n^2)吗?

4
什么是尾递归?
我知道递归的一般概念。在研究quicksort算法时,我遇到了尾递归的概念。在MIT 18:30秒的视频中,快速排序算法的视频中,教授说这是一种尾递归算法。我不清楚尾递归到底意味着什么。 有人可以举例说明这个概念吗? SO社区在此处提供了一些答案。





6
在(开放)源代码中保守字符串秘密
我已经完成了针对Android的应用开发,并打算使用GPL进行发布-我希望它是开源的。但是,应用程序(游戏)的性质是,它会询问谜语并将答案编码到字符串资源中。我无法发布答案!有人告诉我要安全地存储密码-但是我没有找到合适的密码。 是否可以使用隐藏,加密或其他方式隐藏的字符串数组来发布我的源代码?也许通过阅读在线数据库的答案? 更新资料 Yuval Filmus的以下解决方案有效。当我第一次阅读它时,我仍然不确定该怎么做。对于第二个选项,我找到了一些解决方案:将散列的解决方案存储在源中,并在用户每次猜测时计算散列。为此,请使用http://code.google.com/p/crypto-js/上的crypto-js库。对于Android,请使用MessageDigest函数。在fdroid / github上有一个名为HashPass的应用程序可以执行此操作。
50 arrays  security 

4
为什么多项式时间称为“有效”?
为什么在计算机科学中将最多多项式的复杂度视为有效的? 对于任何实际应用(a)来说,复杂度为的算法比及时运行的算法(即要快得多,但是前者被认为效率低下,而后者是有效的。逻辑在哪里?nlognnlog⁡nn^{\log n}n80n80n^{80} (a)例如,假设宇宙中的原子数约为。1080108010^{80}


3
为什么二元搜索比三元搜索快?
在搜索的阵列使用二进制搜索元素需要,在最坏情况下日志2次 Ñ迭代因为,在每一个步骤中,我们修剪我们的搜索空间的一半。相反,如果我们使用“三元搜索”,则每次迭代都将减少三分之二的搜索空间,因此最坏的情况应该是log 3 N &lt; log 2 N迭代...ññN日志2ñ日志2⁡ñ\log_2 N日志3ñ&lt; 日志2ñ日志3⁡ñ&lt;日志2⁡ñ\log_3 N < \log_2 N 似乎三元搜索更快,那么为什么要使用二元搜索呢?

12
在夏娃不知情的情况下,如何与鲍勃验证号码?
您需要检查您的朋友鲍勃(Bob)是否输入了正确的电话号码,但是您不能直接问他。您必须将问题写在卡片上,然后交给伊夫,夏娃将把卡片带给鲍勃,并将答案返回给您。除问题外,您还必须在卡上写些什么,以确保Bob可以对消息进行编码,以使Eve无法读取您的电话号码? 注意:该问题在“ Google面试问题”列表中。结果,网络上有成千上万个此问题的版本,其中许多没有清晰甚至正确的答案。 注2:这个问题的狡猾答案是鲍勃应该写“给我打电话”。是的,这非常聪明,“开箱即用”,无所不包,但是没有使用CS领域中我们称之为英雄“鲍勃”和窃听对手“夏娃”的任何技巧。 更新: 您和Bob都可以手工合理完成的算法的加分。 更新2: 请注意,鲍勃不必向您发送任何消息,而仅需确认自己具有正确的电话号码,而夏娃无法对其进行解码,因此可能会或可能不会导致更简单的解决方案。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.