计算机科学

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

4
可以将数据压缩到小于Shannon数据压缩限制的大小吗?
我正在阅读有关数据压缩算法和数据压缩的理论限制。最近,我遇到了一种称为“组合熵编码”的压缩方法,该方法的主要思想是将文件编码为文件中显示的字符,它们的频率以及文件代表的这些字符排列的索引。 这些文档可能有助于解释此方法: https://arxiv.org/pdf/1703.08127 http://www-video.eecs.berkeley.edu/papers/vdai/dcc2003.pdf https://www.thinkmind.org/download.php?articleid=ctrq_2014_2_10_70019 但是,在第一个文档中,我读到了通过使用这种方法,他们可以将某些文本压缩到小于Shannon限制(他们没有考虑节省字符频率所需的空间和节省元数据所需的空间。文件的数据)。我考虑了一下,发现这种方法对很小的文件不是很有效,但另一方面,它对于大文件可能很好用。实际上,我对这个算法或Shannon限制并不十分了解,我只知道它是每个字符的概率之和乘以概率的倒数的。log2log2log_2 所以我有一些问题: 这种压缩方法是否真的将文件压缩到小于Shannon限制? 是否有任何压缩算法将文件压缩到小于Shannon限制(据我所知,对这个问题的回答是“否”)? 是否存在将文件压缩到小于Shannon限制的压缩方法? 如果组合编码确实压缩了超出Shannon限制的文件,难道不能一次又一次地压缩文件,直到达到所需的文件大小?

1
在两个或三个查询中找到一个多项式
黑框表示我可以在任意点求值多项式。f (x )f(x)f(x)f(x)f(x)f(x)f(x) 输入:度为的单项多项式的黑盒。df(x)∈Z+[x]f(x)∈Z+[x]f(x) \in\mathbb{Z}^+[x]ddd 输出:多项式的系数。dddf(x)f(x)f(x) 我的算法:让 f(x)=xd+ad−1xd−1+⋯+a1x+a0f(x)=xd+ad−1xd−1+⋯+a1x+a0f(x) = x^{d} + a_{d-1} x^{d-1} + \cdots + a_1 x + a_0 评价多项式在使用黑盒子的许多点,并得到线性方程的系统。现在,我可以求解线性方程组以获得所需的系数。f(x)f(x)\mathcal{f(x)}ddd 但是,在这种情况下,我需要许多对黑匣子的查询。我想减少查询数量。有什么方法可以将查询数量减少到两个或三个吗?O(d)O(d)\mathcal{O(d)}

2
程序正确性,规格
来自Wikipedia:在理论计算机科学中,当说算法相对于规范是正确的时,就断言了算法的正确性。 但是问题在于,获得“适当的”规范并不是一件容易的事,并且(据我所知)没有100%正确的方法来获得正确的规范,这只是一种估计,因此,如果我们要仅仅因为谓词看起来像“一个”就以谓词为规范,为什么不仅仅因为它看起来“正确”就认为程序是正确的呢?



