数据结构,算法宏观印象构建

前言

这篇文章主要是鸟瞰数据结构和算法,不涉及到具体的细节。

阐述逻辑通过黄金思维圈中的是什么,为什么展开。

内容包括:

  • 什么是数据结构
  • 为什么需要需要数据结构
  • 数据结构分类
  • 什么是算法
  • 为什么需要算法
  • 算法的衡量标准

关于数据结构

什么是数据结构?

  • 逻辑结构:描述数据之间的关系
  • 物理结构:描述数据存储的方式

为什么需要数据结构?

以有效的方式处理数据,主要体现在存储和检索方面。

数据结构的分类

逻辑结构

1,集合结构

例如一个集合中包含橘子,苹果和香蕉。

集合具有三大特性:

  • 唯一性
  • 互斥性
  • 无序性

2,线性结构

元素存在一对一的相互关系

3,树形结构

元素存在一对多的相互关系

4,图形结构

元素存在多对多的相互关系

物理结构

顺序存储

逻辑上相邻的节点物理上也相邻【查询效率高,插入删除效率低】

链式存储

逻辑上相邻的节点物理上不一定相邻【插入删除效率高,查询效率低】

索引存储

除建立存储结点信息外,还建立附加的索引表来标识结点的地址。

用结点的索引号来确定结点存储地址,其优点是检索速度快,缺点是增加了附加的索引表,会占用较多的存储空间。

散列存储

又称hash存储。由节点的关键码值决定节点的存储地址。

散列是数组存储方式的一种发展,相比数组,散列的数据访问速度要高于数组,因为可以依据存储数据的部分内容找到数据在数组中的存储位置,进而能够快速实现数据的访问,理想的散列访问速度是非常迅速的。散列存储的时间复杂度为O(1),数组为O(n)。

线性结构 VS 非线性结构

线性结构:元素之间存在一对一的关系

  • 数组
  • 链表
  • 堆栈
  • 队列

非线性结构:元素之间存在一对多,多对多的关系


关于算法

什么是算法?

来自搜狗百科:

算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度时间复杂度来衡量。

简单来说,算法就是解决问题的方式,而时间复杂度和空间复杂度可以衡量算法的性能。

【举个栗子】

假设你要从上海到北京,那么怎么去就是一个待解决的问题。

提出两种方案,乘火车,坐飞机。这两种方式就是来解决去北京的问题的,可以理解为算法。

但是火车和飞机是有区别的,乘火车价格更低,但耗时长,乘飞机耗时短,但价格贵。

价格和时间可以类比算法的时间复杂度(算法完成需要多久),空间复杂度(完成算法需要多大内存空间)。

为什么需要算法?

算法和设计模式类似,属于经验之谈,是经前人们应用后总结的一种解决问题的方式。

而在经过大范围的应用和普及之后,就会变成一种标准。

而经验的作用就是用来学习,应用,改进的。

开源的时代,有种思想叫别造轮子。就好像爱迪生发明了电灯,后人并不会去把发明的过程花几十年重复一遍,而是去学习原理,在此基础上进行改进,扩展应用,钨丝灯到现在色彩斑斓的灯就是很好的例子。

对于算法来说,同样如此。如果不是专门研究算法的工程师,对于算法领域更多的是使用,而不是创造。

算法的衡量标准

  • 时间复杂度:算法运行到完成需要的时间

    时间复杂度是一个渐进值,

    x=1;y=2;  //执行两次
    
    for(int i =0 ;i<n ;i++)
    {
      x++;                //执行n次
    }
    
    for(int i =0 ;i<n ;i++)
    {
      for(int j =0;j<m;j++)
      {
          y++;       //    执行n的方次
      }
    }

程序总共执行的次数为:n2+n+2,取渐进值

时间复杂度T(n)=O(n2)

  • 空间复杂度:算法执行过程中需要的内存空间大小

原文地址:https://www.cnblogs.com/noneplus/p/11663594.html

时间: 2024-10-12 21:40:19

数据结构,算法宏观印象构建的相关文章

数据结构-从宏观上理解数据结构

注:本博文是本人对数据结构的理解,很多地方理解可能并不恰当,还请读者辩证的来学习 从宏观上理解数据结构 很多时候我们一直在埋头苦干,却不知道为什么这样...... 工作一年之后,重新回想一下大学里学的数据结构,发现所剩的寥寥无几,当提起某一种数据结构脑海中大体也只剩下了简单的定义,如跳表,也只是模糊记得是在一个有序链表上添加额外的指针来加快搜索速度,其他的似乎什么都不记得了,记得当时在学习数据结构时对跳表的理解还是蛮深刻的,然而时间一长却忘掉了关于跳表的大部分内容.之所以忘得这么快,一方面是由于

