贪心算法经典例题

贪心算法经典例题
贪心算法经典例题

贪心算法经典例题

发布日期:2009-1-8

浏览次数:1180

本资料需要注册并登录后才能下载!

·用户名密码验证码找回密码·您还未注册?请注册

您的账户余额为元,余额已不足,请充值。

您的账户余额为元。此购买将从您的账户中扣除费用0.0元。

内容介绍>>

贪心算法经典例题

在求最优解问题的过程中,依据某种贪心标准,从问题的初始状态出发,直接去求每一步的最优解,通过若干次的贪心选择,最终得出整个问题的最优解,这种求解方法就是贪心算法。

从贪心算法的定义可以看出,贪心法并不是从整体上考虑问题,它所做出的选择只是在某种意义上的局部最优解,而由问题自身的特性决定了该题运用贪心算法可以得到最优解。

我们看看下面的例子

例1 均分纸牌(NOIP2002tg)

[问题描述] 有 N 堆纸牌,编号分别为 1,2,…, N。每堆上有若干张,但纸牌总数必为 N 的倍数。可以在任一堆上取若干张纸牌,然后移动。移牌规则为:在编号为 1 堆上取的纸牌,只能移到编号为 2 的堆上;在编号为 N 的堆上取的纸牌,只能移到编号为 N-1 的堆上;其他堆上取的纸牌,可以移到相邻左边或右边的堆上。现在要求找出一种移动方法,用最少的移动次数使每堆上纸牌数都一样多。例如 N=4,4 堆纸牌数分别为:

①9 ②8 ③17 ④ 6

移动3次可达到目的:

从③取 4 张牌放到④(9 8 13 10) -> 从③取 3 张牌放到②(9 11 10 10)-> 从②取 1 张牌放到①(10 10 10 10)。

[输入]:键盘输入文件名。

文件格式:N(N 堆纸牌,1 <= N <= 100)

A1 A2 … An (N 堆纸牌,每堆纸牌初始数,l<= Ai <=10000)

[输出]:输出至屏幕。格式为:所有堆均达到相等时的最少移动次数。

[输入输出样例]

a.in:

4

9 8 17 6

屏慕显示:3

算法分析:设a[i]为第i堆纸牌的张数(0<=i<=n),v为均分后每堆纸牌的张数,s为最小移到次数。

