Questions tagged «computer-science»

计算机科学或计算科学(简称CS或CompSci)是计算及其应用的科学方法。

5
算法复习。为什么heapsort是insort算法?
我看不到为什么heapsort被认为是就地排序算法。 我的意思是用要排序的数组元素(即堆)填充的额外数据结构用于协助提取最小值和排序过程。 那么我可能误解了inplace的定义吗? 但是,例如,插入排序显然是就地算法,即元素不需要额外的内存。 那么为什么要考虑到它呢?

3
为什么c系列是LISP系列而不是数学/ CS计划的标准CS学习团?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 为了自我改善,我一直在熟悉LISP。我注意到的一件事是LISP在数学范式中比在C语言中更重要。语法和设计结构似乎直接反映了算法的实际数学模型。对我来说,为什么即使是基于数学的优秀CS程序也学习C而不是LISP,这对我来说都没有道理。我认为LISP比C更直接采用更高的数学概念。我并不是说您不能在C中对数学结构进行建模。我只是注意到LISP对于数学家来说似乎是一成不变的。 我已经在JAVA学校中阅读了许多Joel Spolsky的咆哮,而没有读到(我同意他的评价),但是我的学校并没有因此而教JAVA。他们在教授诸如指针,算法设计,递归甚至汇编指令之类的基本概念方面非常严格。但是,他们在C和c ++中都完成了这一切。有谁知道原因和/或其历史?


7
如果有人为您提供有关软件开发实践的未经验证的陈述,您是否回答“需要引用”?[关闭]
很难说出这里的要求。这个问题是模棱两可,含糊,不完整,过于宽泛或夸张的,不能以目前的形式合理地回答。如需帮助澄清此问题以便可以重新打开, 请访问帮助中心。 9年前关闭。 最近,我参加了Greg Wilson(软件木工首席科学家)的演讲。从摘要: 关于软件开发实践的主张应基于证据的想法对于软件开发人员来说仍然陌生,但这终于开始改变:任何声称特定工具或实践使软件开发更快,更便宜或更可靠的学者现在都在改变。希望通过某种经验研究来支持这种说法。 总体而言,这次演讲非常有益,使我对自己的发展方式进行了深入思考。特别是,我现在发现自己正在寻找引用来支持很多陈述。以前,我养成了简单地重复提供的事实的习惯,也许以后会记下一些心理上的注意事项。 坦率地说,我很容易受骗。 这是从讲座中获得的一个例子: “如果超过25%的代码需要重构,则重写起来会更快”。 听起来合理,但这是真的吗?研究在哪里支持呢?所有语言都适用吗?等等。 好的,这很有可能将其推向极致,并且除非您自己是从第一原理中得出的,否则任何人都不相信任何东西。那就是疯狂(或者也许是数学;-))。但是,如果有人向您提出以下声明:“嘿,通过[即时选择语言]执行此操作,如果您倾向于接受它,还是要索取经证明的证据? 如果是后者(我希望是),那么 您将在哪里找到这些证据? 你有多严格? 简而言之,如果有人为您提供未经验证的陈述,您会回答“需要引用”吗?

9
我如何在学校引导一个软件开发社区?
我是南佛罗里达大学的学生,他对计算机科学计划的教育环境感到沮丧。现在,我正在学习“程序设计”。我应该学习如何将我的源代码组织为功能和模块,以使我的程序易于阅读和维护。取而代之的是,我正在学习C语言中的数组和递归。下学期,我必须学习“面向对象的设计”,这是通过C ++进行教学的(shudder。) 两年前,我爱上了编程,从那时起我一直在学习尽可能多的东西。参加另一门C ++类的前景让我几乎哭了。因此,我认为我将成立一个编程俱乐部,以便结识同样有志向的学生,学习新语言,讨论软件开发主题并与其他学生开发人员一起工作。 但是,我开始意识到可能没有其他学生分享我的软件开发经验。这不是因为缺乏动力而是因为缺乏机会:我只知道一个编程类(“编程语言”),而没有关于实际软件开发的类。其他人只有使用C和C ++编写琐碎脚本的经验。 我已经意识到,如果我想与其他学生软件开发人员一起工作,我将不得不自己培训他们。现在,我正计划使该俱乐部成为软件开发训练营,教会员如何使用现代工具和语言开发软件。显然,采用许多可能的方法来启动一个非正式的软件开发课程是一项艰巨的任务。亲爱的读者,我对您的问题是 我的进攻计划是什么? 我是不是该 自己给俱乐部讲课,试图平衡俱乐部工作与家庭作业? 要求CS教授在其专业知识范围内教授与会员无关的话题吗? 尝试在学校内部或外部寻找一个富有同情心,经验丰富的开发人员,谁可以分担我的工作量? 显示视频讲座(来自MIT OpenCourseWare,Google Tech Talks等)? 举办动手编程研讨会? 分配作业? 还有其他事吗

