zoukankan      html  css  js  c++  java
  • 第4章:减治法——《算法笔记

    思考:减治提供了一种思考问题的方式

    原问题与减一问题的关系

    原问题划分成保持语义的子问题,可能规整划分,可能划分不定

    我觉得减治与分治的共同点在于:1.问题的分解 2.子问题语义的保持(可以使用递归)

    减治只需求解一个子问题,减法了无需求解的子问题

    分治法需要归总子问题,并且归总的过程存在丰富的语义

    总而言之,分为两个思路:

    1.从减一问题转化为原问题。线性的数学归纳

    2.去除不必要的子问题,减小规模

    减去一个常量

    减去一个常量因子

    减去的规模可变

    减去一个常量

    规模为n的问题  ——>规模为n-1的问题

    减去一个常量因子

    规模为n的问题  ——>规模为n/2的问题

    减去的规模可变

    gcd(m,n)=gcd(n,m mod n)

    1.插入排序,将未排序元素插入已排序序列。

    前方有序,后方无序。

    插入动作:二分法搜索位置。

    已排序检查算法,大多数已排序序列排序

    2.拓扑排序

    无环有向图

    1.深搜

    2.减一治:源删除算法

    在剩下的有向图中找源点(没有入边)

    3.生成组合对象

    n!  (n-1)!

    剩余一个插入在n-1排列中

    满足最小变化要求

    johnson trotter算法

    字典序生成排列

    生成子集

    幂集:所有子集的集合

    减一:从空集开始,选择加一个元素与否——>两个新子集

    位串表示:每个位表示是否选中单个元素

    挤压序:

    位串之间最小变化:格雷码

    4.减常数因子算法

    折半查找

    假币问题:折半查找,三折查找

    俄式乘法:nxm=(n/2)x2m  (n-1)/2  x2m+m

    位表示

    5.减可变规模算法

    每次迭代减小的规模都不同

    第k小元素

    第k个顺序统计量

    中值

    排序,选中值

    基于划分的算法:

    快速选择算法:遍历一次,选择位置k元素A[k],划分分成大于,小于两部分。解决了更一般的问题:根据k大元素,划分了数组

    插值查找:假定数组分布为线性递增,线上照点

    二分查找:数字分布不定 

    二叉查找树的查找与插入

    左<根<右

    习题:

    渡河问题:船容纳两个小孩或一个大人

    交替问题:硬币前正后反——正反交替:相对位置数组:不要求下标从0开始

    n元素集合幂集:是否包含最后一个元素

    邻接矩阵检测连通性:寻找反例

    两两比赛一次,保证每个队伍不输给排名在后面的队伍:插排(冒泡可以么?)

    为什么同是基于比较,算法复杂度不一样?

    排序算法作用于链表?算法复杂度?

    是否要求随机访问

    插排

    i<j && A[i]>A[j] 一个倒置

    倒置数量对排序性能的影响?

    平均键值比较次数

    希尔排序

    dfs拓扑排序效率

    如何避免逆序结果

    顶点进入dfs栈的顺序取代退出栈的顺序

    寻找源或判定环

    使用源删除算法

    邻接矩阵,邻接表

    算法复杂度

    强连通分量

    dfs,死端编号,颠倒边,

    重复

    蛛网问题:

    不同路径数:排列组合

    生成排列算法:heap

    最后一个数与heap(n-1)交换一个元素

    n奇数:A[1]

    偶数:A[i]

    基于位串的算法按照挤压序生成子集

    生成位串算法

    递归/非递归

    基于二进制运算/数组

    二进制反射格雷码的非递归算法

    反转前一位串的最低非0位生成

    n元素k分量子集

    是否为最小变化算法

    格雷码与汉诺塔

    一个灯泡,n个开关。

    所有开关打开——灯打开

    需要尝试的次数

    尝试所有排列

    不同生成序列的位操作次数(数组操作次数)

    链表二分查找

    多维数据二分查找

    不只是分多维查找?

    只能使用两路查找的折半查找

    两路查找?

    三重查找

    比例查找

    每步最优,累计最优

    连续整数查缺失整数

    算法复杂度估计与n nlogn n^2比较

    选择预处理

    假币二分称重,三分

    复杂度

    约瑟夫斯问题

    发现模式

    n二进制位左循环移位得到结果

    gcd两次迭代后,规模至少少2(常数因子)

    衡量gcd算法规模

    用m,n,m-n?

    二叉查找树:

    删除键

    顶点连通度都为偶数,构造欧拉回路

    存在性证明?

    坏巧克力:1x1

    沿直线掰

    n张重叠薄饼,一次插入整体翻面

    按大小次序排序

  • 相关阅读:
    Xcode4.2 本地化 总结
    Android中后台线程如何与UI线程交互
    Android中后台线程如何与UI线程交互
    如何解决iOS内存错误
    如何解决iOS内存错误
    genymotion 和genymotion eclipse 插件安装 !
    genymotion 和genymotion eclipse 插件安装 !
    CoderForces 518C Anya and Smartphone (模拟)
    CodeForces 518B Tanya and Postcard (题意,水题)
    CodeForces 513A Game (水题,博弈)
  • 原文地址:https://www.cnblogs.com/qmcj/p/9096414.html
Copyright © 2011-2022 走看看