【数据结构&amp;&amp;算法系列】KMP算法介绍及实现(c++ &amp;&amp; java)

KMP算法如果理解原理的话,其实很简单. KMP算法简介 这里根据自己的理解简单介绍下. KMP算法的名称由三位发明者(Knuth.Morris.Pratt)的首字母组成,又称字符串查找算法. 个人觉得可以理解为最小回溯算法,即匹配失效的时候,尽量少回溯,从而缩短时间复杂度. KMP算法有两个关键的地方,1)求解next数组,2)利用next数组进行最小回溯. 1)求解next数组 next数组的取值只与模式串有关,next数组用于失配时回溯使用. 在简单版本的KMP算法中,每个位置 j 的 n

数据结构算法1------算法和算法分析

最近面试iOS实习生.几次都是败在数据结构算法上面了.决定重新捡起大学的课本,复习一下数据结构算法相关知识. 1.反转一个链表.循环算法.               1     List   reverse(List   l)   {       2     if(!l)   return   l;       3         list   cur   =   l.next;       4     list   pre   =   l;       5     list   tmp;  

初转java随感(一)程序=数据结构+算法

大学刚学编程的时候,有一句很经典的话程序=数据结构+算法 今天有了进一步认识. 场景: 1.当前局面 (1)有现成的封装好的分页组件 返回结果是page.类型为:Page.包括 page 分页信息,data 数据列表 List型. (2)查询了一个数据列表 midResult.类型为 List<Map<String,Object>> . 2.想要的结果 现在想把page midResult 两个结果集进行处理.返回页面. 3.解决问题 首先纠结的是,用哪种类型来存储数据.用List

数据结构——算法设计(12页)方案三

方案三的思路尽可能减少元素的重复挪动,设法实现元素移动一次性地“最终定位”:同时在空间效率方面,避免大段复制数据元素序列,降低缓存元素所需的辅助空间使用量. 代码如下: #include<stdio.h> int gcd(int a , int b) { if(a%b!=0) gcd(b,a%b) ; else return b ; } void leftshift3(int *a , int n , int p) { int i , j , k , m , d ; int temp ; in

数据结构——算法之(012)( linux C 所有字符串操作函数实现)

题目:实现linux C下常用的字符串操作函数 题目分析: 一.面试中可能经常遇到这样的问题:比如strcpy.memcpy.strstr 二.参考了linux 内核代码,对linux大神表示感谢,代码写得相当精致,这里拿来与大家分享吧 算法实现: /* * linux/lib/string.c * * Copyright (C) 1991, 1992 Linus Torvalds */ /* * stupid library routines.. The optimized versions

day40 数据结构-算法(二)

什么是数据结构? 简单来说,数据结构就是设计数据以何种方式组织并存储在计算机中. 比如:列表.集合与字典等都是一种数据结构. N.Wirth: "程序=数据结构+算法" 列表 列表:在其他编程语言中称为"数组",是一种基本的数据结构类型. 关于列表的问题: 列表中元素使如何存储的? 列表提供了哪些基本的操作? 这些操作的时间复杂度是多少? 列表与可变对象* 栈 栈(Stack)是一个数据集合,可以理解为只能在一端进行插入或删除操作的列表. 栈的特点:后进先出(las

python入门、python数据分析(numpy、matplotlib、sklearn等)tensflow、爬虫、机器学习、深度学习、自然语言处理、数据挖掘、机器学习项目实战、python全栈、PHP、java、java web、openCV、hadoop、matlab、android、数据结构算法和刷题等教学视频

扫描二维码加好友购买视频,绝对优惠,谢谢支持. python入门和进阶熟练教学视频 入门: 进阶: python数据分析教学视频 python数据分析晋级班 tensorflow教程及实战 python爬虫教学 机器学习课程 深度学习课程 机器学习项目班 自然语言处理教学视频 python全栈教学视频 数据挖掘视频 PHP教学视频 java java web openCV教学视频 Hadoop教学视频 matlab教学 andriod教学视频 数据结构算法班及面试班 原文地址:https://w

数据结构算法——算法复杂度分析

算法复杂度分为时间复杂度和空间复杂度 首先要清楚一点,大O表示法的时间复杂度高不代表程序运行时间长,空间复杂度高不代表占用空间多. 他们表示的是代码执行时间随着数据规模增长的变化趋势.和算法储存空间与数据规模之间的增长关系. 时间复杂度判断方法 1.只关注循环次数最多的一段代码 2.加法法则:总复杂度等于量级最大的那段代码的复杂度 3.乘法原则:嵌套代码的复杂度等于嵌套内外代码复杂度的乘积 常见的复杂度量级(按数量级递增) 常量阶:O(1) 对数阶:O(logn) 线性阶:O(n) 线性对数阶: