1.对任意n个数进行降序排列,即排序后的数满足X1≥X2≥X3≥…≥Xn

1.对任意n个数进行降序排列,即排序后的数满足X1≥X2≥X3≥…≥Xn
2.将12张不同的扑克牌按花式及大小排列
rthyme 1年前 已收到4个回答 举报

是否在此 幼苗

共回答了19个问题采纳率:84.2% 举报

算法 参考出处:http://blog.csdn.net/ctu_85/archive/2008/05/11/2432736.aspx
一、什么是算法
算法是一系列解决问题的清晰指令,也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出.算法常常含有重复的步骤和一些比较或逻辑判断.如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题.不同的算法可能用不同的时间、空间或效率来完成同样的任务.一个算法的优劣可以用空间复杂度与时间复杂度来衡量.
算法的时间复杂度是指算法需要消耗的时间资源.一般来说,计算机算法是问题规模n 的函数f(n),算法执行的时间的增长率与f(n) 的增长率正相关,称作渐进时间复杂度(Asymptotic Time Complexity).时间复杂度用“O(数量级)”来表示,称为“阶”.常见的时间复杂度有: O(1)常数阶;O(log2n)对数阶;O(n)线性阶;O(n2)平方阶.
算法的空间复杂度是指算法需要消耗的空间资源.其计算和表示方法与时间复杂度类似,一般都用复杂度的渐近性来表示.同时间复杂度相比,空间复杂度的分析要简单得多.
[font class="Apple-style-span" style="font-weight: bold;" id="bks_etfhxykd"]算法 Algorithm [/font]
算法是在有限步骤内求解某一问题所使用的一组定义明确的规则.通俗点说,就是计算机解题的过程.在这个过程中,无论是形成解题思路还是编写程序,都是在实施某种算法.前者是推理实现的算法,后者是操作实现的算法.
一个算法应该具有以下五个重要的特征:
1、有穷性: 一个算法必须保证执行有限步之后结束;
2、确切性: 算法的每一步骤必须有确切的定义;
3、输入:一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定除了初始条件;
4、输出:一个算法有一个或多个输出,以反映对输入数据加工后的结果.没有输出的算法是毫无意义的;
5、可行性: 算法原则上能够精确地运行,而且人们用笔和纸做有限次运算后即可完成.
算法的设计要求
1)正确性(Correctness)
有4个层次:
A.程序不含语法错误;
B.程序对几组输入数据能够得出满足规格要求的结果;
C.程序对精心选择的、典型的、苛刻的、带有刁难性的几组输入数据能够得出满足规格要求的结果;
D.程序对一切合法的输入数据都能产生满足规格要求的结果.
2)可读性(Readability)
算法的第一目的是为了阅读和交流;
可读性有助于对算法的理解;
可读性有助于对算法的调试和修改.
3)高效率与低存储量
处理速度快;存储容量小
时间和空间是矛盾的、实际问题的求解往往是求得时间和空间的统一、折中.
算法的描述 算法的描述方式(常用的)
算法描述 自然语言
流程图 特定的表示算法的图形符号
伪语言 包括程序设计语言的三大基本结构及自然语言的一种语言
类语言 类似高级语言的语言,例如,类PASCAL、类C语言.
算法的评价 算法评价的标准:时间复杂度和空间复杂度.
1)时间复杂度 指在计算机上运行该算法所花费的时间.用“O(数量级)”来表示,称为“阶”.
常见的时间复杂度有: O(1)常数阶;O(logn)对数阶;O(n)线性阶;O(n^2)平方阶
2)空间复杂度 指算法在计算机上运行所占用的存储空间.度量同时间复杂度.
时间复杂度举例
(a) X:=X+1 ; O(1)
(b) FOR I:=1 TO n DO
X:= X+1; O(n)
(c) FOR I:= 1 TO n DO
FOR J:= 1 TO n DO
X:= X+1; O(n^2)
“算法”一词最早来自公元 9世纪 波斯数学家比阿勒·霍瓦里松的一本影响深远的著作《代数对话录》.20世纪的 英国 数学家 图灵 提出了著名的图灵论点,并抽象出了一台机器,这台机器被我们称之为 图灵机 .图灵的思想对算法的发展起到了重要的作用.
算法是 计算机 处理信息的本质,因为 计算机程序 本质上是一个算法,告诉计算机确切的步骤来执行一个指定的任务,如计算职工的薪水或打印学生的成绩单. 一般地,当算法在处理信息时,数据会从输入设备读取,写入输出设备,可能保存起来以供以后使用.
这是算法的一个简单的例子.
我们有一串随机数列.我们的目的是找到这个数列中最大的数.如果将数列中的每一个数字看成是一颗豆子的大小 可以将下面的算法形象地称为“捡豆子”:
首先将第一颗豆子(数列中的第一个数字)放入口袋中.
从第二颗豆子开始检查,直到最后一颗豆子.如果正在检查的豆子比口袋中的还大,则将它捡起放入口袋中,同时丢掉原先的豆子. 最后口袋中的豆子就是所有的豆子中最大的一颗.
下面是一个形式算法,用近似于 编程语言 的 伪代码 表示
给定:一个数列“list",以及数列的长度"length(list)" largest = list[1] for counter = 2 to length(list): if list[counter] > largest: largest = list[counter] print largest
符号说明:
= 用于表示赋值.即:右边的值被赋予给左边的变量.
List[counter] 用于表示数列中的第 counter 项.例如:如果 counter 的值是5,那么 List[counter] 表示数列中的第5项.
1时).
写成递归函数有:
int fib(int n)
{ if (n==0) return 0;
if (n==1) return 1;
if (n>1) return fib(n-1)+fib(n-2);
}
递归算法的执行过程分递推和回归两个阶段.在递推阶段,把较复杂的问题(规模为n)的求解推到比原问题简单一些的问题(规模小于n)的求解.例如上例中,求解fib(n),把它推到求解fib(n-1)和fib(n-2).也就是说,为计算fib(n),必须先计算fib(n-1)和fib(n-2),而计算fib(n-1)和fib(n-2),又必须先计算fib(n-3)和fib(n-4).依次类推,直至计算fib(1)和fib(0),分别能立即得到结果1和0.在递推阶段,必须要有终止递归的情况.例如在函数fib中,当n为1和0的情况.
在回归阶段,当获得最简单情况的解后,逐级返回,依次得到稍复杂问题的解,例如得到fib(1)和fib(0)后,返回得到fib(2)的结果,……,在得到了fib(n-1)和fib(n-2)的结果后,返回得到fib(n)的结果.
在编写递归函数时要注意,函数中的局部变量和参数知识局限于当前调用层,当递推进入“简单问题”层时,原来层次上的参数和局部变量便被隐蔽起来.在一系列“简单问题”层,它们各有自己的参数和局部变量.
由于递归引起一系列的函数调用,并且可能会有一系列的重复计算,递归算法的执行效率相对较低.当某个递归算法能较方便地转换成递推算法时,通常按递推算法编写程序.例如上例计算斐波那契数列的第n项的函数fib(n)应采用递推算法,即从斐波那契数列的前两项出发,逐次由前两项计算出下一项,直至计算出要求的第n项.
【问题】 组合问题
问题描述:找出从自然数1、2、……、n中任取r个数的所有组合.例如n=5,r=3的所有组合为: (1)5、4、3 (2)5、4、2 (3)5、4、1
(4)5、3、2 (5)5、3、1 (6)5、2、1
(7)4、3、2 (8)4、3、1 (9)4、2、1
(10)3、2、1
分析所列的10个组合,可以采用这样的递归思想来考虑求组合函数的算法.设函数为void comb(int m,int k)为找出从自然数1、2、……、m中任取k个数的所有组合.当组合的第一个数字选定时,其后的数字是从余下的m-1个数中取k-1数的组合.这就将求m个数中取k个数的组合问题转化成求m-1个数中取k-1个数的组合问题.设函数引入工作数组a[ ]存放求出的组合的数字,约定函数将确定的k个数字组合的第一个数字放在a[k]中,当一个组合求出后,才将a[ ]中的一个组合输出.第一个数可以是m、m-1、……、k,函数将确定组合的第一个数字放入数组后,有两种可能的选择,因还未去顶组合的其余元素,继续递归去确定;或因已确定了组合的全部元素,输出这个组合.细节见以下程序中的函数comb.
【程序】
# include
# define MAXN 100
int a[MAXN];
void comb(int m,int k)
{ int i,j;
for (i=m;i>=k;i--)
{ a[k]=i;
if (k>1)
comb(i-1,k-1);
else
{ for (j=a[0];j>0;j--)
printf(“%4d”,a[j]);
printf(“n”);
}
}
}
void main()
{ a[0]=3;
comb(5,3);
}
3.回溯法
回溯法也称为试探法,该方法首先暂时放弃关于问题规模大小的限制,并将问题的候选解按某种顺序逐一枚举和检验.当发现当前候选解不可能是解时,就选择下一个候选解;倘若当前候选解除了还不满足问题规模要求外,满足所有其他要求时,继续扩大当前候选解的规模,并继续试探.如果当前候选解满足包括问题规模在内的所有要求时,该候选解就是问题的一个解.在回溯法中,放弃当前候选解,寻找下一个候选解的过程称为回溯.扩大当前候选解的规模,以继续试探的过程称为向前试探.
【问题】 组合问题
问题描述:找出从自然数1,2,…,n中任取r个数的所有组合.
采用回溯法找问题的解,将找到的组合以从小到大顺序存于a[0],a[1],…,a[r-1]中,组合的元素满足以下性质:
(1) a[i+1]>a,后一个数字比前一个大;
(2) a-i

1年前

6

qdxiaohei 幼苗

共回答了3个问题 举报

悬赏分有点低,不屑一顾!!

1年前

2

魅力nn花 幼苗

共回答了33个问题 举报

难证明有以下性质

1年前

2

lvzzlvzz 幼苗

共回答了4个问题 举报

没懂你题目什么意思 原题是这样的么?

1年前

0
可能相似的问题
Copyright © 2024 YULUCN.COM - 雨露学习互助 - 19 q. 0.234 s. - webmaster@yulucn.com