2
休眠线程如何工作?
当您休眠线程时,实际上是什么情况? 我看到休眠线程“在给定的时间段内暂停了当前线程”。但是,它是如何工作的呢? 根据Thread.sleep()在内部如何工作以及Thread.sleep如何真正工作?: 睡眠时间将取决于某些系统特定的粒度 睡眠受阻 线程离开CPU并停止执行 线程在睡眠时不占用CPU时间 我只是不太了解这一切意味着什么的内部和基本机制。 我知道有一个称为调度程序的东西负责线程之间的切换。 消息来源似乎表明这随操作系统(或硬件?)而变化,并且大多数线程被赋予1ms-60ms左右的时间,以便在CPU切换到另一个线程之前执行某些操作。 但是,当线程休眠时(例如,数秒),它如何恢复?我猜想其中涉及一个计时器,它是主板的时钟吗?它与CPU时钟速率有关吗? 即使涉及计时器,CPU如何知道何时该再次关注该线程?是否不必经常检查线程以查看其是否准备就绪?这不是有效的轮询,因此会浪费CPU时间吗? 是在休眠特定于线程语言的线程,还是由操作系统负责,还是CPU特定的事物? 有人可以通过诸如调度程序之类的基本解释以及CPU在所有这些过程中的作用向我解释一下吗?

2
lambda演算与编程语言之间是什么关系?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 5年前关闭。 我明年要开始(大学)计算机科学专业的第一年,而我主要用C语言写作(如果有关系的话)。我曾尝试搜索,但发现的大部分内容都是关于lambda演算的知识。为什么lambda演算在编程中比单变量演算有用得多?lambda表达式与功能程序之间是否存在关系?阿隆佐·丘奇(Alonzo Church)在lambda微积分上的工作是否影响了编程语言的发展? 校外的每个人都在忙着讨论它,即使我渴望学习它,并看到它与我的编程和对编程语言的理解直接相关,我也不知道他们会谈论什么。

4
回溯我的“教育”
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 4年前关闭。 前一段时间,我决定开始编程。我真的,只是跳入一种语言(Perl),然后从那里去了。我感到遗憾的是,我刚刚加入: 我没有学习基础知识(如果您将其称为基础知识)。 我没有学习计算机科学。 我认为,这个问题使我无法发挥自己的真正潜力。我应该在哪里“重启”?我应该阅读任何书籍,文章等吗?有经验的程序员应该知道什么主题吗?您有什么建议?

7
谁能建议我写一个项目来帮助我理解线程
我目前是一位C#开发人员,对线程的理解很不稳定。 这两个链接已在其他帖子中建议: http://www.yoda.arachsys.com/csharp/threads/ http://www.albahari.com/threading/ 我是否应该回到基础知识,也许再看一些有关该主题的计算机科学教材? 我真的觉得,如果我跳入并使用c#库,我将不会真正拥有扎实的知识基础。我想我需要像com cici学生一样从头开始学习这个主题,然后使用C#库。 谁能建议一种学习线程的方法,也许一些链接和/或项目构想? 提前致谢! 编辑,感谢所有答复。有人提到一本书可能是一个好主意,有人可以建议吗?我更喜欢不可知的语言。有谁知道计算机科学学位将涵盖哪些课程?我正在尝试Google搜索一些免费的在线笔记和作业。

3
转向机器学习职业[关闭]
按照目前的情况,这个问题并不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 我的日常工作是简单的旧软件开发。我也在攻读CS硕士学位(兼职,基于课程)。我上了一门关于AI的课程,发现机器学习非常有趣,但是像大多数课程一样,它仅提供了基本的介绍。 我打算学习有关机器学习的更多信息,并在可能的情况下找到该领域的工作。当我查看该领域的职位发布时,很明显,其中大多数需要机器学习博士学位(或具有相当专业知识的该领域的先前经验)。 我正在寻找有关自我学习的建议,以获取对行业有用的经验。至少有足够的经验可以涉足。我会做一些显而易见的事情,例如阅读教科书,论文等。也许我可以参加任何开源工作,或者我可以自己做些什么? 抱歉,如果我在这里含糊不清,但我希望至少有一些人做了类似的更改并可以提供建议。 谢谢 !

