Questions tagged «algorithms»

算法是定义明确的问题解决方案的一系列明确定义的步骤。如果您的问题与算法的设计和分析有关,请使用此标签。

1
使用Barabasi-Albert生成具有幂律度分布的无标度网络
我正在尝试重现一些论文中描述的综合网络(图形)。 据称,Barabasi-Albert模型用于创建“具有幂分布的无标度网络”。PA(k)∝k−λPA(k)∝k−λP_A(k) ∝ k^{-λ} PAPAP_A是一个概率分布,它返回具有度k的节点的概率kkk。例如,PA(2)PA(2)P_A(2)表示从网络中随机选择一个节点并获得度为2的节点的概率。 平均度行程似乎是4在一个纸,具有最小 2.无字的关于最大。在另一篇论文中未指定。定义网络似乎并不重要。ķ ķkkkkkkkkk 给出λ值,节点数。组合是nnn n = 50000,λ= 3,2.7,2.3 n = 4000并且λ= 2.5,或者在另一篇论文中n = 6000和λ= 3 我在寻找实现Barabasi-Albert算法的库,它们似乎需要的参数与lambda和平均度不同。一个是NetworkX,另一个是GraphStream(在此处实现)。他们以类似的方式工作,并要求: n:int-节点数 m:int-从新节点连接到现有节点的边数;每一步要添加的边数 如何计算设置m以生成可比较的图形? 以下是一些参考资料: 相互依赖网络中的灾难性级联故障,Buldyrev等。2010年,单独提供补充信息 网络物理系统中的小型集群,Huang等。2014年 相互依赖的网络中的灾难性级联故障,Havlin等。2010年,这是在Arxiv上,并在某种程度上澄清了 请注意,这些论文使用“生成函数”来分析研究这些图的某些属性。但是,他们也在这些模型上运行仿真,因此它们一定以某种方式生成了这些网络。 谢谢。

2
标记图的图同构问题
在未标记图的情况下,可以通过许多在实践中表现出色的算法来解决图同构问题。也就是说,尽管最坏情况下的运行时间是指数的,但通常具有多项式运行时间。 我希望在标记图的情况下情况类似。但是,我很难找到任何提出“实用高效”算法的参考。 备注:在这里,我们要求同构保留标签。也就是说,两个有限自动机/过程代数项之间的同构将暗示自动机/项实质上“等于节点重命名”。 我发现的唯一参考是Wikipedia中的参考,该参考指出标注图的同构问题可以在多项式上简化为普通图。然而,基础论文更多地是关于复杂性理论,而不是实用算法。 我错过了一些东西,或者确实是没有有效的“启发式”算法来确定两个标记图是否同构的情况? 任何提示或参考都很好。

1
查找伪逆矩阵的复杂性
查找任意场的Moore-Penrose伪逆矩阵需要多少算术运算? 如果矩阵是可逆的并且是复数值,那么它就是逆矩阵。找到逆需要时间,其中是矩阵乘法常数。它是算法简介第3版中的定理28.2。O(nω)O(nω)O(n^\omega)ωω\omega 如果矩阵具有线性独立的行或列和复值,然后伪逆矩阵,可以与计算或分别其中是共轭转置。特别是,这意味着需要时间来查找的伪逆。AAAA∗(AA∗)−1A∗(AA∗)−1A^*(A A^*)^{-1}(AA∗)−1A∗(AA∗)−1A∗(A A^*)^{-1}A^*A∗A∗A^*AAAO(nω)O(nω)O(n^\omega)AAA 对于通用矩阵,我见过的算法使用QR分解或SVD,在最坏的情况下,似乎需要算术运算。是否有使用较少运算的算法?O(n3)O(n3)O(n^3)

