算法与数据结构

20182306 2019-2020-1 《数据结构与面向对象程序设计》实验七报告

左心房为你撑大大i 提交于 2019-12-04 17:31:30
20182306 2019-2020-1 《数据结构与面向对象程序设计》实验七报告 课程:《程序设计与数据结构》 班级: 1823 姓名: 管伟宇 学号:20182306 实验教师:王志强 实验日期:2019年10月30日 必修/选修: 必修 1.实验内容 查找与排序-1 定义一个Searching和Sorting类,并在类中实现linearSearch,SelectionSort方法,最后完成测试 要求不少于10个测试用例,提交测试用例设计情况(正常,异常,边界,正序,逆序),用例数据中要包含自己学号的后四位 提交运行结果图。 查找与排序-2 重构你的代码 把Sorting.java Searching.java放入 cn.edu.besti.cs1823.(姓名首字母+四位学号) 包中(例如:cn.edu.besti.cs1823.G2301) 把测试代码放test包中 重新编译,运行代码,提交编译,运行的截图(IDEA,命令行两种) 查找与排序-3 参考http://www.cnblogs.com/maybe2030/p/4715035.html ,学习各种查找算法并在Searching中补充查找算法并测试 提交运行结果截图 查找与排序-4 补充实现课上讲过的排序方法:希尔排序,堆排序,二叉树排序等(至少3个) 测试实现的算法(正常,异常,边界) 提交运行结果截图 2.

《数据结构与面向对象程序设计》实验7 报告

拈花ヽ惹草 提交于 2019-12-04 17:28:08
学号 20182329 2019-2020-1 《数据结构与面向对象程序设计》实验7 报告 课程:《程序设计与数据结构》 班级: 1823 姓名: 李一卓 学号:20182329 实验教师:王志强 实验日期:2019年10月3日 必修/选修: 必修 1.实验内容 用链定义一串字符,学会链的构成和查找 学习顺序查找、二分法查找、差值查找,被学会在链或者数组的情况下实现。 学习斐波那契数列的查找方法,也是二分查找的一种提升算法,通过运用黄金比例的概念在数列中选择查找点进行查找,提高查找效率。 学习二叉树的排序方法,并运用二叉树查找。 编写二叉树以收纳一组数据,可以运用中序遍历、前序遍历、后序遍历来进行查找。 简单学习二叉树方面的红黑数。 学习分块查找、哈希查找在链表上的实现方法。 2. 实验过程及结果 定义一个Searching和Sorting类,并在类中实现linearSearch,SelectionSort方法,最后完成测试。要求不少于10个测试用例,提交测试用例设计情况(正常,异常,边界,正序,逆序)。 重构代码, 把Sorting.java Searching.java放入 cn.edu.besti.cs1823.(姓名首字母+四位学号) 包中(例如:cn.edu.besti.cs1823.G2301) 把测试代码放test包中,用IDEA的编辑器命令行编译运算。

2019-2020-1 《数据结构与面向对象程序设计》实验七报告

半城伤御伤魂 提交于 2019-12-04 15:21:32
# 20182327 2019-2020-1 《数据结构与面向对象程序设计》实验七报告 课程:《程序设计与数据结构》 班级: 1823 姓名:赵天昊 学号:20182327 实验教师:王志强 实验日期:2019年10月30日 必修/选修: 必修 1.实验内容 1.定义一个Searching和Sorting类,并在类中实现linearSearch,SelectionSort方法,最后完成测试。 要求不少于10个测试用例,提交测试用例设计情况(正常,异常,边界,正序,逆序),用例数据中要包含自己学号的后四位 2.重构你的代码 把Sorting.java Searching.java放入 cn.edu.besti.cs1823.(姓名首字母+四位学号) 包中(例如:cn.edu.besti.cs1823.G2301) 把测试代码放test包中 3.参考http://www.cnblogs.com/maybe2030/p/4715035.html ,学习各种查找算法并在Searching中补充查找算法并测试 4.补充实现课上讲过的排序方法:希尔排序,堆排序,二叉树排序等(至少3个) 测试实现的算法(正常,异常,边界) 5.编写Android程序对实现各种查找与排序算法进行测试,提交运行结果截图 2.实验过程和结果 实验一: 实验二: 实验三: //线性查找 public static

数据结构 -- wk1 基本概念(2)

泄露秘密 提交于 2019-12-04 14:16:47
第一讲 基本概念 - 2 2019-11-15  算法(Algorithm)  一个 有限指令集  接受一些 输入 (有些情况下不需要输入)  产生 输出  一定在 有限步骤 之后终止 [不可像操作系统那样,一直运行]  每一条 指令 必须  有充分明确的目标,不可以有歧义  计算机能处理的范围之内  描述应不依赖于任何一种计算机语言以及具体的实现 例一:选择排序的伪码描述 * List 是数组 还是 链表? * Swap 是函数 还是 宏?-- 这些都由 具体的算法 决定 Part 1 - 算法的 空间复杂度 S(n) 和 时间复杂度 T(n) 1) 空间复杂度 S(n) 根据算法写成的程序在执行时 占用存储单元 的长度。 这个长度往往与输入数据的规模有关。[N] 空间复杂度 过高 的算法可能导致使用的 内存超限 ,造成程序 非正常中断 。 2) 时间复杂度 T(n) 根据算法写成的程序在执行时 耗费时间 的长度。 这个长度往往也与输入数据的规模有关。 时间复杂度 过高 的低效算法可能导致我们在 有生之年 都 等不到运行结果 。 *对之前的递归算法 [见 基本概念-1 例一]  N=100000; 1 // recursion 2 void printN(int N){ 3 if(N){ 4 printN(N-1); 5 printf("%d\n", N); 6