我们用贪心法,按照从左到右的顺序移动纸牌。如第i堆(0

(1)若a[i]>v,则将a[i]-v张纸牌从第I堆移动到第I+1堆;

(2)若a[i]

为了设计的方便,我们把这两种情况统一看作是将a[I]-v张牌从第I堆移动到第I+1堆;移动后有:a[I]:=v;a[I+1]:=a[I+1]+a[I]-v;

在从第i+1堆中取出纸牌补充第i堆的过程中,可能会出现第i+1堆的纸牌数小于零

(a[i+1]+a[i]-v<0 )的情况。

如n=3,三堆纸牌数为(1,2,27)这时v=10,为了使第一堆数为10,要从第二堆移9张纸牌到第一堆,而第二堆只有2张纸牌可移,这是不是意味着刚才使用的贪心法是错误的呢?

我们继续按规则分析移牌过程,从第二堆移出9张到第一堆后,第一堆有10张纸牌,第二堆剩下-7张纸牌,再从第三堆移动17张到第二堆,刚好三堆纸牌数都是10,最后结果是对的,从第二堆移出的牌都可以从第三堆得到。我们在移动过程中,只是改变了移动的顺序,而移动的次数不变,因此此题使用贪心法是可行的。

源程序:

var

i,n,s:integer;v:longint;

a:array[1..100]of longint;

f:text;fil:string;

begin

readln(fil);

assign(f,fil);reset(f);

readln(f,n);v:=0;

for i:=1 to n do begin

read(f,a[i]); inc(v,a[i]);

end;

v:=v div n; {每堆牌的平均数}

for i:=1 to n-1 do

if a[i]<>v then {贪心选择}

begin

inc(s);{移牌步数计数}

a[i+1]:=a[i+1]+a[i]-v;{使第i堆牌数为v}

end;{then}

writeln(s);

end.

利用贪心算法解题,需要解决两个问题:

一是问题是否适合用贪心法求解。我们看一个找币的例子,如果一个货币系统有3种币值,面值分别为一角、五分和一分,求最小找币数时,可以用贪心法求解;如果将这三种币值改为一角一分、五分和一分,就不能使用贪心法求解。用贪心法解题很方便,但它的适用范围很小,判断一个问题是否适合用贪心法求解,目前还没有一个通用的方法,在信息学竞赛中,需要凭个人的经验来判断何时该使用贪心算法。

二是确定了可以用贪心算法之后,如何选择一个贪心标准,才能保证得到问题的最优解。在选择贪心标准时,我们要对所选的贪心标准进行验证才能使用,不要被表面上看似正确的贪心标准所迷惑,如下面的列子。

例2 (NOIP1998tg)设有n个正整数,将他们连接成一排,组成一个最大的多位整数。例如:n=3时,3个整数13,312,343,连成的最大整数为:34331213

又如:n=4时,4个整数7,13,4,246连接成的最大整数为7424613

输入:N

N个数

输出:连接成的多位数

算法分析:此题很容易想到使用贪心法,在考试时有很多同学把整数按从大到小的顺序连接起来,测试题目的例子也都符合,但最后测试的结果却不全对。按这种贪心标准,我们很容易找到反例:12,121 应该组成12121而非12112,那么是不是相互包含的时候就从小到大呢?也不一定,如:12,123 就是12312而非12112,这样情况就有很多种了。是不是此题不能用贪心法呢?

其实此题是可以用贪心法来求解,只是刚才的贪心标准不对,正确的贪心标准是:先把整数化成字符串,然后再比较a+b和b+a,如果a+b>b+a,就把a排在b的前面,反之则把a排在b的后面。

源程序:

var

s:array[1..20] of string;

t:string;i,j,k,n:longint;

begin

readln(n);

for i:=1 to n do begin

read(k);

str(k,s[i]);

end;

for i:=1 to n-1 do

for j:=i+1 to n do

if s[i]+s[j]

begin{交换}

t:=s[i];

s[i]:=s[j];

s[j]:=t;

end;

for i:=1 to n do write(s[i]);

end.

贪心算法所作的选择可以依赖于以往所作过的选择,但决不依赖于将来的选择,也不依赖于子问题的解,因此贪心算法与其它算法相比具有一定的速度优势。如果一个问题可以同时用几种方法解决,贪心算法应该是最好的选择之一。

统计学经典习题集参考答案

1.要了解某班50名学生的性别构成情况,则总体是()。 A.每一个学生 B.每一个学生的性别 C.全体学生 D.全体学生的性别 2.要了解全国的人口情况,总体单位是()。 A.每一个人 B.每一户 C.每个省的人口 D.全国总人口 3.某班四名学生金融考试成绩分别为70分、80分、86分和90分,这四个数字是()。 A.变量值 B.标志 C.指标值 D.指标 4.工业企业的职工人数、职工工资是()。 A.离散变量 B.前者是离散变量,后者是连续变量 C.连续变量 D.前者是连续变量,后者是离散变量 5.统计学与统计工作的关系是()。 A.理论与应用的关系 B.工作与结果的关系 C.理论与实践的关系 D.工作与经验的关系 6.某地区为了掌握该地区水泥生产的质量情况,拟对占该地区水泥总产量的90%的五个大型水泥厂的生产情况进行调查,这种调查方式是()。 A.典型调查 B.重点调查 C.抽样调查 D.普查 7.某地进行国有商业企业经营情况调查,则调查对象是()。 A.该地所有商业企业 B.该地所有国有商业企业 C.该地每一家商业企业 D.该地每一家国有商业企业 8.对企业先按经济类型分组,再按企业规模分组,属于()。 A.简单分组 B.平行分组 C.复合分组 D.再分组 9.某变量数列,其末组为开口组,下限为600,又知其相邻组的组中值为550,则末组的组中值是()。 A.100 B.500 C.650 D.700 10.统计表的宾词是用来说明总体特征的()。 A.统计指标 B.总体单位 C.标志 D.统计对象 11.下面属于时期指标的是()。 A.商品销售额 B.商场数量 C.商品价格 D.营业员人数 12.用水平法检查长期计划完成程度,应规定()。 A.计划期初应达到的水平 B.计划期末应达到的水平 C.计划期中应达到的水平 D.整个计划期应达到的水平 13.第五次人口普查结果,我国每10万人中具有大学程度的为3611人。该数字资料为()。 A.绝对数 B.结构相对数 C.比较相对数 D.强度相对数 14.某商场计划11月份销售利润比10月份提高2%,实际提高了3%,则销售利润计划完成程度为()。 A.100.98% B.95.10% C.99.00% D.105.10% 15.平均数反映了()。 A.总体分布的集中趋势 B.总体分布的离中趋势 C.总体中各单位分布的集中趋势 D.总体变动的趋势 16.中位数和众数是一种()。 A.常见值 B.代表值 C.实际值 D.典型值 17.计算发展速度的分母是()。 A.计划期水平 B.固定期水平 C.报告期水平 D.基期水平 18.由一个10项的时间序列可以计算的环比发展速度有()。 A.8个 B.9个 C.10个 D.11个

贪心算法经典例题

贪心算法经典例题 发布日期:2009-1-8 浏览次数:1180 本资料需要注册并登录后才能下载! ·用户名密码验证码找回密码·您还未注册?请注册 您的账户余额为元,余额已不足,请充值。 您的账户余额为元。此购买将从您的账户中扣除费用0.0元。 内容介绍>> 贪心算法经典例题 在求最优解问题的过程中,依据某种贪心标准,从问题的初始状态出发,直接去求每一步的最优解,通过若干次的贪心选择,最终得出整个问题的最优解,这种求解方法就是贪心算法。 从贪心算法的定义可以看出,贪心法并不是从整体上考虑问题,它所做出的选择只是在某种意义上的局部最优解,而由问题自身的特性决定了该题运用贪心算法可以得到最优解。 我们看看下面的例子 例1 均分纸牌(NOIP2002tg) [问题描述] 有 N 堆纸牌,编号分别为 1,2,…, N。每堆上有若干张,但纸牌总数必为 N 的倍数。可以在任一堆上取若干张纸牌,然后移动。移牌规则为:在编号为 1 堆上取的纸牌,只能移到编号为 2 的堆上;在编号为 N 的堆上取的纸牌,只能移到编号为 N-1 的堆上;其他堆上取的纸牌,可以移到相邻左边或右边的堆上。现在要求找出一种移动方法,用最少的移动次数使每堆上纸牌数都一样多。例如 N=4,4 堆纸牌数分别为: ①9 ②8 ③17 ④ 6 移动3次可达到目的: 从③取 4 张牌放到④(9 8 13 10) -> 从③取 3 张牌放到②(9 11 10 10)-> 从②取 1 张牌放到①(10 10 10 10)。 [输入]:键盘输入文件名。 文件格式:N(N 堆纸牌,1 <= N <= 100) A1 A2 … An (N 堆纸牌,每堆纸牌初始数,l<= Ai <=10000) [输出]:输出至屏幕。格式为:所有堆均达到相等时的最少移动次数。 [输入输出样例] a.in: 4 9 8 17 6 屏慕显示:3 算法分析:设a[i]为第i堆纸牌的张数(0<=i<=n),v为均分后每堆纸牌的张数,s为最小移到次数。 我们用贪心法,按照从左到右的顺序移动纸牌。如第i堆(0

统计与概率经典例题(含答案和解析).docx

统计与概率经典例题(含答案及解析) 1.(本题8 分)为了解学区九年级学生对数学知识的掌握情况,在一次数学检测中, 从学区2000 名九年级考生中随机抽取部分学生的数学成绩进行调查,并将调查结果绘 制成如下图表: ⑴表中 a 和 b 所表示的数分别为:a= .,b=.; ⑵请在图中补全频数分布直方图; 2000 名九年级考生数学⑶如果把成绩在70 分以上(含70 分)定为合格,那么该学区 成绩为合格的学生约有多少名? 2.为鼓励创业,市政府制定了小型企业的优惠政策,许多小型企业应运而生,某镇统 计了该镇 1﹣ 5 月新注册小型企业的数量,并将结果绘制成如下两种不完整的统计图: ( 1)某镇今年1﹣5 月新注册小型企业一共有家.请将折线统计图补充完整; ( 2)该镇今年 3 月新注册的小型企业中,只有 2 家是餐饮企业,现从 3 月新注册的小型企业中随机抽取 2 家企业了解其经营状况,请用列表或画树状图的方法求出所抽取的 2家企业恰好都是餐饮企业的概率. 3.( 12 分)一个不透明的口袋装有若干个红、黄、蓝、绿四种颜色的小球,小球除颜 色外完全相同,为估计该口袋中四种颜色的小球数量,每次从口袋中随机摸出一球记下颜 色并放回,重复多次试验,汇总实验结果绘制如图不完整的条形统计图和扇形统计图.

根据以上信息解答下列问题: (1)求实验总次数,并补全条形统计图; (2)扇形统计图中,摸到黄色小球次数所在扇形的圆心角度数为多少度? (3)已知该口袋中有 10 个红球,请你根据实验结果估计口袋中绿球的数量. 4.(本题 10 分)某校为了解2014 年八年级学生课外书籍借阅情况,从中随机抽取了 40名学生课外书籍借阅情况,将统计结果列出如下的表格,并绘制成如图所示的扇形 统计图,其中科普类册数占这40 名学生借阅总册数的40%. 类别科普类教辅类文艺类其他册数(本)12880m48 ( 1)求表格中字母m的值及扇形统计图中“教辅类”所对应的圆心角 a 的度数; (2)该校 2014 年八年级有 500 名学生,请你估计该年级学生共借阅教辅类书籍约多少本? 5.( 10 分)将如图所示的版面数字分别是1, 2,3, 4 的四张扑克牌背面朝上,洗匀后放在桌面上(“ A”看做是“ 1”)。 ( 1)从中随机抽出一张牌,牌面数字是偶数的概率是;(3分) ( 2)从中随机抽出两张牌,两张牌面数字的和是 5 的概率是;(3分)(3)先从中随机抽出一张牌,将牌面数字作为十位上的数字,然后将该牌放回并重新洗 匀,再随机抽取一张,将牌面数字作为个位上的数字,请用画树形图的方法求组成的

贪心算法详解分析

贪心算法详解 贪心算法思想: 顾名思义,贪心算法总是作出在当前看来最好的选择。也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择。当然,希望贪心算法得到的最终结果也是整体最优的。虽然贪心算法不能对所有问题都得到整体最优解,但对许多问题它能产生整体最优解。如单源最短路经问题,最小生成树问题等。在一些情况下,即使贪心算法不能得到整体最优解,其最终结果却是最优解的很好近似。 贪心算法的基本要素: 1.贪心选择性质。所谓贪心选择性质是指所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达到。这是贪心算法可行的第一个基本要素,也是贪心算法与动态规划算法的主要区别。 动态规划算法通常以自底向上的方式解各子问题,而贪心算法则通常以自顶向下的方式进行,以迭代的方式作出相继的贪心选择,每作一次贪心选择就将所求问题简化为规模更小的子问题。 对于一个具体问题,要确定它是否具有贪心选择性质,必须证明每一步所作的贪心选择最终导致问题的整体最优解。 2. 当一个问题的最优解包含其子问题的最优解时,称此问题具有最优子结构性质。问题的 最优子结构性质是该问题可用动态规划算法或贪心算法求解的关键特征。 贪心算法的基本思路: 从问题的某一个初始解出发逐步逼近给定的目标,以尽可能快的地求得更好的解。当达到算法中的某一步不能再继续前进时,算法停止。 该算法存在问题: 1. 不能保证求得的最后解是最佳的; 2. 不能用来求最大或最小解问题; 3. 只能求满足某些约束条件的可行解的范围。 实现该算法的过程: 从问题的某一初始解出发; while 能朝给定总目标前进一步do 求出可行解的一个解元素; 由所有解元素组合成问题的一个可行解; 用背包问题来介绍贪心算法: 背包问题:有一个背包,背包容量是M=150。有7个物品,物品可以分割成任意大小。要 求尽可能让装入背包中的物品总价值最大,但不能超过总容量。

算法习题

算法设计与分析试卷 一、填空题(20分,每空2分) 1、算法的性质包括输入、输出、确定性、有限性。 2、动态规划算法的基本思想就将待求问题分解成若干个子问题、先求解子问题,然后 从这些子问题的解得到原问题的解。 3、设计动态规划算法的4个步骤: (1)找出最优解的性质,并刻画其结构特征。 (2)递归地定义最优值。 (3)以自底向上的方式计算出最优值。 (4)根据计算最优值得到的信息,构造最优解。 4、流水作业调度问题的johnson算法: (1)令N1={i|ai=bj}; (2)将N1中作业依ai的ai的非减序排序;将N2中作业依bi的非增序排序。 5、对于流水作业高度问题,必存在一个最优调度π,使得作业π(i)和π(i+1)满足Johnson不等式min{bπ(i),aπ(i+1)}≥min{bπ(i+1),aπ(i)}。 6、最优二叉搜索树即是最小平均查找长度的二叉搜索树。 二、综合题(50分) 1、当(a1,a2,a3,a4,a5,a6)=(-2,11,-4,13,-5,-2)时,最大子段和为∑ak(2<=k<=4)=20(5分) 2、由流水作业调度问题的最优子结构性质可知,T(N,0)=min{ai+T(N-{i},bi)}(1=sum){ sum=thissum; besti=i; bestj=j;} } return sum; } 4、设计最优二叉搜索树问题的动态规划算法OptimalBinarysearchTree? (15分) Void OptimalBinarysearchTree(int a,int n,int * * m, int * * w) { for(int i=0;i<=n;i++) {w[i+1][i]=a[i]; m[i+1][i]= 0;} for(int r=0;r

贪心算法概论

贪心算法概论 贪心算法一般来说是解决“最优问题”,具有编程简单、运行效率高、空间 复杂度低等特点。是信息学竞赛中的一个有为武器,受到广大同学们的青睐。本 讲就贪心算法的特点作些概念上的总结。 一、贪心算法与简单枚举和动态规划的运行方式比较 贪心算法一般是求“最优解”这类问题的。最优解问题可描述为:有n个输入,它的解是由这n 个输入的某个子集组成,并且这个子集必须满足事先给定的条 件。这个条件称为约束条件。而把满足约束条件的子集称为该问题的可行解。这 些可行解可能有多个。为了衡量可行解的优劣,事先给了一个关于可行解的函数,称为目标函数。目标函数最大(或最小)的可行解,称为最优解。 a)求“最优解”最原始的方法为搜索枚举方案法(一般为回溯法)。 除了极简单的问题,一般用深度优先搜索或宽度优先搜索。通常优化方法为利用约束条件进行可行性判断剪枝;或利用目标函数下界(或上界),根据当前最 优解进行分枝定界。 b)其次现今竞赛中用的比较普遍的动态规划(需要满足阶段无后效性原则)。 动态规划主要是利用最最优子问题的确定性,从后向前(即从小规模向大规模)得到当前最优策略,从而避免了重复的搜索。 举例说明:求多段图的最短路径。

