算法与数据结构

学习笔记|Set 和 Map 数据结构

走远了吗. 提交于 2019-12-06 10:25:32
1.Set 基本用法 ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是 唯一 的,没有重复的值。 Set本身是一个构造函数,用来生成 Set 数据结构。 const s = new Set(); [2, 3, 5, 4, 5, 2, 2].forEach(x => s.add(x)); for (let i of s) { console.log(i); } // 2 3 5 4 Set函数可以接受一个数组(或者具有 iterable 接口的其他数据结构)作为参数,用来初始化。 // 例一 const set = new Set([1, 2, 3, 4, 4]); [...set] // [1, 2, 3, 4] // 例二 const items = new Set([1, 2, 3, 4, 5, 5, 5, 5]); items.size // 5 // 例三 const set = new Set(document.querySelectorAll('div')); set.size // 56 // 类似于 const set = new Set(); document .querySelectorAll('div') .forEach(div => set.add(div)); set.size // 56 上面代码也展示了一种去除数组重复成员的方法。

前置内容1:算法与数据结构

我是研究僧i 提交于 2019-12-06 08:42:38
信息学竞赛的主要考点就是算法与数据结构。 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。 简单来说,算法用于解决一个具体的问题,应该具有几个性质:确切性,有限性,输入输出,可行性。 也就是说,一个算法应该首先是确定的,而不是模棱两可的;其次是可以在有限的时间和步数内完成;另外需要有输入和输出(输入可以没有,但输出必然需要);所有的基本操作都是可以完成的。 属于OI范围的算法主要包括: 基本算法:包括枚举,模拟,贪心,二分,排序等。它们是其他算法或数据结构的基础; 搜索算法:包括深度优先搜索(DFS),广度优先搜索(BFS)及其优化。搜索是比较接近暴力的算法,但是又有很多优化型内容,例如迭代加深搜索(ID-DFS),A*算法等,在NOIP普及组和提高组中非常重要; 动态规划(DP):包括线性动态规划,多维动态规划,树形动态规划,状态压缩动态规划,图论动态规划等,还有一些拓展的类型,如期望DP,插头DP,数位DP,动态DP等。动态规划是较难的算法,无论是什么等级的比赛中动态规划都是极其重要的; 图论算法:包括最短路算法(SP),最小生成树(MST),拓扑排序,无向图的割边和割点,有向图的强连通分量(SCC),二分图匹配

大话数据结构笔记——第一章 数据结构绪论

拟墨画扇 提交于 2019-12-06 08:34:48
第一章 数据结构绪论 数据结构是相互之间存在一种或多种特定关系的数据元素的集合。 1.1 数据结构的起源 数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及它们之间的关系和操作等相关问题的学科。 程序设计数据结构算法 1.2 基本概念和术语 1.2.1 数据 数据 是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号的集合。 数据是具备以下两个前提的符号: 1.可以输入到计算机中。 2.能被计算机程序处理 什么是数据? 【举例】整型、实型等数值类型,字符、声音、图像、视频等非数值类型。 1.2.2 数据元素 数据元素 是组成数据的、有一定意义的基本单位,在计算机中通常作为整体处理。也被称为记录。 什么是数据元素? 【举例】猪、马、牛、羊等是畜类的数据元素。电影中的每一个角色是电影的一个数据元素。 1.2.3 数据项 数据项: 一个数据元素可以由若干个数据项组成。数据项是数据不可分割的最小单位。 什么是数据项? 【举例】电影中有许多角色,每个角色都有姓名、年龄、联系电话等数据项。 1.2.4 数据对象 数据对象 是性质相同的数据元素的集合,是数据的子集。 什么是数据对象? 【举例】比如多个学生信息组成的一个学生表,称为一个数据对象。 1.2.5 数据结构 现实生活中, 不同的数据元素之间不是独立的,而是存在特定的关系

数据结构与算法1.3_MOOC笔记

妖精的绣舞 提交于 2019-12-06 07:56:12
2019.12.2 1.3数据结构与抽象数据类型 学习记录 1.2什么是数据结构 ​ 结构:实体 + 关系 数据结构的组合: 逻辑,存储,运算三个方面: 按照逻辑关系组织起来的一批数据 按一定的存储方法把它存储在计算机中 在这些数据上定义了一个运算的集合 数据结构的逻辑组织: 线性结构 线性表(表,栈,队列,串等)[前驱后继关系] 非线性结构 树(二叉树,Huffman树,二叉检索树等)[层次化关系] 图(有向图,无向图等)[无向,受限少] 数据的存储结构 逻辑结构到物理存储空间的映射。对于数据结构里所定义的每一个节点,申请的内存空间必须是连续存储的区域 除非指针指向别的扩展地址。 计算机主存储器(内存) 非负整数地址编码,相邻单元的集合 基本单位是字节 访问不同地址所需时间基本相同(即随机访问) 数据结构的存储结构组成(四类形式):顺序,链接,索引,散列 抽象数据类型 简称ADT(Abstract Data Type) 定义了一组运算的数学模型 与物理存储结构无关 使软件系统建立在数据之上(面向对象) 抽象数据类型的标准格式 ADT 抽象数据类型名 { Data: 数据元素之间逻辑关系的定义; Operation: 操作1; 操作2; ... } 有人举出了“超级玛丽”例子: “超级玛丽”这个经典的任天堂游戏,里面的游戏主角是马里奥,我们给他定义了基本操作,前进、后退、跳

