计算机科学

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

2
变量和指针有什么区别?
Whist阅读了一篇概述OO和函数式编程差异的文章,我遇到了函数指针。自从我完成计算机科学学位(2003年)以来已经有一段时间了,所以我查找了一些指针来刷新自己的记忆。 指针是包含对内存地址的引用的变量。如果存在,则可以认为它们指向该内存地址中包含的数据。或者,如本文中的情况一样,它们可能指示代码段的入口点,并可用于调用该代码。 为什么这不同于变量?变量是内存地址的符号名称,编译器会将名称替换为实际地址。这意味着变量包含对内存位置的引用,如果存在这样的数据,则可以认为变量指向该地址处的数据。 如果行为不同(也许不能在运行时重新分配指针,或者只能分配符号变量名称,不能分配其他任何值),这是否意味着它只是特定类型的变量,即指针类型?以相同的方式,声明为整数类型的变量在其用途上受到编译的限制。 我在这里想念什么?


1
使用二进制索引树进行范围更新+范围查询
我试图了解如何修改二进制索引树(fenwick树)以处理范围查询和范围更新。 我发现以下来源: http://kartikkukreja.wordpress.com/2013/12/02/range-updates-with-bit-fenwick-tree/ http://programmingcontests.quora.com/Tutorial-Range-Updates-in-Fenwick-Tree http ://apps.topcoder.com/forums/?module = Thread&threadID = 756271&start = 0&mc = 4#1579597 但是即使通读了所有它们,我也无法理解第二个二进制索引树的目的或作用。 有人可以向我解释一下如何修改二进制索引树来处理这些吗?

1
用两个递归调用解决递归关系
我正在研究quicksort的最坏情况下的运行时,条件是它不会为very的各种定义进行非常不平衡的分区。 为了做到这一点,我问自己一个问题如果快速排序总是发生在分区的情况下那么运行时间将是什么,使得元素在左分区中,而在右分区中(在中间保留元素,即枢轴)。T(n,p)T(n,p)T(n, p)0&lt;p≤120&lt;p≤120 < p \leq {1\over 2}⌊p(n−1)⌋⌊p(n−1)⌋\lfloor{p(n-1)}\rfloor⌈(1−p)(n−1)⌉⌈(1−p)(n−1)⌉\lceil(1 - p)(n - 1)\rceil111 不难看出,为最坏的情况给出了上限,在最坏的情况下,是允许的最大不平衡分区,因为任何分数分区都将更加平衡,运行时更短,并且不允许任何分数。T(n,p)T(n,p)T(n, p)ppp&gt;p&gt;p> p&lt;p&lt;p


1
为什么在
我的教科书说:“我们将函数定义如下:和。请注意,给定,我们可以在时间中轻松找到数量,使得夹在和。” f (1 )= 2 f (i + 1 )= 2 f (i )1.2 n O (n 1.5)i n f (i )f (i + 1 )F:N → Nf:N→Nf\colon \mathbb{N}\to\mathbb{N}F(1 )= 2f(1)=2f(1)=2F(我+ 1 )= 2F(我)1.2f(i+1)=2f(i)1.2f(i+1)=2^{f(i)^{1.2}}ñnnØ (ñ1.5)O(n1.5)O(n^{1.5})一世iiñnnF(我)f(i)f(i)F(我+ 1 )f(i+1)f(i+1) 我如何使自己相信我们实际上可以在时间内轻松找到?由于是递归定义的,我认为我们必须计算直到。为了找出这些计算所花费的时间,我认为我们必须为依赖于找到合适的上限,并且必须找到函数。最后,我们可以希望显示所引用的命题。不幸的是,我看不到一件事,也看不到另一件事。ø (Ñ 1.5)˚F ˚F (1 ),˚F (2 ),˚F (3 )... ˚F (Ĵ )˚F …

