`

【算法复习三】算法设计技巧与优化----算法设计技巧

 
阅读更多

一,例题:找出n个自然数(1,2,3,,n)r个数的组合。

例如,当n=,r=3时,所有组合为:

12 3 1 2 4

12 5 13 4

13 5 14 5

23 4 23 5

24 5 34 5

total=10 {组合的总数}

•算法设计

1)n个数中r的组合,其中每r个数中,数不能相同;

2)任何两组组合的数,所包含的数也不应相同。例如,5、4、3与3、4、5。为此,约定前一个数应小于后一个数。将上述两条作为约束条件;

3)当r=3时,可用三重循环进行枚举。


【解法一】穷举法

【解法二】穷举中加入限界(第一个输出的最多是3,第二个最多是4,第三个最多5)

【解法三】递归法求解

在循环算法设计中,对n=5的实例,每个组合中的数据从小到大排列或从大到小排列一样可以设计出相应的算法。但用递归思想进行设计时,每个组合中的数据从大到小排列却是必须的;因为递归算法设计是要找出大规模问题与小规模问题之间的关系。

分析n=5,r=3时的10组组合数。

1)首先固定第一个数5,其后就是n=4,r=2的组合数,共6个组合。

2)其次固定第一个数4,其后就是n=3,r=2的组合数,共3个组合。

3)最后固定第一个数3,其后就是n=2,r=2的组合数,共1个组合。

至此找到了5个数中3个数的组合4个数中2个数的组合、3个数中2个数的组合、2个数中2个数的组合的递归关系。

算法:(两种递归写法)


【解法四】回溯法求解


二,例题:警察局抓了abcd四名偷窃嫌疑犯,其中只有一人是小偷。审问中

a说:我不是小偷。
b说:c是小偷。
c说:小偷肯定是d
d说:c在冤枉人。
现在已经知道四个人中三人说的是真话,一人说的是假话,问到底谁是小偷?

算法设计

a,b,c,d将四个人进行编号,号码分别为1234。则问题可用枚举尝试法来解决。

用变量x存放小偷的编号,则x的取值范围从1取到4,就假设了他们中的某人是小偷的所有情况。四个人所说的话就可以分别写成:

a说的话:x!=1

b说的话:x==3

c说的话:x==4

d说的话:x!=4

源码:

三,例题:循环赛日程编排

问题定义

设有n=2k个运动员进行的单循环赛,要求设计一个满足一下条件的比赛日程表:

1、每个选手必须与其他n-1个选手各赛一次;

2、每个选手一天只能参赛一次;

3、循环赛在n-1天内结束。

二分治策略递归算法

将所有选手分为两半,则n个选手的比赛日程表可以通过n/2个选手的比赛日程表来决定,递归的进行二分治划分,直到只剩下两个选手时,比赛日程表的制定就很简单了。

时间复杂度为O(n`2)

递归算法1设计

递归函数dimidiata(intI,intj,int n)

i起始行号

j—终止行号

n—问题规模

用二分治分解二维表,可分解出左上、左下、右上、右下4个部分。

算法的递归方程为:T(n)=2T(n/2)+O(n2/2)

算法的空间复杂度:3*k个整型栈辅助空间。

