Questions tagged «algorithms»

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

2
算法的预期运行时间和平均运行时间是什么意思?
假设我们要分析算法的运行时间。有时我们说我们想在输入大小为n时找到算法的运行时间,在最坏的情况下用O(n)表示它。有时,尽管我看到书籍/论文说我们需要找到算法的预期时间。有时也使用平均运行时间。 什么是“预期时间”?在什么情况下找到期望的时间而不是最坏的情况有用? 编辑:我认为预期的运行时间和平均运行时间之间存在细微的差别,但我不确定。通过这篇文章,我想知道确切的区别。

8
初学者常见的数据结构有麻烦吗?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 我正在上第二门Java课程。我们正在进入数据结构。我已经在一个链表上做了一个分配,现在是一个堆栈。我在链接列表上遇到了麻烦。堆栈给我带来了一些麻烦,但要容易得多。 我应该担心使用这些算法和数据结构时遇到困难吗?我只是觉得我不太了解它。


11
伪代码和算法之间的区别?
从技术上讲,这两个词之间是否存在区别,还是可以互换使用?它们都或多或少地描述了解决问题的逻辑步骤顺序。不是吗 那么,为什么我们要使用两个这样的词来表达相同的意思呢? 或者,如果它们不是同义词,那么区别它们是什么?在什么情况下,我们应该使用伪代码一词还是算法一词?

4
现实生活中的NP完整或NP难题
在现实生活中,是否有人在工作中定期解决NP完全问题或NP困难问题(通过试探法或追求次优解决方案等)?我知道它们会发生在调度,计划,VLSI设计等中,但是我试图了解当今经常使用程序员或工程师的主要行业。如果要开发专门知识或库,例如组合优化,在哪里可以将其用作编程工作的一部分? 有个人账户吗?

2
如何找到很难拼错名字的名字?
我认为这是一个可以通过一些数据挖掘和完善的算法解决的问题,但我不知道如何解决。欢迎提供有关使用哪些数据源以及应用哪种算法的任何指针。 背景:我是罗马尼亚-匈牙利人,他正在怀有波兰-乌克兰人的怀抱,并且还没有完全决定要定居哪个国家。正如您所期望的那样,选择一个给定的名称是最重要的,也是一个激烈的辩论。从我的角度来看,当我从一个国家搬到另一个国家时,有人拼错了我的名字时,我仍然要经历所有麻烦。例如,如果您被称为“ Adrian”,那么您在罗马尼亚会很幸运,只是发现您最终成为“ Adri e n”是一些法国官方文件。因此,我唯一的要求是在某些欧洲国家/地区极不可能使婴儿的名字拼写错误。 问题陈述:给定一组国家,例如法国,德国,瑞典,波兰和罗马尼亚,请查找适当发音的给定名称列表,这些名称不太可能被当地人拼写错误。 更正式地讲:令p(c,n)是一个函数,该函数返回名称n在国家c中拼写错误的可能性。给定C个国家集和 p₀个概率,找到N个给定名称集,使得 对于所有Ñ ∈ Ñ和Ç ∈ Ç,P(C,N)<P 0 初步思路:核心问题是如何实现p(c,n)。可以尝试用一种启发式方法来近似它。显然,在两种情况下,名称可能会拼写错误: 在那个国家很少使用。 它类似于一个不同的名称,在那个国家很少使用。 我不确定如何使用互联网(例如Wikipedia)有效回答这两个问题。一个人怎么会只列出一个国家中经常使用的名字?人们会如何寻找相似的拼写?

4
固定时间和摊销固定时间是否有效地等同?
我需要编写一个RandomQueue,以允许在恒定时间(O(1))中进行追加和随机删除。 我的第一个想法是使用某种Array(我选择ArrayList)来支持它,因为数组可以通过索引进行恒定访问。 虽然查看文档,但我意识到ArrayLists的添加被视为摊销固定时间,因为添加可能需要重新分配基础数组O(n)。 摊销的固定时间和固定时间实际上是否相同,还是我需要查看某种结构,不需要每次添加都进行完全重新分配? 我之所以这样问是因为除了基于数组的结构(据我所知,它将始终具有摊销的固定时间),我想不出任何满足要求的东西: 任何基于树的事物最多都具有O(log n)访问权限 链表可能会增加O(1)(如果保留对尾部的引用),但是随机删除最多应为O(n)。 这是完整的问题;万一我对一些重要细节感到困惑: 设计并实现一个RandomQueue。这是Queue接口的一种实现,其中remove()操作将删除一个元素,该元素是在队列中当前所有元素中随机选择的。(将RandomQueue当作一个包,我们可以在其中添加元素或进入并盲目删除一些随机元素。)RandomQueue中的add(x)和remove()操作每个操作应在恒定的时间内运行。

9
大O关于(n ^ 2 + n)/ 2增长率的算法的问题
我问这个问题是因为我对大O表示法的一个方面感到困惑。 我正在使用Frank Carrano的《Java的数据结构和抽象》一书。在“算法效率”一章中,他显示了以下算法: int sum = 0, i = 1, j = 1 for (i = 1 to n) { for (j = 1 to i) sum = sum + 1 } 他最初将这种算法描述为具有(n 2 + n) / 2的增长率。哪个看似直观。 但是,可以说,当n大时,(n 2 + n) / 2的行为类似于n 2。在同一段他说(N 2 + N) / 2也表现很像ñ …
16 algorithms  big-o 

