计算机科学

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


2
如何实现AO *算法?
我注意到在实现搜索算法时会使用不同的数据结构。例如,我们使用队列来实现广度优先搜索,使用堆栈来实现深度优先搜索,使用最小堆来实现A *算法。在这些情况下,我们不需要显式构造搜索树。 但是我找不到简单的数据结构来模拟AO *算法的搜索过程。我想知道是否显式构造搜索树是实现AO *算法的唯一方法?谁能为我提供有效的实施方案?


3
算法信息论中“信息”与“有用信息”的区别
根据维基百科: 从算法信息理论的角度来看,非正式地,字符串的信息内容等于该字符串的最短自包含表示形式的长度。 “有用信息”的类似非正式严格定义是什么?为什么“有用信息”不被视为更自然或更基本的概念;天真地看似纯粹的随机字符串必须定义为包含零信息,因此我试图避免被标准定义认为具有最大信息的事实。

2
证明二元堆具有
我想证明一个二元堆与nnn节点正好有假设以下列方式构建堆,那么将保留 2片叶子:⌈n2⌉⌈n2⌉\left\lceil \frac{n}{2} \right\rceil 通过percolate up插入每个新节点。这意味着必须在下一个可用子节点上创建每个新节点。我的意思是,孩子们从下到上,从左到右地被填充。例如,以下堆: 0 / \ 1 2 将有已建成的顺序为:0,1,2,(这些数字仅仅是索引,他们没有给出该节点所包含的实际数据的指示。) 这有两个重要含义: 没有完全填充级别k,在级别上将不存在任何节点k+1k+1k+1kkk 因为子级是从左到右构建的,所以在级别上的节点之间不能有“空白空间” ,或者类似以下情况: k+1k+1k+1 0 / \ 1 2 / \ \ 3 4 6 (根据我的定义,这将是非法的堆。)因此,考虑该堆的一个好方法是堆的数组实现,其中数组的索引中不能有任何“跳转”。 因此,我认为归纳法可能是实现此目的的一种好方法……也许某些事情甚至需要处理n的奇数情况。例如,使用这样的事实进行归纳,即以这种方式构建的偶数堆必须具有一个带有偶数n的子节点的内部节点,而没有奇数n的此类节点。有想法吗?