数据结构与算法之算法篇

走远了吗. 提交于 2019-12-06 06:52:24
什么是算法? 算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。 简单来说,就是我们解决某一问题所使用的技巧和方法。 一个问题可以由多个算法解决,一个算法也不可能具有通解所有问题的能力。 算法的特征: 输入:算法具有零个或多个输入; 输出:算法至少有一个或多个输出。(打印形式、返回一个或多个值) 有穷性:算法执行有限步骤之后,自动结束而不会无限循环,并且每一个步骤在可接受的时间内完成。 确定性:算法的每一个步骤都具有确定的含义,不会出现二义性。 算法在一定条件下,只有一条执行路径,相同的输入只能有唯一的输出结果。 可行性:算法的每一步都必须是可行的,每一步都能通过执行有限次数完成。 算法设计的要求:    1、正确性的四个层次;     层次一:算法程序无语法错误;     层次二:算法程序对合法输入能够产生满足要求的输出;     层次三:算法程序对于非法输入能够产出满足要求的说明;     层次三:算法程序对于故意刁难的测试输入都能满足要求的输出结果;    2、可读性 ;这里所说的可读性指的是,既要方便自己阅读修改,又要便于他人阅读用以沟通交流;    3、健壮性 ;在遇到具有刁难性的输入时,保持算法的功能;    4、时间效率高和存储量低 ;算法的最终目的就是追求尽可能短的时间达成效果以及对于计算机的负担尽可能的低; 来源:

20182309 2019-2020-1 《数据结构与面向对象程序设计》第10周学习总结

