递归概念:直接或者间接调用自身的算法,称为递归运算。

分治思想:把一个规模为n的问题分解为k个规模较小的子问题,这些子问题相互独立且与原问题相等,递归解决子问题后再将结果合并

下方为一些应用函数。因为最近再学Python,下面示例方式均用Python代码体现。(逻辑不变,理解就好)

应用之二分法搜索:用分治法的典型例子,对已经排好序的n个元素中,找出某一个值。

思路为:将有序的n个元素大致的分为两半,取中间元素与 x比较,若大于则在右侧同样取剩下元素的中间值进行比较,以此类推

import math

def binary_search(x,list,n):

left =0

right =n-1

while left

middle = math.ceil((left+right)/2) ## 取大于或等于平均数的最小整数

if x== list[middle]:

print("第",middle,"数字为所查找值")

return

elif x>list[middle]:

left = middle

else:

right = middle-1

print("未找到该数值")

list =[1,2,3,4,5,6,7,8,9,10]

num = 8

n= 10

binary_search(num,list,n)

运行结果为:第 7 数字为所查找值

实际上,在Python中,是内置了函数课直接使用

list.index(num) ## 从列表中找出某个值第一个匹配项的索引位置

应用之合并排序:用分治策略对n个元素进行排序的算法

思路为:将待排序元素分成大小相近的两个子集,然后分别对子集进行排序,之后再将结果合并。

import math

def merge(listb,i,m,n):

lista=listb.copy()

j =m+1

k=i

while i<=m and j<= n:

if lista[i]<= lista[j]:

listb[k] = lista[i]

i +=1

k +=1

else:

listb[k] = lista[j]

j +=1

k +=1

if i>m:

for q in range(j,n+1) :

listb[j] = lista[q]

j+=1

else:

for q in range(i,m+1):

listb[k] =lista[q]

k +=1

def merge_sort(lista,left,right):

if left

middle =math.floor((left+right)/2)

merge_sort(lista,left,middle)

merge_sort(lista,middle+1,right)

merge(listb,left,middle,right)

lista = [2,4,3,1,6,7,5,9,8,10]

listb = lista.copy()

merge_sort(lista,0,9)

print(listb)

实际上在Python中,已经内置了相关函数,如下

result=lista.sort()

print(lista)

输出结果均为:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

应用之快速排序:用分治策略,对无序列表进行排序的算法

思路为:对输入的数列,从中选一个数字,把对应数字分别放置到左右两侧。然后对左右两侧的子数列再进行递归调用。

应用之线性时间选择:给定有序序列,找到该序列的第K小元素。也是使用分治策略。

思路为:若是找最大或者最小,是比较方便 ,若是找中位数就比较麻烦。举例如下,

(1)将n个输入元素划分成n/5(向上取整)个组,每组5个元素,最多只可能有一个组不是5个元素。用任意一种排序算法,将每组中的元素排好序,并取出每组的中位数,共n/5(向上取整)个。

(2)递归调用select来找出这n/5(向上取整)个元素的中位数。如果n/5(向上取整)是偶数,就找它的2个中位数中较大的一个。以这个元素作为划分基准。

