文档库 最新最全的文档下载
当前位置:文档库 › 一道经典的算法题

一道经典的算法题

一道经典的算法题
一道经典的算法题

题目如下:用1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列,如:512234、412345等,要求:"4"不能在第三位,"3"与"5"不能相连。

基本思路:

1 把问题归结为图结构的遍历问题。实际上6个数字就是六个结点,把六个结点连接成无向连通图,对于每一个结点求这个图形的遍历路径,所有结点的遍历路径就是最后对这6个数字的排列组合结果集。

2 显然这个结果集还未达到题目的要求。从以下几个方面考虑:

1. 3,5不能相连:实际要求这个连通图的结点3,5之间不能连通, 可在构

造图结构时就满足改条件,然后再遍历图。

2. 不能有重复: 考虑到有两个2,明显会存在重复结果,可以把结果集放在TreeSet中过滤重复结果。//TreeSet用于过滤一个集合中相同的东西还真是个挺不错的方法

3. 4不能在第三位: 仍旧在结果集中去除满足此条件的结果。

采用二维数组定义图结构,最后的代码是:

package test;

import java.util.Iterator;

import java.util.TreeSet;

public class TestQuestion {

8 private String[] b = new String[] { "1", "2", "2", "3", "4", "5" };

9 private int n = b.length;

10 private boolean[] visited = new boolean[n];

11 private int[][] a = new int[n][n];

12 private String result = "";

13 private TreeSet treeSet = new TreeSet();// 用于保存结果,具有过滤相同结果的作用。

14

15 public static void main(String[] args) {

16 new TestQuestion().start();

17 }

18

19 private void start() {

20 // 创建合法路径标识集合

21 for (int i = 0; i < n; i++) {

22 for (int j = 0; j < n; j++) {

23 if (i == j) {

24 a[i][j] = 0;

25 } else {

26 a[i][j] = 1;

27 }

28 }

29 }

30 a[3][5] = 0;

31 a[5][3] = 0;

32 for (int i = 0; i < n; i++) {

33 this.depthFirstSearch(i);// 深度递归遍历

34 }

35 Iterator it = treeSet.iterator();

36 while (it.hasNext()) {

37 String string = (String) it.next();

38

39 if (string.indexOf("4") != 2) {

40 System.out.println(string);

41 }

42 }

43 }

44

45 /** *//**

46 * 深度优先遍历

47 *

48 * @param startIndex

49 */

50 private void depthFirstSearch(int startIndex) {

51 // 递归的工作

52 visited[startIndex] = true;// 用于标识已经走过的节点

53 result = result + b[startIndex];// 构造结果

54 if (result.length() == n) {

55 treeSet.add(result);// 添加到TreeSet类型中,具有过滤相同结果的作用

56 }

57 // 每走到一个节点,挨个遍历下一个节点

58 for (int j = 0; j < n; j++) {

59 if (a[startIndex][j] == 1 && visited[j] == false) {

60 depthFirstSearch(j);// 深度递归遍历

61 } else {

62 continue;

63 }

64 }

65 // 递归的收尾工作

66 result = result.substring(0, result.length() - 1);

67 visited[startIndex] = false;// 取消访问标识

68 } 69}

70

算法经典面试题

算法经典面试题 世界上第一位程序员是英国著名诗人拜伦的女儿AdaLovelace曾设计了巴贝奇分析机上解伯努利方程的一个程序。她甚至还建立了循环和子程序的概念。下面就由X为大家介绍一下程序员面试算法题的文章。 程序员面试算法题篇1 题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何新的结点,只调整指针的指向。 10 / \ 6 14 / \ / \ 4 8 12 16 转换成双向链表 4=6=8=10=12=14=16。 思路一:当我们到达某一个节点准备调整以该节点为根节点的子数时,先调整其左子树将左子树转换成一个排好序的左子链表,再调整其右子树转换成右子链表。最近链接左子链表的最右节点、当前节点和右子链表的最左节点。从树的根节点开始递归调整所有节点。

