Questions tagged «algorithm-design»

4
MapReduce的新颖之处是什么?
几年前,MapReduce被誉为分布式编程的革命。也有批评家但总的来说是热心的炒作。它甚至获得了专利![1] 这个名字让人联想到的map和reduce函数式编程,但是当我阅读(维基百科) 映射步骤:主节点获取输入,将其分为较小的子问题,然后将其分配给工作节点。辅助节点可以依次再次执行此操作,从而导致多层树结构。工作节点处理较小的问题,并将答案传递回其主节点。 减少步骤:主节点然后收集所有子问题的答案,并以某种方式将它们组合起来以形成输出-最初试图解决的问题的答案。 或[2] MAP的内部原理: MAP将输入值分割为多个单词。MAP旨在将输入的每个给定键/值对与潜在的许多中间键/值对相关联。 REDUCE的内部要素: [REDUCE]执行命令式聚合(例如,减少):采用许多值,并将其减少为单个值。 我忍不住想:这是分而治之(在Mergesort的意义上),简单明了!那么,MapReduce中是否存在(概念上的)新颖性,还是只是在某些情况下有用的旧思想的新实现? 美国专利7,650,331:“有效进行大规模数据处理的系统和方法”(2010) Google的MapReduce编程模型 -R.Lämmel(2007)重新审视

4
什么是动态编程?
抱歉,这个问题听起来很愚蠢。 据我所知,使用动态编程构建算法的工作方式如下: 将问题表达为递归关系; 通过备忘或自下而上的方法来实现递归关系。 据我所知,我已经说了有关动态编程的一切。我的意思是:动态编程不会提供工具/规则/方法/定理来表达递归关系,也不会将其转化为代码。 那么,动态编程有什么特别之处呢?除了解决某些问题的模糊方法之外,它还能给您带来什么?

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个编码器。 输出: 仅显示一行,其中包含公司将选择的三个编码器获得的金牌总数。

2
计算元素不完全等于其索引±M的排列
最近在算法面试中有人问我这个问题,但未能解决。 给定两个值N和M,您必须计算长度为N的排列数目(使用1到N的数字),以使排列中任何数字与其排列中的位置之间的绝对差不等于M. 示例-如果N = 3且M = 1,则1 2 3和3 2 1是有效的排列,但1 3 2无效,因为数字3位于位置2且它们的差为=M。 我尝试了NxM动态编程,但没有形成不计入重复次数的重复发生。


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
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.