在图(1)中,我们省略了各线段的长度。 如果用回溯法,搜索树大致如下: 显然,上面的搜索有大量重复性工作。比如节点8、9、10到11的最短路分别被调用了9次,从节点5、6、7到节点11也分别搜索了3次。 如果先算出节点8、9、10到11的最短路,由于它与前面的点无关,因此最优值确定下来,再用它们求定节点5、6、7 到节点11 的最短路径。同理,再用节 点5、6、7 的最优值,来求节点2、3、4 优值。最后从节点2、3、4 推出1 到 11的最优值。显然复杂度大为降低。 当然,如果本题把简单搜索改为搜索+记忆化的方法,则就是得能动态规划的原理,本质上就是动态规划,只是实现的方法不同与传统的表格操作法。搜索+记忆化算法有其特有的特点,以后再讨论。 c)贪心算法则不同,它不是建立在枚举方案的基础上的。它从前向后,根据当前情况,“贪心地”决定出下一步,从而一步一步直接走下去,最终得到解。 假如上面的例子中,我们定下这样的贪心策略:节点号k%3= =1。则有图3:

统计学经典题库与答案

2. 数据筛选的主要目的是( A 、发现数据的错误 C 、找出所需要的某类数据 3. 为了调查某校学生的购书费用支出, B 、对数据进行排序 D 纠正数据中的错误 将全校学生的名单按拼音顺序排列后,每 ) A H 0:二=0.15;二-0.15 B H o :二二 0.15;二=0.15 C H 0: 一 - 0.15;二:: 0.15 D H 0:二乞 0.15;二 0.15 9. 若甲单位的平均数比乙单位的平均数小, 大,则( )。 A 、甲单位的平均数代表性比较大 C 甲单位的平均数代表性比较小 10. 某组的向上累计次数表明( A 、 大于该组上限的次数是多少 B 、 小于该组下限的次数是多少 但甲单位的标准差比乙单位的标准差 B 、两单位的平均数一样大 D 、无法判断 1.当正态总体方差未知时,在大样本条件下,估计总体均值使用的分布是 ( A )。 z 分布 B 、t 分布 F 分布 D 、 2 分布 A 、比平均数高出2个标准差 C 等于2倍的平均数 D 5.峰态通常是与标准正态分布相比较而言的。 则峰态系数的值( )。 B 比平均数低2个标准差 等于2倍的标准差 如果一组数据服从标准正态分布, A =3 C 、v 3 6. 若相关系数r=0,则表明两个变量之间( A 、相关程度很低 C 不存在任何关系 7. 如果所有变量值的频数都减少为原来的 1/3, 均数( )。 A 、不变 B C 减少为原来的1/3 D > 3, =0 )。 不存在线性相关关系 存在非线性相关关系 而变量值仍然不变,那么算术平 扩大到原来的3倍 不能预测其变化 8. 某贫困地区所估计营养不良的人高达 15%然而有人认为这个比例实际上还要 高,要检验该说法是否正确,则假设形式为( )。 隔50名学生抽取一名进行调查,这种调查方式是( A 、简单随机抽样 B 、分层抽样 C 、系统抽样 D 、整群抽样 4. 如果一组数据标准分数是(-2 ),表明该数据( )。

常见的贪心算法问题

4.5 哈夫曼编码 哈夫曼编码是一种被广泛应用而且非常有效的数据压缩技术,哈夫曼根据字符在文件中出现的不同频率来建立一个用0,1串表示各字符的最优编码树(称为哈夫曼树),它的设计也是贪心选择的一个典型例子。 例假设有一个包含10000个只含a,b,c,d,e,f字符的数据文件,各字符在文件中出现的频率见下4.5.1表 表 4.5.1 若采用等长编码,则需3位二进制数位来表示6个字符,这种方法要用30000位来表示整个文件。若采用变长编码,则整个文件只需 (45×1+13×3+12×3+16×3+9×4+5×4) ×100=22400 位 也就是说压缩了 (30000-22400)÷30000×100%≥25% 。实际上,这就是这个文件的最优编码方案了 4.5.1 前缀码 我们对每一字符规定一个0,1串作为其代码,并要求任一字符代码都不是其他字符代码的前缀,这样的编码简称为前缀码。在4.5.1表中的两种编码都是前缀码。由于任一字符代码都不是其他字符代码的前缀,所以译码方法非常简单。为了在译码过程中方便地取出编码的前缀,我们可以用二叉树作为前缀码的数据结构。在表示前缀码的二叉树中,树叶代表给定的字符,并将每个字符的前缀码看作是从树根到代表该字符的树叶的一条道路。代码中每一位的0或1分别作为指示某结点到左儿子或右儿子的路标。如图4-1中的两棵二叉树是表4.5.1中两种编码方案所对应的数据结构。

图 4-1 前缀码的二叉树表示 容易看出,表示最优编码方案所对应的前缀码的二叉树总是一棵完全二叉树,即树中任一结点都有2个儿子。而定长编码方案不是最优的,其编码的二叉树不是一棵完全二叉树。在一般情况下,若C是编码字符集,包含有n个字符,则表示其最优前缀码的二叉树中恰好有n个叶子。每个叶子对应于字符集中一个字符,且该二叉树恰好有n - 1个内部结点。 4.6 最小生成树 设G= (V ,E )是一个无向连通图,即一个网络。给 E 的每一条边(v, w )赋于一个权。如果G 的一个子图G ˊ是一棵包含G 的所有顶点的树,则称G ˊ为G 的生成树。生成树上各边权的总和称为该生成树的代价。在G 的所有生成树中,代价最小的生成树称为G 的最小生成树。 网络的最小生成树在实际中有着广泛的应用。在不同的背景下,边的权可以代表不同的含义,比如,两点间的距离,两点间的公路造价等等。例如,在设计通信网络时,用图的顶点表示城市,用边(v, w )的权表示建立城市v 和城市w 的之间的通信线路所需的费用,则最小生成树就给出了建立通信网络的最经济的方案。 用贪心算法设计策略可以设计出构造最小生成树的有效算法。本节中要介绍的构造最小生成树的Prim 算法和Kruskal 算法都可以看作是应用贪心算法设计策略的典型例子。 4.6.1 Prim 算法 设G= (V ,E )是一个连通带权图,V={1 ,2 ,···,n} ,二维数组W 的元素W[i][j] 表示边(i ,j )的权。构造G 的一棵最小生成树的Prim 算法的基本思想是:首先置S={1} ,

2009.1算法设计与分析课程期末试卷-A卷(自测 )

华南农业大学期末考试试卷(A卷)2008学年第一学期考试科目:算法分析与设计 考试类型:(闭卷)考试时间:120 分钟 学号姓名年级专业 一、选择题(20分,每题2分) 1.下述表达不正确的是。 A.n2/2 + 2n的渐进表达式上界函数是O(2n) B.n2/2 + 2n的渐进表达式下界函数是Ω(2n) C.logn3的渐进表达式上界函数是O(logn) D.logn3的渐进表达式下界函数是Ω(n3) 2.当输入规模为n时,算法增长率最大的是。 A.5n B.20log 2n C.2n2 D.3nlog 3 n 3.T(n)表示当输入规模为n时的算法效率,以下算法效率最优的是。A.T(n)= T(n – 1)+1,T(1)=1 B.T(n)= 2n2 C.T(n)= T(n/2)+1,T(1)=1 D.T(n)= 3nlog 2 n 4.在棋盘覆盖问题中,对于2k×2k的特殊棋盘(有一个特殊方块),所需的L型骨 牌的个数是。 A.(4k– 1)/3 B.2k /3 C.4k D.2k 5.在寻找n个元素中第k小元素问题中,若使用快速排序算法思想,运用分治算

法对n个元素进行划分,应如何选择划分基准?下面答案解释最合理。 A.随机选择一个元素作为划分基准 B.取子序列的第一个元素作为划分基准 C.用中位数的中位数方法寻找划分基准 D.以上皆可行。但不同方法,算法复杂度上界可能不同 6.有9个村庄,其坐标位置如下表所示: 现在要盖一所邮局为这9个村庄服务,请问邮局应该盖在才能使到邮局到这9个村庄的总距离和最短。 A.(4.5,0)B.(4.5,4.5)C.(5,5)D.(5,0) 7.n个人拎着水桶在一个水龙头前面排队打水,水桶有大有小,水桶必须打满水, 水流恒定。如下说法不正确? A.让水桶大的人先打水,可以使得每个人排队时间之和最小 B.让水桶小的人先打水,可以使得每个人排队时间之和最小 C.让水桶小的人先打水,在某个确定的时间t内,可以让尽可能多的人打上水D.若要在尽可能短的时间内,n个人都打完水,按照什么顺序其实都一样 8.分治法的设计思想是将一个难以直接解决的大问题分割成规模较小的子问题, 分别解决子问题,最后将子问题的解组合起来形成原问题的解。这要求原问题和子问题。

算法分析与设计期末模拟试题

安徽大学2010-2011学年第1学期《算法分析与设计》 期末试题 押宝 (内部交流,非考试试题,学生自发交流创作,版权归作者testfudan@https://www.360docs.net/doc/019506853.html, 所有) 一、选择题(单选)(10*2’=20’) 1. 选择正确的组合对于 2112n +=( ) ①2()o n ② 2()O n ③2()n θ ④2()n Ω ⑤ 2()n ω A. ①③④ B. ②③④ C.③④⑤ D. ①⑤ 2. ①21()()n i i O n O n ==∑ ②2()()n O n O n = ③(log )()O n O n ? ④ 2.99993 ()n O n = ⑤2/lo g ()n n n ω=其中正确的有( ) A .5组 B.4组 C.3组 D.没有正确的 3. 2/102n n +=( ) A. 2()O n B.(2)n O C.2(2)n n O + D.2 ()o n 4. 211/n += ( )(我认为是比较不错的一道题,考试可能会出现相同的方法,用极限定义来做,最后一节课老师也讲过类似的方法) A. ()O n B.()o n C.()n Ω D.(1)O 5. 310lo g n = ( ) A.(log )O n n B. (log )O n C. 3()O n D. lo g ()n O n 6. 认真完成课后习题P5面的算法分析题1-6,里面也有我不会做的,可是有谁愿意讨论? 如果能够把以上的题目都能做对,应该就是掌握了。给自己一个奖励吧!答案(如有问题,联系我吧):1-5:BBBDB 6.做出来对对答案吧。 二、填空题 1.()2(/2)T n T n n =+????的一个渐进上界为 (答案:(log )O n n ,用迭代法) 2.()(/3)(2/3)()T n T n T n O n =++的一个渐进上界为 (答案:(log )O n n ,用递归树求解,不会的赶快看) 3.()9(/3)T n T n n =+的一个渐进紧致界为 (答案:2 ()n θ,采用迭代法或者采用主方法,不会的赶快看)

高二81统计随机抽样直方图茎叶图知识点经典例题及练习题带答案

环球雅思教育学科教师讲义 讲义编号: ______________ 副校长/组长签字:签字日期: 【考纲说明】 1、理解随机抽样的必要性和重要性,了解分布、样本数据标准差的意义和作用,理解用样本估计总体的思想。 2、会画频率分布直方图、频率折线图、茎叶图,会用随机抽样的基本方法和样本估计总体的思想解决一些简单的实际问题 【趣味链接】 U2合唱团在17分钟内得赶到演唱会场,途中必需跨过一座桥,四个人从桥的同一端出发,你得帮助他们到达另一端,天色很暗,而他们只有一只手电筒。一次同时最多可以有两人一起过桥,而过桥的时候必须持有手电筒,所以就得有人把手电筒带来带去,来回桥两端。手电筒是不能用丢的方式来传递的。四个人的步行速度各不同,若两人同行则以较慢者的速度为准。BONO需花1分钟过桥,EDGE需花2分钟过桥,ADAM需花5分钟过桥,LARRY需花10分钟过桥,他们要如何在17分钟内过桥呢? 【知识梳理】 一、抽样方法与总体分布的估计 1、随机抽样 (1)总体:在统计学中, 把研究对象的全体叫做总体,把每个研究对象叫做个体,把总体中个体的总数叫做总体容量.总体与个体之间的关系类似于集合与元素的关系. (2)样本:从总体中随机抽取一部分个体叫做总体的一个样本,样本中个体的数目称为样本的容量,样本和总体之间

的关系类似于子集和集合之间的关系. (3)简单随机抽样:一般地,从元素个数为N 的总体中不放回地抽取容量为的样本,如果每一次抽取时总体中的各个个体被抽到的可能性是相同的,那么这种抽样方法叫简单随机抽样,这样抽取的样本,叫做简单随机样本. 常用的方法有抽签法和随机数表法. (4)系统抽样:当总体中的个体比较多时,将总体分成均衡的若干部分,然后按照预先制定的规则,从每一部分中抽取一个个体,得到所需要的样本,这样的抽样方法称为系统抽样,也称作等距抽样. (5)分层抽样:当总体由有明显差别的几部分组成时,为了使抽取的样本更好地反映总体的情况,可将总体中各个个体按某种特征分成若干个互不重叠的几部分,每一部分叫做层,在各层中按层在总体中所占比例进行简单随机抽样或系统抽样,这种抽样方法叫做分层抽样. 2、频率分布直方图与茎叶图 (1)频率分布:样本中所有数据(或数据组)的频数和样本容量的比就是该数据的频率,所有数据(或数据组)的频率的分布变化规律叫做频率分布,可以用频率分布表、频率分布折线图、茎叶图、频率分布直方图来表示. (2)频率折线图:如果将频率分布直方图中各相邻的矩形的上底边的中点顺次连接起,就得到一条折线,称这条折线为本组数据的频率折线图。 (3)总体密度曲线:随着样本容量的增加,作图时所分的组数增加,组距减小,相应的频率折线图会越来越接近于一条光华曲线,即总体密度曲线。 (4)制作茎叶图的方法是:将所有两位数的十位数字作为“茎”,个位数字作为“叶”,茎相同者共用一个茎,茎按从小到大的顺序从上向下列出,共茎的叶一般按从大到小(或从小到大)的顺序同行列出. 茎叶图对于分布在0~99的容量较小的数据比较合适,此时,茎叶图比直方图更详尽地表示原始数据的信息. 在茎叶图中,茎也可以放两位,后面位数多可以四舍五入后再制图. 3、样本的数字特征 (1)众数:出现次数最多的数叫做众数. (2)中位数:如果将一组数据按大小顺序依次排列,把处在最中间位置的一个数据或中间两个数据的平均是叫做这组数据的中位数. (3)平均数与加权平均数:如果有n 个数,,,,n x x x x ??321那么12n x x x x n ++???+= 叫做这n 个数的平均数. 如果在n 个数中,1x 出现次1f 次, 2x 出现次2f 次,……,k x 出现次2f 次,(这里),n f f f k =+??++21那么 11221 ()k k x x f x f x f n =++???+叫做这n 个数的加权平均数,其中k f f f ??,,21叫做权. (4)标准差与方差:设一组数据123n x x x x ?,,,,的平均数为x ,则

贪 心 算 法

【贪心算法】思想 & 基本要素 & 贪心算法与局部最优 & 贪心算法与动态规划的区别 & 运用贪心算法求解问题 首先我们先代入问题来认识一下贪心算法涉及的问题 找钱问题 给顾客找钱,希望找零的钞票尽可能少,零钱种类和数量限定 找钱问题满足最优子结构 最快找零(贪心):为得到最小的找零次数,每次最大程度低减少零额活动安排问题 设个活动都需要使用某个教室,已知它们的起始时间和结束时间,求合理的安排使得举行的活动数量最多 贪心:使得每次安排后,教室的空闲时间最多 解决过程如下: 贪心算法求得的相容活动集是最大的 第一步:证明最优解中包含结束时间最早的活动 设相容集 A 是一个最优解,其结束最早的活动为 a,则 ( A - { a }) U { 1 } 也是一个最优解 第二步:证明去掉结束时间最早的活动后,得到的子问题仍是最优的:反证法 理解贪心算法 贪心算法总是做出当前最好的选择 贪心选择的依据是当前的状态,而不是问题的目标

贪心选择是不计后果的 贪心算法通常以自顶向下的方法简化子问题 贪心算法求解的问题具备以下性质 贪心选择性质:问题的最优解可以通过贪心选择实现 最优子结构性质:问题的最优解包含子问题的最优解 贪心选择性质的证明 证明问题的最优解可以由贪心选择开始 即第一步可贪心 证明贪心选择后得到的子问题满足最优子结构 即步步可贪心 背包问题 问题描述:给定 n 个物品和一个背包。物品 i 的重量为 Wi ,价值为 Vi ,背包的容量为 c ,问如何选择物品或物品的一部分,使得背包中物品的价值最大? 当 n = 3 ,c = 50 0-1背包问题:装入物品2、3,最大价值220 背包问题:装入物品1、2和2-3的物品3,最大价值240(贪心算法)贪心算法无法求解0-1背包问题,按贪心算法,0-1背包问题将装入物品1和2 贪心与局部最优 思考:为什么0-1背包可以用动态规划?而不能用贪心算法 贪心易陷入局部最优

贪心算法的应用

从贪心算法的定义可以看出,贪心法并不是从整体上考虑问题,它所做出的选择只是在某种意义上的局部最优解,而由问题自身的特性决定了该题运用贪心算法可以得到最优解。 我们看看下面的例子 例1 均分纸牌(NOIP2002tg) [问题描述] 有 N 堆纸牌,编号分别为 1,2,…, N。每堆上有若干张,但纸牌总数必为 N 的倍数。可以在任一堆上取若干张纸牌,然后移动。移牌规则为:在编号为 1 堆上取的纸牌,只能移到编号为 2 的堆上;在编号为 N 的堆上取的纸牌,只能移到编号为 N-1 的堆上;其他堆上取的纸牌,可以移到相邻左边或右边的堆上。现在要求找出一种移动方法,用最少的移动次数使每堆上纸牌数都一样多。例如 N=4,4 堆纸牌数分别为: ①9 ②8 ③17 ④6 移动3次可达到目的: 从③取 4 张牌放到④(9 8 13 10) -> 从③取 3 张牌放到②(9 11 10 10)-> 从②取 1 张牌放到①(10 10 10 10)。 [输入]:键盘输入文件名。 文件格式:N(N 堆纸牌,1 <= N <= 100) A1 A2 … An (N 堆纸牌,每堆纸牌初始数,l<= Ai <=10000) [输出]:输出至屏幕。格式为:所有堆均达到相等时的最少移动次数。 [输入输出样例] : 4 9 8 17 6 屏慕显示:3 算法分析:设a[i]为第i堆纸牌的张数(0<=i<=n),v为均分后每堆纸牌的张数,s为最小移到次数。 我们用贪心法,按照从左到右的顺序移动纸牌。如第i堆(0v,则将a[i]-v张纸牌从第I堆移动到第I+1堆; (2)若a[i]

统计案例分析典型例题

统计案例分析及典型例题 §抽样方法 1.为了了解所加工的一批零件的长度,抽取其中200个零件并测量了其长度,在这个问题中,总体的一个样本是 . 答案 200个零件的长度 2.某城区有农民、工人、知识分子家庭共计2 004户,其中农民家庭1 600户,工人家庭303户,现要从中抽取容量为40的样本,则在整个抽样过程中,可以用到下列抽样方法:①简单随机抽样,②系统抽样,③分层抽样中的 . 答案①②③ 3.某企业共有职工150人,其中高级职称15人,中级职称45人,初级职称90人.现采用分层抽样抽取容量为30的样本,则抽取的各职称的人数分别为 . 答案3,9,18 4.某工厂生产A、B、C三种不同型号的产品,其相应产品数量之比为2∶3∶5,现用分层抽样方法抽出一个容量为n的样本,样本中A型号产品有16件,那么此样本的容量n= . 答案80 例1某大学为了支援我国西部教育事业,决定从2007应届毕业生报名的18名志愿者中,选取6人组成志愿小组.请 用抽签法和随机数表法设计抽样方案. 解抽签法: 第一步:将18名志愿者编号,编号为1,2,3, (18) 第二步:将18个号码分别写在18张外形完全相同的纸条上,并揉成团,制成号签; 第三步:将18个号签放入一个不透明的盒子里,充分搅匀; 第四步:从盒子中逐个抽取6个号签,并记录上面的编号; 基础自测

第五步:所得号码对应的志愿者,就是志愿小组的成员. 随机数表法: 第一步:将18名志愿者编号,编号为01,02,03, (18) 第二步:在随机数表中任选一数作为开始,按任意方向读数,比如第8行第29列的数7开始,向右读; 第三步:从数7开始,向右读,每次取两位,凡不在01—18中的数,或已读过的数,都跳过去不作记录,依次可得到12,07,15,13,02,09. 第四步:找出以上号码对应的志愿者,就是志愿小组的成员. 例2 某工厂有1 003名工人,从中抽取10人参加体检,试用系统抽样进行具体实施. 解 (1)将每个人随机编一个号由0001至1003. (2)利用随机数法找到3个号将这3名工人剔除. (3)将剩余的1 000名工人重新随机编号由0001至1000. (4)分段,取间隔k= 10 0001=100将总体均分为10段,每段含100个工人. (5)从第一段即为0001号到0100号中随机抽取一个号l. (6)按编号将l ,100+l ,200+l,…,900+l 共10个号码选出,这10个号码所对应的工人组成样本. 例3 (14分)某一个地区共有5个乡镇,人口3万人,其中人口比例为3∶2∶5∶2∶3,从3万人中抽取一个300人 的样本,分析某种疾病的发病率,已知这种疾病与不同的地理位置及水土有关,问应采取什么样的方法并写出具体过程. 解 应采取分层抽样的方法. 3分 过程如下: (1)将3万人分为五层,其中一个乡镇为一层. 5分 (2)按照样本容量的比例随机抽取各乡镇应抽取的样本. 300×153=60(人);300× 15 2 =40(人); 300×155=100(人);300×15 2=40(人); 300× 15 3=60(人), 10分 因此各乡镇抽取人数分别为60人,40人,100人,40人,60人. 12分 (3)将300人组到一起即得到一个样本. 14分

贪心算法求解最优服务次序问题

实验名称:贪心算法实例编程 求解最优服务次序问题 1、实验目的: 1)理解贪心算法的概念 2)掌握贪心算法的基本要素 3)掌握设计贪心算法的一般步骤 4)针对具体问题,能应用贪心算法设计有效算法 5)用C++实现算法,并且分析算法的效率 2、实验设备及材料: 硬件设备:PC机 机器配置:双核cpu频率2.2GHz,内存2G 操作系统:Windows 7 开发工具:VC++6.0 3、实验内容: ①问题描述 设有n个顾客同时等待一项服务。顾客i需要的服务时间为t i,1≤i≤n。 应如何安排n个顾客的服务次序才能使平均等待时间达到最小?平均等待时间是n恶搞顾客等待服务时间的总和除以n。 ②编程任务 对于给定的n个顾客需要的服务时间,计算最优服务次序。 ③样例 例如,现在有5个顾客,他们需要的服务时间分别为:56,12,5,99,33。 那么,按照所需服务时间从小到大排序为:5,12,33,56,99。排序后的顾客等待服务完成的时间为:5,17,50,106,205;和为:383;平均等待时间为:76.6。