2
为什么认为分解大整数很困难?
我在某处读到,发现最有效的算法可以计算时间的因数,但是我写的代码是或可能是具体取决于快速除法和模数。我敢肯定我在某个地方误解了一些东西,但是我不确定在哪里。这就是我以伪代码形式编写。O(exp((64/9⋅b)1/3⋅(logb)2/3)O(exp⁡((64/9⋅b)1/3⋅(log⁡b)2/3)O(\exp((64/9 \cdot b)^{1/3} \cdot (\log b)^{2/3})O(n)O(n)O(n)O(nlogn)O(nlog⁡n)O(n \log n) function factor(number) -> list factors = new list if number < 0 factors.append(-1) number = -number i = 2 while i <= number while number % i == 0 factors.append(i) number /= i i++ return factors

4
操作系统如何在应该管理的同一芯片上运行?
从我对操作系统的阅读(阅读Wikipedia,技术网站等的基本材料)中,我了解到操作系统是一个程序,它允许程序和应用程序以有效和安全的方式与硬件进行交互。 但是,我对操作系统如何在需要操作时如何监督计算机的操作感到困惑。 我什么意思 好吧,我想像一个操作系统的工作方式是在一台计算机上有两个CPU。一个始终运行操作系统,另一个用于操作系统运行计算机。但是,事实证明,该操作系统与其他进程在同一CPU上运行。这就像经理必须与员工在同一生产线上工作,并且只有在另一名员工完成工作后才能使用电动工具。他将不是一个非常有效的经理,因为如果他的员工稍微不纪律,他将无权下达命令。 那么,操作系统在部分必须在所有其他进程之间共享的同一CPU上仅部分运行的情况又如何呢?最终如何解决?

3
使用NIL表示空节点的目的是什么?
在我的算法和数据结构课程中,教授,幻灯片和这本书(算法简介,第3版)都使用了这个词NIL来表示例如不存在的节点(在树中)的子代。 有一次,在一次演讲中NIL,我的同学没有说,而是null教授纠正了他,而我不明白为什么教授强调这个词。 人们为什么使用单词NIL代替null,或none或任何其他单词?是否NIL具有其他人没有的某些特定含义?有历史原因吗? 请注意,我在网络上也看到了一些地方,例如,使用单词null代替NIL,但是通常使用最后一个。

4
查找一对不重叠的位向量
我给您列出了宽度为的n个位nn向量。您的目标是从列表中返回两个不共有1的位向量,或者报告不存在这样的对。ķkk 例如,如果我给您那么唯一的解决方案是。可替代地,输入没有解。任何包含全零位向量和另一个元素都具有平凡的解。[ 00110 ,01100 ,11000 ] [00110,01100,11000][00110, 01100, 11000]{ 00110 ,11000 } {00110,11000}\{00110, 11000\}[ 111 ,011 ,110 ,101 ] [111,011,110,101][111, 011, 110, 101]000 ... 0 000...0000...0Ë ee{ é ,000 ... 0 }{e,000...0}\{e, 000...0\} 这是一个稍微困难一点的示例,没有解决方案(每行都是位向量,黑色正方形为1s,白色正方形为0s): ■ ■ ■ ■ □ □ □ □ □ □ □ □ □ ■ □ □ …


3
“软”实时操作系统实际上可以提供什么保证
我想我知道什么是“硬”实时操作系统。它是带有调度程序的操作系统,该调度程序与应用程序程序员提供合同。应用程序为每个资源分配请求提供截止日期。 如果期限请求是可行的,则调度程序保证将在期限之前将每个资源分配给请求的应用程序。该保证足以使应用程序程序员能够推理特定请求的最大延迟和最小吞吐量。 我发现的所有关于“软”实时系统的定义在我看来都是空虚的。 维基百科说 结果的有用性在其截止日期之后降低,从而降低了系统的服务质量。 嗯 好的。按照这个标准,Windows 95是一个软实时系统,3BSD和Linux也是如此。Wikipedia不是一个很好的来源,但是接下来的两个Google热门记录并没有好得多。例如http://users.ece.cmu.edu/~koopman/des_s99/real_time/说 在软实时系统中,可以容忍很少出现的峰值负载下的性能下降。 那不是合同,那是什么都不说的幻想。 实际操作系统提供的真正的软实时担保/合同的例子有哪些? 我正在寻找以下形式的答案: 在(OS-name)中,如果程序员这样做(程序员需要做什么),则操作系统保证(系统保证什么)。

3
路径归纳是否具有建设性?
我正在阅读HoTT的书,并且很难理解路径归纳法。 当我查看1.12.1节中的类型时: ind=A:∏C:∏x,y:A(x=Ay)→U((∏x:AC(x,x,reflx))→∏x,y:A∏p:x=AyC(x,y,p)),ind=A:∏C:∏x,y:A(x=Ay)→U((∏x:AC(x,x,reflx))→∏x,y:A∏p:x=AyC(x,y,p)),\text{ind}_{=_A}:\prod_{C:\prod\limits_{x,y:A}(x=_Ay)\to \mathcal{U}} \left( \left(\prod_{x:A}C(x,x,\text{refl}_x)\right) \to \prod_{x,y:A}\prod_{p:x=_Ay} C(x,y,p) \right), 对于理解这意味着什么,我没有任何问题(我只是从内存中写出类型,以进行检查)。 下一个问题是我的问题: with the equalityind=A(C,c,x,x,reflx):≡c(x)with the equalityind=A(C,c,x,x,reflx):≡c(x)\text{with the equality}\quad \text{ind}_{=_A}(C,c,x,x,\text{refl}_x):\equiv c(x) 我的第一印象是,这最后一个表达式不限定所得到的函数f:∏x,y:A∏p:x=AyC(x,y,p),f:∏x,y:A∏p:x=AyC(x,y,p),f:\prod_{x,y:A}\prod_{p:x=_Ay} C(x,y,p), 但仅陈述其性质。 这与先前的归纳原理indA×BindA×B\text{ind}_{A\times B},indA+BindA+B\text{ind}_{A+B}或示例形成对比indNindN\text{ind}_\mathbb{N}- 为这些元素定义了方程式 -我们确实知道在给定前提的情况下如何构造结果函数。这与本章所提到的类型理论的“建设性”是一致的。 回到ind=Aind=A\text{ind}_{=_A},我对它(未定义)的事实感到怀疑。指出元素fff 刚刚存在似乎与本章的其余部分格格不入。实际上,第1.12.1节似乎强调我的印象是错误的,我们实际上已经定义了 ... 的函数 f:∏x,y:A∏p:x=AyC(x,y,p),f:∏x,y:A∏p:x=AyC(x,y,p),f:\prod_{x,y:A}\prod_{p:x=_Ay} C(x,y,p),由下式定义 从路径感应c:∏x:AC(x,x,reflx)c:∏x:AC(x,x,reflx)c:\prod_{x:A}C(x,x,\text{refl}_x),而且 满足 ...f(x,x,reflx):≡c(x)f(x,x,reflx):≡c(x)f(x,x,\text{refl}_x):\equiv c(x) 这使我完全困惑,但是我觉得这一点对于所有进一步的发展都非常重要。那么,应该选择的两个读数中的哪个?或者,也许我错过了一些重要的微妙之处,答案是“都不”? ind=Aind=A\text{ind}_{=_A}

4
有人真的创建了一个可以按照规范编写计算机程序的系统吗?
有没有人实际编写过一个可以生成计算机程序的系统(软件或纸上的详细说明以及简单的示例)?余输入,它创建了一个程序,它列出了素数小于10 P - [R 我中号È (X )被简单地定义为 1 &lt; X ∧ ∄ 甲Prime(x)∧x&lt;10Prime(x)∧x&lt;10Prime(x) \wedge x<10Prime(x)Prime(x)Prime(x) 教授说,他们可以,但没有人给出实际完成的例子。1&lt;x∧∄As.t.1&lt;A∧A&lt;x∧x=A×B, with A,B∈N1&lt;x∧∄As.t.1&lt;A∧A&lt;x∧x=A×B, with A,B∈N1<x \wedge \not\exists A\; s.t. 1<A \wedge A<x \wedge x=A\times B,\mbox{ with } A,B\in \mathbb{N}

8
OOP在实践中解决了哪些程序编程问题?
我已经读过《 C ++ Demystified》一书。现在,我开始阅读Robert Lafore的“ Turbo C ++第一版(第1版)中的面向对象程序设计”。除了这些书之外,我没有编程方面的知识。这本书已经有20年历史了,所以可能已经过时了。我确实有最新版本,因为我喜欢旧版本,所以我正在使用旧版本,主要是我只是通过Lafore的第一版研究C ++中使用的OOP的基本概念。 Lafore的书强调“ OOP”仅对较大和复杂的程序有用。在每本OOP书中(以及在Lafore的书中)都说过,程序范式容易出错,例如全局数据容易受到功能的影响。据说程序员可以用程序语言编写诚实的错误,例如通过创建一个意外破坏数据的函数。 老实说,我发布问题是因为我没有掌握本书给出的解释:C ++中的面向对象编程(第4版)我没有掌握Lafore本书中写的这些语句: 之所以开发面向对象的程序设计,是因为在早期的编程方法中发现了局限性。...随着程序变得越来越大,越来越复杂,甚至结构化编程方法也开始显示出紧张的迹象....分析原因这些失败表明程序范式本身存在弱点。不管结构化编程方法的实现程度如何,大型程序都变得过于复杂。……有两个相关的问题。首先,功能可以不受限制地访问全局数据。其次,不相关的功能和数据是程序范式的基础,为现实世界提供了糟糕的模型。 我已经学习了Jeff Kent的书“ dysmystified C ++”,我非常喜欢这本书,这本书中主要是对过程编程的说明。我不明白为什么程序(结构化)编程很弱! Lafore的书通过一些很好的例子很好地解释了这个概念。另外,通过阅读Lafore的书,我已经掌握了一种直觉,即OOP比过程编程要好,但是我很好奇,实际上,过程编程要比OOP弱。 我想看看自己在过程式编程中将面临的实际问题是什么,OOP如何使编程更容易。我想我只是沉思地阅读Lafore的书就能得到答案,但是我想亲眼看看程序代码中的问题,我想看看程序的OOP样式代码如何消除前面提到的错误。使用程序范例编写相同的程序。 OOP有很多功能,我理解没有人可以向我解释所有这些功能如何消除以程序样式编写代码会产生的上述错误。 所以,这是我的问题: OOP解决了程序编程的哪些限制,并且在实践中如何有效消除这些限制? 特别是,是否存在使用程序范例难以设计但易于使用OOP设计的程序的示例? PS:交叉发布于:https : //stackoverflow.com/q/22510004/3429430

3
是否有一个TM停止所有输入但该属性不可证明?
是否存在图灵机停止所有输入,但由于某种原因无法证明该属性? 我想知道是否已经研究了这个问题。注意,“不可证明的”可能意味着“有限的”证明系统(从狭义上讲,答案肯定是肯定的)。我当然对最强有力的答案感兴趣,即,用ZFC集合论或任何其他方法都无法证明该答案不能停止。 在我看来,Ackermann函数可能确实如此,但我对细节不了解。维基百科似乎没有清楚地描述这方面。

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.