思路二:我们可以中序遍历整个树。按照这个方式遍历树,比较小的节点优先访问。如果我们每访问一个节点,假设之前访问过的节点已经调整为一个排序的双向链表,我们再把调整当前节点的指针链接到链表的末尾。当所有的节点都访问过之后,整棵树也就转换成一个排序的双向链表了。 参考代码: 二元查找树的节点数据结构: structBSTreeNode{ int value; BSTreeNode *m_left; BSTreeNode *m_right; } 思路二对应的代码: void ConvertNode(BSTreeNode* pNode, BSTreeNode*& pLastNodeInList) { if(pNode == NULL) return; BSTreeNode *pCurrent = pNode; // Convert the left sub-tree if (pCurrent->m_pLeft != NULL) ConvertNode(pCurrent->m_pLeft, pLastNodeInList);

申论备考指导:提出对策题目例题解析

申论备考指导:提出对策题目例题解析 中公教育研究与辅导专家赫鑫 题目展示: “给定资料3-4”中,小黄和小丽的“困恼”反映了基层管理工作面临的某种困境,请指出这种“困境”,并提出改变这种困境的建议。(25分) 中公解析: 审清题目 审题干得到作答要求。通过审题判断题型是提出对策题,作答对象是针对基层管理工作中面临的困境提出解决意见,这个题中有两个问,先要求指出“困境”的具体含义,然后要提出改变这种困境的建议。审要求得到作答标准,要求中强调对策具有针对性,合理、可行。 寻找要点 材料3讲述了小黄的苦恼——垃圾难题,一方面是百姓垃圾分类的意识不足,另一方面是城市管理部门对于垃圾分类的管理存在缺陷,废品回收不受重视,回收过程中也没有做到合理回收。多数地方对垃圾分类投入少。材料4讲诉了来自农村小丽的困扰——农村的秸秆焚烧污染空寂,浪费资源,破坏土壤。造成这个为题的愿意一方面是因为农民意识欠缺,另一方面是政府没有起到作用,所谓的补贴少之又少,没有为农民处理秸秆提供出路。 归根结底,他们的困境就是环保问题,针对于环保问题,可针对问题和原因提出解决意见。因为环保意识差,所以要提升环保意识,可以通过宣统等方式做到。垃圾运输和处理要分类合理。材料中说废品回收价格低,就需要提高废品回收价格,激发居民的积极性。关于政府投入低的问题,建议加大对于垃圾分类的投入。农民焚烧秸秆,要加强资金与技术支持,社会农村沼气处理池,提高能源转化率。 确定答案 题干中是两个问,一要概括他们面临的困境是什么,二是要针对问题提出对策。所以答案分两个部分,以对策为主。对策分条罗列,展现条理性。 答案: 这种“困境”总的是指环保工作做的不到位,人民环保意识差。具体一是指垃圾分类难,居民关于垃圾分类回收的意识差,一些管理部门垃圾分类工作做的不到位。二是指农村秸秆随意焚烧,浪费资源、污染环境。 针对以上问题提出如下对策:1、加强监督和宣传,提高居民对生活垃圾的分类的处理意识,对生活垃圾进行干湿分离处理。2、垃圾运输和处理时保证分类处理。3、重视废品回收,提高废品回收价格,激发群众对可回收物品的积攒积极性,及时回收并设置专门回收地

贪心算法经典例题

贪心算法经典例题 发布日期: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.时针分针重合几次 表面上有60个小格,每小格代表一分钟, 时针每分钟走1/12小格,分针每分钟走1小格,从第一次重合到第二次重合分针比时针多走一圈即60小格,所以 60/(1-1/12)=720/11 每隔720/11分才重合一次(而并不是每小时重合一次) 1440里有22个720/11,如果说算上0点和24点,那也是重合23次而已,但我觉得0点应该算到前一天的24点头上,所以每一天循环下来重合22次啊 2.找出字符串的最长不重复子串,输出长度 建一个256个单元的数组,每一个单元代表一个字符,数组中保存上次该字符上次出现的位置; 依次读入字符串,同时维护数组的值; 如果遇到冲突了,就返回冲突字符中保存的位置,继续第二步。也可以用hashm ap保存已经出现的字符和字符的位置 3. 说是有一个文本文件,大约有一万行,每行一个词,要求统计出其中最频繁出现的前十个词。 先用哈希,统计每个词出现的次数,然后在用在N个数中找出前K大个数的方法找出出现 次数最多的前10个词。

4. 如题3,但是车次文件特别大,没有办法一次读入内存。 1)直接排序,写文件时,同时写入字符串及其出现 次数。 2)可以用哈希,比如先根据字符串的第一个字符将字符串换分为多个区域,每个区域的字符串写到一个文件内,然后再用哈希+堆统计每个区域内前10个频率最高的字符串,最后求出所有字符串中前10个频率最高的字符串。 5.有一个整数n,将n分解成若干个整数之和,问如何分解能使这些数的乘积最大,输出这个乘积m。例如:n=12 (1)分解为1+1+1+…+1,12个1, m=1*1*1……*1=1 (2)分解为2+2+…+2,6个2,m=64 (3)分解为3+3+3+3,4个3, m=81 (4)大于等于4时分解时只能分解为2和3,且2最多两个 f(n) =3*f(n-3)n>4 f(4)=2*2 f(3) = 3 f(2) = 2分解为4+4+4,3个4,m=64 6. 求数组n中出现次数超过一半的数 把数组分成[n/2]组,则至少有一组包含重复的数,因为如果无重复数,则最多只有出现次数等于一半的数。算法如下:

