Questions tagged «algorithms»

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

1
SAT本地搜索的支持数据结构
WalkSAT和GSAT是解决布尔可满足性问题的众所周知的简单本地搜索算法。从实现GSAT算法-如何选择要翻转的文字的问题中复制了GSAT算法的伪代码。并在下面介绍。 procedure GSAT(A,Max_Tries,Max_Flips) A: is a CNF formula for i:=1 to Max_Tries do S <- instantiation of variables for j:=1 to Max_Iter do if A satisfiable by S then return S endif V <- the variable whose flip yield the most important raise in the number of satisfied clauses; S …

2
创建自排序二叉树
我有一个作业,需要使用二叉搜索树并将其更改为自身自定序,以使访问最多(优先级更高)的项目位于树的顶部,根是访问最多的节点。 教授给了我可以使用的BST和节点结构,但是在插入事物时试图让我的脑袋绕开更新树的算法,这使我感到困惑。 我知道随着插入的进行,它会检查当前节点的数据是否小于或大于当前节点,然后递归地以正确的方向运行,直到找到空指针并将其自身插入那里。并将其插入后将优先级增加1。 template <class Type> void BinarySearchTree<Type> :: insert( const Type & x, BinaryNode<Type> * & t ) { if( t == NULL ) t = new BinaryNode<Type>( x, NULL, NULL ); else if( x < t->element ) insert( x, t->left ); else if( t->element < x ) insert( …

3
计算素数模的阶乘最有效的方法是什么?
您知道有什么算法可以有效地计算模后阶乘吗? 例如,我要编程: for(i=0; i<5; i++) sum += factorial(p-i) % p; 但是,p直接应用阶乘是一个很大的数字(素数)。(p≤108)(p≤108)(p \leq 10^ 8) 在Python中,此任务确实很容易,但是我真的很想知道如何优化。

1
追踪运动目标的算法
假设我们有一个黑匣子,我们可以查询和重置它。当我们复位,状态的被设定为在从所述一组随机选择的均匀的元素其中是固定的并且已知的用于给定。为了查询,提供了的元素(猜测),返回的值为(f_S-x)\ mod n。另外,该状态F_S的˚F被设定为值F_S” = F_S \ PMķ,其中ķ从均匀地选择随机fffffffSfSf_Sfff{0,1,...,n−1}{0,1,...,n−1}\{0, 1, ..., n - 1\}nnnffffffxxx{0,1,...,n−1}{0,1,...,n−1}\{0, 1, ..., n - 1\}˚F 小号 ˚F ˚F ' 小号 = ˚F 小号 ± ķ ķ { 0 ,1 ,2 ,。。。,⌊ Ñ / 2 ⌋ - (( ˚F 小号 - X )(fS−x)modn(fS−x)modn(f_S - x) \mod nfSfSf_Sffff′S=fS±kfS′=fS±kf_S' = f_S …

1
实现GSAT算法-如何选择要翻转的文字?
GSAT算法在大多数情况下是直截了当的:您获得了合取范式的公式,然后翻转子句的文字,直到找到满足该公式的解,或者达到了max_tries / max_flips限制,而没有找到解。 我正在实现以下算法: procedure GSAT(A,Max_Tries,Max_Flips) A: is a CNF formula for i:=1 to Max_Tries do S <- instantiation of variables for j:=1 to Max_Iter do if A satisfiable by S then return S endif V <- the variable whose flip yield the most important raise in the number of …

5
有效压缩未标记的树木
考虑未标记的,有根的二叉树。我们可以压缩这些树:每当有指向子树TŤT和T′Ť′T'与T=T′Ť=Ť′T = T'(解释===为结构相等),我们店(wlog)TŤT并更换所有指针T′Ť′T'与指针TŤT。有关示例,请参见uli的答案。 给出一种将上述意义上的树作为输入并计算压缩后剩余的(最小)节点数的算法。该算法应在时间O(nlogn)Ø(ñ日志⁡ñ)\cal{O}(n\log n)(在统一成本模型中)运行,输入中的节点数为nñn。 这是一个考试问题,我无法提出一个很好的解决方案,也没有看到一个解决方案。

1
查找稀疏图的周长的最佳算法?
我想知道如何找到一个稀疏无向图的周长。稀疏的意思是。最佳的意思是最低的时间复杂度。|E|=O(|V|)|E|=O(|V|)|E|=O(|V|) 我考虑过对Tarjan的无向图算法进行一些修改,但是没有找到好的结果。实际上,我以为,如果我可以在找到2个相连的分量,那么可以通过从第一部分实现的某种归纳法找到周长。不过,我可能走错了路。渐近优于(即)的任何算法都可以使用。Θ (| V | 2)o (| V | 2)O(|V|)O(|V|)O(|V|)Θ(|V|2)Θ(|V|2)\Theta(|V|^2)o(|V|2)o(|V|2)o(|V|^2)



12
用于快速查找字符串之间差异的数据结构或算法
我有一个100,000个字符串数组,长度均为。我想将每个字符串与其他每个字符串进行比较,看看是否有两个字符串相差1个字符。现在,当我将每个字符串添加到数组时,我正在将其与数组中已有的每个字符串进行比较,该字符串的时间复杂度为。kkkn(n−1)2kn(n−1)2k\frac{n(n-1)}{2} k 是否有一种数据结构或算法可以比我已经做的更快地将字符串相互比较? 一些其他信息: 顺序很重要:abcde和xbcde相差1个字符,而abcde和edcba相差4个字符。 对于每一个相差一个字符的字符串对,我将从数组中删除其中一个字符串。 现在,我正在寻找仅相差1个字符的字符串,但是如果可以将1个字符的差异增加到例如2个,3个或4个字符,那就太好了。但是,在这种情况下,我认为效率比提高字符差异限制的能力更为重要。 kkk通常在20-40的范围内。

3
什么是最有效的恒定空间排序算法?
我正在寻找一种用于int数组的排序算法,该算法不会分配除数组大小以外的任何字节,并且仅限于两条指令: 交换:将下一个索引与当前索引交换; MOVE:将光标移至+1或-1索引; 也就是说,100仅交换index之后,就不能交换非相邻索引,也不能交换索引10。什么是最有效的算法-即使用较少总移动量的算法?


1
查找等于一个数字的二项式系数的复杂性
假设您得到一个数字mmm(使用二进制编码中的O(logm)O(log⁡m)O(\log m)位)。 您能在(找到(或确定不存在)n,k \的速度有多快Ñ ,ķ ∈ Ñ,1 &lt; ķ ≤ Ñ2:( nķ) =米ñ,ķ∈ñ,1个&lt;ķ≤ñ2:(ñķ)=米n,k\in \mathbb N, 1<k\leq\frac{n}{2}:{n \choose k}=m ? 例如,给定输入m = 8436285米=8436285m=8436285,可以输出n = 27 ,k = 10ñ=27,ķ=10n=27, k=10。 针对该问题的幼稚算法将遍历n的所有可能值ññn,并搜索满足该属性的k值ķķk。 一个简单的观察结果是,无需检查小于\ log m或大于O(\ sqrt m)的n值。但是(即使我们只能检查每个n值O(1)个可能的k值),这最终导致效率低下的算法,该算法的输入大小成指数增长。ññn日志米日志⁡米\log mÔ (米--√)Ø(米)O(\sqrt m)Ô (1 )Ø(1个)O(1)ķķkññn 一种替代方法是遍历k的可能值ķķk(足以检查{ 2 ,3 ,... ,2 日志m }{2,3,…,2日志⁡米}\{2,3,\ldots,2\log m\}),并为每次检查确定可能的ññn值。然后,我们可以使用: (nķ)ķ&lt; ( nķ) …

3
Cookie框中有多少个Cookie?—平铺星星
随着假期临近,我决定做一些肉桂星。那很有趣(而且结果很好吃),但是当我把第一盘星星放在盒子里时,我的内心书呆子就有些畏缩了,它们不能合在一起了: 几乎!他们有办法适应吗?无论如何,我们如何才能平铺星星?假定这些是规则的六点星,我们当然可以使用众所周知的六边形平铺作为近似,如下所示: 弄乱了右上角的那个,哎呀。 但这是最佳选择吗?提示之间有足够的空间。 考虑到这一点,让我们将自己限制为矩形框和六点规则的恒星,即,每个尖端与其相邻的角之间存在三十度(或)。恒星的特征在于内半径和外半径: - [R我řöπ6π6\frac{\pi}{6}[R一世rir_i[RØror_o [ 来源 ] 请注意,对于,我们有六角形;对于,我们有六边形。我认为考虑这些极端情况(对于Cookie)并将自己限制在两者之间的范围内是合理的,即。- [R我=1[R一世= 3√2⋅ [RØ[R一世=32⋅[RØr_i = \frac{\sqrt{3}}{2} \cdot r_oř我[R一世= 13√⋅ [RØ[R一世=1个3⋅[RØr_i = \frac{1}{\sqrt{3}} \cdot r_o[R一世[R0∈ [ 13√,3√2][R一世[R0∈[1个3,32]\frac{r_i}{r_0} \in \Bigl[\frac{1}{\sqrt{3}}, \frac{\sqrt{3}}{2}\Bigr] 我的cookie的和忽略了缺陷-我只是想品尝,而不是一次成型!- [R ö ≈ 25 米米[R一世≈ 17 米米[R一世≈17米米r_i \approx 17\mathrm{mm}[RØ约25 m m[RØ≈25米米r_o \approx 25\mathrm{mm} 如上所述,最佳的恒星平铺是什么?如果没有静态的最佳平铺,是否有一种算法可以有效地找到良好的平铺?

1
最近N个数字的加权和
假设我们正在接收流中的数字。接收到每个数字后,需要计算最后数字的加权和,其中权重始终相同,但是是任意的。ñNN 如果允许我们保留数据结构来帮助计算,那么这样做的效率如何?我们能做得比更好的方法吗,即每次收到一个数字都重新计算总和?Θ (N)Θ(N)\Theta(N) 例如:假设权重为。在某一点上,我们有最后数字的列表和加权和。Ñ 大号1 = ⟨ 一个,b ,c ^ ,d ⟩ &gt; 小号1 = 瓦特1 * 一个+ 瓦特2 * b + 瓦特3 * C ^ + 瓦特4 * dw ^= ⟨ 瓦特1个,w2,w3,w4⟩W=⟨w1,w2,w3,w4⟩W= \langle w_1, w_2, w_3, w_4\rangleñNN大号1个= ⟨ 一个,b ,c ^ ,d⟩ &gt;L1=⟨a,b,c,d⟩&gt;L_1= \langle a, b, c, d \rangle>小号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.