5
以可逆方式将有向图转换为无向图
我正在寻找一种算法,以可逆的方式将有向图(有向图)转换为无向图,即,如果我们得到无向图,则该有向图应该是可重构的。我知道这将以无向图具有更多顶点为代价,但是我不介意。 有谁知道该怎么做或可以提出任何建议?提前致谢。 更新:关于下面的AdrianN的答案。这可能是一个很好的起点,但我认为它不能以当前形式运行。这是为什么我不这样认为的图像: DW发表评论后进行更新:我认为图的顶点是未标记的。如果一个解决方案涉及到标注顶点(就像AdrianN一样),那么无论标注如何完成,它都应该给出相同的(同构)无向图。我对带有标记顶点的图的“同构”定义是,存在与这两个图相关的标记的排列,但是我不确定未标记图的确切定义。

2
自行编译编程语言
我是计算机科学专业的学生。我想创建自己的编程语言(一种基本语言,几乎没有说明)。 我知道如何进行语法分析器,我已经在Perl中做到了。在一篇文章中,我阅读了一些有关编译器的信息,编译器本身就是完成的。 例如,C编译器是用C编写的。这怎么可能?我可以使用自己的语言,但不知道如何执行?任何的想法? 这确实是一个很好的问题,我可以为该项目写博客。

