zoukankan      html  css  js  c++  java
  • 算法设计与分析基础读书笔记1

    一、什么是算法

      1.算法:是一系列解决问题的明确指令,也就是说对于符合一定规范的输入,能够在有限的时间内获得要求的输出

      2.算法要点:

        (1)算法的每个步骤都必须没有歧义,不能有半点含糊

        (2)必须认真确定算法所处理的输入的值域

        (3)同一算法可以用几种不同的形式来描述

        (4)同一问题,可能存在几种不同的算法

        (5)针对同一问题的算法可能基于完全不同的解题思路,而且解题速度会有明显的不同。

    二、算法问题求解基础

      1.算法是问题的程序化解决方案

      2.理解问题

      3.了解计算设备的性能、

        (1)随机存取(RAM):主要假设是:指令逐条运行,每次执行一步操作。设计在这种机器上运行的算法称为顺序算法。  

        (2)并行算法:同一时间执行多条操作,称之为并行运算

      4.在精确解法和近似解法之间做出选择

        (1)算法设计技术:用算法解题的一般性方法,用于解决不同计算领域的多种问题

      5.确定适当的数据结构.

      6算法的描述

      7.算法的正确性证明

      8.算法的分析:时间效率;空间效率

    三、重要问题类型

      1.排序

        (1)键:

        (2)排序算法两个特性:

          稳定:如果排序算法保留了等值元素在输入中的相对顺序,那么可以说它是稳定的。一个稳定算法输出的列表将会把成绩相同的学硕仍然按照字母的顺序排序。将隔很远位置的键交换位置的算法虽然不稳定,但是速度往往很快。

          算法需要的额外存储空间。在位的:一个算法不需要额外的存储 空间。

      2.查找:在给定的集合汇总找一个给定的值(键查找)

        (1)查找算法没有稳定性问题。

      3.字符串处理

        (1)字符串匹配

      4.图问题

        (1)图是由一些顶点构成的集合。其中某些顶点由边相连。

        (2)基本图算法:图的遍历算法;最短路径算法;有向图的拓扑排序

        (3)旅行商问题(TSP):找出访问n个城市的最短路径,并且保证每个城市只访问一次

      5.组合问题

        。。。

      6几何问题

        (1)最近对问题:求的是给定平面中的n个点,找出距离最近的两个点

        (2)凸包问题:要求找出一个能把给定集合中所有点都包含在里面的最小凸多边形

      7.数值问题

        。。。

    四、基本数据结构

      1.线性数据结构:

        (1)两种基本的数据结构:

          数组:n个相同的数据类型的元素构成的序列,连续存储在计算机的存储器中,通过下标访问这些元素

              数组可以实现多种其他的数据结构,如字符串

              数组查找效率高,插入删除效率低

          链表:由0个或者多个节点构成的序列,每个节点包含数据和指针的链接

              单链表中,除了尾节点,每个节点都包含指向下一个元素的指针

              优点:链表不需要事先分配任何存储空间,插入和删除效率高,查找效率低

          数组和链表都属于列表这种更抽象的数据结构,

        (2)栈:插入和删除都在栈顶进行的列表

           运转方式:后进先出(LIFO)

        (3)队列:

          出队:只在队头删除元素

          入队:只在队尾插入元素

          运行方式:先进先出(FIFO)

      2.图

        (1)定义:G=<V,E>由两个集合来定义,一个有限集合V,元素称为顶点;另外一个有限集合E,元素是一对顶点,称之为边

        (2)无向边:顶点之间没有顺序

        (3)无向图:图G中的所有边都是无向的。

        (4)有向图:如果每一条边都是有向的,则图本身就是有向的,称之为有向图

        (5)顶点(u,v),u称为尾,v称为头

        (6)图的表示:邻接矩阵或者邻接表

        (7)图是稀疏的用邻接表来存储,图是稠密的用邻接矩阵来存储。

        (8)加权图:权重矩阵(成本矩阵)

        (9)连通性和无环性。

        (10)简单路径:一条路径上所有的顶点都是互不相同的,路径长度就是讲路径代表的顶点序列中的顶点数目减1,恰好与路径所包含的边的数目是一致的。

        (11)有向路径:顶点的序列,序列中的每一对顶点都会被一条边连接起来,边的方向等于从第一个顶点指向下一个顶点的方向。

        (12)连通:图中的每一对顶点u和v都有一条从u到v的路径

      3.树

        (1)自由树:连通无回路图,如下图所示:

        

        (2)森林:无回路图但不一定连通的图,每一个分量都死一棵树

        

        (3)树的特性:树的边数总比定点数少一

          |E| = |V| - 1

        (4)有根树特性:树的任意连个顶点之间总是恰好存在一条从一个顶点到另一个顶点的简单路径。

        (5)状态空间树:回溯和分支界限

        (6)树的高度:从根到叶节点的最长简单路径的长度

        (7)二叉树:定义为有序树,其所有顶点的子女个数都不超过两个。二叉树是一个递归的定义。

        

        (8)二叉查找树:父母顶点的数字比左子树中的数字大,比右子树中的数字小

        

        (9)对于高度为h,具有n个顶点的二叉树有下面的不等式

         

      4.集合与字典

        (1)集合:互不相同项的无序不重复组合;项被称为元素;

        (2)集合与列表的两个主要差别:集合不能包含相同的元素,但是列表可以;结合元素是无序组合,改变集合元素的顺序并不会改变集合。

        (3)字典:从结合中查找一个给定的元素,增加一个新元素和删除一个元素。

        

        

  • 相关阅读:
    leetcode 131. Palindrome Partitioning
    leetcode 526. Beautiful Arrangement
    poj 1852 Ants
    leetcode 1219. Path with Maximum Gold
    leetcode 66. Plus One
    leetcode 43. Multiply Strings
    pytorch中torch.narrow()函数
    pytorch中的torch.repeat()函数与numpy.tile()
    leetcode 1051. Height Checker
    leetcode 561. Array Partition I
  • 原文地址:https://www.cnblogs.com/bigdata-stone/p/10440177.html
Copyright © 2011-2022 走看看