5
展平重叠范围的算法
我正在寻找一种展平(拆分)可能重叠的数字范围列表的好方法。问题与以下问题非常相似:最快的分割重叠日期范围的方法,还有许多其他方法。 但是,范围不仅是整数,而且我正在寻找一种可以在Javascript或Python等中轻松实现的体面算法。 示例数据: 解决方案示例: 抱歉,如果这是重复的,但是我还没有找到解决方法。

2
快速标签搜索算法
问题如下。 有一组简单实体E,每个实体都有一组附加的标签T。每个实体可以具有任意数量的标签。实体总数接近1亿,标签总数约为5000。 因此,初始数据如下所示: E1 - T1, T2, T3, ... Tn E2 - T1, T5, T100, ... Tk .. Ez - T10, T12, ... Tl 初始数据很少更新。 我的应用以某种方式在标签上生成逻辑表达式,如下所示: T1&T2&T3 | (T5&!T6) 我需要计算与给定表达式匹配的实体数量(注意-不是实体,而是数量)。当然,这可能并不完全准确。 我现在得到的是一个简单的内存中表查找,使我在单个线程上有5-10秒的执行时间。 我很好奇,有什么有效的方法来处理这些东西吗?您会推荐哪种方法?有一些通用的算法或数据结构吗? 更新资料 根据要求进行一些澄清。 T对象实际上是较短的常量字符串。但这实际上并不重要-我们总是可以分配一些ID并对整数进行运算。 我们绝对可以对它们进行排序。

7
生成随机数学表达式
我脑子里到处都是这个想法,以生成和评估随机数学表达式。因此,我决定先尝试一下,然后详细说明一下算法,然后再对其进行编码以对其进行测试。 例: 以下是一些我想随机生成的示例表达式: 4 + 2 [easy] 3 * 6 - 7 + 2 [medium] 6 * 2 + (5 - 3) * 3 - 8 [hard] (3 + 4) + 7 * 2 - 1 - 9 [hard] 5 - 2 + 4 * (8 - (5 + 1)) …
16 algorithms 

6
垃圾收集器如何防止每次收集都扫描整个内存?
一些(至少是Mono和.NET的)垃圾收集器具有它们经常扫描的短期存储区域,以及具有次要扫描频率的辅助存储区域。Mono将其称为托儿所。 为了找出可以丢弃的对象,它们扫描从根,堆栈和寄存器开始的所有对象,并处置所有不再被引用的对象。 我的问题是,它们如何防止所有使用中的内存在每次收集时都被扫描?原则上,找出不再使用哪些对象的唯一方法是扫描所有对象及其所有引用。但是,这将防止OS换出内存,即使应用程序未使用它,也感觉需要进行大量工作,对于“ Nursery Collection”也是如此。感觉他们并没有通过使用托儿所而获得太多收益。 我是否缺少某些东西?或者垃圾收集器实际上是在每次收集对象时扫描每个对象和每个引用吗?

10
在算法编程方面,Python优于C
我一直在研究一些算法,并一直在研究SPOJ.pl TopCoder等网站。我发现程序员通常在大多数算法编程竞赛中都喜欢C或C ++。 现在,我最近遇到了一些麻烦。我对C和Python都了解一些,并且在尝试编写代码时,对于大多数算法,我似乎更喜欢Python而不是C。每当我坐下来写CI的代码时,大约15分钟后就放弃了,因为我觉得它太麻烦了并且倾向于使用python。传递矩阵指针等似乎浪费了我实际上可以用来思考算法本身的时间。 现在,我知道并且听到很多人说C是一种非常重要的语言,并且是许多程序员的后援。 我想知道的是,我的这种方法是否有任何缺点/后果/缺点等。 这不是Python与C的争论。从长远来看,这个关于易用性而不是C首选python的特定实践将如何影响我或任何其他程序员/计算机科学家的问题。 我很乐意听到在行业中使用过这些语言的人,以及/或者开发大型软件/库等的人。

2
最好的“桶填充”算法是什么?
我对图像处理还很陌生,目前正在研究类似油漆的应用程序,该应用程序将具有桶装功能。但是,我不知道什么是最好的填充算法。 我实现了一个从该站点发现的示例,但是,当用户尝试对一个已经用相同颜色进行桶装的区域进行桶装时,它遇到了无限循环问题。 我目前正在通过左,右,上,下填充来解决该问题。但是,我这样做是为了使像素一旦填充到左侧,就不能填充到右侧,这意味着形状如下: 如果在红点处使用铲斗工具,将无法正确填充。 因此,我希望有人知道可以解决所有这些问题的算法或算法的链接。 附加信息:这将使用Javascript作为绘画工具来实现。它将通过Canvas元素在线使用。
16 algorithms 

3
是否可以编写适用于所有本地化和字符串类型的通用字符串反向函数?
我只是在看Dev-Days的Jon Skeet(与Tony the Pony)一起演讲。 尽管“编写字符串反向函数”正在对采访101进行编码-我不确定实际上是否可以编写一种通用的字符串反向函数,但肯定不是在所有本地化和所有字符串类型中都有效的函数。 除了检测输入字符串是否为ascii,UTF8,UTF16(固定长度和可变长度)等之外 ,Jon还突出显示了“对下一个字符应用重音符号”(U + 0301)代码。然后有可能显示或不显示或连字编码为双字符的连字。 似乎“反向字符串”实际上是较难的计算机科学任务之一!

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.