时间复杂度为:O(n`2)

算法4—二维递推算法

分析数据,找出递推关系:n=8为例。

分析如下:

1、先做出规模为1的问题的解,即左上角的1*1的方阵,递推规模为k=2`02`12`2(2*2)的方阵。

2、左下角新增加的每一行列的数据是其“对应行列”数据+规模/2

“对应行列”的含义:

行号=当前行号规模/2

列号=当前列号

3、右上角与左下角数据一样。

“对应行列”的含义:

列号=当前列号规模/2

行号=当前行号

4、右下角与左上角数据一样。

“对应行列”的含义:

行号=当前行号规模/2,列号=当前列号

列号=当前列号规模/2,行号=当前行号

算法4分析

时间复杂度为O(n2)

算法


如果队伍数为奇数算法



分享到:
评论

相关推荐

    算法设计技巧与分析学习资料.rar

    《算法设计技巧与分析》学习资料包包含了丰富的资源,旨在帮助学习者深入理解和掌握各种算法设计方法及其在实际问题中的应用。以下是对这些资源的详细解读: 1. **动态规划**:动态规划是一种解决最优化问题的有效...

    算法设计技巧与分析_(沙特)阿苏外耶

    《算法设计技巧与分析》是沙特学者阿苏外耶的一部专著,旨在深度解析计算机算法的核心原理和设计策略。这本书对于任何希望在编程和软件开发领域深化理解的人来说,都是不可或缺的参考资料。算法,作为计算机科学的...

    算法复习要点整理

    算法复习不仅是对基础知识的回顾,更是对算法设计思想和技巧的深化理解。无论是递归的自我调用,还是蛮力法的直观求解,或是分治法、减治法、变治法和动态规划的高级策略,每一种方法都有其独特之处,适用于不同的...

    算法分析与设计复习资料

    这份"算法分析与设计复习资料"包含了该领域的重要概念、方法和技术,旨在帮助学习者准备相关的考试或深入理解算法设计的基础知识。 一、算法基础 算法是一系列解决问题的明确指令,通常用于数据处理、计算或其他...

    天津工业大学《算法设计与分析》期末复习题(含答案).pdf

    ### 高级算法设计技巧 - 算法的优化,包括循环优化、递归优化等。 - 特定问题的高级策略,例如网络流问题的Ford-Fulkerson算法等。 - 用于解决特定类型问题的启发式算法,例如用于旅行商问题(TSP)的遗传算法、模拟...

    数据结构与算法复习提纲(详细版)

    通过以上分析,我们不难看出,《数据结构与算法复习提纲(详细版)》不仅覆盖了数据结构与算法的基础理论,还深入探讨了C++编程语言的应用实践,以及算法优化和复杂度分析的核心方法。这是一份全面而深入的学习资料...

    同济大学 《算法分析与设计》课件

    2. **第二章:算法设计技巧** - 这部分可能深入讲解了常见的算法设计技术,如分治法、动态规划、贪心算法和回溯法。每个技术的原理、适用场景和实例都会被详细阐述。 3. **第四章:算法分析** - 算法分析是评估算法...

    算法设计与分析考试资料算法设计与分析复习资料

    《算法设计与分析》是计算机...总的来说,这份“算法设计与分析考试资料”将引导你系统地学习和复习算法设计与分析的关键概念,通过理论与实践相结合,助你在考试中取得优异成绩,为未来的计算机科学事业打下坚实基础。

    计算机算法设计与分析期末考试复习资料汇总

    2. **算法设计技巧**:包括分治法、动态规划、贪心策略、回溯法、分支限界法等。每个方法都有其适用场景,理解和掌握这些设计策略是解题的关键。 3. **排序与查找算法**:如冒泡排序、选择排序、插入排序、快速排序...

    信息学奥林匹克竞赛复习资料3--算法与策略(NOIP).doc

    算法设计时要权衡时间与空间的使用,合理分配资源,达到时间效率和空间效率的最优平衡。 递归作为一种算法设计的策略,它允许函数直接或间接地调用自身。递归算法的设计简洁明了,易于理解和实现,尤其在处理具有自...

    南京理工大学算法考试复习重点及部分习题.zip

    南京理工大学的算法设计与分析课程是计算机科学领域的重要组成部分,主要涵盖了如何有效地解决问题并实现高效算法的方法。在准备这门课程的考试时,学生需要掌握一系列核心知识点,这些知识点不仅对于考试至关重要,...

    大学复习资料-计算机算法设计与分析.rar

    10. **算法设计技巧**:包括归纳法、逆向思维、数学建模、迭代优化等,这些技巧有助于创新和改进算法设计。 以上是计算机算法设计与分析的一些基本知识点,学习这个主题不仅需要掌握各种算法,还要理解它们的原理,...

    算法分析与设计-赵端阳源代码与ppt

    这个压缩包包含了赵端阳教授关于算法分析与设计的课程源代码和PPT讲义,旨在帮助学习者深入理解算法的核心概念、设计技巧以及性能分析方法。 源代码部分是学习算法实现的重要组成部分,它提供了实际操作和调试的...

    中科大 王子磊老师的《算法设计与分析》复习资料

    通过解答习题,可以检验对算法设计与分析的理解程度,找出知识盲点,进一步提高解题技巧。 总之,这份《算法设计与分析》复习资料全面覆盖了算法设计与分析的重要概念、方法和实例,对于准备相关考试、提升编程能力...

    中科大算法设计与分析复习资料.zip

    这份名为“中科大算法设计与分析复习资料.zip”的压缩包包含了一系列针对中国科学技术大学(中科大)算法分析与设计课程的复习材料。这些资源对于准备期末考试的学生来说极为宝贵,涵盖了多个重要主题,如分布式算法...

    算法分析与设计主要内容复习总结与习题

    - **算法设计技巧**:如迭代与递归、分治与动态规划的转换、贪心策略的选择等。 通过以上内容的学习,不仅能够掌握各种经典算法的实现,还能培养分析和解决问题的能力。在实际编程中,要灵活运用这些算法,结合...

    算法设计与分析期末复习笔记+期末习题解答

    1. 算法设计与分析:这部分内容涉及到算法基础操作的时间复杂度,渐近分析,包括对函数进行增长趋势判断和最差情况输入的极限求解。还包括原地算法的定义,即额外辅助空间需求为常量级的算法。 2. 分治法:提到算法...

    算法设计与分析复习资料

    《算法设计与分析复习资料》是一份针对计算机科学与信息技术领域的核心课程——算法设计与分析的复习资源。这份资料旨在帮助学习者系统地理解和掌握算法的基本概念、设计方法以及性能分析,为应对相关考试或提升编程...

Global site tag (gtag.js) - Google Analytics