Questions tagged «algorithms»

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

5
学习发展算法[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 5年前关闭。 这是一个相当普遍的问题。我对Perl和Python有所了解,并且希望能更深入地学习编程,以便一旦掌握了这些知识,就可以开始开发应用程序,然后开发网站。 我想知道一种算法(步骤顺序:),它可以描述我一般学习编程的方法。我在Perl / Python上发布了一些小问题,并且得到了大家的大力帮助。 注意:-我不着急学习。我知道这需要时间,没关系。 请提供您认为有效的任何建议。另外,请不要强迫我学习Lisp,Haskell等-我是初学者。

13
在算法的哪些编程领域中,运行时实际上是一个重要的问题?
有时我听到人们说,由于处理器的速度和可用内存量的原因,实际上,算法效率和运行时间并不是主要关注的问题。 但是我想在某些领域中,这种考虑确实仍然至关重要。我想到的两个是算法交易,其中必须在几分之一秒内完成数千笔交易,而嵌入式系统编程则通常缺乏内存和功能。我对这些例子正确吗?还有哪些其他领域也是示例?
15 algorithms 


6
完全不了解RB树可以吗?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 5年前关闭。 所以我刚在科门学到了红黑的树,哇!通常,我喜欢理解所有算法和数据结构,以至于我可以从头开始重建它们而不必欺骗伪代码。我非常喜欢算法,因此我喜欢学习它们的工作原理,并且通常逐行阅读代码并检查是否发生了我理解应该发生的情况,从而尝试某些情况。 仅仅了解正在发生的事情,就花了我很多时间去做RB树。即使有本书的解释,我仍然很难理解代码。更不用说我不明白轮换的方式/原因。我根本不觉得它直观。我的意思是,插入的三个(实际上是六个)不同的案例,然后是四个删除的案例?有可能了解这件事吗?对我而言,如果不作弊就无法重建此代码。在使用二叉树之前,我可以通过一些调整将这些东西付诸实践,但总能奏效,但是RB树我什至不会尝试。我的意思是,即使老师有时也会感到困惑,所以我想这确实不是那么容易,但同时,我们是否不应该了解正在发生的一切,或者至少是为什么?这本书没有 不能真正解释有人是如何提出轮换的想法的。有人怎么注意到2圈旋转可以解决任何插入问题?棒极了! 我的问题是,我真的必须100%了解RB树吗?在没有完全理解它的情况下,我感到有些不愉快。在此先感谢大家!(PS:RB树没有标签,实际上树甚至没有标签,只有二叉树,所以我只放算法)
15 algorithms 

5
算法复习。为什么heapsort是insort算法?
我看不到为什么heapsort被认为是就地排序算法。 我的意思是用要排序的数组元素(即堆)填充的额外数据结构用于协助提取最小值和排序过程。 那么我可能误解了inplace的定义吗? 但是,例如,插入排序显然是就地算法,即元素不需要额外的内存。 那么为什么要考虑到它呢?

2
快速无损压缩视频流
我有一个来自固定相机的视频。分辨率和FPS都很高。我得到的数据为拜耳格式,每个像素使用10位。由于我的平台上没有10位数据类型,因此原始数据使用16位字存储在内存中。我想在通过网络传输数据之前对数据进行某种无损压缩。 摄像头不会移动,因此连续帧的大部分几乎是相同的-但由于不可避免的噪声,仍不能完全消除(降噪不是一种选择,因为降噪是无损的,即使噪声也不应“丢失” )。 由于FPS高,即使变化的部分在任何两个连续的帧之间也变化不大。 但是,看起来相机也有些晃动。在图像空间中,即使很小,但即使静止的物体也并非完全如此。 压缩必须实时进行,因此我不能收集很多帧并将它们全部压缩在一起,但是我可以向后看一帧并将其用作参考。 基于以上所述,我的第一个想法是对数据进行位打包,以使这6个冗余位不会浪费在每个字上。但是,我认为如果使用某种熵编码(例如Huffman等),则会自动考虑冗余,因此不需要额外的包装。所以我做了以下工作: 取得两个连续帧之间的二进制差异。原始数据范围为0〜1023(例如,无符号10位)。差异数据变为有符号,范围增加到-1023〜1023,但数据变化(或正确的数学术语)变得比原始数据少得多,实际上,大多数值不足为零就不足为奇了。 将Rice编码应用于差异。据我了解,对于大多数数值较小的数据集,这似乎是一个不错的选择。 对于1280x720帧,这使我的尺寸减少了60%,并且我的测试系统(单核上的VirtualBox中的Linux)每秒可以进行约40次此类压缩(无需太多优化)。我猜不是那么好,但是很合理(或者是吗?)。 有更好的方法吗?我有任何常见的错误吗?我错过了任何常规步骤吗?以后可能会使用更高分辨率的帧-对于更大的帧大小,我应该期望更好的压缩率吗? UPD: 我使用此库进行Rice编码。该库非常慢(作者本人将其描述为学习而不是实际使用),例如,它在循环中一对一地读写位,这会降低性能。最初它只给我约20 FPS,经过一些非常基本的优化后,它变成了40 FPS(如上所述),后来我对其进行了更多优化,变成了80 FPS。这是在没有向量化的单个i7内核上。 至于向量化,不幸的是,我无法想到一种对Rice代码进行向量化的方法(甚至根本不知道它是否可能-在Rice代码上找不到任何数据,我对霍夫曼代码的发现表明:它是顺序的,无法有效地向量化,这可能适用于Rice代码以及其他可变长度代码)。 我还尝试了一种完全不同的方法:将数据分成小块(例如,每个像素为64像素)并使用简单的零抑制。我们找到一个块中最大的数字,将表示它所需的位数写到该块的开头(在我的情况下,这需要再增加4位),然后将该块中的所有数字减少到相同的位数。位。我预计压缩率会很差,但是如果片段很小,那么它们中的许多都不会产生噪声尖峰,因此它们的二进制差异可以减小到每个值4〜6位,实际上只有比Rice代码差5%左右,但速度大约是Rice代码的两倍(例如我的情况下为160 FPS)。我曾尝试对其进行矢量化处理,但对矢量化处理还是有点不满,所以也许正因为如此,我只能实现约1.8倍的进一步加速。 由于负数没有前导零,因此我在二进制差之后和莱斯/零抑制之前应用了之字形编码。

4
算法模式,在需要时输出对如何到达解决方案的解释
以下情况发生在我身上几次。 我编写了解决特定问题的算法。它工作正常,并找到正确的解决方案。现在,我希望有一个选项可以告诉算法“写出有关如何获得解决方案的完整说明”。我的目标是能够在在线演示,教程课程等中使用该算法。我仍然希望有一个选项可以实时运行算法,而无需解释。什么是好的设计模式? 示例:假设我实现了用于找到最大公约数的方法。当前实现的方法返回正确答案,但没有解释。我想为该方法提供一个选项来解释其操作,例如: Initially, a=6 and b=4. The number of 2-factors, d, is initialized to 0. a and b are both even, so we divide them by 2 and increment d by 1. Now, a=3 and b=2. a is odd but b is even, so we divide b by 2. …

3
搜索整数序列
我有一个相当复杂的搜索问题,已设法简化为以下描述。我一直在谷歌搜索,但一直未能找到一种看起来完全适合我的问题的算法。特别是需要跳过任意整数。也许有人可以指点我吗? 以整数A的序列为例,例如(1 2 3 4) 取各种整数序列,然后测试它们是否与A匹配。 A包含测试序列中的所有整数 测试序列中整数的顺序在A中相同 我们不在乎A中不在测试序列中的任何整数 我们需要所有匹配的测试序列,而不仅仅是第一个。 一个例子 A = (1 2 3 4) B = (1 3) C = (1 3 4) D = (3 1) E = (1 2 5) B符合A C符合A D与A不匹配,因为顺序不同 E与A不匹配,因为它包含不在A中的整数 我希望这个解释很清楚。我设法做的最好的事情是构造一个测试序列树并在A上进行迭代。需要能够跳过整数的结果导致许多不成功的搜索路径。 谢谢 阅读一些建议,我觉得我必须澄清一些我仍然不太清楚的观点。 允许重复的数字,实际上这非常重要,因为它允许单个测试序列匹配A是多种方式 A =(1234356),B =(236),匹配项可以是-23 --- 6或-2--3-6 我希望会有大量的测试序列,至少有数千个,序列A的最大长度可能会是20。因此,简单地尝试通过迭代逐个匹配每个测试序列将变得非常无效率。 很抱歉,如果不清楚。
14 algorithms 

4
如何估计密码的熵?
阅读了有关密码强度的各种资源后,我试图创建一种算法,以粗略估计密码的熵。 我正在尝试创建一种尽可能全面的算法。此时,我只有伪代码,但是算法涵盖以下内容: 密码长度 重复字符 模式(逻辑) 不同的字符空间(LC,UC,数字,特殊,扩展) 字典攻击 它没有涵盖以下内容,应该很好地涵盖(尽管不是很完美): 排序(密码可以通过此算法的输出严格排序) 模式(空间) 谁能提供一些关于此算法可能弱点的见解?具体地说,有人能想到向算法输入密码会过高估计其强度的情况吗?低估问题不大。 算法: // the password to test password = ? length = length(password) // unique character counts from password (duplicates discarded) uqlca = number of unique lowercase alphabetic characters in password uquca = number of uppercase alphabetic characters uqd = …


10
面向对象真的会影响算法性能吗?
面向对象已经帮助我实现了许多算法。但是,面向对象的语言有时会引导您采用“直接”方法,并且我怀疑这种方法是否总是一件好事。 OO在快速轻松地编码算法方面确实很有帮助。但是对于基于性能的软件(即程序执行速度有多快),此OOP会对它不利吗? 例如,首先将图节点存储在数据结构中似乎“直截了当”,但是如果Node对象包含许多属性和方法,这会导致算法变慢吗? 换句话说,在许多不同对象之间的许多引用,或者使用许多类中的许多方法,是否可能导致“繁重的”实现?

3
在C ++或MATLAB中实现技术论文算法
我是电气工程专业的本科生。我已经阅读了许多有关信号和图像处理算法(重构,分段,滤波等)的技术论文。这些论文中显示的大多数算法都是在连续时间和连续频率上定义的,并且经常根据复杂的方程式给出解决方案。您将如何在C ++或MATLAB中从头开始实施技术论文,以便复制在该论文中获得的结果? 更具体地说,我正在看Wang等人的论文“通用锥束重建算法”(IEEE Trans Med Imaging。1993; 12(3):486-96),我想知道如何开始?实现他们的算法?公式10为您提供了处重建图像的公式。您将如何编码?您是否有一个遍历每个体素并计算相应公式的for循环?您将如何在该公式中编写函数的函数代码?您将如何在任意点评估函数? 我读过冈萨雷斯和伍兹写的《数字图像处理》一书,但我仍然茫然。我还阅读了有关数字食谱的系列丛书。那是正确的方法吗? 您从研究论文中编程算法有什么经验?有任何提示或建议吗?
14 c  algorithms  matlab 

3
AVL树与现实世界
在学校里,我们被教导了如何在插入或删除时平衡AVL树。 这种类型的知识实际上如何在现实世界中有用?有人可以举例说明这种知识何时真正有用吗? 据我所知,在工作场所几乎没有这样的细节…… 我可以看到关于算法和某些数据结构的详细知识多么重要,但是对诸如AVL树旋转(以及类似的详细概念)之类的细节却不那么重要。 谢谢!


2
蚁群算法
我是一名学生,正在为课程项目开发蚁群模拟器。它的算法(显然)是蚁群算法。我知道算法的形式多种多样,但是所有这些对于我们来说在数学上都过于详细,因此我们采用了一种方法: 一只蚂蚁出生在一个殖民地,必须从源头收集食物以维持这个殖民地。 所有的蚂蚁都是相似的。 蚂蚁移动的区域是1000x1000的网格,因此每个网格点都可作为蚂蚁占据的有效点。现在,我遇到的所有算法都涉及分别处理顶点和边缘,但是由于我们将蚂蚁的移动限制在四个方向(上,下,左,右),所以我认为将信息素放在何处都没有关系。 上述网格点存储信息素。 蚂蚁仅在携带食物时才会滴下信息素。 对于处于位置(i,j)的蚂蚁,它通过简单的概率公式考虑到其四个相邻节点上的信息素量来决定下一步移动的位置,即,通过(特定相邻节点的信息素数量)/(4个相邻节点的信息素数量之和)。 一只蚂蚁不能回到原来的位置。它只有在有食物的地方或在其殖民地时才能这样做。 现在,我担心的是(以及程序中实际发生的事情)是,当一只蚂蚁FIRST到达有食物并捡起它的位置时,通过我们的算法起作用,它可以移动到任何地方!这是因为它只会留下一条信息素踪迹,一旦它有了食物而不是之前,并且因为它是第一只蚂蚁,就不存在信息踪迹了。 如果蚂蚁可以移动到任何地方,到达食物源后的蚂蚁也往往会跟随它前进。即使它没有移回殖民地,也是如此。这违反了整个算法的目的。 所以我的问题是 上述关注有效吗?如果没有,那为什么呢?如果是,那该如何处理呢? 我们是否需要对算法的基本理解进行一些更改才能使其真正起作用? 在这种情况下,像我这样的新手可能还会错过其他一些微妙但重要的事情吗?

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.