Questions tagged «ds.algorithms»

有关完成任务的明确指令的问题,以及有关时间/内存/等方面的相关分析。

2
忽略缓存的算法的起点?
我对学习更多关于缓存不了解的算法和数据结构的知识很感兴趣,但是那里有很多论文,老实说我不知道​​从哪里开始。我已经找到了Prokup关于该主题的原始论文,这似乎是一个很好的起点,但是,如果对该主题有一个简单易用的介绍,我宁愿从此开始。是否有关于该主题的标准“入门指南”? 谢谢!

1
欧几里得容量设施的位置问题
在容量限制的设施位置问题(CFLP)中,我们得到了一组客户CCC 和一套潜在的设施 FFF。每个客户Ĵ ∈ ÇĴ∈Cj \in C 有需求 dĴdĴd_j必须由一个或多个开放设施提供服务。每个设施我∈ ˚F一世∈Fi \in F 有开场费 fifif_i 并有能力 uiuiu_i,这是设施的最大需求 iii可以服务。服务一个客户单位需求的成本jjj 在设施中 iii 是 cijcijc_{ij}。我们希望开放一部分设施,并根据开放的设施分配客户的需求,以便满足所有客户的需求,不违反容量约束,并且最小化开放设施和服务客户​​的总成本。服务成本是非负的,对称的并且满足三角不等式。 Arora在[ 1,第21页]中指出:“ Arora,Raghavan和Rao [ 2 ]针对几何情况给出了PTAS。他们将算法扩展到有能力的情况,但最终解决方案可能会少量违反容量约束。” 他所说的“少量”是什么意思?我想这意味着他们提供的PTAS违反了因素内的能力限制(1+ϵ)(1+ϵ)(1+\epsilon) 对于任意 ϵ>0ϵ>0\epsilon > 0。这是正确的吗? 当我查看[ 2 ]时,发现的唯一相关结果是nO(log2(n/ϵ))nO(log2⁡(n/ϵ))n^{O(\log^2 (n / \epsilon))} 找到一个时间算法 (1+ϵ)(1+ϵ)(1+\epsilon)-Capacitated的近似解 kkk-我们拥有统一能力时的中位数问题。Arora是否在[ 1 ]中引用以上结果? [ 1 ] S. Arora。NP难几何优化问题的近似方案:一项调查。在数学中。编程,序列 B卷 97,第43-69页,2003年。 …

2
不允许每个边缘的最短路径
我希望能为我提供正确指导的任何指示或术语。 我们有向图 G = (V,E)G=(V,Ë)G=(V,E) 和长度 升我Ĵ升一世Ĵl_{ij} 对于每个边缘 我Ĵ一世Ĵij可以认为是积极的。有一个特殊的起始节点sss 和末端节点 ŤŤt。 对于每个边缘 我Ĵ一世Ĵij,我们想计算出的最短路径的长度 sss 至 ŤŤt 不使用边缘 我Ĵ一世Ĵij。 一种简单的暴力算法是为每个边缘运行最短路径算法,每次从原始图形中删除一个不同的边缘。有没有一种更有效的算法可以利用这种蛮力算法中发生大量重复计算这一事实呢? 提前致谢。