1
哪些中间表示可用于推理并发?
我试图更好地理解编译器能够代表程序员对并发做出明智选择的要求。我意识到例如这个问题有很多困难的方面: 确保没有比赛条件 确保要同时运行的代码不会产生影响代码语义的副作用 给定代码中可用的并行度,确定是否有必要分散线程的开销 我的理解是,现代编译器中使用的两个主要中间表示形式是面向过程和面向对象语言的静态单一分配,以及面向功能语言的延续传递样式。使用这些中间形式似乎很难对上面列出的任何问题进行推理。即使是理论上应该在自动并行化方面机会最大的语言(诸如Haskell这样的纯功能语言,也没有副作用)在这方面也取得了有限的进展。 所以我的问题是,实际上使用了哪些中间表示来尝试解决该问题?我还不知道还有其他一些学术研究中使用的表示形式更适合此任务吗?这个问题是否是编译器前端必须从根本上通过在编译到达中间表示之前操纵抽象语法树来解决的问题?

2
我们可以建造一台功能正常的计算机吗?
就像FP一样,最终,我们所有的程序都是结构化的。也就是说,我们制作它们的纯度或功能无关紧要-它们始终会转换为汇编,因此实际上在幕后运行的是指令,状态和循环。我们有点模仿FP。 作为硬件新手,我的问题是:为什么我们不使用实际上以功能样式计算事物的计算机体系结构?例如,一台计算机可能由原始的“功能芯片”组成,例如“ concat”,“ map”和“ reduce”,而程序只会告诉计算机如何在这些芯片之间流动数据以计算所需的结果,例如连接语言。 这真的没有道理,但可以说明我在想什么。

1
λ演算本质上是什么?
我有一个关于λ微积分的哲学问题。 当您探索λ微积分时,您会惊讶地看到在那里可以做的所有事情。您可以定义整数,算术运算,布尔值,if-then-else语句,循环,递归函数等。我相信它已经被证明在计算上是完整的。 但另一方面,如果考虑使用λ微积分中的函数,您会意识到唯一可以做的就是向它提供一个函数,然后它返回另一个函数。这个过程永无止境。 那么如何从计算中提取结果呢? 假设表达式的结果是function f。您要检查是否f符合您的期望。您可以对其进行测试,采用您知道的功能,应用于f它并接收g。但是要检查g是否正确,您现在需要验证是什么g。然后您从头开始。那么,您如何得知f? 在我看来,您可以用一个函数,身份函数替换λ演算中的所有函数I = λx.x,并且一切仍然按λ演算中所述工作。教堂数字3给定f并x返回f(f(f(x)))。但是由于f并且x只能是I,它返回I。 I应用于I并且I还返回I。因此I满足的定义3。在“布尔” (λxy.x)和(λxy.y)需要2个参数,这将是I与I这样两个布尔值将会返回I。尽管它们完全按照其定义运行,但每个都等同于标识。 那么,您如何发挥作用呢?您如何证明λ微积分处理的不仅仅是一个函数? 有身份的概念吗?您可以立即识别功能而不进行评估吗?我相信已经证明没有办法测试2个函数是否相等。 还是λ微积分不是功能,而是功能的形式描述?这将意味着λ表达式不仅定义函数的功能,而且还定义函数操作的数据。所以,当你写A B,你并不适用A于B,但你申请由字符串描述的功能A的函数的正式定义包含在B返回另一正式定义。 λ演算中实际上发生了什么?它处理的数学对象是什么? 跟进: 好的,从下面的答案看来,λ演算似乎不是关于数学意义上的函数,而是关于可以表示为λ表达式的函数子集。甚至更多关于操纵λ表达的信息。

2
是否有任何有关TDD的科学研究都使用产品的总拥有成本作为衡量标准?
当我阅读Batic D的Dogsa T的先前工作的摘要时。测试驱动开发的有效性:工业案例研究。软件质量杂志。2011; 19(4):643-661。令我惊讶的是,围绕TDD进行的许多研究中使用的度量都是基于诸如代码行,缺陷和开发时间所基于的。 是否有研究集中在使用TDD与传统开发或最后测试相比开发的产品的总拥有成本上? 我对购置和运营总成本特别感兴趣。

4
CPU如何执行代码行?
我试图真正理解高级语言如何准确地转换为机器代码,然后由cpu执行。 我知道该代码已编译为机器代码,这是CPU可以使用的低级代码。如果我有作业说明,请说: x = x + 5; y = x - 3; CPU是否一次执行每一行?因此,它将首先执行x = x + 5; 指令,然后CPU将执行的下一条指令是y = x-3; 我实际上是想了解执行过程以及我编写的代码实际上是如何由CPU执行的。

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.