递归与分治java策略实验报告_递归与分治策略–计算机算法设计与分析相关推荐

  1. 计算机算法设计与分析 动态规划 实验报告,动态规划法解最长公共子序列(计算机算法设计与分析实验报告).doc...

    动态规划法解最长公共子序列(计算机算法设计与分析实验报告) 实报 告 实验名称:任课教师::姓 名:完成日期:二.主要实验内容及要求: 要求按动态规划法原理求解问题: 要求交互输入两个序列数据: 要求 ...

  2. java象棋实验报告_中国象棋java程序设计实验报告

    中国象棋java程序设计实验报告 东北大学秦皇岛分校信息与计算科学系Java 程序设计实验报告专业名称 信 息 与 计 算 科 学班级学号 7080206学生姓名 彭 军指导教师 王 薇完成时间 20 ...

  3. java象棋实验报告_中国象棋java程序设计实验报告.doc

    中国象棋java程序设计实验报告.doc 东北大学秦皇岛分校 信息与计算科学系 Java 程序设计实验报告 专业名称 信息与计算科学 班级学号 7080206 学生姓名 彭 军 指导教师 王薇 完成时 ...

  4. 哈工大威海算法设计与分析_计算机算法设计与分析第一章 算法概述

    晓强Deep Learning的读书分享会,先从这里开始,从大学开始.大家好,我是晓强,计算机科学与技术专业研究生在读.我会不定时的更新我的文章,内容可能包括深度学习入门知识,具体包括CV,NLP方向 ...

  5. java浏览器实验报告_关于java实验报告模板

    关于java实验报告模板 1.掌握Java Applet的程序结构和开发过程. 2.学会编写Applet对应的HTML文件,掌握从HTML文件向Applet传递参数的方法. 3. 掌握文本框对象的使用 ...

  6. java词法分析器实验报告_词法分析器实验报告(JAVA)

    实验一.词法分析实验 商业软件工程专业   张树恒  201506110093 一.实验目的 通过设计一个词法分析程序,对词法进行分析,加强对词法的理解,掌握对程序设计语言的分解和理解. 二.实验内容 ...

  7. 计算机算法设计与分析之----- 递归与分治策略

    递归与分治策略 [Master定理] 快速排序 优化 逆序对(归并算法) 火柴排队[NOIP2013 提高组] 集合求和 方法一: 递归 (2^n ) 方法二: 组合数学知识 [HNOI2008]越狱 ...

  8. 计算机算法设计与分析 递归实现归并排序和非递归实现归并排序

    递归实现归并排序 输入排序的数组的长度,程序用随机数生成对应的数组,之后递归调用排序,排序过程中思想类似于二分,当每个最小分组中只有一个元素时开始返回,直到排完整个数组. #include<bi ...

  9. java程序实验报告_实验报告一

    实验一 实验二 打开eclipse,创建一个java程序,再创建一个包,包下面创建一个类. 在第六行输入 System.out.println("My name is wujing, I l ...

最新文章

  1. 基于C++的图像散度计算
  2. android studio2.3.2增加jni
  3. docker 主进程 日志_[docker]从一个实例,一窥docker进程管理
  4. hdu 1700 (圆的内接三角形 要周长最大)
  5. java 隐藏文件_java-如何仅列出jtree中的非隐藏文件和非系...
  6. 青瓷引擎之纯JavaScript打造HTML5游戏第二弹——《跳跃的方块》Part 3
  7. 英雄联盟手游主播否认部分英雄后期的作用,难道阿卡丽没未来?
  8. [css] 你有使用过哪些栅格系统?都有什么区别呢?
  9. 这样才是代码管理和 Commit 的正确姿势 | 研发效能提升36计
  10. 数独解题程序的python实现_python实现自动解数独小程序
  11. android 排队系统设计,基于android银行排队叫号系统毕业设计论文+设计源码+答辩PPT...
  12. 拆分器控件Splitcontainer
  13. 生活就像北京的地铁1
  14. spark submit提交方式
  15. 更强大、更灵活、更全面丨一文搞懂DolphinDB窗口计算
  16. 文件包含的漏洞、原理、利用
  17. html 文本 标签
  18. 彩票,双色球,模拟开奖小项目
  19. 3.vue开发实例演示
  20. 数字微镜器件(DMD)呈现不同灰度(强度)原理的验证实验

热门文章

  1. java播放ape音频,Java使用Jaudiotagger读取Mp3及Flac音频操作
  2. python根据日期增加6个月_Python实现按当前日期(年、月、日)创建多级目录的方法...
  3. 在html中创建最小的文本标签是,HTML里面的文本标签
  4. redis映射的概念_搭建分布式Redis Cluster集群与Redis入门
  5. android java线程从入门到精通
  6. PDF转换为word,java
  7. php微信支付jsapi,ThinkPHP实现微信支付(jsapi支付)
  8. C语言求两个数最大公约数和最小公倍数
  9. 推荐-最新1000多个单机游戏下载,不用注册直接下载!(4)
  10. leetcode系列-349.两个数组的交集