1
嵌入图作为内部不相交的四面体的集合
在3D中将网格定义为内部不相交的四面体的连接集合(因此,四面体仅共享k面,)。给定任意图,是否有一种有效的方法来测试它是否可以作为网格嵌入?ķ ≤ 2ķ≤2k \le 2 此处的嵌入是图的顶点到点的映射,边缘是直线的映射,以使边缘仅在顶点处相交,而面仅在边缘处相交,并且没有两个面在其内部相交。[R3[R3R^3

2
是否存在用于快速列表操作和订单查询的数据结构?
我们有一个集合中的元素列表。中的每个元素都显示在L中的单个列表中。我正在寻找可以执行以下更新的数据结构:LLLN={1,2,3,...,n}N={1,2,3,...,n}N = \{ 1, 2, 3, ..., n \}NNNLLL concat(x,y)concat(x,y)concat(x, y):将包含y的列表连接yyy到包含x的列表的末尾xxx split(x)split(x)split(x):含有分割列表xxx后直接xxx 它还需要执行以下查询: follows(x,y)follows(x,y)follows(x, y):返回truetruetrue,如果xxx和yyy是在同一列表和yyy后自带xxx(但不一定是相邻的xxx) first(x)first(x)first(x):返回包含x的列表的第一个元素xxx next(x)next(x)next(x):返回下一个元素后xxx在含列表xxx 我已经想出了一个数据结构,该结构在O(lg ^ 2(n))中执行这些更新,O(lg2(n))O(lg2(n))O(lg^2 (n))并在O(lg(n))O(lg(n))O(lg (n))时间内进行查询。我最感兴趣的是是否已经有一个数据结构可以做到这一点(希望更快吗?)。 动机:可以用其中的两个列表集来表示有根的定向森林,它们可以快速计算此类森林的可达性。我想看看它们还有什么用,如果所有这些都已知。

1
启发式优化
既然是星期五,是时候问CW了。我正在寻找在优化问题中广泛使用的启发式方法。为了将范围限制为更“理论友好”的启发式方法,以下是规则(有些是任意的,有些不是) 它应该是定义明确的方法,没有大量参数,并且具有具体的运行时间(可能是每次迭代) 它应该具有一些与之相关的已知理论结果(收敛速度,近似边界(如有),平稳性质等) 它应该具有广泛的适用性,并且至少是一种旗舰应用程序,无论是选择方法还是其中几种方法之一。 它不应该受到大自然的启发(尽管这似乎是轻率的反对,但我试图排除遗传算法,蚁群优化等)。 理想情况下,答案应采用以下格式:这是一个示例。 名称:交替优化 目标:最小化(通常是非凸的)函数F(x ,y)f(x,y)f(x,y) 条件:相关功能G(x )=分ÿF(x ,y)g(x)=minyf(x,y)g(x) = \min_y f(x,y) 和 ħ (ÿ)=分XF(x ,y)h(y)=minxf(x,y)h(y) = \min_x f(x,y) 是凸的 算法:一世日ithi^{\text{th}} 迭代开始于 X一世,ÿ一世xi,yix_i, y_i。 xi+1←argminxf(x,yi)xi+1←arg⁡minxf(x,yi)x_{i+1} \leftarrow \arg \min_x f(x, y_i) yi+1←argminyf(xi+1,y)yi+1←arg⁡minyf(xi+1,y)y_{i+1} \leftarrow \arg\min_y f(x_{i+1}, y) 最知名的应用程序:kkk-表示,迭代最接近的对。 理论:关于的已知结果kkk-手段,框架全局最优的一般充分条件 ps:您可能会发现您的答案最终成为了我正在计划的算法研讨会的演讲:)

1
确定一个通配符字符串是否与集合中的另一个通配符字符串完全匹配
这是困扰我一段时间的问题。假设字符串是1和0 的序列,通配符字符串是1、0和?s的序列。所有字符串和通配符字符串具有相同的长度。这些是标准的UNIX通配符。10 ?? 1匹配10011、10111等-a?在该位置匹配1或0。如果和是通配符字符串,那么如果与匹配的每个字符串也与匹配,则我们写。vvvwwwv ≤ w ^v≤wv \leq wvvvwww 问题:给定一组通配符字符串和一个查询(也是通配符字符串),是否存在使得吗?如果不是,我们可以有效地将添加到吗?小号SSvvvw ^ ∈ 小号w∈Sw \in Sv ≤ w ^v≤wv \leq wvvv小号SS 这是显而易见的解决方案(其中是字符串的大小,是RAM的字大小(通常为32或64)):遍历列表中的每个元素并进行测试条件(可以使用位旋转2或3个操作来完成)。还要在扫描时测试是否适合任何。如果未能通过我们的测试,则将添加到集合中,并删除我们标记的。O (ķ米n )O(kmn)O(\frac{k}{m}n)ķkk米mmv ≥ w ^v≥wv \geq wwwwvvvvvvwww 但这还不够快。如果有解决方案,或者在理想情况下,复杂度类似于基数树(),那真的很酷。查询大致正确也可以:即,如果,则返回yes或no;否则,返回false。但是如果条件不成立,则绝对不返回。O (对数n )O(log⁡n)O(\log n)O(k)O(k)O(k)v≤wv≤wv \leq w 尽管这并不能解决最坏的情况,但是您可以假定中的所有元素都由通配符字符串限制;也就是说,存在一些,使得对于所有,。SSSvvvw∈Sw∈Sw \in Sv≥wv≥wv \geq w 我尝试过的想法 通配符字符串形成联接符号。我们可以有一棵包含通配符字符串的n元树;叶子将是通配符字符串,分支将代表所有子代的联接。如果查询和联接是不可比拟的,那么我们不必浪费时间尝试与该分支的所有子代进行比较。此外,如果我们进行更新,而该更新恰好大于联接,则可以简单地删除整个分支。不幸的是,在最坏的情况下,这仍然是,并且在遍历树中添加元素时,我们并不总是找到建立的“最佳”联接。O(n)O(n)O(n) 一个可以形成的基数树根。我们知道由一些通配符字符串限制;假设它是0到0。然后,特里树的所有分支只需位于字符串的第1位和第3位。如果查询的当前位是1,则必须检查?。1个分支;如果为0,我们检查?0个分支;如果是?,我们只检查?。科。因为我们必须潜在地采取多个分支,所以这看起来不太好(出于相同的原因很难更新trie)。由于匹配是非常快速的操作,因此与幼稚的策略相比,在树中进行大量遍历会比较麻烦(遵循一堆指针比进行一些OR和AND的代价高得多)。SSSSSS 相关工作 在网络社区中,此问题表现为“数据包分类”,这是对已知算法和数据结构的良好概述。不幸的是,几乎总是假设通配符字符串仅匹配前缀,并且查询是此类字符串的元组。当然,我们总是可以转换通用通配符字符串来满足以下条件:1?00?1 ?? 是(1,?,0,0,?,1,?,?)。但是,这将是无效的。做出的另一个假设是,这些元组与“颜色”相关联,并且查询应返回颜色(不仅仅是匹配的颜色)。这使问题变得更加困难,因为我们必须对元组进行排序(否则,(0,?)和(?,1)中的哪一个与(0,1)相匹配是模棱两可的)。 在算法社区中,我发现了很多与查找与“无关”匹配的子字符串相关的结果。这是一个相当困难的问题,我无法真正利用任何技术。 结论 谢谢你的帮助!

1
太难实现的强大算法-如何确定它们是正确的?
我在这里指的是一个问题:功能强大的算法实在太复杂了。 如果算法功能强大,但实施起来过于复杂,那么如何确定算法正确呢?如果没有实现,您将无法在现实世界中测试该算法,并且这种复杂的算法可能包含错误,可能会使算法无效。 这是我不明白的。如果您具有证明算法正确性的技术,那么您已经有算法可以实现它,不是吗?否则我们如何确定证明技术是正确的? 对不起,我很抱歉! 来自Kaveh的更新(此处转载,因为参数更好!): 如果您可以在像Coq这样的正式系统中正式证明算法的正确性,那么您也可以提取算法(因为实际上已经实现了算法),但是关键事实是,对于大多数算法,我们没有给出对于算法的正确性,我们使用非正式的正确性证明。这些证明可能是错误的,有时会发生,即使是正式的正确性证明也不能使我们完全确定该算法是正确的。

3
多边形三角剖分的算法
我很难找到算法,也没有发表过关于自相交多边形(也有孔结构的多边形)的三角剖分的论文。 请问有人可以指导我查找已发表的论文/算法吗? PS:请有人给这个问题加上适当的标签,我没有足够的声誉积分来做。

1
VRP / VRPTW的任何SAT / SMT公式(TSP,Job-Shop-Scheduling)?
我想知道是否有任何方法可以将带有时间窗(VRPTW)的车辆路线问题(作为决策问题)制定为SAT / SMT实例?(替代:TSP) 例如: “是否有有效的解决方案在n = 10的车辆的时间窗口内拜访所有客户?” 该决策问题对于使所用车辆数量最小化的第一步可能有用。 我没有SMT方面的经验,但是我希望如果我们想将坐标/时间作为实数进行处理,则很有必要。 通常,所有TSP / VRP公式都是在混合整数编程域中完成的,但是我想知道sat / smt公式是否可以在上述决策问题上具有竞争力(就实际解决时间而言)。 所以你怎么看: 你知道参考吗? 您认为饱和/短时加工方法是否具有竞争力? 您还有什么要说的吗? 感谢您的输入。 萨沙 编辑:正如我提到的TSP是TCS中与VRPTW相关的更普遍的问题一样,我也应该提到Job Shop Scheduling问题,这是VRPTW中的另一个“部分问题”。也许这一领域的研究人员尝试了SAT / SMT。

3
如何随机生成有界的高度生成树?
对于我正在从事的项目,我应该生成具有有限高度的随机生成树。 基本上,我执行以下操作:1)生成生成树2)检查可行性,如果可行,请保留它。 1)从最小生成树(Prim或Kruskal的树)开始,我添加一个不存在的边,这创建了一个循环,我检测到此循环并删除了该循环的边之一,这给了我新的生成树,然后我继续通过添加新边来生成树... 2)假设有一个特殊的顶点。对于每个顶点,从到的路径的长度应小于,其中是给定的参数。vÇ È Ñ 吨Ë řvcente[Rv_{center}vvvvvvVÇ È Ñ 吨Ë řVcente[RV_{center}δδ\deltaδδ\delta 有什么更好的(聪明的)方法吗? PS我忘了指定另一个约束(我的错误):顶点的度也应定界。

2
TSP的Held-Karp算法的时间复杂度
当我看完Michael Held和Richard M. Karp的“解决问题的动态编程方法 ”时,我想到了以下问题:为什么他们用于TSP的算法的复杂性是(第199页),我的意思是它们在哪里取因子?如果我理解正确,表示每个城市子集的增加数量。那么,为什么每次添加操作再加上不知道的我操作?我想它以某种方式与取最小值有关,但是计算最小值似乎不需要这么多操作。(∑n−1k=2k(k−1)(n−1k))+(n−1)(∑k=2n−1k(k−1)(n−1k))+(n−1)(\sum_{k=2}^{n-1}k(k-1)\binom{n-1}{k})+(n-1)kkkk−1k−1k-1kkk 由Held和Karp以及独立的Bellman进行的动态编程算法运行如下:对于每对,这意味着经过的路径,所有元素并终止于计算(S,ci)(S,ci)(S,c_i)c1c1c_1SSScicic_i OPT[S,ci]=min{OPT[S∖{ci},cj]+d(cj,ci):cj∈S∖{ci}},OPT[S,ci]=min{OPT[S∖{ci},cj]+d(cj,ci):cj∈S∖{ci}},OPT[S,c_i]=min\{OPT[S\setminus\{c_i\},c_j]+d(c_j,c_i):c_j\in S\setminus\{c_i\}\}, 其中表示城市和之间的距离。然后在纸的公式中表示的大小。d(cj,ci)d(cj,ci)d(c_j,c_i)cjcjc_jcicic_ikkkSSS




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.