小威的算法厨房
算法两个词汇听起来很高端,常常给人一种难以触摸,学习以及掌握的即视感
其实我们的生活中,我们自己就常常使用着算法这个所谓高深的玩意儿。
小到买菜的价格比较算法,大到找工作,结婚等的大型“撕X”算法。
现在我仅以自己的所学所知来进行记录,期待诸君能有所得。
威少SOS
改变从这里开始
展开
-
大话数据结构系列之排序的初体验
文章目录排序的定义排序的稳定性:稳定性的意义内排序外排序冒泡排序(Bubble Sort)简单选择排序直接插入排序排序的定义假设含有 n 个记录的序列为 {r1, r2, r3 … rn },其相应的关键字分别为{k1, k2, k3 … kn},需确定 1, 2,… 的一种排列 p1, p2, …, pn, 使其相应的关键字满足 kp1 <= kp2 <= … <= kpn...原创 2020-02-03 17:37:10 · 2897 阅读 · 0 评论 -
大话数据结构系列之数学基础知识补充
文章目录数学归纳法实际以多米诺效应推导求证等差数列结论是否正确:二分法的对数推导时间复杂度常规比较快速查询的时间复杂度推导对数对数的由来对数的定义log2^n ===> lgn 推导相关的数学公式了解数学归纳法数学归纳法是以一种不同的方式来证明任意一个给定的情形都是正确的(第一个,第二个,第三个,一直下去概不例外)的数学定理。但是数学归纳法并非不严谨的归纳推理法,它属于完全严谨的...原创 2020-02-03 16:05:05 · 3623 阅读 · 0 评论 -
大话数据结构系列之快速排序算法
文章目录实现思路重点知识代码实现优化策略算法比较与各位共勉实现思路1、属于冒泡排序的升级版,都是通过不断的比较和移动交换来实现排序,它的实现,增大了记录的比较和移动的距离,将关键字较大的记录从前面直接移动到后面,关键字较小的记录从后面直接移动到前面,从而减少了总的比较次数和移动交换次数。2、通过一趟排序将待记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这...原创 2020-02-02 21:01:15 · 3748 阅读 · 1 评论 -
大话数据结构系列之单链表(三.2)
文章目录定义数据域与指针域节点指针单链表单链表 VS 顺序存储结构存储分配方式时间性能空间性能链表的增删一定比顺序存储结构快么?代码实现( C 、Java )定义数据域与指针域为了表示每个数据元素 a[i] 与其直接后继数据元素 a[i+1] 之间的逻辑关系,对数据元素a[i] 来说,除了存储其本身的信息之外,还需存储一个指示其直接后继的信息(即直接后继的存储位置)。我们把存储数据元素信息...原创 2020-01-19 17:21:56 · 2085 阅读 · 0 评论 -
大话数据结构系列之静态链表(四)
文章目录定义组成静态链表的插入元素存在意义静态链表的优缺点代码实现( C 、Java )定义组成让数组的元素都是由两个数据域组成,data 和 cur。数组的每个下标都对应一个 data 和一个 cur。数据域 data,用来存放数据元素;而游标 cur 相当于单链表中的 next 指针,存放该匀速的后继在数组中的下标。静态链表的插入元素例子:新增元素丙,并插入到下标为3的位置操作...原创 2020-01-19 15:49:45 · 2117 阅读 · 0 评论 -
大话数据结构系列之循环链表(五)
文章目录定义代码实现(Java )定义循环链表(circular linked list)是将单链表中终端节点的指针端由空指针改为指向头结点,就使整个单链表形成一个环。实际含义:存在循环的情景,例如录音机的循环播放,网易云的单曲循环功能(需要从 头 ——> 尾 )代码实现(Java )Java 语言package com.example;/* * 初始化时,含有头尾节点的...原创 2020-01-19 15:41:26 · 2117 阅读 · 0 评论 -
大话数据结构系列之双向链表(六)
文章目录定义代码实现( Java )定义双向链表( double linked list )由单链表演化而来,在单链表的每个节点中,在设置一个指向其前驱节点的指针域。实际含义:我们不仅需要正向的循环播放,亦需要反向循环功能。例如监控探头的倒带功能,以及很多设计软件的回溯功能。代码实现( Java )Java 语言package com.example;/* * 对比单向链表:...原创 2020-01-19 15:37:52 · 1944 阅读 · 0 评论 -
大话数据结构系列之链队列结构(十二)
文章目录定义链队列 VS 循环队列链队列代码实现( C 、Java )定义队列的链式存储结构,其实就是线性表的单链表,只不过它只能尾进头出而异,我们把它简称为链队列链队列 VS 循环队列时间角度它们的基本操作都是常数时间,为 O[1] ,不过循环队列是事先申请好空间,使用期间不释放对于链队列,每次申请和释放节点也会存在一点儿时间开销空间角度循环队列必须有一个固定的长度,所以有了存储...原创 2020-01-19 10:48:41 · 2006 阅读 · 0 评论 -
大话数据结构系列之队列初体验(十一)
文章目录定义抽象数据类型循环队列循环队列代码实现定义队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。队列是一种先进先出( First In First Out )的线性表,简称 FIFO。允许插入的一端称为队尾,允许删除的一端称为队头。抽象数据类型循环队列我们把队列的这种头尾相接的顺序存储结构称为循环队列循环队列代码实现C 语言#include "...原创 2020-01-19 10:43:14 · 289 阅读 · 0 评论 -
大话数据结构系列之栈的实际应用(十)
文章目录斐波那契函数推导( Java、C )使用栈来实现四则运算( Java、C )栈与递归的关系“递归”与“迭代”的选择性讨论诗词即兴环节斐波那契函数推导( Java、C )图解定义C 语言实现#include "stdio.h"int Fbi(int i) /* 斐波那契的递归函数 */{ if( i < 2 ) return i == 0 ? 0...原创 2020-01-19 10:36:26 · 1943 阅读 · 0 评论 -
栈 与 递归 不得不说的“故事”
文章目录基本思想广义递归狭义递归递归与栈的紧密关系从基本思想来说从函数栈的使用角度说栈与递归的实际功用基本思想把规模较大的一个问题,分解成规模较小的多个子问题去解决,而每一个子问题又可以继续拆分成多个更小的子问题。递归解决的是有依赖关系的多个问题:必须先解决最小子问题,在层层递进的方式解决当前问题广义递归void main(){ A();}func_A(){func...原创 2020-01-19 10:26:45 · 1913 阅读 · 0 评论 -
大话数据结构系列之链栈结构(九)
文章目录链栈的定义链栈代码实现( C、Java)链栈的定义栈的链式存储结构,简称为链栈链栈 VS 顺序栈如果使用过程中元素变化不可预料,有时很小,有时非常大,最好使用链栈。反之,如果它的变化在可控范围内,建议使用顺序栈会更好一点儿(节省空间)链栈代码实现( C、Java)C 语言实现#include "stdio.h" #include "stdlib.h" #in...原创 2020-01-17 16:54:14 · 296 阅读 · 0 评论 -
大话数据结构系列之共享栈结构(八)
文章目录共享栈定义共享栈代码实现共享栈定义共享栈图解推理它们是在数组的两端,向中间靠拢。top1 和 top2 是栈 1 和栈 2 的栈顶指针,可以想象,只要它们俩不见面,两个栈就可以一直使用。优点理论上适用一块儿地儿,办了两块地儿的事儿,节省了 1/2 的空间。适用情景比较适用于两个栈的空间需求有相反关系的情况,也就是一个栈增长时,另一个栈在缩短。跟买股票一样,你买入时,一定...原创 2020-01-17 16:42:42 · 317 阅读 · 0 评论 -
大话数据结构系列之栈结构的初体验(七)
文章目录栈是什么定义进栈出栈的变化形式栈的抽象数据类型表达栈的结构栈是什么定义栈( stack )是限定仅在表尾进行插入和删除操作的线性表我们把允许插入和删除的一端称为栈顶( top ),另一端称为栈底( bottom ),不含任何数据元素的栈称为空栈。栈又称为后进先出( Last In First Out )的线性表,简称 LIFO 结构。进栈栈的插入操作,也称压栈、入栈。出栈栈...原创 2020-01-17 16:23:06 · 358 阅读 · 0 评论 -
大话数据结构系列之线性表(三)
文章目录线性表定义基础结构划分顺序存储结构优点缺点C 语言实现Java 语言实现线性表定义零个或多个元素的有限序列数学逻辑表达若将线性表标记为( a[1], a[2], a[3]~~~ a[i-1], a[i], a[i+1]~~~ a[n] ),则表中 a[i-1] 领先于 a[i],a[i] 领先于 a[i+1],称 a[i-1] 是 a[i] 的直接前驱元素,a[i+1] 是 a...原创 2020-01-16 14:42:20 · 340 阅读 · 0 评论 -
大话数据结构系列之基本概念与术语(一)
文章目录数据数据元素逻辑结构与物理结构逻辑结构物理结构抽象数据类型数据类型:抽象数据类型:数据是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合例子:MP3,图片,视频等数据元素是组成数据的、有一定意义的基本单位,在计算机中通常作为整体处理。也被成为记录。例子:人类中,人就是数据元素##数据项一个数据元素可以有若干个数据项组成,数据项是数...原创 2020-01-15 16:05:13 · 5203 阅读 · 0 评论 -
大话数据结构系列之算法初探(二)
文章目录算法定义算法的特性输入与输出有穷性确定性可行性算法设计的要求广义正确性狭义正确性(递增)可读性健壮性时间效率高和存储量低算法效率的度量方法事后统计法事前分析估算方法算法时间复杂度常见的时间复杂度最坏情况与平均情况最坏情况:是运行时间的一种保证,就是运行时间不会再坏了。平均情况:是所有情况中最有意义的,因为它是期望的运行时间算法空间复杂度算法定义算法是解决特定问题求解步骤的描述,在计算机...原创 2020-01-15 15:52:38 · 5167 阅读 · 0 评论 -
Java 移位、逻辑运算符详解(~史上最全|吹牛逼)
目录一、<< :左移运算符二、>> :右移运算符三、>>> :无符号右移四、& :与运算五、| :或运算六、~ :非运算七、^ :异或运算拓展问题:一:从计算速度上讲,移位运算要比算术运算快?二:二进制的起源日常发车:参考文章:https://blog.csdn.net/is_zhoufeng/a...原创 2019-12-27 11:43:10 · 5947 阅读 · 1 评论
分享