Questions tagged «algorithms»

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

2
玩家迟到时公平地切蛋糕
通常来说,公平的切蛋糕问题是假设所有参与者同时获得其份额。但是,在许多情况下,玩家会逐渐到达。例如,我们可以将蛋糕分配给玩家,但随后有一位新玩家到达并想要分享。nnnnnn 通常,公平蛋糕的划分需要付出很多努力(例如,要求玩家回答许多查询),尤其是当玩家人数众多时。 是否可以在播放器上使用蛋糕的现有划分,以便以最少的额外工作(即,与从头开始重新分配蛋糕相比要少的精力)将蛋糕划分为播放器?n + 1nnnn+1n+1n+1

1
哪种算法可以计算出两组的最大选择?
给定两个整数,它们的长度可能不相等,如何通过在两个向量之间的对应数字对之间选择最大值,并在较短的向量中插入额外的零以弥补大小差异,来确定可能的最大结果? 例如,考虑以下两个向量作为输入: [8 1 4 5] [7 3 6] 插入零和结果和的选择是: [0 7 3 6] => Maximums: [8 7 4 6] => Sum is: 25 [7 0 3 6] => Maximums: [8 1 4 6] => Sum is: 19 [7 3 0 6] => Maximums: [8 3 4 6] => Sum …

3
关于一系列主题的算法书籍
想要改善这篇文章吗?提供此问题的详细答案,包括引文和答案正确的解释。没有足够详细信息的答案可以被编辑或删除。 我的任务是为我们的小公司(约15人)建立有关算法的书籍库。预算超过5k,但肯定少于1万,所以我可以买很多书。这里的所有人都至少具有CS或紧密相关领域的学士学位,因此,尽管我会获得像Cormen这样的基本教科书,但我对高级主题的好书更感兴趣。(我将获得Knuth的4卷,顺便说一句。) 一些主题列表如下: 排序算法 图算法 字符串算法 随机算法 分布式算法 组合算法 等等 本质上,我在关于CS中与算法和数据结构相关的主要主题的书籍中寻找好的建议。尤其是超出一门好学校学士学位课程的算法和数据结构课程通常涵盖的内容。我知道这个问题很模糊,因为我正在寻找通用的有用材料。我们开发的软件主要是系统级的东西,处理大量数据。 理想的选择是找到可以涵盖大多数人可能尚未听说的相当新的酷数据结构和算法的任何内容。 编辑:这是我认为应该得到的一些初步书籍: Cormen等人的算法简介。 算法设计,克莱因伯格,塔多斯 Knuth的计算机编程艺术第1-4卷 Vazirani的近似算法 Williamson,Shmoys的近似算法设计 Moghani,Raghavan的随机算法 Sipser计算理论导论 Arora的计算复杂性,巴拉克 Garey和Johnson撰写的《计算机与难处理》 Schrijver的组合优化 我的同事希望与其他有关语言设计,编译器和形式方法的技术和算法的书籍包括: 皮尔斯的类型和编程语言 贝尔的模型检查原理,加藤 编译器:Aho,Lam,Sethi,Ullman编写的原理,技术和工具 编译器设计手册:优化和机器代码生成,第二版,Srikant,Shankar 垃圾收集手册:Jones,Hosking和Moss的自动内存管理技术

