博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
排序算法-10-算法-分治法(Divide and Conquer)
阅读量:2384 次
发布时间:2019-05-10

本文共 999 字,大约阅读时间需要 3 分钟。

##Divide and Conquer - 分治法 在计算机科学中,分治法是一种很重要的算法。分治法即**『分而治之』**,把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个思想是很多高效算法的基础,如排序算法(快速排序,归并排序)等。

###分治法思想 分治法所能解决的问题一般具有以下几个特征:

  1. 问题的规模缩小到一定的程度就可以容易地解决。
  2. 问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质。
  3. 利用该问题分解出的子问题的解可以合并为该问题的解。
  4. 该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子问题。

分治法的三个步骤是:

  1. 分解(Divide):将原问题分解为若干子问题,这些子问题都是原问题规模较小的实例。
  2. 解决(Conquer):递归地求解各子问题。如果子问题规模足够小,则直接求解。
  3. 合并(Combine):将所有子问题的解合并为原问题的解。

分治法的经典题目:

Divide and Conquer - 分治法 在计算机科学中,分治法是一种很重要的算法。分治法即『分而治之』,把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个思想是很多高效算法的基础,如排序算法(快速排序,归并排序)等。

分治法思想 分治法所能解决的问题一般具有以下几个特征:

问题的规模缩小到一定的程度就可以容易地解决。 问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质。 利用该问题分解出的子问题的解可以合并为该问题的解。 该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子问题。 分治法的三个步骤是:

分解(Divide):将原问题分解为若干子问题,这些子问题都是原问题规模较小的实例。 解决(Conquer):递归地求解各子问题。如果子问题规模足够小,则直接求解。 合并(Combine):将所有子问题的解合并为原问题的解。

分治法的经典题目:

  1. 二分搜索
  2. 大整数乘法
  3. Strassen矩阵乘法
  4. 棋盘覆盖
  5. 归并排序
  6. 快速排序
  7. 循环赛日程表
  8. 汉诺塔

转载于:https://my.oschina.net/corwien/blog/693536

你可能感兴趣的文章
excel 使用笔记
查看>>
odoo tree视图默认分组条件
查看>>
odoo10 one2many子字段onchange问题
查看>>
Docker cp 命令
查看>>
Web接口测试工具(postman/fiddler)
查看>>
VBox下扩展Ubuntu根分区大小的方法
查看>>
ubuntu docker命令免sudo 执行
查看>>
Docker容器开机自动启动
查看>>
给一个正在运行的Docker容器动态添加Volume
查看>>
关于Docker目录挂载的总结
查看>>
docker 主机 容器通信
查看>>
wkhtmltopdf 中文参数详解
查看>>
odoo 中 wkhtmltopdf 页码的读取(js)
查看>>
用 strcoll 实现中文按拼音排序
查看>>
linux adduser-s /sbin/nologin和/bin/false的区别
查看>>
linux 修改用户的shell
查看>>
浅析ATO,MTO和ETO
查看>>
Python多进程不要使用TimedRotatingFileHandler
查看>>
CSS语法和CSS优先级
查看>>
undercore.js 的几个方法
查看>>