3
了解加油站问题的算法
在加油站问题中,我们给了个城市以及它们之间的道路。每条道路都有长度,每个城市都定义了燃料价格。一单位的道路需要一单位的燃料。我们的目标是以最便宜的方式从货源到目的地。我们的战车受到一些价值的限制。nnn{0,…,n−1}{0,…,n−1}\{ 0, \ldots, n-1 \} 我试图理解算法,所以我手动写下了计算解决方案的步骤。不幸的是,我被卡住了-在某些时候没有考虑的余地,我不知道为什么,也许我错过了一些东西。 示例: 道路: 0 ----------- 1 ------------ 2 -------------- 3 (不一定要这么简单,可以是任何图形,即0-> 2、0-> 3、1-> 3之间的道路等) 来源:0,目的地:3,坦克:10单位 燃油价格:0:10单位,1:10单位,2:20单位,3:12单位 长度:0-> 1:9单位,1-> 2:1单位,2-> 3:7单位 最佳解决方案:以0填充9个单位,以1填充8个单位,则总成本为170个单位(9 * 10 + 8 * 10)。 因此,我尝试按此处所示进行计算(第2.2段) GV[u] is defined as: GV[u] = { TankCapacity - length[w][u] | w in Cities and fuelPrice[w] < …

1
我们可以多快决定给定的DFA是否最小?
最小化确定性有限自动机(DFA)是一个在文献中已经深入研究的问题,并且已经提出了几种算法来解决以下问题:给定DFA,计算对应的最小DFA并接受与。这些算法大多数都在多项式时间内运行。A一种A\mathscr{A}一种A\mathscr{A} 但是,我不知道该问题的决策变量是否为“给定了DFA,最小”?-比实际计算最小自动机更有效地解决。显然,这还可以通过运行例如Hopcroft的分区细化算法,然后确定是否所有分区都精确地包含一个状态来有效地完成。A一种A\mathscr{A}一种A\mathscr{A} 正如Yuval Filmus 在他的回答中所建议的那样,可以通过使用标准算法来更快地解决可判定性变量。不幸的是,我看不到如何做(希望我在这里没有遗漏明显的观点)。 Yuval在此处的注释中指出,对于恒定大小的字母,最著名的算法(如上述算法)在时间中运行。因此,我不仅对运行时的渐进式显着收益感兴趣,因为这些收益似乎不太可能。最让我困扰的是,我无法想象任何“捷径”都可能源于我们只对“是-否”答案感兴趣的事实,甚至没有可以节省渐近时间的时间的捷径。我认为,每种决定DFA最小化的明智算法都必须实际最小化DFA,并查看在此过程中是否有任何变化。Ø(ñ日志n )O(nlog⁡n)\mathcal{O}(n \log n)

1
使用处理器在时间中找到最大值的并行算法
我们在课堂上介绍了一种算法,该算法可在台计算机上以时间复杂度并行查找数组中的最大值。n 2O (1 )O(1)O(1)ñ2n2n^2 该算法是: 给定长度为n的数组A: 制作一个长度为n的标志数组B,并在台计算机上将其初始化为零。ñnn 比较每2个元素,并使用台计算机以最小值的索引在B中写入1 。ñ2n2n^2 在台计算机的A中找到带有0的索引。ñnn 讲师嘲笑我们可以使用计算机和时间复杂度来完成。登录nñ日志ñnlog⁡n\frac{n}{\log n}日志ñlog⁡n\log n 经过一番思考,我不知道该怎么做。任何的想法?

3
用最少的移动次数匹配数字的算法
这是一种编辑距离问题,非常简单。我只是在这个问题上脑子死了,到目前为止还不能弄清楚。 给定一系列数字,例如 [3, 1, 1, 1] 如何以最少的“移动”数将所有数字最有效地转换为相同的数字?“移动”是指从数字中添加或删除一个。 在上面的示例中,最有效的举动是: [1, 1, 1, 1] 这将需要2步,将第一个数字减少两次。 给定大得多的数百个数字数组,我无法找出找到此结果的最佳方法。 我最初尝试计算四舍五入的平均值(所有值的总和除以长度),然后将其减小为计算的平均值,但是上面的示例破坏了这一点,需要4步而不是2步。 我想我可以算: 平均 模式, 中位数 并获得它们各自的编辑距离,并选择最小距离。但是,我不确定在每个实例中这是否正确。我怎么知道?

1
背包问题的变体
如果现在必须将背包中的项目数限制为常数那么在动态编程情况下如何解决背包问题?这是相同的问题(最大重量,每个商品的值均为,重量),但您只能将项添加到背包,显然需要优化背包的值。pppWWWvvvwwwppp 我们需要三维还是没有三维我们可以找到其他方法。我试图简单地在单元格中的背包中添加项目数,并在最后加上最大值,即项目数<=但这不是最佳解决方案。ppp

1
间隔图的数据结构
令nnn为整数,令ZZ\mathbb{Z}表示所有整数的集合。令[a,b][a,b][a,b]表示整数的间隔{a,a+1,a+2,…,b}{a,a+1,a+2,…,b}\{a,a+1,a+2,\dots,b\}。 我正在寻找一种数据结构来表示映射f:[1,n]→Zf:[1,n]→Zf:[1,n] \to \mathbb{Z}。我希望数据结构支持以下操作: get(i)get(i)\text{get}(i)应该返回f(i)f(i)f(i)。 set([a,b],y)set([a,b],y)\text{set}([a,b],y)应更新fff使得f(a)=f(a+1)=⋯=f(b)=yf(a)=f(a+1)=⋯=f(b)=yf(a)=f(a+1)=\cdots=f(b)=y,即更新fff到一个新的地图f′f′f'使得f′(i)=yf′(i)=yf'(i) = y用于i∈[a,b]i∈[a,b]i \in [a,b]并且f′(i)=f(i)f′(i)=f(i)f'(i) = f(i)为i∉[a,b]i∉[a,b]i \notin [a,b]。 应该返回最大间隔 [ 一,b ],使得我∈ [ 一,b ]并且 ˚F是常数 [ 一,b ](即, ˚F (一)= ˚F (一个+ 1 )= ⋯ = ˚F (b ))。stab(i)stab(i)\text{stab}(i)[a,b][a,b][a,b]i∈[a,b]i∈[a,b]i \in [a,b]fff[a,b][a,b][a,b]f(a)=f(a+1)=⋯=f(b)f(a)=f(a+1)=⋯=f(b)f(a)=f(a+1)=\cdots=f(b) 应更新 ˚F到一个新的地图 ˚F '使得 ˚F '(我)= ˚F (我)+ δ为我∈ [ 一,b ]并且 …

2
Aho-Corasick算法和Rabin-Karp算法的比较
我正在研究支持多模式搜索的字符串搜索算法。我发现了两种算法,它们在运行时间方面似乎是最强的候选者,分别是Aho-Corasick和Rabin-Karp。但是,我找不到这两种算法之间的任何全面比较。哪种算法更有效?另外,哪一种更适合并行计算和多模式搜索?最后,哪个需要更少的硬件资源? 对于AC算法,搜索阶段需要时间,而对于RK ,搜索阶段则为。但是,RK的运行时间为,这使其类似于AC。我的初步结论是,RK看起来实际上更好,因为它不需要像AC一样多的内存。那是对的吗?O (n + m )Ø(ñ+米)O(n+m)O (n 米)Ø(ñ米)O(nm)O (n + m )Ø(ñ+米)O(n+m)

1
测试语言是否正常的算法
是否有算法/系统程序来测试语言是否正常? 换句话说,在给定的代数形式指定的语言(想到像L={anbn:n∈N}L={anbn:n∈N}L=\{a^n b^n : n \in \mathbb{N}\}),测试语言是否正常。想象一下,我们正在编写一个Web服务,以帮助学生完成所有作业。用户指定语言,然后Web服务将以“常规”,“非常规”或“我不知道”进行响应。(我们希望Web服务尽可能不频繁地回答“我不知道”。)是否有任何好的方法可以自动执行此操作?这容易处理吗?是否可以确定(即是否可以保证我们永远不需要回答“我不知道”)?是否存在合理有效的算法来解决此问题,并且能够针对实际中可能出现的许多大多数语言提供“不知道”以外的答案? 证明语言不规则的经典方法是激进引理。但是,似乎需要在某些时候进行手动洞察(例如,选择要泵送的单词),因此我不清楚是否可以将其转化为算法。 证明一种语言正常的经典方法是使用Myhill-Nerode定理来推导有限状态自动机。这看起来是一种很有前途的方法,但是它确实需要能够以代数形式对语言执行基本操作。对于我来说,目前尚不清楚是否有系统的方法可以对代数形式的语言象征性地执行所有可能需要的操作。 为了使这个问题更好地解决,我们需要确定用户如何指定语言。我愿意提出建议,但我在想这样的事情: L={E:S}L={E:S}L = \{E : S\} 其中是一个单词表达式,S是一个在长度变量上的线性不等式的系统,具有以下定义:EEESSS 每个就是一个字表达。(这些代表可以在∑ ∗中包含任何单词的变量。)x,y,z,…x,y,z,…x,y,z,\dotsΣ∗Σ∗\Sigma^* 每个是一个字表达。(此处x r表示字符串x的反方向。)xr,yr,zr,…xr,yr,zr,…x^r,y^r,z^r,\dotsxrxrx^rxxx 中的每一个都是单词表达。(示例性地,Σ = { a ,b ,c ,… },因此a ,b ,c ,…表示基础字母中的单个符号。)a,b,c,…a,b,c,…a,b,c,\dotsΣ={a,b,c,…}Σ={a,b,c,…}\Sigma=\{a,b,c,\dots\}a,b,c,…a,b,c,…a,b,c,\dots 每是一个字表达式中,如果η是一个长度可变。aη,bη,cη,…aη,bη,cη,…a^\eta,b^\eta,c^\eta,\dotsηη\eta 单词表达的串联是单词表达。 每个的是一个长度可变。(这些代表可以采用任何自然数的变量。)m,n,p,q,…m,n,p,q,…m,n,p,q,\dots 每个是长度可变的。(这些代表相应单词的长度。)|x|,|y|,|z|,…|x|,|y|,|z|,…|x|,|y|,|z|,\dots 这似乎足以处理我们在教科书练习中看到的许多情况。当然,如果您有更好的建议,则可以用其他任何以代数形式指定语言的文本方法来代替。

3
多集的数量,这样从1到
我的问题。给定,我想计算有效多集S的数量。多重集S在以下情况下有效nnnSSSSSS 的元素之和为n,并且SSSnnn 从到n的每个数字都可以唯一地表示为S的某些元素的总和。111nnnSSS 例。 例如,如果然后{ 1 ,1 ,1 ,1 ,1 } ,{ 1 ,2 ,2 } ,{ 1 ,1 ,3 }是有效的。n=5n=5n=5{1,1,1,1,1},{1,2,2},{1,1,3}{1,1,1,1,1},{1,2,2},{1,1,3}\{1,1,1,1,1\}, \{1,2,2\}, \{1,1,3\} 然而,是无效的,因为2可以通过形成两个{ 1 ,1 }和{ 2 }(即,2可以被表示为两个2 = 1 + 1和2 = 2) ,因此第二个条件不成立。类似地3能够通过形成{ 2 ,1 }和{ 1 ,1 ,1 }。S={1,1,1,2}S={1,1,1,2}S=\{1,1,1,2\}{1,1}{1,1}\{1,1\}{2}{2}\{2\}2=1+12=1+12=1+12=22=22=2{2,1}{2,1}\{2,1\}{1,1,1}{1,1,1}\{1,1,1\} }也无效,因为从所有数字 1至 5都可以被唯一制成,但的元素之和小号不是 5。S={1,2,4S={1,2,4S=\{1,2,4111555SSS555 我试图为这个问题找到一个好的算法已经有一段时间了,但是无法解决。它来自codechef。我已经看到了一些提交的解决方案,但是仍然无法获得解决问题的逻辑。注意:问题的时限为10秒,n&lt;109n&lt;109n<10^9 对于多集,我将使用符号a i …

1
河内塔楼,但具有任意初始和最终配置
最近,我遇到了这个问题,河内塔楼的变种。 问题陈述: 考虑一下河内著名问题塔的以下变化: 我们给了塔和m个大小为磁盘堆叠在一些塔上。您的目标是以尽可能少的动作将所有磁盘转移到塔中,但要考虑以下规则:1 ,2 ,3 ,... ,中号ķ 第ññn1 ,2 ,3 ,... ,米1个,2,3,…,米1,2,3,\dots,mķ日ķ日k^{\text{th}} 一次只移动一个磁盘, 永远不要将较大的磁盘移动到较小的磁盘, 只能在最高距离塔之间移动。ddd (原始问题的局限性是: 和。测试用例的数量。您可以假设所有问题都可以通过不超过动作来解决 。)米≤ 100 ≤ 1000 200003 ≤ Ñ ≤ 10003≤ñ≤10003 \le n \le 1000米≤ 100米≤100m \le 100≤ 1000≤1000\le 1000200002000020000 这是一个有趣的。河内问题的经典塔有一个源,目标和临时塔,用于将磁盘从源移动到目标。该站点上提出的问题基本上具有初始和最终配置。 一个人如何解决这个问题?


1
如何检测照片上的阳光
拍摄照片时,您如何通过算法检测给定的照片,太阳是否在照耀? 例子 来自此摄像头的山顶示例: 显然,阳光明媚。 在另一个示例中,它远不那么明显: 通过尝试识别中心小教堂上的小教堂尖顶,可能很容易就能发现是否有雾。但是,对图像处理了解甚少,如果有一种(组合的)算法可以可靠地判断是否有阳光,我会感到惊讶。

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.