2
语法和自动机语言的可判定性
请注意,这是在一所大学的CS固然与研究的一个问题,这不是功课,可以发现这里在2011年秋季exam2。 这是我过去考试所关注的两个问题。它们似乎是相关的,第一个是: 让 FINITECFG={&lt;G&gt;∣G is a Context Free Grammar with |L(G)|&lt;∞}FINITECFG={&lt;G&gt;∣G is a Context Free Grammar with |L(G)|&lt;∞}\qquad \mathrm{FINITE}_{\mathrm{CFG}} = \{ < \! G \! > \mid G \text{ is a Context Free Grammar with } |\mathcal{L}(G)|<\infty \} 证明是一种可判定的语言。 FINITECFGFINITECFG\mathrm{FINITE}_{\mathrm{CFG}} 和... 让 FINITETM={&lt;M&gt;∣M is a Turing Machine with |L(M)|&lt;∞}FINITETM={&lt;M&gt;∣M is …

1
在最小堆自动机接受的语言反转的情况下证明关闭
这是一个后续问题这一个。 在先前关于奇异状态机的问题中,亚历克斯·十·布林克和拉斐尔谈到了一种特殊的状态机的计算能力:最小堆自动机。他们能够证明这些机器接受的语言集(HALHALHAL)既不是上下文无关语言集的子集也不是其超集。鉴于已成功解决该问题并对该问题有明显的兴趣,我继续提出几个后续问题。 众所周知,常规语言在各种操作下都是封闭的(我们可能将自己限制为基本操作,例如并集,交点,补码,差,串联,Kleene星号和反转),而上下文无关的语言则具有不同的闭合属性(这些属性在并集,串联,Kleene星号和反向条件下关闭)。 HAL是否在逆转下关闭?

2
有限自动机的修改版本接受的语言
确定性有限自动机(DFA)是一种状态机模型,能够接受所有且仅常规语言。可以(通常是)定义DFA,以使每个状态都必须为输入字母的所有元素提供某种过渡。换句话说,转换函数δ:Q×Σ→Qδ:Q×Σ→Q\delta : Q \times \Sigma \rightarrow Q应该是(总计)函数。 想象一下我们称之为双重确定性有限自动机(DDFA)。它的定义类似于DFA,但有两个例外:首先,它必须导致两个不同的状态,而不是针对每个可能的输入符号从一个状态过渡到另一个状态。其次,为了接受字符串,所有可能的路径都必须满足以下一个或多个条件: 通过DDFA的所有可能路径均会导致进入接受状态(我们将其称为1类DDFA)。 通过DDFA的所有可能路径都导致相同的接受状态(我们将其称为2型DDFA)。 现在我的问题是: 大号(d d ˚F 甲)= 大号(d ˚F 甲)大号(d d ˚F 甲)⊊ 大号(d ˚F 甲)大号(d d ˚F 甲)≠ L (D F A )L (D D FL(DFA)⊊L(DDFA)L(DFA)⊊L(DDFA)L(DFA) \subsetneq L(DDFA)L(DDFA)=L(DFA)L(DDFA)=L(DFA)L(DDFA) = L(DFA)L(DDFA)⊊L(DFA)L(DDFA)⊊L(DFA)L(DDFA) \subsetneq L(DFA)L(DDFA)≠L(DFA)L(DDFA)≠L(DFA)L(DDFA) \neq L(DFA)L(DDFA)L(DDFA)L(DDFA) 如果证明不太复杂,则证明(或至少要适度充实)。

1
数独拼图的有效编码
指定任意9x9网格要求提供每个正方形的位置和值。单纯的编码可能会产生81个(x,y,值)三元组,每个x,y和值需要4位(1-9 = 9个值= 4位),总计81x4x3 = 972位。通过对每个方块编号,可以将位置信息减少到7位,每个方块减少1位,总共减少891位。通过指定一个预定的顺序,可以将这个顺序更彻底地减少到每个值只有4位,总共324位。但是,数独可能缺少数字。这为减少必须指定的数量提供了可能,但可能需要额外的位来指示位置。使用我们的(位置,值)的11位编码,我们可以指定线索的拼图nnn11n11n11n位,例如最小(17)拼图需要187位。到目前为止,我想到的最好的编码是对每个空格使用一位,以指示是否已填充,如果是,则接下来的4位对数字进行编码。这需要位,最小拼图需要149位()。是否有更有效的编码,最好没有每个有效数独设置的数据库?(用于解决一般的奖励积分从拼图)Ñ = 17 Ñ Ñ × Ñ81+4n81+4n81+4nn=17n=17n=17nnnN×NN×NN \times N 在我看来,许多难题将是另一个难题的旋转,或者是简单的数字排列。也许可以帮助减少所需的位数。 根据维基百科, 经典9×9 Sudoku解决方案网格的数量为6,670,903,752,021,072,936,960(OEIS中的序列A107739),或大约为。6.67×10216.67×10216.67×10^{21} 如果我做了我的数学权(),得出查询表的73(72.498)位信息。ln(6,670,903,752,021,072,936,960)ln(2)ln(6,670,903,752,021,072,936,960)ln(2)\frac{ln{(6,670,903,752,021,072,936,960)}}{ln{(2)}} 但: 当考虑到诸如旋转,反射,置换和重新标记之类的对称性时,本质上不同的解决方案的数量仅为5,472,730,538 [15](OEIS中的序列A109741)。 这给出了33(32.35)位,因此指示使用哪种排列的巧妙方法可能会低于全部73位。

1
评价书面规则体系的方法
我试图提出一种系统,该系统将评估组织的章程以确定其基本逻辑。 我认为一阶谓词系统可以代表规则,可以通过词性标记和其他NLP技术将其从文本中翻译出来。 是否有系统的方法来整体解释一阶逻辑规则,或某种类型的ML体系结构作为第二层来查找元素之间的相似性。 例如, 有趣的活动清单: 高尔夫球 咖啡时间(休闲时光 比萨 按照法律规定: 在星期五,我们打高尔夫球 在星期五或星期六,我们休息一会,如果是星期六,我们吃披萨 结论:我们小组在周末玩得开心 听起来很牵强,但我很好奇是否可行。我还意识到,也许更多的一阶逻辑将更适合驱动第二层的结论。

2
在许多行业使用的编译器中,为什么单静态分配优先于连续传递样式?
根据Wikipedia页面上的静态单分配(SSA)页面,大型和知名项目(例如LLVM,GCC,MSVC,Mono,Dalvik,SpiderMonkey和V8 )使用SSA,而项目使用连续传递样式(CPS)在比较中有点不足。 我的想法是,主要实现功能语言的编译器和解释器更喜欢CPS-特别是,Haskell和Scheme由于对突变的限制或需要一流的连续支持而似乎对CPS风格有强烈的倾向(我想(Smalltalk也可能需要)。我遇到的使用CPS的主要文献似乎是那些主要在Scheme上工作或在某些方面与Scheme相关的文献。 除了采用的势头之外,SSA还用于工业中有什么特殊原因吗?SSA和CPS有密切关系;这意味着很容易用另一种方式陈述,但是对于CPS来说,信息表示可能不太紧凑或效率较低。

3
如何使语言谐音
根据本文,以下Lisp代码行将“ Hello world”打印到标准输出。 (format t "hello, world") Lisp是一种谐音语言,可以通过以下方式将代码视为数据: 现在假设我们编写了以下宏: (defmacro backwards (expr) (reverse expr)) 向后是宏的名称,该宏采用一个表达式(表示为列表)并将其反转。再次使用宏,这是“您好,世界”: (backwards ("hello, world" t format)) 当Lisp编译器看到该行代码时,它将查看列表(backwards)中的第一个原子,并注意到它为宏命名。它将未评估的列表传递("hello, world" t format)给宏,该宏将列表重新排列为(format t "hello, world")。结果列表将替换宏表达式,并且将在运行时对其进行评估。Lisp环境将看到它的第一个原子(format)是一个函数,并对其进行评估,并将其余的参数传递给它。 在Lisp中,完成此任务很容易(如果我错了,请纠正我),因为代码是作为列表实现的(s-expressions?)。 现在看看这个OCaml(不是谐音语言)片段: let print () = let message = "Hello world" in print_endline message ;; 想象一下,您想向OCaml添加谐音,与Lisp相比,它使用的语法要复杂得多。你会怎么做?语言是否必须具有特别简单的语法才能实现谐音? 编辑:从该主题中,我找到了另一种实现同音的方法,该方法不同于Lisp的方法:用io语言实现的方法。它可能会部分回答这个问题。 在这里,让我们从一个简单的块开始: Io&gt; plus := block(a, b, …

2
从最小切割计算最大流量
我们知道计算最大流量。具有容量的网络的最小割断是等效的;cf. 的最大流最小割定理。 我们有(或多或少有效率的)算法来计算最大流量,在给定最大流量的情况下计算最小切割既不困难也不昂贵。 但是相反呢?给定最小割口,我们如何确定最大流量?当然,如果不从头开始解决Max-Flow,最好也要比那快。 一些想法: 从最小切割,我们知道最大流量值。我看不到这些信息如何帮助标准方法扩展路径和推入重贴标签,尽管对后者进行调整似乎更为合理。 我们不能使用最小分割来将网络分为两部分并递归,因为在最坏的情况下(如果一个分区是单例),这不会缩小问题。同样,对于较小的实例,我们也没有最低限度的削减。 知道最大流量的值是否可以通过补充的松弛条件来加快求解最大流量LP?

2
Y组合器是否与Curry-Howard对应矛盾?
Y组合器的类型为。根据库里·霍华德 Curry-Howard)的对应关系,因为类型被居住,所以它必须对应于一个真定理。但是始终为真,因此似乎Y组合器的类型对应于定理,但并不总是正确的。怎么会这样?(a → a )→ a(一种→一种)→一种(a \rightarrow a) \rightarrow a(a → a )→ a(一种→一种)→一种(a \rightarrow a) \rightarrow a一→ 一一种→一种a \rightarrow a一种一种a

1
量子计算-哈密顿量与Unit模型之间的关系
在量子计算中开发算法时,我注意到有两种主要的模型可以做到这一点。一些算法-例如用于哈密顿NAND树问题(Farhi,戈尔德斯顿,古特曼) -通过设计哈密顿和一些初始状态,然后让根据薛定谔方程一段时间演变系统工作执行测量之前。ŤŤt 其他算法(例如Shor的因式分解算法)通过设计一系列of变换(类似于门)并在执行测量之前一次将这些变换应用于某个初始状态来工作。 我的问题是,作为量子计算的新手,哈密顿量模型与the变换模型之间的关系是什么?此后,一些算法(如NAND树问题)已适应于一系列Unit变换(Childs,Cleve,Jordan,Yonge-Mallo)。可以将一种模型中的每种算法转换为另一种模型中的相应算法吗?例如,给定一系列of变换来解决特定问题,是否可以设计哈密顿量并在该模型中解决问题?那另一个方向呢?如果是这样,系统必须进化的时间与解决问题所需的单位变换(门)的数量之间是什么关系? 我发现似乎存在其他一些问题,但是没有明确的论据或证据表明这总是可能的,甚至是正确的。也许是因为我不知道这个问题叫什么,所以我不确定要寻找什么。

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.