• 数据结构之基础篇-基本概念与术语


    一. 概念

           俗话说:程序设计 = 数据结构 + 算法,那对数据结构的理解对程序员来说当然是至关重要的,可到底什么是数据结构呢?

      数据结构分为两部分:数据+结构。

      数据,概念:是描述客观事物的符号,是计算机中就可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合(这概念明明都是中文,咋那么难懂)。其实呢,按我的理解,我们日常中用到的,存在mysql中的是数据, 存在redis中的是数据,存在文件中的是数据,甚至我们电脑上的存的声音、图片、视频等都是数据。

           结构,概念:简单的理解就是关系,比如分子结构,就是说组成分子的原子之间的排列方式。

           数据结构,概念:相互之间存在某种或多种关系的数据元素的组合。这样一想我们平常中用到的数组,队列,集合,栈等其实都是数据结构, 他们存的是数据,并且具有某种关系。。。

    二. 分类

          数据结构根据视点的不同:分为逻辑结构和物理结构。

          逻辑结构:数据对象中数据元素之间的相互关系

                           分为: 集合结构:集合结构中的数据元素除了同属一个集合外,他们之间没有其他关系,类似于数学中的集合

                                       线性结构:数据元素之间是一对一的关系

                                       树形关系:数据元素之间存在一种一对多的层次关系

                                       图形结构:数据元素之间是多对多的关系

            物理结构:也叫存储结构,是指数据的逻辑结构在计算机中的存储形式

                             分为:顺序存储结构:是把元素存放在地址连续的存储单元里,其数据建的逻辑关系和物理关系是一致的

                                       链式存储结构:把数据元素存放在任意的存储单元里,这组存储单元可以使连续的,也可以是不连续的。因为这组数据的存储关系并不能反映其逻辑关系,因此需要用一个存放数据元素的地址

    三.其他概念

              数据类型:是指一组性质相同的值的集合及定义在此集合上的一些操作的总称。数据类型是按照值的不同进行划分的,在高级语言中,每个变量、常量和表达式都有各自的取值范围。那为什么当初设计计算机语言的人会考虑到语言类型呢,就比如大家住房子,都希望房子越大越好,但显然,没有钱,考虑房子是没有意义的,于是商品房就出现了各种各样的房型,有别墅,单间,胶囊公寓等来满足不同人的需求。同样Z爱计算机中,内存并不是无限大的,你要计算一个如 1+1=2这样的整型数字的加减乘除运算,显然不需要开辟很大的内存空间,所以就考虑对数据进行分类。

           这里插一个概念:计算机人们总说抽象,抽象是什么呢?是指抽取出事物具有的普遍性本质

    四.算法概念

           上面我们也说了数据结构与算法是相辅相成的, 那什么是算法呢?首先让我们做一道题:写一个求1+2+3+...+100结果的程序,大多数人第一时间想到的可能就是暴力解法

           我们用PHP简单的实现它:

    $sun=0;
    $n=100;
    forreach($i=1;$i<$n;$i++){
        $sum +=$i;
    }
    echo $num;

           这个其实也就算是算法,但是这样写是不是高效的呢,是不是最好的呢,我们看一下另一种算法:利用等差数列

    sum    = 1       +   2  +   3    + ...+   99   +  100
    sum    = 100   +   99 +  98   + ...+   2     +    1
    2*sum = 101  +   101+  101 +... +  101  +  101
    所以sum=101*100/2 = 5050
    

         利用程序实现就是:

    $sum=0;
    $n=100;
    $sum = ($n+1)*$n/2;
    echo $sum;

          这样我们就看出,算法作重要的就是找出最高效的解决方式去解决问题。

          算法的特性:输入、输出:具有零个或多个输入

                         有穷性 :在执行有限的步骤之后,自动结束而不会出现无心循环,并且每一个步骤在可接受的时间内完成

            确定性:每一个步骤都具有确定的含义,不会出现二义性

                         可行性 :每一步都必须是可行的,也就是说,每一步都能够通过执行有限的次数完成

            算法时间复杂度:在进行算法分析时,语句总的执行次数T(n)是关于问题规模n 的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。算法的时间复杂度,也就是算法的时间度量,记作:T(n)=O(f(n)).它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,陈祚算法的渐进时间复杂度,简称为时间复杂度,其中f(n)是问题规模你的某个函数。

           推导大O阶:1.用常量1取代运行时间中的所有加法常量   2.在修改后的运行次数函数中,只保留最高阶项       3.如果最高阶项存在且不是1,则去除与这个项相乘的常数

            常见的时间复杂度(所消耗时间按先从小到大依次是):O(1)【常数阶】<O(logn)【对数阶】<O(nlogn)【nlogn阶】<O(n^2)【平方阶】<O(n^3)【立方阶】<O(2^n)【指数阶】<O(n!)【阶乘阶】<O(n^n)

            算法空间复杂度:通过计算算法所需的存储空间实现,计算公式记作:S(n) = O(f(n)),其中n为问题的规模,f(n)为语句关于n所占存储空间的函数

      

                                             

                                       

                                        

  • 相关阅读:
    localStorage和sessionStorage的使用方法和一些特性介绍
    python 图片添加水印 pdf 添加水印
    python kayb算法之从一组序列当中获取一组与目标值最接近的算法
    python 中将字符串加载为公钥
    Python中rsa模块【sign 加签验签】的使用
    python中openpyxl的用法【安装,以及一些基本的操作, xlwt教程链接】
    python当中的坑【闭包与lambda】
    python函数参数中带有默认参数list的坑
    Django中辅助技术总结[静态文件,中间件,上传图片,分页案例]
    Django中视图总结[urls匹配,HttpRequest对象,HttpResponse对象,对象序列化接受及案例]
  • 原文地址:https://www.cnblogs.com/echoppy/p/13528424.html
Copyright © 2020-2023  润新知