浪尽此生 提交于 2019-12-06 05:37:43
20182309 2019-2020-1 《数据结构与面向对象程序设计》第10周学习总结 教材学习内容总结 图 无向图 有向图 带权图 遍历方法 深度优先 广度优先 连通性 最小生成树 最短路径 实现图 邻接表 邻接矩阵 教材学习中的问题和解决过程 问题1:判断最短路径 问题1解决方案:一、Dijkstra算法 规定一个 出发点,然后先初始化距离数组。数组中的每个下标就对应一个结点,每个数据项就是出发点到每个结点的距离。 1:将一个集合分为两部分,一个是已经找过的结点U,一个是没有找到过的v 2:在距离的数组中,没有访问过的结点中找一个权重最小的边,然后将这个结点添加到u中,并且以这个结点作为中间结点,来更新数组,判断条件是i到temp+temp到j 的距离是不是小于i到j的距离,若是,则就要更新。 3:直到u中的结点的个数=图中的结点的个数 算法的实现其实还是比较简单,和prim算法图的prim算法没什么差别,都是维护一个距离数组,来更新数组,不同的是只是添加一个判断条件而已。,在这里就没什么可说的,不懂的分析程序,运行结果一两遍就基本明白了 代码调试中的问题和解决过程 问题1:定义顶点数组时会受到数组长度限制 问题1解决方案:加上扩大方法 public void expandCapacity() { T[] larger = (T[])(new Object[queue

数据结构与算法之绪论

大城市里の小女人 提交于 2019-12-06 04:34:15
什么是数据结构 简单来说可以解释为:程序设计=数据结构+算法; 主要是用来研究数据结构的关系,数据元素之间存在的一种或多种特定关系的集合; 数据结构的分类 按照传统意义上来讲,数据结构可以分为两类:逻辑结构和物理结构; 逻辑结构指的是数据对象中数据元素之间的 相互关系。 主要有四种逻辑结构: 集合结构:集合结构中的数据元素同属于一个集合体中,但是它们之间没有其他关联; 线性结构:线性结构中的数据元素之间是一对一的关系,如同夫妻关系; 树形结构:树形结构中的数据元素之间是一对多的关系,如同一个爸爸对多个自己的孩子; 图形结构:图形结构中的数据元素之间是多对多的关系,我更倾向于把它理解成一个网状结构,如同在社会中人与人之间都是相互关联的; 物理结构的存储 物理结构中的存储器主要是针对内存而言的,硬盘、软盘、光盘等外部存储器的数据组织通常用文件结构来描述; 数据元素的存储形式有两种:顺序存储和链式存储。 顺序存储结构 是把数据元素存放在地址连续的存储单元里,其数据间的逻辑关系和物理关系是一致的(编程语言的数据结构就是属于这种); 链式存储结构 是把数据元素存放在任意的存储单元里,这组存储单元可以是连续的,也可以是不连续的;它比顺序存储更灵活(类似银行排号办理业务),但是不能反应其逻辑关系,所以需要用一个指针存放数据元素的地址(指针指向的是下一个地址)

常用数据结构

自闭症网瘾萝莉.ら 提交于 2019-12-06 00:34:00
常用基础数据结构 ​ 优秀的算法取决于用哪种数据结构,因此我们这里大概回顾一下编程语言中最基础的数据结构,并分享一点自己的心得体会,学习算法与数据结构,与其说是通过学习实用技巧来解决问题,不如说是在遇到问题时,我们的一个思考思路与思想。 General view 数据与字符串 链表 栈 队列与双端队列 树🌲 Array && String ​ 数组和字符串是最基本的数据结构,数组中的每个元素都有一个对应的下标,同样的,我们在构建一个数组时要提前指定长度,为其分配一段连续的存储空间。 常用于元素个数确定而很少添加删除的场景。 ​ 关键词:定长,下标,查找 优点: 构建非常简单 能在 O(1) 的时间里根据数组的下标(index)查询某个元素 缺点: 构建时必须分配一段连续的空间 查询某个元素是否存在时需要遍历整个数组,耗费 O(n) 的时间(其中,n 是元素的个数) 删除和添加某个元素时,同样需要耗费 O(n) 的时间 例题: ​ 常见的题目有反转字符串,leetcode242 ​ LinkedList ​ 单链表:链表中的每个元素实际上是一个单独的对象,而所有对象都通过每个元素中的引用字段链接在一起。双链表:与单链表不同的是,双链表的每个结点中都含有两个引用字段。常用于元素个数不确定,频繁添加删除。 ​ 关键词:非定长,指针(引用),添加删除 优点: 链表能灵活地分配内存空间;

数据结构与算法简记--递归

做~自己de王妃 提交于 2019-12-05 23:32:59
递归 是什么 搞懂递归非常重要:递归应用非常广泛,很多数据结构和算法的编码实现都要用到递归,比如 DFS 深度优先搜索、前中后序二叉树遍历等等。 简单讲就是自己调自己 两个步骤:递--层层调用的过程;归--层层返回的过程 可以写出递推公式,如: f(n) = f(n-1) + 1; f(n) = f(n-1) + f(n-2); f(n)=n*f(n-1); 为什么 优点:代码的表达力很强,写起来简洁。 缺点:空间复杂度高、有堆栈溢出风险、存在重复计算、过多的函数调用会耗时较多等问题。 怎么做 成立需三个条件: 一个问题的解可以分解为几个子问题的解 这个问题与分解之后的子问题,除了数据规模不同,求解思路完全一样 存在递归终止条件 如何编写递归代码? 写出递推公式,找到终止条件 编写递归代码的关键是,只要遇到递归,我们就把它抽象成一个递推公式,不用想一层层的调用关系,不要试图用人脑去分解递归的每个步骤。 f(n)=f(n-1)+1 其中,f(1)=1 防止堆栈溢出:限制递归次数,超过次数报错退出 防止重复计算:利用缓存数据结构(如散列表)缓存计算过的项 来源: https://www.cnblogs.com/wod-Y/p/11950445.html

数据结构与算法-插入排序

孤人 提交于 2019-12-05 22:42:49
插入排序 存在序列A(a1,a2,a3,a4,.....,an),n为有限值,经过插入排序后A序列: A(b1,b2,b3,......,bn) 中任意俩个元素满足: bi <= bj 有且只有0 < i <= j <=n,反之也成立。 插入排序的伪代码实现: for(i = 2; i < =n ; i++){ // 每次需要插入的元素 key = ai; // 已经排序好元素的项数 j = i-1; while j > 0 and key < aj // 插入元素与排序好元素的每一项进行比较,若插入元素 < 排序好元素,将排序号元素的下标加1 即a(j+1) = aj a(j+1) = aj; j++ } 插入排序算法的时间 影响因素:项数 和 序列已经排序好程度 最好情况:序列已经排序好 ,时间复杂度 Θ(n)(n为项数) 最坏情况:序列按照反向排序好,时间复杂度 Θ(n 2 )(a和b、c为常数、n为项数) 来源: https://www.cnblogs.com/zhang-feng/p/11949120.html