Questions tagged «algorithms»

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

4
每个线性时间算法都是流算法吗?
在关于反计数的这个问题上,我发现了一篇论文,证明了所有(精确)流算法的空间复杂度下限。我声称这个界限扩展到了所有线性时间算法。通常来说,线性时间算法可以随意跳动(随机访问),而流式算法则不能随意跳动;它必须按顺序调查元素。我可以执行多次,但只能连续多次(对于线性运行时)。 因此我的问题是: 是否可以将每个线性时间算法表示为不断通过的流算法? 随机访问似乎阻止了(简单的)构造证明是肯定的答案,但是我也未能提出反例。 根据机器型号,在运行时,随机访问甚至可能不是问题。我会对这些模型的答案感兴趣: 图灵机,平面输入 RAM,作为​​数组输入 RAM,作为​​链接列表输入

1
气泡排序中的预期交换次数
给定一个由整数组成的数组,可以以一定的概率,将数组中的每个元素增加固定数量。我必须找到使用气泡排序对数组进行排序所需的交换次数。一种一种AññNbbbp [ i ]p[一世]p[i]0 ≤ 我&lt; Ñ0≤一世&lt;ñ0 \leq i < n 我尝试了以下方法: 一个元素的概率用于可以很容易地从给定的概率来计算。A [ i ] &gt; A [ j ]一种[一世]&gt;一种[Ĵ]A[i] > A[j]我&lt; j一世&lt;Ĵi < j 使用上述方法,我计算出了预期的交换次数为: double ans = 0.0; for ( int i = 0; i &lt; N-1; i++ ){ for ( int j = i+1; j &lt; …

1
覆盖问题(发送方和接收方)
我尝试解决以下覆盖问题。 有发射器,覆盖范围为1km,接收器。在确定所有接收器都被任何发送器覆盖。所有接收器和发送器均由其和坐标表示。nnnnnnO(nlogn)O(nlog⁡n)O(n\log n)xxxyyy 我可以使用的最先进的解决方案采用。对于每个接收器,请按与当前接收器的距离对所有发送器进行排序,然后选择距离最短的发送器,并且该最短距离应在0.5 km之内。O(n2logn)O(n2log⁡n)O(n^2\log n) 但是天真的方法看起来在时间复杂度要好得多。只需计算所有成对的发射器和接收器之间的所有距离。O(n2)O(n2)O(n^2) 我不确定是否可以在此问题中应用范围搜索算法。例如,kd-trees使我们能够找到这样的范围,但是我从未见过示例,并且不确定是否存在用于圆的范围搜索。 给定的复杂度假设解决方案应在某种程度上类似于排序。O(nlogn)O(nlog⁡n)O(n\log n)


1
有效地选择中位数及其左侧和右侧的元素
假设我们有一个组的Ñ编码器。S={a1,a2,a3,…,aN}S={a1,a2,a3,…,aN}S = \{ a_1,a_2,a_3,\ldots , a_N \}NNN 到目前为止,每个编码员都具有等级和金牌数量E i。RiRiR_iEiEiE_i 一家软件公司希望恰好雇用三个编码员来开发应用程序。 为了聘请三位编码员,他们制定了以下策略: 他们首先以等级升序和金牌降序排列编码器。 他们从这个排列好的列表中选择三个中间编码器。例如,如果排列的列表是它们选择(a 2,a 3,a 1)编码器。(a5,a2,a3,a1,a4)(a5,a2,a3,a1,a4)(a_5,a_2,a_3,a_1,a_4)(a2,a3,a1)(a2,a3,a1)(a_2,a_3,a_1) 现在,我们必须通过为此任务编写程序来帮助公司。 输入: 第一行包含,即编码器的数量。NNN 然后,第二行包含收视的我个编码器。RiRiR_iiii 第三行包含 iii个编码器。 输出: 仅显示一行,其中包含公司将选择的三个编码器获得的金牌总数。

1
随机选择
随机选择算法如下: 输入:一个数组,其中包含(为简单起见,是不同的)数字和一个Ñ ķ ∈ [ Ñ ]AAAnnnk∈[n]k∈[n]k\in [n] 输出:该“等级的元素”(即,一个在位置如果进行了排序)甲ķ 甲kkkAAAkkkAAA 方法: 如果有一个元素,则将其返回AAA 随机均匀地选择一个元素(“枢轴”)ppp 计算集合和- [R = { 一个∈ 甲:一&gt; p }L={a∈A:a&lt;p}L={a∈A:a&lt;p}L = \{a\in A : a < p\}R={a∈A:a&gt;p}R={a∈A:a&gt;p}R = \{a\in A : a > p\} 如果,返回的等级元素。ķ 大号|L|≥k|L|≥k|L| \ge kkkkLLL 否则,返回等级元素[Rk−|L|k−|L|k - |L|RRR 我被问到以下问题: 假设,那么您正在寻找中位数,并将 设为常数。在第一次递归调用中,包含中位数的集合的大小最大为的概率是多少?α &Element; (1 / 2 ,1 …

2
计算矩阵幂的复杂性
我对计算n × n矩阵A的次幂感兴趣。假设我们有一个在O(M (n ))时间内运行的矩阵乘法算法。然后,可以轻松地以O(M (n )log (n ))时间计算A n。是否可以用更少的时间来解决这个问题?nnnn×nn×nn\times nAAAO(M(n))O(M(n))\mathcal{O}(M(n))AnAnA^nO(M(n)log(n))O(M(n)log⁡(n))\mathcal{O}(M(n)\log(n)) 通常,矩阵条目可以来自半环,但如果有帮助,则可以采用其他结构。 注意:我了解在一般情况下,以o (M (n )log (m ))时间计算会得到o (log m )求幂的算法。但是,许多有趣的问题都归结为矩阵求幂的特殊情况,其中m = O(n ),而我无法证明这个简单问题也是如此。AmAmA^mo(M(n)log(m))o(M(n)log⁡(m))o(M(n)\log(m))o(logm)o(log⁡m)o(\log m)O(n)O(n)\mathcal O(n)

1
在实践中评估缓存遗忘性能的研究
Frigo等人介绍了忽略缓存的算法和数据结构是一个相当新的事物。在Cache-oblivious算法,1999年。普罗科普(Prokop)同年的论文也介绍了早期的想法。 Frigo等人的论文。目前的一些实验结果表明了该理论以及忽略高速缓存的算法和数据结构的潜力。许多可忽略缓存的数据结构都是基于静态搜索树的。存储和导航这些树的方法已经发展了很多,也许是Bender等人最著名的。以及Brodal等人的著作。Demaine给出了一个很好的概述。 至少由Ladner等人完成了研究缓存行为的实验工作。使用程序工具,2002年在“缓存感知和缓存遗忘的静态搜索树”的比较中取得成功。Ladner等。使用经典算法,忽略缓存的算法和了解缓存的算法,对解决二进制搜索问题的算法的缓存行为进行了基准测试。每种算法都使用隐式和显式导航方法进行基准测试。除此之外,Rønn,2003年的论文对相同的算法进行了非常详细的分析,并对Ladner等人的相同算法进行了更彻底的测试。 我的问题是 从那以后,在实践中是否有任何新的研究对基准缓存不了解算法的缓存行为进行基准测试?我对静态搜索树的性能特别感兴趣,但我也对其他任何忽略缓存的算法和数据结构感到满意。

6
复杂递归算法的示例
我正在向一个朋友解释著名的确定性线性时间选择算法(中值算法的中位数)。 该算法的递归(非常简单)非常复杂。有两个递归调用,每个递归调用具有不同的参数。 我试图找到这种有趣的递归算法的其他示例,但找不到任何示例。我可以提出的所有递归算法要么是简单的尾部递归,要么是简单的分而治之(两个调用是“相同的”)。 您能否举一些复杂的递归示例?

1
确保退出迷宫的步骤
给定一个二维迷宫,您可以在其中给出4个命令“上/下/右/左”。了解迷宫但不知道人在哪里,如何找到保证退出迷宫的最小命令顺序?我正在寻找一个命令序列,无论您从迷宫中的哪个位置开始,它们都将起作用。 假设如果在右边有隔离墙时向我们的伙伴发出“向右移动”命令,那么他只会呆在原处。 换句话说,我们被赋予了迷宫,我们必须选择一系列命令。然后,我们的伙伴将被放置在迷宫中的某个地方,并将遵循我们预先选择的命令序列。无论我们最初放置在哪里,我们都希望以此顺序来确保我们的伴侣能够逃脱。请注意,允许的命令没有任何条件语句,因此根据您的伙伴的不同,它们不能遵循不同的顺序。 给定迷宫的描述,是否有多项式时间算法来构造这样的序列? Yuval Filmus提到这是同步单词问题的特例,并且可能与通用遍历序列有关。我还发现了一篇似乎相关的论文: 同时解决迷宫问题。Stefan Funke,AndréNusser,Sabine Storandt。AAAI 2017年。 不幸的是,对于一般图形来说,这似乎是一个未解决的问题,但是我想知道对于这种特定情况是否有好的算法。我想出了一种候选方法:在每个位置上标注退出所需的最小步骤数,并跟踪迷宫中的每个特工。这样可以进行A *搜索。


2
最小顶点覆盖树的贪婪算法的正确性证明
有一种贪婪算法,用于查找使用DFS遍历的树的最小顶点覆盖。 对于树的每个叶子,选择其父级(即,其父级处于最小顶点覆盖范围内)。 对于每个内部节点: 如果未选择其任何子节点,则选择此节点。 如何证明这种贪婪策略给出了最佳答案?是否没有比上述算法产生的顶点覆盖更小的尺寸?


3
仍然可以将此算法视为二进制搜索算法吗?
在执行第二个代码kata(要求您执行五次二进制搜索算法,每次使用不同的方法)时,我提出了一个略有不同的解决方案,其工作方式如下: 如果我有一个长度为100的排序数组,并且看到它的起始字段包含数字200而其终止字段包含数字400,那么作为数学研究人员,我可能会在搜索字段35周围开始搜索编号270,而不是普通二进制搜索算法中的字段50。 然后,如果数组的字段35上的数字是270,则35是我正在搜索的索引。 如果不是这种情况,我可以比较得到的数字(例如280),并重复执行数组下部的操作(所以我有35个字段,起始字段包含200,结束字段包含280),如果我找到的数字大于我要搜索的数字,或者大于数组的上部(例如,我有260个:现在我有65个索引,第一个包含260,最后一个包含400。定向,我会转向如果我得到的数字小于我要搜索的数字,则此子数组的索引4,即整个数组的索引39)。 问题是:可以将此算法视为二进制搜索算法吗?如果没有,它有自己的名字吗?

1
Kruskal和Prim是否可以达到所有MST最小生成树?
我相信这是对的,但都未能获得正式证明。但是,通过应用Kruskal算法,是否可以达到任何最小生成树?同样,Prim算法是否正确? 编辑:更准确地说,我想知道是否为一个已连接的,无向的,加权的图指定了MST,是否可以保证使用Kruskal或Prim生成该MST的步骤是连续的。例如,当多个边缘具有相同的权重时,Kruskal有不同的选择。对于Prim也是如此。

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.