20182333 2019-2020-1 《数据结构与面向对象程序设计》实验7报告

心不动则不痛 提交于 2019-12-04 13:54:20
# 20182333 2019-2020-1 《数据结构与面向对象程序设计》实验7报告 课程:《程序设计与数据结构》 班级: 1823 姓名: 钱佳禹 学号:20182333 实验教师:王志强 实验日期:2019年11月1日 必修/选修: 必修 1.实验内容 1.定义一个Searching和Sorting类,并在类中实现linearSearch,SelectionSort方法,最后完成测试。 要求不少于10个测试用例,提交测试用例设计情况(正常,异常,边界,正序,逆序),用例数据中要包含自己学号的后四位 提交运行结果图。 2.重构你的代码 把Sorting.java Searching.java放入 cn.edu.besti.cs1823.(姓名首字母+四位学号) 包中(例如:cn.edu.besti.cs1823.G2301) 把测试代码放test包中 重新编译,运行代码,提交编译,运行的截图(IDEA,命令行两种) 3.参考http://www.cnblogs.com/maybe2030/p/4715035.html ,学习各种查找算法并在Searching中补充查找算法并测试 提交运行结果截图 4.补充实现课上讲过的排序方法:希尔排序,堆排序,二叉树排序等(至少3个) 测试实现的算法(正常,异常,边界) 提交运行结果截图(如果编写多个排序算法,即使其中三个排序程序有瑕疵

优秀博客推荐:各种数据结构与算法知识入门经典(不断更新)

有些话、适合烂在心里 提交于 2019-12-04 13:27:50
基本算法 贪心算法: 贪心算法 作者: 独酌逸醉 贪心算法精讲 作者: 3522021224 递归和分治: 递归与分治策略 作者: zhoudaxia 图论 图的遍历(DFS和BFS): 图的遍历 作者: jefferent 最小生成树(Prim算法和Kruskal算法): 贪心算法--最小生成树 作者: 独酌逸醉 Dijkstra算法: 最短路径之Dijkstra算法详细讲解 作者: 绿岩 最短路径算法—Dijkstra(迪杰斯特拉)算法分析与实现(C/C++) 作者: tankywoo Bellman-Ford 算法: 最短路径算法—Bellman-Ford(贝尔曼-福特)算法分析与实现(C/C++) 作者: tankywoo Floyd-Warshall算法: 最短路径算法—Floyd(弗洛伊德)算法分析与实现(C/C++) 作者: tankywoo Johnson算法: Johnson 算法 作者: huliang82 A*算法: A*算法详解 作者: 愚人有节 拓扑排序: 拓扑排序 作者: midgard 如何去理解 拓扑排序算法 作者: 张善友 关键路径: 关键路径 作者: navorse 欧拉路: 欧拉路问题 作者: MaiK 差分约束: 差分约束系统 作者: fuliang 二分图最大匹配: 二分图匹配总结 作者: 北极天南星 二分图匹配算法总结 作者:

JAVA数据结构

强颜欢笑 提交于 2019-12-04 13:27:46
JAVA中的常用的数据结构、每个特定类的使用和功能适用的场合。 一、数据结构 1.逻辑结构和物理结构 逻辑结构 :反映数据元素之间的逻辑关系,其中的逻辑关系是指数据元素之间的前后件关系,而与他们在计算机中的存储位置无关。常见的逻辑结构有集合、线性结构、树形结构、图形结构。    集合 :数据结构中的元素之间除了同属一个集合”的相互关系外,别无其他关系。    线性结构 :数据结构中的元素存在一对一的相互关系。每个数据元素只有一个直接前驱和一个直接后继,线性结构有线性表,栈,队列,双队列,串,一般多维数组、广义表不是线性结构。    树形结构 :数据结构中的元素存在一对多的相互关系。且具有明显的层次关系,每一层上的数据元素可能和下一层中多个元素相关,但只能和上一层中一个元素相关。树形结构可以表示从属关系、并列关系。数据结构中各种树形状都是树形结构。    图形结构 :数据结构中的元素存在多对多的相互关系。结点之间的关系可以是任意的,任意两个数据元素之间都可能相关,图形结构常被用于描述各种复杂的数据对象。 物理结构 :指数据的逻辑结构在计算机存储空间的存放形式。包括数据元素的机内表示和关系的机内表示,数据元素的机内表示指用二进制位的位串表示数据元素,称这种位串为节点。当数据元素有若干个数据项组成时,位串中与多个数据项对应的子位串称为数据域。关系的机内表示则可以分为顺序映像和非顺序映像

