Questions tagged «algorithms»

在数学和计算机科学中,算法是一种有效方法,表示为用于计算函数的定义明确的指令的有限列表。算法用于计算,数据处理和自动推理。

1
功能反应/关系编程–有区别吗?
我一直在使用Reactive Cocoa(由GitHub提供),这是一种用于Cocoa库的功能性反应式编程API,现在已经使用了一段时间,但是我刚刚阅读了“ Out of the Tar Pit”,据称该论文介绍了其背后的概念,我有些困惑。 本文介绍了(据我所知)功能关系编程,其中数据之间的关系是由FRP系统应强制执行的条件创建的,以减少所需的“偶然”逻辑和状态。 我的问题是,这两个概念-FR(eactive)P和FR(elational)P本质上是同一件事(前者只是后者的实现),还是两者之间存在核心区别?不幸的是,目前我对该领域的了解还不足以让我足够区分它们。 如果存在差异,顾名思义,这似乎与数据更改有关系。当然,反应性可可粉(和C#中的Rx)具有创建信号的概念,该信号在数据变化时触发,并且可用于随时间连续修改值。 这有区别吗?如果没有,那是什么? (请原谅不良标签,我找不到相关标签,也无法创建它们-如果可以的话,请将标签更新为更合适的标签。)

1
最短公共超级字符串:查找包含所有给定字符串片段的最短字符串
给定一些字符串片段,我想找到包含所有片段的最短的单个字符串(“输出字符串”)。片段在输出字符串中可以相互重叠。 例: 对于字符串片段: BCDA AGF ABC 以下输出字符串包含所有片段,并且是通过天真的附加而制成的: BCDAAGFABC 但是,此输出字符串更好(更短),因为它使用了重叠: ABCDAGF ^ ABC ^ BCDA ^ AGF 我正在寻找解决此问题的算法。找到严格最短的输出字符串并不是绝对重要,但是越短越好。我在寻找一种比明显的幼稚算法更好的算法,该算法会尝试附加输入片段的所有排列并消除重叠(看起来是NP-Complete)。 我已经开始研究解决方案,事实证明这很有趣。我想看看其他人会提出什么。我会在一段时间内将正在进行的工作添加到该问题中。

1
关于Floyd-Warshall,Dijkstra和Bellman-Ford算法之间的区别,我是否正确?
我一直在研究这三个,并在下面说明了他们的推论。有人可以告诉我我是否足够正确地理解它们?谢谢。 Dijkstra的算法仅在您只有一个来源并且想知道从一个节点到另一个节点的最小路径时使用,但是在这种情况下会失败 当所有节点中的任何一个都可以作为源时,将使用Floyd-Warshall算法,因此您希望从任何源节点到任何目标节点的距离最短。仅在出现负循环时失败 (这是最重要的一个。我的意思是,这是我最不确定的一个:) 3,贝尔曼·福特(Bellman-Ford)和迪杰斯特拉(Dijkstra)一样,只有一个来源。它可以处理负数权重,其工作方式与Floyd-Warshall相同,只是有一个来源,对吗? 如果需要看一下,相应的算法是(由维基百科提供): 贝尔曼福特: procedure BellmanFord(list vertices, list edges, vertex source) // This implementation takes in a graph, represented as lists of vertices // and edges, and modifies the vertices so that their distance and // predecessor attributes store the shortest paths. // Step 1: initialize graph …


3
有没有像Head First系列这样教的算法书?[关闭]
按照目前的情况,这个问题并不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 作为Java程序员,我需要学习算法(用于编程挑战)。我读了一些Head First Series(我拥有的JAVA),他们对大脑很友好。因此,我想知道是否有任何一本简单易懂的算法书籍,并且涉及每个算法的症结所在。
12 java  books  algorithms 

7
处理大量数据的排序算法
我正在寻找一种排序算法,该算法可以处理大量数据,即,即使整个数据集无法一次保存在主存储器中,也可以使用。 我到目前为止发现的唯一候选对象是合并排序:您可以以这种方式实现该算法,即它在每次合并时都扫描您的数据集,而无需一次将所有数据保存在主存储器中。在本文的“ 与磁带机一起使用”部分中介绍了我想到的合并排序方式。 我认为这是一个很好的解决方案(复杂度为O(nx log(n)),但是我很想知道是否还有其他(可能更快)的排序算法可以处理不适合主内存的大型数据集。 编辑 这是答案所要求的更多详细信息: 数据需要定期分类,例如每月一次。我不需要插入一些记录,也不需要对数据进行递增排序。 我的示例文本文件大约是1 GB UTF-8文本,但是我想总体上解决该问题,即使该文件是20 GB。 它不在数据库中,并且由于其他限制,它不能在数据库中。 数据被其他人作为文本文件转储,我有自己的代码读取此文本文件。 数据的格式是文本文件:换行符是记录分隔符。 我想到的一种可能的改进是将文件拆分为足够小的文件,以便可以在内存中排序,最后使用上面描述的算法合并所有这些文件。

2
Dijkstra的算法是否适合解决此信号路由问题?
我正在开发用于集成视听系统的信号管理和路由模块,并且正在设计该模块,以便在不同的信号分配网络中尽可能地灵活。该模块的目的是处理跨多个堆叠矩阵切换器1的路由并处理必要的格式转换。 在这一点上,我探索的最好的解决方案是将网络映射到一个图形,该图形具有针对切换器支持的每种信号类型的离散顶点,然后通过代表处理格式转换的视频处理器的节点进行连接。 颜色代表信号格式。 圆形节点是切换台,源或宿。 正方形节点是执行格式转换的视频处理器。 从那里,我可以使用Dijkstra算法的实现来识别为使输入X到输出Y所必须形成的路径。这应该允许有关所有切换器和处理器的输入/输出配置的数据传入并相应地调整模块。 这是一个适当的解决方案,还是值得研究的替代方法? 1个又名“纵横开关”,是具有M输入x N输出的视频路由器,支持一对多连接。每个物理设备可以处理多种信号格式,并且可能执行或可能不执行任何格式转换。 编辑:正如PéterTörök所提到的,图形不一定是一棵树,该图是一个简单的例子来说明这个想法。在“现实世界”中实现时,可能会存在多个路径,这些路径可提供不同级别的清晰度(DVI> VGA>组件>复合),而我打算用边缘加权来表示。 编辑2:这是一个稍微全面的示例,其中指示了方向性,并显示了由两种信号类型组成的网络。最初的示例已稍作修改,因此设备上的每个输入和输出都定义为离散节点,因为这将提供控制矩阵路由/输入选择所需的数据。

2
将有界背包问题转换为0/1背包问题
我遇到了一个目标是使用动态编程(而不是其他方法)的问题。有一段距离要跨越,并且有一组不同长度的电缆。准确跨越距离所需的最少电缆数量是多少? 在我看来,这似乎是一个背包问题,但是由于可能存在特定长度的倍数,因此这是一个有限制的背包问题,而不是0/1背包问题。(将每个项目的价值视为其权重。)采用幼稚的方法(而不关心搜索空间的扩展),我用来将有界背包问题转换为0/1背包问题的方法很简单将倍数分解为单数并应用著名的动态规划算法。不幸的是,这导致次优的结果。 例如,给定的电缆: 1 x 10ft, 1 x 7ft, 1 x 6ft, 5 x 3ft, 6 x 2ft, 7 x 1ft 如果目标跨度为13英尺,则DP算法将选择7 + 6来跨越该距离。一个贪婪的算法本来会选择10 + 3,但是这对于最少数量的电缆来说是一个平手。尝试跨度15英尺时会出现问题。DP算法最终选择6 + 3 + 3 + 3来获得4条电缆,而贪婪算法只为3条电缆正确地选择了10 + 3 + 2。 无论如何,对转换限制为0/1的光进行一些扫描,似乎是众所周知的将多个项目转换为{p,2p,4p ...}的方法。我的问题是,如果p + 2p + 4p的总和不等于多个项目的数量,此转换如何工作。例如:我有5条3ft电缆。我不能很好地添加{3,2x3,4x3},因为3 + 2x3 + 4x3> 5x3。我应该改为添加{3,4x3}吗? [我目前正在尝试处理“俄勒冈步道背包问题”论文,但目前看来,这里使用的方法不是动态编程。
12 algorithms 

4
低暂停GC背后的算法是什么?
某些语言(例如Java)引入了低暂停GC。 这些GC可以完成大部分工作,而不会暂停整个世界。这显然是一个相当棘手的问题,因为它需要在线程修改内存时对其进行分析,从而导致可以在进程开始时使用该数据,而在完成时不再使用该数据,或者似乎是垃圾的数据,但是因为参考已移动到内存中,并且从未出现在GC所寻找的位置。 因此,基本上来说,其背后的算法是什么? 研究论文或真正技术文章的链接将被视为有效答案,因为该主题确实是技术性的。

5
最高效的缓存替换算法
已关闭。这个问题需要细节或说明。它当前不接受答案。 想改善这个问题吗?添加细节并通过编辑此帖子来澄清问题。 6年前关闭。 维基百科列出了11种缓存替换算法。假设我对我将要开发的应用程序几乎一无所知,那么应该使用什么作为“默认”缓存替换算法? 如果我从操作系统课程中正确回忆起,LRU是最好的通用缓存替换算法。但也许我弄错了。 另外,这是一个学术问题,因为通常来说,主内存便宜又丰富,我真的不需要担心缓存大小。

12
什么是算法?
算法到底是什么,算法是什么意思?我对这个词的一点理解是,它不是特定于特定的语言或设计模式,而是最基本的原则之一(因此我想这个问题会让我看起来很愚蠢)。 我所理解的“选项”之一是,它意味着完成某些工作的方法,可以将其编写为伪代码列表。 当我编写更复杂的代码时,我认为需要做什么,要做什么以及如何达到目标(不是用编程语言),然后用代码编写。这是个好方法吗,并且与算法有关吗? (我想在这里问的是Stackoverflow,因为这与特定的问题/语言无关,而且我觉得这里的大多数人都知道“为什么”,或者至少这里的答案更详细,而不是在Stackoverflow上。不一样的地方,很抱歉我是否应该在那里问过)
12 algorithms 


1
k组合的快速索引
我正在重新审视我前一段时间正在研究的一个老问题。 典型的场景是“在8位整数内设置3位”,即00000111。 通过嵌套循环可以轻松地(按顺序)生成具有3个置位的所有唯一组合。我感兴趣的是映射索引<->组合,即“ 00001011”将是第二个组合(或从零开始的索引中的值“ 1”)。 到目前为止,我浏览了所有组合并将它们存储在表中,从而使查找索引->对话成为O(1)操作。另一个方向是对分搜索的O(ln(n))。 但是,不利的一面是,如果我们增加域的范围,这显然会占用大量内存,直到不可行的程度。 计算第n个组合或给定组合的索引的简单方法是什么?组合顺序会很好,但不是强制性的。

2
算法收敛意味着什么?
在阅读有关强化学习的内容时,我会不断遇到这个词,例如,这句话: 如果仔细地对问题进行建模,则某些强化学习算法可以收敛到全局最优值 http://reinforcementlearning.ai-depot.com/ 或在这里: 对于任何固定策略Pi,已经证明上述TD算法可以收敛到VPi http://webdocs.cs.ualberta.ca/~sutton/book/ebook/node62.html 我对“收敛”这个词的理解是,它意味着将多个事物放到同一点,但是单个事物(算法)如何做到这一点?

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.