zoukankan      html  css  js  c++  java
  • 数据结构笔记(一)

    数据结构学习笔记

    1. 绪论

    1.1计算机与算法

    a.算法定义:是指基于特定的计算机模型,旨在解决某一信息处理问题而设计的一个指令序列。

    b.算法的要素:输入,输出,基本操作

    c.算法的性质:确定性与可行性,有穷性与正确性,鲁棒性。

    注:这里的鲁棒性是指算法要能够适应系统各种极端情况,以及一些在考虑范围内的变化。

    d.算法的效率:效率的前提是保证可计算性,然后再从时间和空间的角度度量算法的计算成本,进而依此尺度对不同算法进行比较和评判。

    1.2复杂度的度量

    a.时间复杂度:将算法的执行时间表示成输入规模的函数,这个函数定义为算法的时间复杂度,T(n)。

    b.渐进复杂度:T(n)的渐进上界f(n),即 T(n)<c*f(n).

    T(n)=O(f(n)),记号O() 有两条性质:1.O(C*f(n))=O(f(n)) ;2.a>b>0时,O(n^a+n^b)=O(n^a).

    c.空间复杂度:算法及运算过程中数据所需存储空间的大小。

    1.3复杂度分析

    几种渐进复杂度的定义和举例。

    1.4递归

    语录:分支和转向是算法的灵魂,函数和过程及其之间的调用,是经过抽象和封装之后,实现分支和转向的一个重要机制;而递归则是函数和过程调用的一种特殊形式,即允许函数和过程自我调用

    a.线性递归,减而治之。即每一次递归的深入都会得到一个规模更

    小的待求解问题,直至最小可解问题为止。算法实例:

    //求和函数
    int sum(int A[], int n){
        if (n < 1)
            return 0;//递归基
        else
            return sum(A, n - 1) + A[n - 1];
    }

    其中return 0;是递归基,是递归算法的必需品,是递归结束的条件,必须保证程序能够执行到这一点。递归分析的复杂度问题,上述算法的复杂度为:

    (递归调用的深度n)*(每一步执行的命令个数3) =  O(n)

    b.递归模式

    多递归基: 例子:数组倒置

    //倒置数组元素
    void reverse(int* A, int low,int high )
    {
        if (low < high)
        {
            //swap(A[low], A[high]);
            int temp;
            temp = A[high];
            A[high] = A[low];
            A[low] = temp;
            reverse(A, low + 1,high - 1);
        }
    }

    多向递归: 这里对比了蛮力版的求幂计算方法和多向递归方法的一个对比

    //计算2^n
    //蛮力解法
    _int64 power2BF_I(int n)
    {
        _int64 pow = 1;
        while (n-- > 0)
        {
            pow <<= 1;
        }
        return pow;
    }
    //计算2^n
    //多向递归
    inline _int64 sqr(_int64 a)
    {
        return a*a;
    }
    _int64 power2(int n)
    {
        if (n == 0)
            return 1;
        return (n & 1) ? sqr(power2(n >> 1) )<< 1:sqr(power2(n >> 1));//>>x,右移x位,是除2^x
    }

    对于复杂度来讲蛮力法的复杂度为O(n),而多向递归的复杂度为O(r),其中n=2^r.

  • 相关阅读:
    Python动态展示遗传算法求解TSP旅行商问题
    MOEAD算法中均匀权向量的实现---Python
    HDU 5294 多校第一场1007题 最短路+最小割
    POJ 3261 Milk Patterns sa+二分
    HDU 4292 FOOD 2012 ACM/ICPC Asia Regional Chengdu Online
    CodeForces 201A Clear Symmetry
    POJ 1679 The Unique MST 确定MST是否唯一
    POJ 3268 Silver Cow Party 最短路 基础题
    POJ 2139 SIx Degrees of Cowvin Bacon 最短路 水題
    POJ2229 Sumsets 基礎DP
  • 原文地址:https://www.cnblogs.com/simayuhe/p/5179671.html
Copyright © 2011-2022 走看看