• 算法设计


    掌握

      1.C程序设计语言

      2.知道程序员进行编程、测试,并进行必要的优化

      3.常用数据结构及其上的常用操作

      4.排序算法、查找算法

      5.灵活运用各种算法设计策略

    指针:很多数据结构都是基于指针实现的

      链表、链式队列、链栈、二叉树……

      本质:一个用来存储地址的变量

      常指针:一旦赋值后就不能修改。例,数组名:存储空间的首地址。当形参声明为指针时,可以将数组名作为实参进行传递。

      参数传递:当指针作为函数参数传递时,需要特别主语C语言中的“值”传递原则。

        C函数形参、实参之间只是“值传递”。

        调用时,实参应该是指针的“地址”(或指向指针的指针)

        

     线性表:线性结构

      最简单、最常见

      线性表的长度、空表、前驱结点、后继节点

      线性表节点:表元、记录。同一类型的数据,可由若干成分组成。唯一标识的成分,关键字(键)

      存储:

        (1)顺序存储:

          优:访问方便,可以直接访问线性表中的任意节点,loc(ai)=loc(a1)+(i-1)*l  ;  

          缺点:不利于插入、删除;大小固定,浪费大量存储空间

        (2)链式存储:用链表存储

          缺点:存储地址指针,浪费空间;直接访问节点不方便

          分类:单链表、循环链表、双向链表

    队列(Quene):先进先出(FIFO)

      队首:出队、队尾:进队

      存储:队列(顺序存储)、链队列(链表)

      优先级队列:每次出队的是队列中最高优先级的元素

    栈(Stack):后进先出(LIFO)

      栈顶:进栈,出栈;栈尾

      存储:顺序栈、链栈

      注意:同以步骤操作时,入栈的顺序由出栈的顺序决定,不可颠倒。

      小顶堆、大顶堆

      可以看做是一颗完全二叉树。堆与一颗完全二叉树对应,但堆本身是线性表

      应用:堆排序。

    数组:

      最常用的数据结构

      常用顺序存储的线性表

      维数、多维数组(表示矩阵:对称矩阵、三角矩阵、三对角矩阵)

      分类:静态数组(顺序存储结构)、动态数组(链式存储结构)

      稀疏矩阵:存储:用顺序存储结构的三元组存储,分别记录行、列、值

    树:

      非线性数据结构,是递归的(由子树构成,子树又由更小的子树构成)

      根节点、子树、节点的度、树的度、树的深度、有序树、无序树

      树的遍历:前序、后序、层序

    二叉树:

      非线性数据结构,具有递归性质

      

      

      二叉树的遍历:先序、中序、后序、层序

      二叉排序树:

        或者是一棵空树,或者是具有下列性质的二叉树

        (1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;
        (2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;
        (3)左、右子树也分别为二叉排序树;
        (4)没有键值相等的结点。

          

      完全二叉树:所有非终端节点的值均不大于(或小于)其左右孩子节点的值

        与二叉排序树的区别

        与满二叉树的区别

      B树、B-树、B+树、B*树

     

       平衡二叉树

      转移矩阵:第n次结果只受第n-1的结果影响,即只与当前所处状态有关,而与过去状态无关

      邻接矩阵 :分为有向图(对称)、无向图两种

      优先矩阵 :有权重

        状态矩阵

    树、森林和二叉树的转换

    三叉链表

    Huffman树:最优树

      带权路径(路径长度与节点权的乘积)最短的树。

      哈夫曼树叶子节点才是有效数据节点!

      应用:数据的最小冗余编码问题

      哈夫曼编码:是一个通过哈夫曼树进行的一种编码,一般情况下,以字符:‘0’与‘1’表示。编码的实现过程很简单,只要实现哈夫曼树,通过遍历哈夫曼树,规定向左子树遍历一个节点编码为“0”,向右遍历一个节点编码为“1”,结束条件就是遍历到叶子节点!

    图:

      节点之间的关系可以是任意的

      图的存储:邻接矩阵、邻接表(节点表:顺序;关系表:链接)

      拓扑排序

      特点 性质

    算法设计技术:重要:递归法、贪心法、回溯法

    迭代法:

      应用:数值计算近似求解。

      注意:1,方程无解    2,迭代公式选择不当,活呆呆的初始近似根选择不合理

        解决:1.考察方程是否有解    2.程序中对迭代的次数给予限制

    穷举搜索:枚举法

      应用:从候选解中选出问题的解

      条件:1.解决的问题有有限中可能   2.没有更好的算法时

    递推法:

      利用问题本身所具有的一种递推关系求问题的解

      应用:Fibonacci级数

    递归法:

       阶段:递推,回归

      应用:Fibonacci数列、背包问题

      程序分析:1.找出递归出口,以及出口条件 ;

    回溯法:试探法

      应用:N后问题

      程序分析:要有回溯代码,即各种可能都试一遍

    贪心法:

      不追求最优解,只希望得到较为满意解的方法;

      已当前情况作为基础做出最优选择,而不考虑各种可能的整体情况;

      所有贪心法不要回溯

      一般可以快速得到满意的解。

      应用:装箱问题

    分治法:

      最广泛

      应用:Hanoi塔问题

    动态规划法:

      背包问题:介绍

      与分治法最大的差别是:适合于用动态规划法求解的问题,经分解后得到的子问题往往不是互相独立的(即下一个子阶段的求解是建立在上一个子阶段的解的基础上,进行进一步的求解)。

    折半查找:

      难点:确定待查关键字是下标为low?high?。示例法

    分支界限法

    排序算法

      快速排序

      堆排序

      基数排序

      归并排序:  图示

      希尔排序

      冒泡排序

      直接选择排序

      

      

      

      

    1.第一遍答题完成,

      一定要第二遍连着检验,因为第一题是在局部认识的情况下答题,第二遍是全面认识下的检查

      最少两遍。

    2.先看主函数,再看方法

    3.

    4.注意指针。** -> &   ;实参到形参  * -> &   ;给指针赋值,加&  ;

      判断是,注意==的情况

      函数指针声明,加*  ;属性指针声明,加*  ;

      数组是从0开始,与之相关的判定条件需注意;

      注意n++、++n、n--、--n的不同,选择正确的

      while循环:注意++,--,跳出循环前后是否需要--,++

      判断条件,注意先后顺序

      初始值的设定->操作数n++、++n、n--、--n

      数组作为形参,只传数组名就可以,注意指针需要加&

      指针初始化:(类型*)malloc(sizeof(类型))

      形参为   **形参名   ,实参为   &指针名 

    5.寻找最优方案,有最优方案的比较

      题目给出要用的算法,注意代码是否体现

    6.

       C语言中,''是字符串数组的结束标志,编程时注意

      代码中输出问题的提示,给出了操作的意图,需注意认真阅读

      

      

  • 相关阅读:
    Zend Framework 入门(2)—多国语言支持
    Zend Framework 入门(1)—快速上手
    国外主流PHP框架比较
    PHP经验集锦
    PHP的GD库函数大全
    最好最实用的PHP二次开发教程
    我的ECshop二次开发从零开始
    Java中实现复制文件或文件夹
    matlab中freqz的用法以及多项式的展开
    matlab滤波器的设计
  • 原文地址:https://www.cnblogs.com/panpanwelcome/p/5836892.html
Copyright © 2020-2023  润新知