zoukankan      html  css  js  c++  java
  • 数据结构与算法分析

    数据结构:大量数据的组织方法;

    算法分析:算法运行时间的估算。涉及到计算效率。

    设想,如果能把时间限制从16年减至不到1秒,不很神奇吗?

    在很多问题中,一个重要的观念是:写出一个可以工作的程序并不够。如果这个程序在巨大的数据集上运行,运行时间就成了重要的 问题。

    算法,是为求解一个问题需要遵循的、被清楚地指定的简单 指令的集合 。

    对于一个问题,一旦给定某种算法,确定其是正确的,那么接下来重要的一步就是该算法花费的时间和空间等资源量 的问题。也就是说,设计算法主要关心两个方面:运行快不快(性能),占用内存如何(资源花费)。

     

    定义:如果存在正整数c和n0,使得当N>=n0时候,T(N)<=cf(N),则记为T(N)=O(f(N))(注意这里已经省去了常数c 的影响)

    大O表示法指出了算法有多快。大O表示法说的是最糟的情形。除了最糟糕情况下的运行时间,还要考虑平均情况 下的运行时间,这很重要。

    如何理解N???n表示数据长度!!!

    当我们说T(N)=Of((N))时候,我们是在保证函数T(N)是以不快于f(N)的速度增长;因此,f是T的一个上界。

    如下:T(N)=O(2N2)或者T(N)=O(N2+N),均是不合习惯的,应该表示为T(N)=O(N2)

     

    运行时间计算例子:
    计算一个i3求和的例子:

    Sum(int N)
    {
        int i, PartialSum;
    
        PartialSum = 0;           //1
        for (i = 1;i <= N;i++)    //2
            PartialSum += i*i*i;  //3
        return PartialSum;        //4
    } 

    声明不计时间,第1和第4行各占1个时间单元:1+1

    第3行,4个运算;判断N次,4N;

    第2行,初始化1+N+N(自增),2N+2;

    总共:2+4N+2N+2=6N+4;因此,我们说该函数是O(N)

     

    基本算法设计策略:

    1.贪心法

    思想:总是做出在当前看来是最好的选择。也就是说,贪心法并不从整体最优上加以考虑,它所做出的选择只是在某种意义上的局部最优选择。

              虽然贪心法不是对所有问题都能得到整体最优解,但对范围相当广的许多问题它能产生整体最优解。

    比如找硬币问题

    2.分治法

    动态规划

    回溯法

    分支限界法

    随机化算法等

     

     

     

  • 相关阅读:
    python+selenium之页面元素截图
    selenium八大定位
    http概述之URL与资源
    数组中只出现一次的数字
    数字在排序数组中出现的次数
    把数组排成最小的数
    数组中出现次数超过一半的数字
    调整数组顺序使得奇数位于偶数的前面
    旋转数组的最小值
    二维数组的查找
  • 原文地址:https://www.cnblogs.com/skylover/p/7122979.html
Copyright © 2011-2022 走看看