平新乔《微观经济学十八讲》课后习题详解(第10讲--策略性博弈与纳什均衡)

平新乔《微观经济学十八讲》第 10 讲策略性博弈与纳什均衡 跨考网独家整理最全经济学考研真题,经济学考研课后习题解析资料库,您可以在这里查阅历年经济学考研真题,经济学考研课后习题,经济学考研参考书等内容,更有跨考考研历年辅导的经济学学哥学姐的经济学考研经验,从前辈中获得的经验对初学者来说是宝贵的财富,这或许能帮你少走弯路,躲开一些陷阱。 以下内容为跨考网独家整理,如您还需更多考研资料,可选择经济学一对一在线咨询进行咨询。 1.假设厂商 A与厂商 B的平均成本与边际成本都是常数, MC A 10, MC B 8,对厂商产出的需求函数是 Q D 500 20p ( 1)如果厂商进行 Bertrand 竞争,在纳什均衡下的市场价格是多少? ( 2)每个厂商的利润分别为多少? ( 3)这个均衡是帕累托有效吗? 解:(1)如果厂商进行 Bertrand 竞争,纳什均衡下的市场价格是 p B 10 , p A 10 ,其中是一个极小的正数。理由如下: 假设均衡时厂商 A 和 B 对产品的定价分别为 p A 和 p B ,那么必有 p A 10 , p B 8 ,即厂商的价格一定要高于产品的平均成本。其次,达到均衡时,p A和 p B 都不会严格大于 10。否 则,价格高的厂商只需要把自己的价格降得比对手略低,它就可以获得整个市场,从而提高自己的利润。所以均衡价格一定满足p A 10, p B 10。但是由于 p A 的下限也是10,所以 均衡时 p A 10。给定 p A 10,厂商 B的最优选择是令 p B 10 ,这里是一个介于 0到2 之间的正数,这时厂商 B可以获得整个市场的消费者。综上可知,均衡时的价格为p A 10 , p B 10 。 ( 2)由于厂商 A 的价格严格高于厂商 B 的价格,所以厂商 A 的销售量为零,从而利润也是零。下面来确定厂商 B 的销售量,此时厂商 B是市场上的垄断者,它的利润最大化问题为: max pq cq ① 其中 p 10 ,q 500 20 10 ,把这两个式子代入①式中,得 到: max 10 0 8 500 20 10 解得0 ,由于必须严格大于零,这就意味着可以取一个任意小的正 数, 所以厂商 B的利润 为: 500 20 10 10 。 (3)这个结果不是帕累托有效的。因为厂商 B 的产品的价格高于它的边际成本,所以 如果厂商 B和消费者可以为额外 1 单位的产品协商一个介于 8 到10 之间的价格,那么厂商 B 的利润和消费者的剩余就都可以得到提高,同时又不损害厂商 A的剩余(因为A 的利润还是零)。