2
Coq中的定理证明
背景 我正在独自学习帮助,Coq。到目前为止,我已经匆匆完成了Yves Bertot的Coq阅读。现在,我的目标是证明与自然数有关的一些基本结果,并以所谓的除法算法结束。但是,在实现该目标的过程中,我遇到了一些挫折。特别是,以下两个结果已经证明(双关语意)比我最初想象的要困难得多。实际上,经过多次徒劳的尝试之后,我不得不手工证明它们(如下所示)。显然,这并不能帮助我更加精通Coq。这就是为什么我转向这个论坛。我希望这个网站上的某人能够并且愿意帮助我将下面的证明转换为Coq接受的证明。衷心感谢所有帮助! 定理A 对于所有证明:x,y∈Nx,y∈Nx,y \in N x&lt;S(y)⊂x&lt;y∨I(N,x,y)x&lt;S(y)⊂x&lt;y∨I(N,x,y)\begin{equation} x < S(y) \subset x < y \lor \text{I}(N,x,y) \end{equation} 假设。因此,存在一个与 因此,通过(皮亚诺1b和3)x&lt;S(y)x&lt;S(y)x < S(y)z∈Nz∈Nz \in NI(N,x+S(z),S(y))(*)(*)I(N,x+S(z),S(y))\begin{equation} \text{I}(N,x+S(z),S(y)) \tag{*}\end{equation}I(N,x+z,y)I(N,x+z,y)\begin{equation} \text{I}(N,x+z,y) \end{equation} 定义一个谓词Q(u):=(I(N,x+u,y)⊂x&lt;y∨I(N,x,y)Q(u):=(I(N,x+u,y)⊂x&lt;y∨I(N,x,y)\begin{equation} Q(u):=(\text{I}(N,x+u,y) \subset xy¬I(N,x,y)¬I(N,x,y)\neg \text{I}(N,x,y)x&gt;yx&gt;yx>y y&gt;xy&gt;xy>xI(N,x,y)I(N,x,y)\text{I}(N,x,y) 我们使固定并在归纳。当对于所有,我们都有,这证明了基本情况。接下来,假设定理对成立;现在我们要证明的定理。从对的三分法中可以看出三种情况:和。如果,则显然。如果,则(对于所有都是)。最后,假设X 我(Ñ ,0 ,ÿ )0 &lt; Ý ∨ 我(Ñ ,0 ,ÿ )ÿ X 小号(X )X X …

1
如何减少图中的相交边数?
我正在图编辑器上工作。图表显示与连接器(边缘)连接的2D形状(节点)。 我想添加一个操作,在选择了节点的情况下,将它们“解缠结”:如果可能的话,它会重新放置它们以减少交叉边缘的数量(如果必须用弯曲点绘制边缘就可以了) 。 因此,我想要一个图算法,在给定一个(拓扑)图嵌入及其节点子集的情况下,仅修改那些节点上的嵌入(拓扑),以最大程度地减少交叉边缘的数量。 通过阅读有关顶点图的信息并浏览Cabello和Mohar(2013),我认为这个问题是NP-难的。因此,对于任何给定参数值都具有已知的多项式时间复杂度的参数化算法(例如,相交边的数量),我将感到满意。这似乎是可行的,但我个人很难提出这样的算法。 问题: 我在哪里寻找这样的算法? 是否存在? 在现有软件中? 这样的操作是否有任何重要的实践经验?(理论上看起来不错的东西在实践中可能并不那么好,反之亦然。) (我不确定在哪里最好问这个问题:在这里,在StackOverflow还是MathOverflow上?)

3
Multiprogramming和Multitasking有什么区别
我发现很难清楚地区分多程序和多任务。 我的主要来源是Wikipedia,但WP文章似乎与一些较不知名的来源(例如我的大学教授)有点矛盾。 在我读WP时,通过在进程等待I / O时进行上下文切换,多编程是提高CPU吞吐量的基本方法。 多重编程不能保证程序会及时运行。实际上,第一个程序可以很好地运行数小时,而无需访问外围设备。 合作分时,与协作多任务同义,是对多程序的改进(不是同义的)。CPU定期进行上下文切换以给人以同时执行的印象,但是仍然需要进程来产生-设计不当的程序可能会使系统的其余部分枯竭。 抢占式多任务处理可以更主动地控制调度,将某些进程优先于其他进程,等等。 此概述正确吗?如果不是,那是因为WP不正确还是因为我读WP错误? 为什么有些资料似乎将多程序和多任务混为一谈?

5
什么是有效算法?
从渐近行为的角度来看,什么被视为“有效”算法?当时画线的标准/原因是什么?就我个人而言,我认为任何可能被我天真地称为“次多项式”的事物,例如例如都是有效的,而任何将是“无效的”。但是,我听说过任何多项式阶数都被称为有效的东西。这是什么原因?f(n)=o(n2)f(n)=o(n2)f(n) = o(n^2)n1+ϵn1+ϵn^{1+\epsilon}Ω(n2)Ω(n2)\Omega(n^2)


3
寻找数学/ CS符号字典
数学和CS论文中有时会使用令人眼花symbols乱的符号。然而,许多人假设基本的熟悉程度似乎很少在一个地方教授。我正在寻找类似以下内容的字典,尤其是从CS角度来看。 它将列出所有基本的数学符号并给出其含义和示例。它将讨论有时以等效方式使用的符号。它会指出常见的初学者错误。 它将讨论围绕单个符号的不同含义的微妙之处(很像字典中同一单词的多个定义)。 它不仅是每个符号的非常简洁的描述,例如像“子集”这样的单词描述。 它会显示符号有时是如何“过载”的。例如,(xy)(xy)\binom{x}{y}可以将zzz作为整数,但是有时zzz可以是具有此符号的集合,这意味着要从该集合中选择元素。[n][n][n]有时表示整数1…n1…n1 \ldots n,或者有时表示它是一个单元素的数组。 它可能会讨论如何用不同的符号或引用它们的等效方法(但更清楚)来描述各种不同的“对象”以及对这些对象可能的操作。换句话说,有点像数学对象的API。 即有时也将是一本针对如何呈现数学写作的不同细节的“风格手册”。对于任何人在数学堆栈交换中写问题的人来说,这都是非常有用的资源,因为许多问题由于不适合棘手的数学约定而无法理解。 一些书籍介绍具有许多这些功能。但是理想情况下将是单独的处理。另外,理想情况下当然是在线的。虽然有乳胶符号表,但它们并不能真正满足上述许多标准。 有没有人看过符合这些特征的“符号词典”? (或者,如果不存在像这样的良好引用,这似乎是一个出色的Wiki或FAQ项目。)

3
为什么二叉树
在我的Java课上,我们正在学习不同类型的集合的复杂性。 很快我们将讨论我一直在阅读的二叉树。该书指出二叉树的最小高度为,但没有提供进一步的解释。日志2(n + 1 )− 1log2⁡(n+1)−1\log_2(n+1) - 1 有人可以解释为什么吗?

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.