Questions tagged «algorithms»

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

9
有算法百科全书吗?[关闭]
是否有与《数学手册》风格相似的算法百科全书?在一处拥有大量可用项似乎很有用。我知道计算机编程艺术被认为是很好的资料,但它似乎不像百科全书那样具有启发性。 主持人备注 我们正在寻找能提供一些解释和上下文的长答案。不要只列出一本书:请解释为什么您推荐一本书或资源。没有解释任何内容的答案将被删除。有关更多信息,请参见良好主观,不良主观。
34 algorithms 

5
为什么删除通常比在许多数据结构中插入要难得多?
您能想到任何特定的原因,为什么对于许多(大多数)数据结构而言,删除通常比插入要难得多吗? 快速示例:链接列表。插入是微不足道的,但是删除有一些特殊情况,使插入变得非常困难。自平衡二进制搜索树(例如AVL和Red-black)是痛苦的删除实现的经典示例。 我想说这与大多数人的想法有关:对于我们而言,以结构性方式定义事物更容易,这很容易导致插入。

1
我非常了解JavaScript,但是我炸毁了编码面试[关闭]
因此,我目前正在寻找担任前端开发人员的新职位。我非常了解JavaScript,并且可以在闭包,库里开发,原型继承,设计模式,应用程序性能和总体前端体系结构方面颇具诗意。但是,我仍然最终轰炸了求职面试。(仅供参考,我面试的大部分工作都是使用某种MVC框架构建SPA) 通常,编码测试只是我从未专业接触过的小代码片段。喜欢写一个函数来解决某种数学问题。除了一手握住手机试图让一个陌生人看到您的屏幕并看着您键入的每个字符的继承笨拙之外,我只是通常在现实世界中看不到这种东西。 这是我所缺乏的一套严肃技能吗?还是面试官在问我无关的问题。我想我应该进行函数式编程和算法印章工作,但是我没有在网络上(或印刷版中)找到许多好的资源有任何建议吗?

5
分而治之算法–为什么不分成两个以上的部分?
在快速排序和合并排序等分而治之算法中,通常将输入(至少在介绍性文本中)分成两部分,然后递归处理两个较小的数据集。对我来说,如果这两个部分花费的时间少于处理整个数据集的一半,这将使解决问题更快。但是,为什么不将数据集分为三部分呢?四个?n? 我猜想将数据拆分为许多子集的工作不值得,但是我缺乏直觉,无法看到一个应该在两个子集处停止。 我也看到了很多有关3向快速排序的参考。什么时候更快?实际使用什么?

6
我想编写一个“最终洗牌”算法来对我的mp3集合进行排序
我正在寻找伪代码建议,以避免标题和艺术家重复的方式对mp3文件进行排序。我听低吟的歌手-弗兰克·辛纳屈(Frank Sinatra),托尼·贝内特(Tony Bennett),埃拉·菲茨杰拉德(Ella Fitzgerald)等歌唱旧唱片。每位歌手都录制许多相同的歌曲-《飞向月球》,《今夜的样子》,《星尘》等。我的目标是安排歌曲(或订购播放列表),并在歌手和歌曲名称之间留出最大的空间。因此,如果我有2000首歌曲,而Ella有20首,我想每100首歌曲只听一次她。如果有10位歌手演唱《飞向月球》,我希望每200首歌曲中听到一次。当然,我想结合这两个要求来创建我的“最终洗牌”。 我知道这是一个相当广泛的问题。我尚未开始对其进行编程,因此我只是在寻找采用一种好的方法的建议。关于均匀间隔其他歌曲属性,我实际上还有一些其他要求,但这里不再赘述。 首先,我正在修改在这里找到的代码,以处理mp3文件和读取ID3标签。 我编写了一个小应用程序,使用下面的parsifal回答可以满足我的需求。我还在这里写了一个后续问题。感谢您的所有好评!



7
如何快速搜索数据库中非常大的字符串/记录列表
我有以下问题:我的数据库包含超过200万条记录。每个记录都有一个字符串字段X,我想显示一个记录列表,其中字段X包含某个字符串。每条记录的大小约为500字节。 更具体地说:在我的应用程序的GUI中,我有一个文本字段,可以在其中输入字符串。在文本字段上方,我有一个表,显示与文本字段中的字符串匹配的(前N个,例如100个)记录。当我在文本字段中键入或删除一个字符时,表内容必须即时更新。 我想知道是否存在使用适当的索引结构和/或缓存的有效方法。如上所述,我只想显示与查询匹配的前N个项目。因此,对于足够小的N来说,从数据库中加载匹配项应该不是大问题。此外,在主存储器中缓存项目可以使检索更快。 我认为主要问题是在给定模式字符串的情况下如何快速找到匹配项。我可以依靠某些DBMS工具,还是必须自己构建一些内存索引?有任何想法吗? 编辑 我已经进行了第一次实验。我已将记录分为不同的文本文件(每个文件最多200条记录),并将文件放在不同的目录中(我使用一个数据字段的内容来确定目录树)。我最终得到大约40000个目录中的大约50000个文件。然后,我运行Lucene来索引文件。使用Lucene演示程序搜索字符串非常快。拆分和建立索引花费了几分钟:对于我来说这完全可以接受,因为它是我要查询的静态数据集。 下一步是将Lucene集成到主程序中,并使用Lucene返回的命中将相关记录加载到主存储器中。