0x40 数据结构进阶

孤人 提交于 2019-12-04 13:20:01
0x41 并查集 定义 在计算机科学中,并查集是一种树型的数据结构,用于处理一些不交集的合并及查询问题。有一个联合-查找算法定义了两个用于此数据结构的操作: \(Find\) :确定元素属于哪一个子集。它可以被用来确定两个元素是否属于同一子集。 \(Union\) :将两个子集合并成同一个集合。 由于支持这两种操作,一个不相交集也常被称为联合-查找数据结构或合并-查找集合。其他的重要方法, \(MakeSet\) ,用于创建单元素集合。有了这些方法,许多经典的划分问题可以被解决。 为了更加精确的定义这些方法,需要定义如何表示集合。一种常用的策略是为每个集合选定一个固定的元素,称为代表,以表示整个集合。接着, \(Find(x)\) 返回 \(x\) 所属集合的代表,而 $Union $使用两个集合的代表作为参数。 路径压缩与按秩合并 这是两个并查集常用的优化 当我们在寻找祖先时,一旦元素多且来,并查集就会退化成单次 \(O(n)\) 的算法,为了解决这一问题我们可以在寻找祖先的过程中直接将子节点连在祖先上,这样可以大大降低复杂度,均摊复杂度是 \(O(log(n))\) 的 按秩合并也是常见的优化方法,“秩”的定义很广泛,举个例子,在不路径压缩的情况下,常见的情况是把子树的深度定义为秩 无论如何定义通常情况是把“秩”储存在根节点,合并的过程中把秩小的根节点插到根大的根节点上

如何完全透析数据结构、算法这门课?

一世执手 提交于 2019-12-04 10:34:55
你是否曾跟我一样,因为看不懂数据结构和算法,而一度怀疑是自己太笨?实际上,很多人在第一次接触这门课时,都会有这种感觉,觉得数据结构和算法很抽象,晦涩难懂,宛如天书。正是这个原因,让很多初学者对这门课望而却步。 我个人觉得,其实真正的原因是你没有找到好的 学习方法 ,没有抓住学习的重点。实际上,数据结构和算法的东西并不多,常用的、基础的知识点更是屈指可数。只要掌握了正确的学习方法,学起来并没有看上去那么难, 更不需要什么高智商、厚底子 。 还记得大学里每次考前老师都要划重点吗?今天,我就给你划划我们这门课的重点,再告诉你一些我总结的学习小窍门。相信有了这些之后,你学起来就会有的放矢、事半功倍了。 什么是数据结构?什么是算法? 大部分数据结构和算法教材,在开篇都会给这两个概念下一个明确的定义。但是,这些定义都很抽象,对理解这两个概念并没有实质性的帮助,反倒会让你陷入死抠定义的误区。毕竟, 我们学习,并不是为了考试 ,所以,概念背得再牢,不会用也就没什么用。 虽然我们说没必要深挖严格的定义,但是这并不等于不需要理解概念。 下面我就从广义和狭义两个层面,来帮你理解数据结构与算法这两个概念。 从 广义 上讲,数据结构就是指一组数据的存储结构。算法就是操作数据的一组方法。 图书馆储藏书籍你肯定见过吧?为了方便查找,图书管理员一般会将书籍分门别类进行“存储”。按照一定规律编号,就是书籍这种“数据

常用集合的底层数据结构和实现-Map

瘦欲@ 提交于 2019-12-04 03:52:01
常用集合的底层数据结构和实现 常见的底层数据结构:在 java 编程语言中,最基本的结构就是两种,一个是数组,另外一个是模拟指针(引用),所有的数据结构都可以用这两个基本结构来构造的 ( 当然也不能绝对的说,但至少在 java 中现有的所以集合都是基于这 2 中数据结构实现的 ) Map 类 HashMap 数据实现 : 底层基于模拟指针,也就是数组和链表的结合。底层整体结构是一个数组,数组中的每个元素又是一个链表。当创建一个 HashMap 的时候就会初始化一个数据,每次添加一个对象 (put) 的时候就会产生一个链表对象 ( 也就是数组中的一个元素, Object 类型 ) 。集合中的每个 Entry 就是数组中的一个元素,每个 Map.Entry 就是一个 key-value( 键值对 ) ,它具有由当前元素指向下一个元素的引用,这就构成了链表。 存储原理:当我们在向 HsahMap 中 put 元素的时候,先根据可以的 hashCode 重新计算该对象 ( 也就是 key) 的 hash 值,根据计算的 hash 值得到这个元素 (key) 在数组中的位置 ( 即下标 ) ,如果数组该位置已经存在其他元素,那么这个位置的元素将会以链表的形式存放,新加入的放在链头,最先加入的放在链尾,如果数组该位置元素不存在,那么就直接将该元素放到此数组中的该位置