算法习题

算法设计与分析试卷 一、填空题(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

C语言经典算法100例(1---30)

2008-02-18 18:48 【程序1】 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。 2.程序源代码: main() { int i,j,k; printf("\n"); for(i=1;i<5;i++) /*以下为三重循环*/ for(j=1;j<5;j++) for (k=1;k<5;k++) { if (i!=k&&i!=j&&j!=k) /*确保i、j、k三位互不相同*/ printf("%d,%d,%d\n",i,j,k); } } ============================================================== 【程序2】 题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高 于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提 成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于 40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于 100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数? 1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。 2.程序源代码: main() { long int i; int bonus1,bonus2,bonus4,bonus6,bonus10,bonus; scanf("%ld",&i); bonus1=100000*0.1;bonus2=bonus1+100000*0.75; bonus4=bonus2+200000*0.5; bonus6=bonus4+200000*0.3; bonus10=bonus6+400000*0.15; if(i<=100000)

高中数学经典例题错题详解

高中数学经典例题、错 题详解

【例1】设M={1、2、3},N={e、g、h},从M至N的四种对应方式,其中是从M到N的映射是() M N A M N B M N C M N D 映射的概念:设A、B是两个集合,如果按照某一个确定的对应关系f,是对于集合A中的每一个元素x,在集合B中都有一个确定的元素y与之对应,那么就称对应f:A→B为从集合A到集合B的一个映射。 函数的概念:一般的设A、B是两个非空数集,如果按照某种对应法则f,对于集合A中的每一个元素x,在集合B中都有唯一的元素y和它对应,这样的对应叫集合A到集合B的一个函数。(函数的本质是建立在两个非空数集上的特殊对应) 映射与函数的区别与联系: 函数是建立在两个非空数集上的特殊对应;而映射是建立在两个任意集合上的特殊对应;函数是特殊的映射,是数集到数集的映射,映射是函数概念的扩展,映射不一定是函数,映射与函数都是特殊的对应。 映射与函数(特殊对应)的共同特点:○1可以是“一对一”;○2可以是“多对一”;○3不能“一对多”;○4A中不能有剩余元素;○5B中可以有剩余元素。 映射的特点:(1)多元性:映射中的两个非空集合A、B,可以是点集、数集或由图形组成的集合等;(2)方向性:映射是有方向的,A到B的映射与B到A的映射往往不是同一个映射;(3)映射中集合A的每一个元素在集合B中都有它的象,不要求B中的每一个元素都有原象;(4)唯一性:映射中集合A中的任一元素在集合B中的象都是唯一的;(5)一一映射是一种特殊的映射方向性 上题答案应选 C 【分析】根据映射的特点○3不能“一对多”,所以A、B、D都错误;只有C完全满足映射与函数(特殊对应)的全部5个特点。 本题是考查映射的概念和特点,应在完全掌握概念的基础上,灵活掌握变型题。 【例2】已知集合A=R,B={(x、y)︱x、y∈R},f是从A到B的映射fx:→(x+1、x2),(1)求2在B 中的对应元素;(2)(2、1)在A中的对应元素 【分析】(1)将x=2代入对应关系,可得其在B中的对应元素为(2+1、1);(2)由题意得:x+1=2,x2=1 得出x=1,即(2、1)在A中的对应元素为1 【例3】设集合A={a、b},B={c、d、e},求:(1)可建立从A到B的映射个数();(2)可建立从B到A的映射个数() 【分析】如果集合A中有m个元素,集合B中有n个元素,则集合A到集合B的映射共有n m 个;集合B到集合A的映射共有m n个,所以答案为23=9;32=8 【例4】若函数f(x)为奇函数,且当x﹥0时,f(x)=x-1,则当x﹤0时,有() A、f(x) ﹥0 B、f(x) ﹤0 C、f(x)·f(-x)≤0 D、f(x)-f(-x) ﹥0 奇函数性质: 1、图象关于原点对称;? 2、满足f(-x) = - f(x)?; 3、关于原点对称的区间上单调性一致;? 4、如果奇函数在x=0上有定义,那么有f(0)=0;? 5、定义域关于原点对称(奇偶函数共有的)

贪心算法概论

贪心算法概论 贪心算法一般来说是解决“最优问题”,具有编程简单、运行效率高、空间 复杂度低等特点。是信息学竞赛中的一个有为武器,受到广大同学们的青睐。本 讲就贪心算法的特点作些概念上的总结。 一、贪心算法与简单枚举和动态规划的运行方式比较 贪心算法一般是求“最优解”这类问题的。最优解问题可描述为:有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:

算法设计及分析递归算法典型例题

算法递归典型例题 实验一:递归策略运用练习 三、实验项目 1.运用递归策略设计算法实现下述题目的求解过程。 题目列表如下: (1)运动会开了N天,一共发出金牌M枚。第一天发金牌1枚加剩下的七分之一枚,第二天发金牌2枚加剩下的七分之一枚,第3天发金牌3枚加剩下的七分之一枚,以后每天都照此办理。到了第N天刚好还有金牌N枚,到此金牌全部发完。编程求N和M。 (2)国王分财产。某国王临终前给儿子们分财产。他把财产分为若干份,然后给第一个儿子一份,再加上剩余财产的1/10;给第二个儿子两份,再加上剩余财产的1/10;……;给第i 个儿子i份,再加上剩余财产的1/10。每个儿子都窃窃自喜。以为得到了父王的偏爱,孰不知国王是“一碗水端平”的。请用程序回答,老国王共有几个儿子?财产共分成了多少份? 源程序: (3)出售金鱼问题:第一次卖出全部金鱼的一半加二分之一条金鱼;第二次卖出乘余金鱼的三分之一加三分之一条金鱼;第三次卖出剩余金鱼的四分之一加四分之一条金鱼;第四次卖出剩余金鱼的五分之一加五分之一条金鱼;现在还剩下11条金鱼,在出售金鱼时不能把金鱼切开或者有任何破损的。问这鱼缸里原有多少条金鱼? (4)某路公共汽车,总共有八站,从一号站发轩时车上已有n位乘客,到了第二站先下一半乘客,再上来了六位乘客;到了第三站也先下一半乘客,再上来了五位乘客,以后每到一站都先下车上已有的一半乘客,再上来了乘客比前一站少一个……,到了终点站车上还有乘客六人,问发车时车上的乘客有多少? (5)猴子吃桃。有一群猴子摘来了一批桃子,猴王规定每天只准吃一半加一只(即第二天吃剩下的一半加一只,以此类推),第九天正好吃完,问猴子们摘来了多少桃子? (6)小华读书。第一天读了全书的一半加二页,第二天读了剩下的一半加二页,以后天天如此……,第六天读完了最后的三页,问全书有多少页? (7)日本著名数学游戏专家中村义作教授提出这样一个问题:父亲将2520个桔子分给六个儿子。分完后父亲说:“老大将分给你的桔子的1/8给老二;老二拿到后连同原先的桔子分1/7给老三;老三拿到后连同原先的桔子分1/6给老四;老四拿到后连同原先的桔子分1/5给老五;老五拿到后连同原先的桔子分1/4给老六;老六拿到后连同原先的桔子分1/3给老大”。结果大家手中的桔子正好一样多。问六兄弟原来手中各有多少桔子? 四、实验过程 (一)题目一:…… 1.题目分析 由已知可得,运动会最后一天剩余的金牌数gold等于运动会举行的天数由此可倒推每一 天的金牌剩余数,且每天的金牌数应为6的倍数。 2.算法构造 设运动会举行了N天, If(i==N)Gold[i]=N; Else gold[i]=gold[i+1]*7/6+i;

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

安徽大学2010-2011学年第1学期《算法分析与设计》 期末试题 押宝 (内部交流,非考试试题,学生自发交流创作,版权归作者testfudan@https://www.wendangku.net/doc/6a15333422.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 θ,采用迭代法或者采用主方法,不会的赶快看)

二项分布经典例题练习题

二项分 布 1.n 次独立重复试验 一般地,由n 次试验构成,且每次试验相互独立完成,每次试验的结果仅有两种对立的状态,即A 与A ,每次试验中()0P A p =>。我们将这样的试验称为n 次独立重复试验,也称为伯努利试验。 (1)独立重复试验满足的条件第一:每次试验是在同样条件下进行的;第二:各次试验中的事件是互相独立的;第三:每次试验都只有两种结果。 (2)n 次独立重复试验中事件A 恰好发生k 次的概率()P X k ==(1)k k n k n C p p --。 2.二项分布 若随机变量X 的分布列为()P X k ==k k n k n C p q -,其中0 1.1,0,1,2,,,p p q k n <<+==L 则称X 服从参数为,n p 的二项分布,记作(,)X B n p :。 1.一盒零件中有9个正品和3个次品,每次取一个零件,如果取出的次品不再放回,求在取得正品前已取出的次品数X 的概率分布。 2.一名学生每天骑车上学,从他家到学校的途中有6个交通岗,假设他在各个交通岗遇到 红灯的事件是相互独立的,并且概率都是31 . (1)设ξ为这名学生在途中遇到红灯的次数,求ξ的分布列; (2)设η为这名学生在首次停车前经过的路口数,求η的分布列;

(3)求这名学生在途中至少遇到一次红灯的概率. 3.甲乙两人各进行3次射击,甲每次击中目标的概率为 21,乙每次击中目标的概率为3 2. (1)记甲击中目标的此时为ξ,求ξ的分布列及数学期望; (2)求乙至多击中目标2次的概率; (3)求甲恰好比乙多击中目标2次的概率. 【巩固练习】 1.(2012年高考(浙江理))已知箱中装有4个白球和5个黑球,且规定:取出一个白球的 2分,取出一个黑球的1分.现从该箱中任取(无放回,且每球取到的机会均等)3个球,记随机变量X 为取出3球所得分数之和. (Ⅰ)求X 的分布列; (Ⅱ)求X 的数学期望E (X ). 2.(2012年高考(重庆理))(本小题满分13分,(Ⅰ)小问5分,(Ⅱ)小问8分.) 甲、乙两人轮流投篮,每人每次投一球,.约定甲先投且先投中者获胜,一直到有人获胜 或每人都已投球3次时投篮结束.设甲每次投篮投中的概率为1 3 ,乙每次投篮投中的概 率为1 2 ,且各次投篮互不影响. (Ⅰ)求甲获胜的概率; (Ⅱ)求投篮结束时甲的投篮次数ξ的分布列与期望

贪心算法的应用

从贪心算法的定义可以看出,贪心法并不是从整体上考虑问题,它所做出的选择只是在某种意义上的局部最优解,而由问题自身的特性决定了该题运用贪心算法可以得到最优解。 我们看看下面的例子 例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】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1.程序分析:兔子的规律为数列1,1,2,3,5,8,13,21.... public class exp2{ public static void main(String args[]){ int i=0; for(i=1;i<=20;i++) System.out.println(f(i)); } public static int f(int x) { if(x==1 || x==2) return 1; else return f(x-1)+f(x-2); } } 【程序2】 题目:判断101-200之间有多少个素数,并输出所有素数。 1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。 【程序3】 题目:打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个 "水仙花数 ",因为153=1的三次方+5的三次方+3的三次方。 1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。 【程序4】 题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。 程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:

(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。 (2)如果n <> k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。 (3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。 【程序5】 题目:利用条件运算符的嵌套来完成此题:学习成绩> =90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。 1.程序分析:(a> b)?a:b这是条件运算符的基本例子。 【程序6】 题目:输入两个正整数m和n,求其最大公约数和最小公倍数。 1.程序分析:利用辗除法。 【程序7】 题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。 1.程序分析:利用while语句,条件为输入的字符不为 '\n '. 【程序8】 题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如 2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。 1.程序分析:关键是计算出每一项的值。 【程序9】 题目:一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。例如6=1+2+3.编程找出1000以内的所有完数。 【程序10】 题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高? 【程序11】 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排

追及问题地经典例题

追及问题 课时一初步理解追及问题 一、导入 今天我们来学习行程问题当中的追及问题,它属于同向运动中的一种,下面我们就通过一个例子来给大家讲叙怎样解决追及问题。例:兔子在狗前面150米,一步跳2米,狗更快,一步跳3米,狗追上兔子需要跳多少步?我们知道,狗跳一步要比兔子跳一步远3—2=1(米),也就是狗跳一步可以追上兔子1米,现在狗与兔子相距150米,因此,只要算出150米中有几个1米,那么就知道狗跳了多少步追上兔子的。不难看出150÷1=150(步),这是狗跳的步数。这里兔子在前面跳,狗在后面追,它们一开始相差150米,这150米叫做“追及距离”;兔子每步跳2米,狗每步跳3米,它们每步相差1米,这个叫“速度差”;狗追上兔子所需的步数叫做“追及步数”有时是以秒、分钟、小时计算,则叫“追及时间”,像这种包含追及距离、速度差和追及时间(追及步数)三个量的应用题,叫做追及问题。 二、新课讲授 1、速度差:快车比慢车单位时间内多行的路程。即快车每小时比慢车多行的或每分钟多行的路程。 追及时间:快车追上慢车所用的时间。 路程差:快车开始和慢车相差的路程。 2.熟悉追及问题的三个基本公式:

路程差=速度差×追及时间; 速度差=路程差÷追及时间; 追及时间=路程差÷速度差 3.解题技巧:在理解行驶时间、地点、方向等关系的基础上画出线段图,分析题意思,寻找路程差及另外两个量之间的关系,最终找到解答方法。 三、例题分析 例1 甲、乙两人相距150米,甲在前,乙在后,甲每分钟走60米,乙每分钟走75米,两人同时向南出发,几分钟后乙追上甲? 思路分析:这道问题是典型的追及问题,求追及时间,根据追及问题的公式: 追及时间=路程差÷速度差 150÷(75-60)=10(分钟) 答:10分钟后乙追上甲。 例 2 骑车人与行人同一条街同方向前进,行人在骑自行车人前面

贪心算法经典问题:活动安排,背包问题,最优装载,单源最短路径 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;

提出对策题答题技巧

提出对策题答题技巧 提出对策题主要是指根据材料中反映的问题提出解决对策的题型,在申论大纲中要求考生能够根据自己的实践及已有的经验来作答,实际难度较大,而且对策题一般要求“具体、针对、可行”,很多时候学员提出的对策都很空,不易得分。近年来山东省提出对策题考察还是比较多的,而且分值较高,需要引起考生们的特别注意。 一、山东省的提出对策题 山东省考察的提出对策题具体题目及分值如下: 【例1】(山东省考-申论-2011-2)“给定资料5”提到了某市在人口普查工作中遇到的主要问题。假定你是一名普查员,请你提出解决这些问题的具体措施。(15分) 【例2】(山东省考-申论-2012-3)针对“给定资料5”所反映的移民搬迁中各种具体问题,从Z县主管部门的角度,提出改进工作的具体建议。(25分) 【例3】(山东省考-申论-A卷-2014-3)因航班延误纠纷引发的群体性事件,破坏机场正常秩序,威胁民用航空安全,已演变成为一个社会问题,假如你是一名行政执法人员,请结合给定资料就这一现状提出解决对策。(20分) 【例4】(山东省考-申论-B卷-2014-3)“给定资料3~5”反映了我国专利申请过程中存在的一些问题。假如你是政府相关职能部门的工作人员,请提出解决这些问题的建议。(25分) 二、提出对策题的解题思路

提出对策题的解题思路很简单也很清晰,主要有两步:第一步,找问题或原因;第二步,根据问题或原因提出对策。但是考生要特别注意对策题主要是为了提出对策解决问题,因此实际作答时作答篇幅应有所侧重,侧重于对策部分。另外,考生在提对策时切忌“假大空”一定要做到:具体、针对、可行。 三、具体题目解析 【例5】(国考-申论-2011-地市-2)“给定资料4”反映了T市市民出行中存在的许多问题,假定你是市交管局聘请的观察员,请就这些问题提出解决建议,呈送市政府有关部门参考。(20分) 要求:对存在的问题概括准确、扼要;所提建议具体简明、有针对性、切实可行;不超过400字。 材料4: T市晚报刊发了一批“市民来信”,集中反映了城市市民出行中遇到的问题。 市民甲:8月下旬的一天早上,我送朋友去赵家口长途汽车站,发现这里是一个Y字形路段,行驶的车辆由两条机动车道汇聚到一条机动车道上。引人注目的是,两条分支机动车道中的一条上缓缓行驶着大量公交车,一辆接一辆,车队一直排到Y形车道汇流口。刘公铺桥西这一站点设置在两条机动车道之间,我和朋友便是在这一站下的车。这里下车的乘客很多,从公交站牌看,至少有15条不同路线的公交车要在这一站停靠。这就使得上下车的乘客特别多,疏散时间增加,公交车停靠的时间也就相应增加,而之后需要进站的公交车排队

算法分析与设计选修课-贪心算法应用研究

武汉理工大学 算法设计与分析论文题目:贪心算法应用研究 姓名:吴兵 学院:信息工程 专业班级:电子133 学号: 1409721303131 任课教师:张小梅

目录 摘要 (1) 1.绪论 (2) 2贪心算法的基本知识概述 (3) 2.1 贪心算法定义 (3) 2.2 贪心算法的基本思路及实现过程 (3) 2.3贪心算法的核心 (3) 2.4贪心算法的基本要素 (4) 2.5 贪心算法的理论基础 (6) 2.6 贪心算法存在的问题 (7) 3贪心算法经典应用举例 (8) 3.1删数问题 (8) 3.2 汽车加油问题 (10) 3.3会场安排问题 (12) 4.总结 (16) 5.参考文献 (17)

摘要 在求最优解问题的过程中,依据某种贪心标准,从问题的初始状态出发,直接去求每一步的最优解,通过若干次的贪心选择,最终得出整个问题的最优解,这种求解方法就是贪心算法。从贪心算法的定义可以看出,贪心法并不是从整体上考虑问题,它所做出的选择只是在某种意义上的局部最优解,而由问题自身的特性决定了该题运用贪心算法可以得到最优解。贪心算法所作的选择可以依赖于以往所作过的选择,但决不依赖于将来的选择,也不依赖于子问题的解,因此贪心算法与其它算法相比具有一定的速度优势。如果一个问题可以同时用几种方法解决,贪心算法应该是最好的选择之一。本文讲述了贪心算法的含义、基本思路及实现过程,贪心算法的核心、基本性质、特点及其存在的问题。并通过贪心算法的特点举例列出了以往研究过的几个经典问题,对于实际应用中的问题,也希望通过贪心算法的特点来解决。 关键词:贪心算法最小生成树多处最优服务次序问题删数问题

相关文档
相关文档 最新文档