4、实验方法步骤及注意事项: ①实验步骤 a、分析问题,确定最优的贪心选择; b、针对贪心选择过程进行算法设计; c、举例验证算法的正确性; d、上机调试算法。 ②解题思路 1)求解最优服务次序问题的贪心策略为:先为所需服务时间最短的顾客服务。 2)使用贪心算法求解最优服务次序问题的算法,用C++语言描述。 ①.最优值:(贪心算法) text(int n,int x[],int s[])//s[]为保存每个顾客等待时间的数组 { int i; int sum=0; for(i=0;i0){ s[i]=x[i]+s[i-1]; sum+=s[i];} else { s[i]=x[i]; sum+=s[i]; } } return sum/n; } ②.最优解:(快速排序) void QuickSort(int e[], int first, int end) { int i=first,j=end,key=e[first]; while(i=key) j--; e[i]=e[j]; while(ii+1) QuickSort(e,i+1,end); }

贪心算法经典问题:活动安排,背包问题,最优装载,单源最短路径 Dijiksra,找零钱问题,多机调度

活动安排 public static int greedySelector(int [] s, int [] f, boolean a[]) { //s[]开始时间f[]结束时间 int n=s.length-1; a[1]=true; int j=1; int count=1; for (int i=2;i<=n;i++) { if (s[i]>=f[j]) { a[i]=true; j=i; count++; } else a[i]=false; } return count; } 背包问题 void Knapsack(int n,float M,float v[],float w[],float x[]) { Sort(n,v,w); //以每种物品单位重量的价值Vi/Wi从大到小排序 int i; for (i=1;i<=n;i++) x[i]=0; float c=M; for (i=1;i<=n;i++) { if (w[i]>c) break; x[i]=1; c-=w[i]; } if (i<=n) x[i]=c/w[i]; //允许放入一个物品的一部分 } 最优装载 void Loading(int x[], T ype w[], T ype c, int n) { int *t = new int [n+1]; //t[i]要存的是w[j]中重量从小到大的数组下标Sort(w, t, n); //按货箱重量排序 for (int i = 1; i <= n; i++) x[i] = 0; //O(n) for (int i = 1; i <= n && w[t[i]] <= c; i++) {x[t[i]] = 1; c -= w[t[i]];} //调整剩余空间 } 单源最短路径Dijiksra template void Dijikstra(int n, int v, Type dist[], int prev[], Type **c) { //c[i][j]表示边(i,j)的权,dist[i]表示当前从源到顶点i的最短特殊路径bool s[maxint]; for(int i= 1;i<=n; i++) { dist[i]=c[v][i]; s[i]=false;

统计与概率精典例题解析(含答案)

统计与概率精典例题解析 在新课标理念指导下,预计2011年考查有关统计与概率的知识点将着重数据的分析和事件发生机会大小的确定以及统计与概率知识的实际应用,对统计中涉及的计算将趋向简单.试题将会继续结合社会热点,创设一些新的情境来涉及有关统计与概率的知识,突出收集、整理、描述信息,建立数学模型(概率模型),进而解决问题.中考中会适当设置一些把统计、概率知识和方程、不等式、函数等知识结合在一起的开放型问题和探索问题,或者出现与其他学科、生活知识等综合的题型,注重考查学生的创新意识与实践能力.本文就精典例题的解析,并以此作为预测,仅供复习参考. 【例1】下列调查方式,合适的是() A.要了解一批灯泡的使用寿命,采用普查方式 B.要了解中央电视台“星光大道”栏目的收视率,采用普查方式 C.要保证“神舟六号”载人飞船成功发射,对重要零部件的检查采用抽查方式 D.要了解外地游客对吉林雾凇冰雪节的满意度,采用抽查方式 【分析】要了解一批灯泡的使用寿命必须采用抽查,所以选项A错误;了解电视节目的收视率采用普查虽然能够得出详细结论,但普查范围太大不容易实现,所以采用抽查方式合适,所以选项B错误;“神舟六号”载人飞船是高科技产品,要保证它发射成功任何一个重要零部件都要求完好,所以必须普查,所以选项C错误. 解:D. 【点评】普查是为了一定目的对考察对象进行的全面调查;抽样调查是从总体中抽取部分个体进行的调查.明确调查的问题,弄清普查和抽样调查所适合的对象和各自的含义是解题的关键. 【例2】班主任为了解学生星期六、日在家的学习情况,家访了班内的六位学生,了解到他们在家学习时间如下表所示,那么这六位学生学习时间的众数与中位数分别是

贪心算法的应用实例

贪心算法的应用实例 例2.排队问题 【题目描述】 在一个医院B 超室,有n个人要做不同身体部位的B超,已知每个人需要处理的时间为ti,(00,从而新的序列比原最优序列好,这与假设矛盾,故s1为最小时间,同理可证s2…sn依次最小。 例3.:数列极差问题 【题目描述】 在黑板上写了N个正整数做成的一个数列,进行如下操作:每一次擦去其中的两个数a 和b,然后在数列中加入一个数a×b+1,如此下去直至黑板上剩下一个数,在所有按这种操作方式最后得到的数中,最大的max,最小的为min,则该数列的极差定义为M=max-min。 编程任务:对于给定的数列,编程计算出极差M。 输入输出样例: 输入: 4 2 1 4 3 输出: 13 【算法分析】 当看到此题时,我们会发现求max与求min是两个相似的过程。若我们把求解max与min的过程分开,着重探讨求max的问题。 下面我们以求max为例来讨论此题用贪心策略求解的合理性。 讨论:假设经(N-3)次变换后得到3个数:a ,b , max'(max'≥a≥b),其中max'是(N-2)个数经(N-3)次f变换后所得的最大值,此时有两种求值方式,设其所求值分别为 z1,z2,则有:z1=(a×b+1)×max'+1,z2=(a×max'+1)×b+1所以z1-z2=max'-b≥0若经(N-2)次变换后所得的3个数为:m,a,

相关文档
最新文档