10
假设任何物理量都可以用64位整数表示而没有上溢或下溢是否合理?
如果(low + high) > INT_MAX(http://googleresearch.blogspot.com/2006/06/extra-extra-read-all-about-it-nearly.html),则JDK中的原始二进制搜索算法使用32位整数,并且存在溢出错误。。 如果我们使用(带符号的)64位整数重写相同的二进制搜索算法,是否可以假设它low + high永远不会超过INT64_MAX,因为实际上不可能有10 ^ 18字节的内存? 当使用(有符号的)64位整数表示物理量时,是否假定不会发生下溢和溢出是否合理?

6
为什么实践中quicksort比其他排序算法更好?
这是Janoma对cs.SE的一个问题的转贴。对他或CS SE的全部荣誉和破坏。 在标准算法课程中,我们学会了快速排序平均为O(n log n),在最坏情况下为O(n²)。同时,还研究了其他排序算法,它们在最坏的情况下为O(n log n)(例如mergesort和heapsort),在最坏的情况下甚至是线性时间(例如bubbleort),但还有一些额外的内存需求。 快速浏览一下更多的运行时间后,自然可以说quicksort 应该不如其他高效。 另外,考虑到学生在基础编程课程中学习到,递归通常并不太好,因为它会占用过多的内存,等等。因此(尽管这不是一个真正的论点),但这样的想法是快速排序可能不是真的很好,因为它是一种递归算法。 那么,为什么在实践中快速排序优于其他排序算法?它与真实数据的结构有关吗?它与计算机中内存的工作方式有关吗?我知道有些记忆要比其他记忆快,但是我不知道这是否是这种违反直觉的表现的真正原因(与理论估计相比)。

2
什么是O(…),如何计算?
救命!我有一个问题需要分析算法或某些代码的Big-O。 我不确定究竟是什么Big-O或Big-O与Big-Theta或与其他分析算法复杂性的方式之间的关系。 我不确定Big-O是指运行代码的时间,还是所需的内存量(空间/时间折衷)。 我有计算机科学作业,需要做一些循环,也许是递归算法,并为此设计出Big-O。 我正在开发一个程序,我可以在两个数据结构或算法之间选择一个已知的Big-O,并且不确定要选择哪个。 我如何了解如何计算Big-O并将其应用到我的程序,作业或计算机科学常识中? 注意:此问题是社区确定的其他Big-O问题的规范重复目标。能够包含许多Big-O问题的大量有用信息的意图是广泛的。请不要使用如此广泛的事实来表示可以接受类似的问题。


8
什么是精美代码?[关闭]
我经常读到开发人员必须编写漂亮的代码,但是对于我这样的初学者来说,对于什么是漂亮的代码以及您如何识别它仍然不甚了解。 必然的问题是:如何编写漂亮的代码以及提高代码质量的一些实践习惯?,我应该关心什么来使我编写的代码漂亮(以及应该学到什么)。

5
香槟喷泉之谜
空杯子的水按以下顺序排列: 当您将液体倒入第一个玻璃杯中时,如果充满了液体,则多余的液体将以相同的数量流入玻璃杯2和3。当玻璃2充满时,多余的液体将流入4和5,依此类推。 给定N升的液体,每个玻璃的最大容量为1升,如果通过填写getWaterInBucket(int N, int X)X代表玻璃编号的函数倒入玻璃中来倒空N升的液体,则给出任何玻璃中存在的液体量。因此,例如,如果我想开始时有4升水,而我想在玻璃杯3中找到水,则功能为getWaterInBucket(4, 3) 如何以编程方式解决此问题?我试图使用Pascal的三角形找到数学解决方案。这没有用。我认为它是一棵树,因此我可以添加一个这样的参数getWaterInBucket(BTree root, int N, int X),然后为每个级别尝试一些递归解决方案,但是此问题中不允许使用参数。有明显的东西吗?


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.