1
有指导的工会发现
考虑一个有向图在该图上可以动态添加边并进行一些特定的查询。GGG 示例:不相交的森林 考虑以下查询集: arrow(u, v) equiv(u, v) find(u) 第一个向图形添加箭头,第二个确定,最后一个找到等价类的规范表示,即使得表示。ü ↔ * v ↔ * - [R (Û )Ü ↔ * v [R (v )= - [R (Û )u→vu→vu→vu↔∗vu↔∗vu↔^*v↔∗↔∗↔^*r(u)r(u)r(u)u↔∗vu↔∗vu↔^*vr(v)=r(u)r(v)=r(u)r(v)=r(u) 有一种众所周知的算法,它使用不相交集森林数据结构以准恒定的摊销复杂度实现这些查询,即O(α(n))O(α(n))O(α(n))。请注意,在这种情况下,equiv是使用实现的find。 更复杂的变体 现在,我对一个方向很重要的更复杂的问题感兴趣: arrow(u, v) confl(u, v) find(u) 第一个添加箭头,秒确定是否存在从和均可到达的节点,即。最后一个应该返回对象,使得暗示其中应该易于计算。(例如,为了进行计算)。目的是找到一个好的数据结构,使这些操作快速进行。u→vu→vu→vwwwuuuvvvu→∗←∗vu→∗←∗vu→^*←^*vr(u)r(u)r(u)u→∗←∗vu→∗←∗vu→^*←^*vr(u)∙r(v)r(u)∙r(v)r(u) \bullet r(v)∙∙\bulletconfl 周期数 该图可以包含周期。 我不知道是否有一种方法可以有效地和增量地计算强连接的组件,以便仅针对主要问题考虑DAG。 当然,我也希望为DAG提供解决方案。这将对应于最小公共祖先的增量计算。 天真的方法 不相交的森林数据结构在这里没有帮助,因为它忽略了边的方向。请注意,在图形不汇合的情况下,不能是单个节点。r(u)r(u)r(u) 可以定义并在时将定义为。但是如何逐步计算呢?r(u)={v∣u→∗v}r(u)={v∣u→∗v}r(u)=\{v ∣ u→^*v\}∙∙\bulletS1∙S2S1∙S2S_1\bullet S_2S1∩S2≠∅S1∩S2≠∅S_1 ∩ …

4
寻找“指纹”集合
假设我们有10个人,每个人都有喜爱的书籍清单。对于给定的人X,我想找到X的一个特殊子集,该子集仅被X所喜欢,也就是说,没有其他人喜欢X的特殊子集中的所有书。我认为这个特殊子集是X的唯一“指纹”。 我希望能找到有关找到此类集合的方法的建议。(虽然这听起来像是一个家庭作业问题,但它与我要解决的生物学研究中的问题有关。)
11 algorithms  sets 



1
约束空间的选择算法?
有一种众所周知的最坏情况选择算法,可以找到整数数组中的第k个最大元素。它使用中位数中位数方法找到足够好的枢轴,将输入数组划分为适当的位置,然后递归继续搜索第k个最大元素。O (n )O(n)O(n) ķkkķkk 如果不允许我们触摸输入数组,那么要找到O (n )时间中的第个最大元素,需要多少额外空间呢?我们能否在O (1 )的额外空间中找到第k个最大元素,并且仍然保持运行时O (n )?例如,查找最大或最小元素需要O (n )时间和O (1 )空间。 ķkkO (n )O(n)O(n)ķkkO (1 )O(1)O(1)O (n )O(n)O(n)O (n )O(n)O(n)O (1 )O(1)O(1) 凭直觉,我无法想象我们可以做得比空间更好,但是有证据吗?O (n )O(n)O(n) 可有人点到基准或拿出一个说法,为什么 “个元素将需要Ø (ñ )空间中找到Ø (ñ )的时间?⌊ Ñ / 2 ⌋⌊n/2⌋\lfloor n/2 \rfloorO (n )O(n)O(n)O(n)O(n)O(n)

1
推断优化类型
在工作中,我的任务是推断一些有关动态语言的类型信息。我将语句序列重写为嵌套let表达式,如下所示: return x; Z => x var x; Z => let x = undefined in Z x = y; Z => let x = y in Z if x then T else F; Z => if x then { T; Z } else { F; Z } 由于我从一般类型信息开始,并试图推断出更具体的类型,因此自然的选择是精简类型。例如,条件运算符返回其真假分支类型的并集。在简单的情况下,它效果很好。 但是,在尝试推断以下类型时遇到了障碍: function …
11 programming-languages  logic  type-theory  type-inference  machine-learning  data-mining  clustering  order-theory  reference-request  information-theory  entropy  algorithms  algorithm-analysis  space-complexity  lower-bounds  formal-languages  computability  formal-grammars  context-free  parsing  complexity-theory  time-complexity  terminology  turing-machines  nondeterminism  programming-languages  semantics  operational-semantics  complexity-theory  time-complexity  complexity-theory  reference-request  turing-machines  machine-models  simulation  graphs  probability-theory  data-structures  terminology  distributed-systems  hash-tables  history  terminology  programming-languages  meta-programming  terminology  formal-grammars  compilers  algorithms  search-algorithms  formal-languages  regular-languages  complexity-theory  satisfiability  sat-solvers  factoring  algorithms  randomized-algorithms  streaming-algorithm  in-place  algorithms  numerical-analysis  regular-languages  automata  finite-automata  regular-expressions  algorithms  data-structures  efficiency  coding-theory  algorithms  graph-theory  reference-request  education  books  formal-languages  context-free  proof-techniques  algorithms  graph-theory  greedy-algorithms  matroids  complexity-theory  graph-theory  np-complete  intuition  complexity-theory  np-complete  traveling-salesman  algorithms  graphs  probabilistic-algorithms  weighted-graphs  data-structures  time-complexity  priority-queues  computability  turing-machines  automata  pushdown-automata  algorithms  graphs  binary-trees  algorithms  algorithm-analysis  spanning-trees  terminology  asymptotics  landau-notation  algorithms  graph-theory  network-flow  terminology  computability  undecidability  rice-theorem  algorithms  data-structures  computational-geometry 

1
修正的Borůvka算法的更严格分析
Borůvka算法是计算图的最小生成树的标准算法之一,。G=(V,E)G=(V,E)G = (V,E)|V|=n,|E|=m|V|=n,|E|=m|V| = n, |E| = m 伪代码为: MST T = empty tree Begin with each vertex as a component While number of components > 1 For each component c let e = minimum edge out of component c if e is not in T add e to T …

2
具有大量子问题的动态编程
具有大量子问题的动态编程。因此,我正在尝试通过Interview Street解决此问题: 网格漫游(得分50分) 您位于维网格中,位置为。网格的尺寸为)。一步,您可以在维度中的任何一个维度上向前或向后走一步。(因此,总是有可能的不同动作)。您可以采用多少种方法采取步骤,以使您在任何时候都不会离开网格?如果有任何,则离开网格,或。(X 1,X 2,... ,X Ñ)(d 1,d 2,... ,d Ñ Ñ 2 Ñ 中号X 我X 我 ≤ 0 X 我 > d 我NNN(x1,x2,…,xN)(x1,x2,…,xN)(x_1,x_2,\dots,x_N)(D1,D2,…,DN(D1,D2,…,DN(D_1,D_2,\dots,D_NNNN2N2N2NMMMxixix_ixi≤0xi≤0x_i \leq 0xi>Dixi>Dix_i > D_i 我的第一个尝试是这个记住的递归解决方案: def number_of_ways(steps, starting_point): global n, dimensions, mem #print steps, starting_point if (steps, tuple(starting_point)) in mem: return mem[(steps, tuple(starting_point))] val = …

2
最小化向量和的最大分量
我想了解一些有关此优化问题的信息:对于给定的非负整数,找到使表达式最小的函数ai,j,kai,j,ka_{i,j,k}fff maxk∑iai,f(i),kmaxk∑iai,f(i),k\max_k \sum_i a_{i,f(i),k} 使用不同公式的示例可能会更清楚:给您一组向量,例如 { {(3, 0, 0, 0, 0), (1, 0, 2, 0, 0)}, {(0, 1, 0, 0, 0), (0, 0, 0, 1, 0)}, {(0, 0, 0, 2, 0), (0, 1, 0, 1, 0)} } 从每个集合中选择一个向量,以便其总和的最大成分最小。例如,您可以选择 (1, 0, 2, 0, 0) + (0, 1, 0, 0, 0) + …


1
预处理数组以计算切片中的元素(简化为RMQ?)
给定自然数的数组,其中为常数,我想用以下形式的查询回答:“在索引和索引之间的数组中出现了多少次 “?一种1个,... ,一ña1,…,ana_1,\ldots,a_n≤ ķ≤k\leq kķkkO (1 )O(1)O(1)米mm一世iiĴjj 数组应在线性时间内进行预处理。特别是我想知道范围最小查询是否减少。 如果并且您要查询间隔内的个数,则等效于RMQ 。这样我们就可以使用它了。由于SE的限制,我无法回答自己的问题。k = 1k=1k=1

1
将对象分布在多维数据集中,以使它们之间具有最大距离
我正在尝试使用彩色相机来跟踪空间中的多个对象。每个对象将具有不同的颜色,为了能够在每个对象之间很好地区分,我正在尝试确保分配给对象的每种颜色与其他任何对象上的任何颜色都尽可能不同。 在RGB空间中,我们有三个平面,所有平面的值都在0到255之间。在这个立方体,我想分布种颜色,以便它们之间的距离与其他尽可能。另外一个限制是,在种颜色中应包含和(或尽可能接近),因为我想确保我的所有对象采用任何一种颜色,因为背景可能是这些颜色之一。Ñ (0 ,0 ,0 )(255 ,255 ,255 )Ñ (ñ - 2 )(0 ,0 ,0 )/(255 ,255 ,255 )(0,0,0)/(255,255,255)(0,0,0) / (255,255,255)ññn(0 ,0 ,0 )(0,0,0)(0, 0, 0)(255 ,255 ,255 )(255,255,255)(255, 255, 255)ññn(n − 2 )(ñ-2)(n-2) 也许,(包括黑色和时间)不会多14左右比。ññn 在此先感谢您获得这些颜色的任何指示。

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.