zoukankan      html  css  js  c++  java
  • 数据结构复习之【数据结构和算法概念】


    一、概念 


    数据结构就像是一个催化剂,如果没有原料是无用的,单是有了算法就能帮算法更快的实现任务;

    数据结构是指相互之间存在一种或多种特定关系的数据元素的集合,简单地说是数据之间的各种关系的集合。

    程序设计=数据结构+算法;

    解释:如果要写一个程序,需要选择一个良好的数据结构,加上良好的解决问题的算法;

    二、名词解释 

    数据是一个最广泛的概念,数据中可以有多个数据对象,数据对象中可以有多个数据元素,数据元素中可以有多个数据项;

    数据:能够输入到计算机并且能够被计算机处理的符号;

    数据对象:一个类的事物;

    数据元素:一个记录;

    数据项:一个记录的属性;

    比如:


    class Person{

        String name;

        int age;

    }

    则数据对象为Person,数据元素为Person的实例,比如Person a,Person b,数据项为name、age属性;


    抽象数据类型(ADT):类比于类,自定义类型;

    三、数据结构介绍

    数据结构:数据元素之间的相互关系,那上面的例子来说,就是a和b的关系;

    数据结构分为:

    (1)逻辑结构:数据元素之间的相互关系,比如a和b的关系;

        -集合结构:数据元素之间没有关系;

        -线性结构:数据元素之间一对一关系,例如链表;

        -树结构:数据元素之间一对多关系,比如二叉树;

        -图解构:数据元素之间多对多关系,比如无向图、有向图;

    (2)物理结构:数据元素在计算机中的存储关系;

        -顺序存储:数据元素连续存储,数据存储在连续的内存中;

        -链表存储:数据元素用链表连接,存储不连续;



    一、算法和数据结构的关系

    算法和数据结构是密不可分的,因为如果数据结构是一个静态的东西,如果不去应用它,则只是一个很死的东西,因此我们需要算法;

    比如 邻接表,只介绍他可能只是了解他的概念,但是如果我们学了DFS、BFS就知道他的用途;

    二、算法概念

    算法:算法是解决特定问题求解步骤的描述,指令的有限序列;

    解决一个问题可能有多种算法,但是好的算法是唯一的;

    空间复杂度和时间复杂度需要权衡;

     

     

    算法的特性(算法的基本要求)

    (1)输入输出:算法需要有输入和输出;

    (2)有穷性:执行有限时间后完毕,此处的有限时间指的是你期望的时间;

    (3)确定性:在输入相同的前提下,输出要唯一;

    (4)可行性:能够运行出结果;

    算法的设计要求(算法的理想要求)

    (1)正确性:对于合法输入能够得到正确答案,对于非法输入能够得到非法提示;

    (2)可读性:便于阅读,别人拿到也能够很容易的看懂;

    (3)健壮性:对于非法输入,需要得到足够的提示,而不是异常;

    (4)执行速度快、占用存储空间少;

    度量算法效率的方法

    (1)事后统计法:编写好算法后测试,一般不用,因为外部的环境会极大的影响算法的速度,比如机器的好坏、输入的规模;

    (2)事先统计法:编写好算法前先估计;

    判断f(n)和g(n)哪个效率高的方法如果存在N,使得n>N时,f(n)>g(n),则f(n)劣于g(n);

     

    算法中最坏情况是一种底线,一般我们都需要保证最坏情况小于某个时间;

     

    大O表示法

    给定运行时间,去除加法常数、只保留最高阶项、去掉最高阶项的常数,就得到大O表示法;

    比如4n^2+3n+2 = O(n^2)


    高斯求和算法

    1+2+3+.....+99+100通过:

    sum =   1  + 2 + 3  +.....+99+100

    sum = 100+99+98 +.......+2  +  1

    2*sum = 101*100

    sum = 5050





    作者:xiazdong
    出处:http://blog.xiazdong.info
    本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
  • 相关阅读:
    C语言-define 与do{}while(0)
    Altium Designer 15 --- PCB 3D View
    算法工程师
    VS2015安装失败
    C++11新标准学习
    Sophus VS2010编译不支持?C++11语法的缘故。那有没有不带C++11特性的Sophus版本呢?
    如何学习C++? C++ Primer第三版中文版
    C++智能指针shared_ptr
    C++创建自己的库文件(dll文件创建和编译)
    ARKit对安卓的提示 ARKit与Google Tango
  • 原文地址:https://www.cnblogs.com/xiazdong/p/3058346.html
Copyright © 2011-2022 走看看