zoukankan      html  css  js  c++  java
  • 分治法以及快速排序

    分治法

      分治法(divide and conquer,D&C):将原问题划分成若干个规模较小而结构与原问题一致的子问题 ;递归地解决这些子问题,然后再合并其结果,就得到原问题的解。
      容易确定运行时间,是分治算法的优点之一。
      分支模式在每一层递归上都有三个步骤:
        --分解(Divide):将原问题分解为一系列子问题;
        --解决(Conquer):递归地解各子问题。若子问题足够小,则直接有解;
        --合并(Combine):将子问题的结果合并成原问题的解。
      分治法的关键点:
        原问题可以一直分解为形式相同子问题,当子问题规模较小时,可自然求解,如一个元素本身有序
        子问题的解通过合并可以得到原问题的解
        子问题的分解以及解的合并一定是比较简单的,否则分解和合并所花的时间可能超出暴力解法,得不偿失

    快速排序算法

      1、分解:数组A[p..r]]被划分成两个子数组A[p..q-1]和A[q+1,r],使得A[q]为大小居中的一个数,左侧A[p..q-1]中的每一个元素都小于等于它,而右侧A[q+1,r]中的每个元素都大于等于它。其中计算下标q也是划分过程的一部分
      2、解决:通过递归调用快速排序,对子数组A[p..q-1]和A[q+1,r]进行排序
      3、合并:因为子数组都是原址排序的,所以不需要合并,数组A[p..r]已经有序
      所以划分非常重要,具体一些划分方法以及优化在下一篇博客介绍。

  • 相关阅读:
    对scrapy经典框架爬虫原理的理解
    js的处理技巧
    网站登陆的两种方法
    scrapy批量下载图片
    [转]解决scrapy下载图片时相对路径转绝对路径的问题
    scrapy爬取西刺网站ip
    logging的使用方法
    scrapy中的response
    scrapy中的request
    scrapy.Spider的属性和方法
  • 原文地址:https://www.cnblogs.com/xiaoyh/p/10263355.html
Copyright © 2011-2022 走看看