
数据结构与算法分析
文章平均质量分 74
算法与设计模式
梦~开始
Reach for the sky because if you should happen to miss, you'll still be among the stars.
展开
-
1、算法课程简介
原创 2021-09-09 18:22:19 · 334 阅读 · 0 评论 -
2、算法与数据结构
简单介绍1、算法是程序的灵魂,优秀的程序可以在海量数据计算时,依然保持高速计算2、一般来讲程序会使用了内存计算框架(比如Spark)和缓存技术(比如Redis等)来优化程序,再深入的思考一下,这些计算框架和缓存技术,它的核心功能是哪个部分呢?3、拿实际工作经历来说,在Unix下开发服务器程序,功能是要支持上千万人同时在线,在上线前,做内测,一切OK,可上线后,服务器就支撑不住了,公司的CTO对代码进行优化,再次上线,坚如磐石。你就能感受到程序是有灵魂的,就是算法。4、目前程序员面试的原创 2021-09-09 18:20:43 · 98 阅读 · 0 评论 -
14.程序员常用10种算法
1、二分查找算法(非递归)简单介绍二分查找法只适用于从有序的数列中进行查找(比如数字和字母等),将数列排序后再进行查找二分查找法的运行时间为对数时间O(㏒₂n) ,即查找到需要的目标位置最多只需要㏒₂n步,假设从[0,99]的队列(100个数,即n=100)中寻到目标数30,则需要查找步数为㏒₂100 , 即最多需要查找7次( 2^6 < 100 < 2^7)代码实现数组 {1,3, 8, 10, 11, 67, 100}, 编程实现二分查找, 要求使用非递归的方式完成.pa原创 2021-08-13 08:22:40 · 1229 阅读 · 0 评论 -
13.图。
图为什么要有图1)前面我们学了线性表和树2)线性表局限于一个直接前驱和一个直接后继的关系3)树也只能有一个直接前驱也就是父节点4)当我们需要表示多对多的关系时, 这里我们就用到了图基本介绍图是一种数据结构,其中结点可以具有零个或多个相邻元素。两个结点之间的连接称为边。 结点也可以称为顶点。如图:常见概念顶点(vertex)边(edge)路径无向图(下图所示)有向图带权图(网)表示方式图的表示方式有两种:二维数组表示(邻接矩阵);链表表示(邻接原创 2021-08-13 08:21:39 · 116 阅读 · 0 评论 -
12.多路查找树
二叉树存在的问题二叉树的操作效率较高,但是也存在问题, 请看下面的二叉树1)二叉树需要加载到内存的,如果二叉树的节点少,没有什么问题,但是如果二叉树的节点很多(比如1亿), 就存在如下问题:2)问题1:在构建二叉树时,需要多次进行i/o操作(海量数据存在数据库或文件中),节点海量,构建二叉树时,速度有影响3)问题2:节点海量,也会造成二叉树的高度很大,会降低操作速度.多叉树在二叉树中,每个节点有数据项,最多有两个子节点。1)如果允许每个节点可以有更多的数据项和更多的子节点,就是多叉树(mul原创 2021-08-12 09:28:38 · 117 阅读 · 0 评论 -
11.树结构实际应用
堆排序基本介绍堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆, 注意 : 没有要求结点的左孩子的值和右孩子的值的大小关系。每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆大顶堆大顶堆特点: arr[i]>=arr[2 * i+1] && arr[i] >= arr[2原创 2021-08-12 09:25:22 · 679 阅读 · 0 评论 -
10.树结构基础部分
树三种存储方式的比较数组存储方式分析优点:通过下标方式访问元素,速度快。对于有序数组,还可使用二分查找提高检索速度。缺点:如果要检索具体某个值,或者插入值(按一定顺序)会整体移动,效率较低链表存储方式分析优点:在一定程度上对数组存储方式有优化(比如:插入一个数值节点,只需要将插入节点,链接到链表中即可, 删除效率也很好)缺点:在进行检索时,效率仍然较低,比如(检索某个值,需要从头节点开始遍历)树的存储方式分析能提高数据存储,读取的效率, 比如利用 二叉排序树(Binary原创 2021-08-12 09:14:52 · 158 阅读 · 0 评论 -
9.哈希表
基本介绍散列表(Hash table,也叫哈希表)根据关键码值(key value)而直接进行访问数据结构。也就是说,他通过吧关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表例题有一个公司,当有新的员工来报道时,要求将该员工的信息加入(id,性别,年龄,名字,住址…),当输入该员工的id时,要求查找到该员工的所有信息.要求:不使用数据库,速度越快越好=>哈希表(散列)添加时,保证按照id从低到高插入[课后思考:如果id原创 2021-08-12 09:10:53 · 120 阅读 · 0 评论 -
8.查找算法
查找算法介绍在java中,我们常用的查找有四种:顺序(线性)查找二分查找 / 折半查找插值查找斐波那契查找顺序(线性)查找算法public class SeqSearch { public static void main(String[] args) { int[] arr={1,8,5,6,74,5,5,4,6,1,6,-238};//无序数组 int index = seqSearch(arr,1); if (index ==原创 2021-08-12 09:06:02 · 110 阅读 · 0 评论 -
7.排序算法
排序算法概念排序也称排序算法 (Sort Algorithm),排序是将一组数据,依指定的顺序进行排列的过程。排序的分类内部排序指将需要处理的所有数据都加载到内部存储器(内存)中进行排序。外部排序法数据量过大,无法全部加载到内存中,需要借助外部存储(文件等)进行排序。算法的时间复杂度度量一个程序(算法)执行时间的两种方法事后统计的方法这种方法可行, 但是有两个问题 :一是要想对设计的算法的运行性能进行评测,需要实际运行该程序;二是所得时间的统计量依赖于计算机的硬件、软件等环境原创 2021-08-12 08:47:08 · 185 阅读 · 0 评论 -
6.递归(Recursion)
递归(Recursion)递归的概念递归就是方法自己调用自己,每次调用时传入不同的变量.递归有助于编程者解决复杂的问题,同时可以让代码变得简洁。递归的调用机制代码演示package demo1;public class RecursionTest { public static void main(String[] args) { int i = factorial(3); System.out.println(i); test(4)原创 2021-08-12 08:36:37 · 258 阅读 · 0 评论 -
5.栈Stack
栈Stack栈的简介栈的英文为(stack)栈是一个先入后出(FILO-First In Last Out)的有序列表。栈(stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端,为变化的一端,称为栈顶(Top),另一端为固定的一端,称为栈底(Bottom)。根据栈的定义可知,最先放入栈中元素在栈底,最后放入的元素在栈顶,而删除元素刚好相反,最后放入的元素最先删除,最先放入的元素最后删除出栈(pop)和入栈(pus)(图显)栈的应用场景原创 2021-08-12 08:31:31 · 531 阅读 · 0 评论 -
4.链表LinkedList
链表LinkedList链表简介链表是有序的列表,它在内存中的存储小结:链表是以节点的方式来存储,是链式存储每个节点包含 data 域, next 域:指向下一个节点.如图:发现链表的各个节点不一定是连续存储.链表分带头节点的链表和没有头节点的链表,根据实际的需求来确定1.单链表(带头结点)逻辑结构示意图单链表单链表的应用【增删改查】package com.LinkedList;public class SingleLinkedListDemo {原创 2021-02-03 21:37:03 · 221 阅读 · 0 评论 -
3.稀疏数组和队列笔记
稀疏数组public class SparceArray { public static void main(String[] args) { //创建一个原始的二维数组 //0:表示没有旗子,1表示黑子 2表示黑子 int chessArr1[][]=new int [11][11]; chessArr1[1][2]=1; chessArr1[2][3]=2; //输出原始的二维数组原创 2021-02-02 22:16:09 · 193 阅读 · 1 评论