算法跟数据结构的入门

什么是算法

  算法的五个特征:有穷性,确定性,可行性,有输入,有输出

  算法的设计原则:正确性,可读性,健壮性bug/高效率与低存储。内存+cpu内存占用最小。

  评价算法的两个重要指标:时间复杂度(运行一个程序花费的时间),空间复杂度(运行程序所需要的内存 OOM 一般就是找数组容器等)。

    1.常数性时间复杂度0(1)

     及运行代码:

      

    2.线性性0(m)

    

      线性性O(m)

      

    3.

      对数性 nlog(n) 快速排序

      

    4.

     

    平方性

      

    5.

    时间复杂度优化标准就是:尽量往低的优化,一般在程序中找for while 递归等就能大概算出时间复杂度

    以上几个性能对比:O(1)>O(n)>O(nlogn)>O(n^2)

什么是数据结构

    数据结构是计算机存储、组织数据的方式,指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。

  基础数据结构

    1.数组

    元素之间可以快速的随机访问

    每个元素都必须是连续的,当需要扩容时,就需要将已有的数据复制到已有的存储空间

    ArrayList:使用最多的数据结构,访问快,线程不安全

    Vector:线程安全,一般用在高并发系统中

    2.链表

    不可以随机访问  插入删除快

    LinkedList:不能随机访问

    

    3.Vector,LinkedList,ArrayList三者的区别

    性能上来说,ArrayList最好,也是使用最多。

    当集合中的元素需要频繁的插入删除的话  可以考虑使用LinkedList

    Vector是线程同步的,所以性能最差,但是安全性最高,一般用于高并发

    

      如果能用数组的时候(元素类型固定,数组长度固定),请尽量使用数组来代替List;

      如果没有频繁的删除插入操作,又不用考虑多线程问题,优先选择ArrayList;

      如果在多线程条件下使用,考虑Vector;

      如果需要频繁地删除插入,LinkedList;

      如果不清楚的情况下,就用ArrayList。

    

     Set:

    Set用来去重

    Set 在Java里面有3种实现方式

    (1)HashSet 就是用来去重的 而且去重后元素的顺序和插入的不一样的

    (2)TreeSet 是用来排序的,其底层数据结构为红黑树 元素的顺序和插入的不一样的

    (3)LinkedHashSet 维护了一个链表,记录了顺序,可以保持插入和输出后的顺序一致

    队列

    队列在项目中使用非常广泛主要有以下一些场景:

    (1)等待队列

    (2)//排队场景 如果一个系统流量高 要做这种排队系统

    (3)//Mq消息队列

      Java中有很多种队列的实现方式,大部分情况下只需要掌握以下几个:

        ArrayBlockingQueue:基于数组的阻塞队列实现,也长度是需要定义的,可以指定先讲先出或者先讲后出,是有界队列,在多线程池中的等待队列就就用了这种。

        LinkedBlockingQueue:基于链表的阻塞队列,〈该队列由一个链表构成),

        其内部实现采用分离锁(读写分离两个锁),从而实现生产者和消费者操作的完全并行运行,是无界队列。

        PriorityBlockingQueue:基于优先级的阻塞队列(排队场景比较适合,具体实现看代码例子)

        DelayQueue:带有延迟时间的Queue,其中的元素只有当其指定的延迟时间到了,

        才能够从队列中获取到该元素。应用场景主要有:缓存超时的数据进行移除、空闲连接的关闭等等。

         

参考子龙老师的课件

原文地址:https://www.cnblogs.com/xining/p/11634474.html

时间: 2024-10-10 15:46:49

算法跟数据结构的入门的相关文章

[转]算法与数据结构——入门总结与自学资料推荐

