• 基础教材系列:数据结构与算法——慕课网笔记


    一 数据的基本概念
    1、数据:所有能输入计算机并被识别的符号
         数据元素:数据基本单位,由若干数据项组成(比如数据库里的一条数据)
         数据项:最小数据单位(比如数据库里一条数据的每一列就是一个数据项)
         数据对象:性质相同的数据的集合
    2、计算机处理的计算问题分为两大类:数值计算、非数值计算。
         数据结构研究非数值计算,是有特定关系的数据元素的集合。
         数据结构四种基本类型:集合、线性、树和网(这俩也叫非线性)
    3、数据结构的研究视角:
    数据的逻辑结构:从逻辑关系上描述数据,独立于计算机之外
    数据的存储结构:逻辑结构在计算机上的物理实现(分为顺序和链式两类)
      顺序存储:把逻辑上相邻的元素存储在相邻的数据单元中,用其存储位置来表示其逻辑关系。
      链式存储:逻辑上相邻的元素在存储器中不一定相邻。用附加地址表示数据元素之间的逻辑关系。
      索引存储结构:在存储结点信息的同时,还建立附加的索引表,存取数据时,都必须依赖索引。
      散列存储结构:是根据结点的值确定结点的存储位置。通过某个函数(散列函数)计算出其存储地址。它只存储结点的数值而不存储结点间的关系。
      顺序存储结构:数组或指针指向的一片连续空间。
      顺序表:线性表中逻辑上邻接的两个数据节点,其存储结点在物理位置上也是相邻的,以这种顺序存储结构实现的线性表,被称为“顺序表”。
         线性表:属于同一个数据对象的数据元素的有限序列。线性表中数据元素的个数称为线性表的长度。如:(1,3,5,7,9)是个线性表,数据元素类型为整数,长度为5,其中1是3的直接前驱,5是3的直接后继。基本操作:存取、插入、删除、查找、求表长(求线性表中元素的个数)、表的合并
         二叉树,我认为就是为了2分法而存在的,查找快。
         哈夫曼树,唯一特点就是每个节点都是最优、唯一。
            hash函数,我认为用处就是将数据的hash值与其存储地址对应,查找时不用再比较。
        treeset 是二叉树(红黑树)实现的,treeset中的数据是自动排好序的,不允许放入null值,值不能重复。
        hashset 是哈希表实现的,hashset中的数据是无序的,可以放入null,值不能重复。
        hashset 要求放入的对象,必须实现hashcode方法,放入的对象,是以hashcode码作为标识,而具有相同内容得String对象,hashcode是一样的,所以放入的内容不能重复
        适用场景分析:hashset是基于hash算法实现的,其性能通常都优于treeset。为快速查找而设计的set,应该用hashset,在需要排序时,才用treeset。
        hashmap:基于哈希表实现,适用时要求添加的键类明确定义了hashcode()和equals()。
        treemap:基于红黑树实现。它没有调优选项,因为该树总处于平衡状态。
        适用场景分析:hashmap适用于map中插入、删除、定位元素。treemap适用于按自然顺序或自定义顺序遍历键(key)。
        
    刚看数据结构时,还在奇怪这些原理怎么用代码实现,用起来总用代码实现这些原理,岂不是很麻烦?
    后来才明白,java自己的集合框架已经帮我们实现了这些,我们根据原理,将其直接应用到不同的场景即可。
     
    二、算法
    算法:在数据的逻辑结构上,对数据施加的操作(有检索、插入、删除、更新、排序等)
    1、算法:algorithm,解决特定问题的方法,它用特定的程序设计语言来描述,就成了程序。
    2、算法语法:
    1. 预定义常量和类型:True  1  False  0
    2. 算法的函数描述:赋值语句,选择语句,循环语句,结束语句,输入输出语句
    3、算法效率的度量
    3.1时间复杂度:将算法中重复执行的次数作为其执行时间的量度。
    简单来说就是指算法中某种基本操作执行次数的数量级。通常用T(n)=O(f(n)),其中O表示f(n)的数量级。它表示随着问题的规模n的增大,算法的执行时间的增长率和f(n)的增长率相同,称为算法的渐进时间复杂度,简称时间复杂度。
    3.2 空间复杂度:程序运行从开始到结束所需的存储空间。度量记作S(n)=O(f(n))
  • 相关阅读:
    整理了一份FAQ,新手看一下
    分享:pythonbitstring 3.1.2 发布
    分享:TokuDB v7 发布,并宣布全面开源
    在美国学CS能挣多少钱?美国IT公司标准 offer package详细数字及绿卡政策 | 美国留学申请与就业找工作咨询博客|Warald|一亩三分地论坛
    写的split带改进
    分享:一个多进程并发执行程序ps命令 ls命令
    分享:vi/vim使用进阶: 指随意动,移动如飞 (一)
    waning rm i rm rvfi
    分享:C++中头文件、源文件之间的区别与联系
    分享:神奇的动归状态转移方程——最优子序列
  • 原文地址:https://www.cnblogs.com/zhaot1993/p/13453610.html
Copyright © 2020-2023  润新知