[转]算法与数据结构——入门总结与自学资料推荐 本文转自(http://www.cnblogs.com/jiahuix/p/4868881.html) 一.大纲 博客:董西城.Vamei 思维导图下载地址:http://pan.baidu.com/s/1gdCqW8r 二.数据结构资料推荐 数组:查找快O(1),插入删除慢O(n) 链表:查找慢O(n),插入删除快O(1) 块状链表:查找插入删除O(sqrt(n)):数组+链表: 队列:先进先出 堆栈:先进后出 双端队列:队列与堆栈结合,有hea

Python算法与数据结构--求所有子数组的和的最大值

Python算法与数据结构--求所有子数组的和的最大值 玄魂工作室-玄魂 玄魂工作室秘书 玄魂工作室?昨天 题目:输入一个整形数组,数组里有正数也有负数.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值.要求时间复杂度为O(n). 这个题目有多个解法,比如可以用一个二维数组存之前每个数据的和,然后在进行大小比较:但是这样时间负责度就是O(n2)了. 换个思路思考下,因为是要最大数,那么就不需要存储,只需要找最大值就可以了.但是为了找子序列的最大和,在遇到

算法与数据结构开篇——基础与心得

算法与数据结构开篇 你真的会数据结构吗? 公司开发一个客服电话系统,小菜需要完成客户排队模块的开发,经过三次修改: 第一次:小菜使用了数据库设计了一张客户排队表,并且设置了一个自动增长的整型id字段,来一个用户,就在这张表的末尾插入一条数据,等客服系统一空闲,就将表中最前的的客户提交,然后删除这条记录. 实时排队模块,在内存中实现即可,无序用数据库 第二次:小菜用数组变量重新实现了这个功能,害怕数组不够大,选择远大于实际情况的100作为数组长度 数组虽然可以满足一定需求,但是需要考虑溢出问题,以

算法与数据结构(2):时间复杂度——以归并排序为例

这一篇文章我们首先会介绍一下归并排序,并以归并排序和我们上一章所说的插入排序为例,介绍时间复杂度.此系列的所有代码均可在我的 github 上找到. 点此查看本文归并排序的完整代码. 分治法 在介绍归并排序前,我们需要首先介绍一下分治法,归并排序正是分治法的一个典型应用. 分治法:将原问题分解为多个规模较小的但类似于原问题的子问题,递归地求解这些子问题,然后再合并这些子问题的解来建立原问题的解. 分治法一般而言分为这三步: 分解:将原问题分为若干个子问题,这些子问题是原问题的规模较小的实例. 解

浅谈算法和数据结构

: 一 栈和队列 http://www.cnblogs.com/yangecnu/p/Introduction-Stack-and-Queue.html 最近晚上在家里看Algorithems,4th Edition,我买的英文版,觉得这本书写的比较浅显易懂,而且“图码并茂”,趁着这次机会打算好好学习做做笔记,这样也会印象深刻,这也是写这一系列文章的原因.另外普林斯顿大学在Coursera 上也有这本书同步的公开课,还有另外一门算法分析课,这门课程的作者也是这本书的作者,两门课都挺不错的. 计算

【算法与数据结构】哈希表-链地址法

哈希表的链地址法来解决冲突问题 将所有关键字为同义词的记录存储在同一个线性链表中,假设某哈希函数产生的哈希地址在区间[0, m - 1]上,则设立一个至振兴向量 Chain  ChainHash[m]; 数据结构 //链表结点 typedef struct _tagNode { int data; //元素值(关键字) struct _tagNode* next; //下一个结点 }Node, *PNode; //哈希表结点 typedef struct _tagHashTable { //这里

《 常见算法与数据结构》平衡查找树(2)——红黑树(附动画)

本系列文章主要介绍常用的算法和数据结构的知识,记录的是<Algorithms I/II>课程的内容,采用的是"算法(第4版)"这本红宝书作为学习教材的,语言是java.这本书的名气我不用多说吧?豆瓣评分9.4,我自己也认为是极好的学习算法的书籍. 通过这系列文章,可以加深对数据结构和基本算法的理解(个人认为比学校讲的清晰多了),并加深对java的理解. 红黑树介绍 红黑树是一种简单的实现2-3树的数据结构,它方便的把我们之前实现的二叉搜索树改造成了一棵2-3树.它的核心思想

如何学好算法和数据结构之我见——51CTO名家访谈实录

最近受邀参加"51CTO名家访谈"就算法与数据结构话题论道做答,希望这些问题能够解答各位读者朋友的心中疑惑. 活动网址如下: http://book.51cto.com/act/exp/zuofei 下面是活动中Q&A环节我的一些作答,希望可以作为正在学习算法的朋友们的一些经验参考. 算法到底是什么? 非形式地说,算法是为实现某个任务而构造的简单指令集.以日常用语来说,算法又称为 过程或者方法.算法在数学中也起着非常重要的作用.古代数学文献中就包含有执行各种各样计算任务的算法描

【转载】浅谈算法和数据结构: 一 栈和队列

作者:yangecnu(yangecnu's Blog on 博客园) 出处:http://www.cnblogs.com/yangecnu/ 最近晚上在家里看Algorithms,4th Edition,我买的英文版,觉得这本书写的比较浅显易懂,而且“图码并茂”,趁着这次机会打算好好学习做做笔记,这样也会印象深刻,这也是写这一系列文章的原因.另外普林斯顿大学在Coursera 上也有这本书同步的公开课,还有另外一门算法分析课,这门课程的作者也是这本书的作者,两门课都挺不错的. 计算机程序离不开