算法
文章平均质量分 95
菠萝y
发上等愿,结中等缘,享下等福;择高处立,寻平处住,向宽处行。
展开
-
Transformer模型详解
Attention Is All You Need是一篇Google提出的将Attention思想发挥到极致的论文。这篇论文中提出一个全新的模型,叫 Transformer,抛弃了以往深度学习任务里面使用到的 CNN 和 RNN ,目前大热的Bert就是基于Transformer构建的,这个模型广泛应用于NLP领域,例如机器翻译,问答系统,文本摘要和语音识别等等方向。转载 2024-07-10 11:18:30 · 79 阅读 · 0 评论 -
树状结构数据的数据库表设计及使用 - 1. 邻接表
树状结构或层次结构的数据在企业应用里非常常见,例如公司的组织架构、文档库的目录结构、仓库的库位组织以及物件的分类等等。通常的树状图是一种数据结构。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:每个结点有零个或多个子结点;没有父结点的结点称为根结点;每一个非根结点有且只有一个父结点;除了根结点外,每个子结点可以分为多个不相交的子树。树结构是一种非线性存储结构,存储的是具有“一对多”关系的数据元素的集合。在设计树状结构的数据库表的时候,大部分开发者会下意识的选择邻转载 2022-06-22 11:41:11 · 7011 阅读 · 0 评论 -
分布式自增ID生成算法 - 雪花算法(SnowFlake)
一、概述1、SnowFlake算法生成id的结果是一个64bit大小的整数,它的结构如下图:● 1位,不用。二进制中最高位为1的都是负数,但是我们生成的id一般都使用整数,所以这个最高位固定是0● 41位,用来记录时间戳(毫秒)。○ 41位可以表示241−12^{41}-1241−1个数字,○ 如果只用来表示正整数(计算机中正数包含0),可以表示的数值范围是:0 至 241−12^{41}-1241−1,减1是因为可表示的数值范围是从0开始算的,而不是1。○ 也就是说41位可以表示24转载 2020-11-28 23:08:04 · 514 阅读 · 0 评论 -
三、JDK1.7和1.8HashMap数据结构及源码分析-续
导读前面文章一、深入理解-Java集合初篇 中我们对Java的集合体系进行一个简单的分析介绍,上一篇文章二、Jdk1.7和1.8中HashMap数据结构及源码分析 中我们对JDK1.7中HashMap的数据结构、主要声明变量、构造函数、HashMap的put操作方法做了深入的讲解和分析,本篇文章是上一篇文章的后续。本篇文章我们将要对JDK1.8中HashMap的数据结构、主要声明变量、构造函数、HashMap的put操作方法等做深入讲解,同时通过对源码的分析做进一步了解。简单介绍JDK1.7—》哈希表原创 2020-09-27 17:20:58 · 514 阅读 · 0 评论 -
二、Jdk1.7和1.8中HashMap数据结构及源码分析
导读上篇文章(一、深入理解-Java集合初篇 )中我们对Java的集合体系进行一个简单的分析,本篇我们我们将针对Java集合体系中的HashMap做详细介绍。简单介绍JDK1.7—》哈希表,链表JDK1.8—》哈希表,链表,红黑树— JDK1.8之后,当链表长度超过8使用红黑树。非线程安全0.75的负载因子,扩容必须为原来的两倍。默认大小为16,传入的初始大小必须为2的幂次方的值,如果不为也会变为2的幂次方的值。根据HashCode存储数据。JDK1.7-HashMap数据结构—》数原创 2020-09-27 17:12:22 · 1014 阅读 · 2 评论 -
JAVA数据结构和算法-简单排序之插入排序
解析在大多数情况下,插入排序算法是之前所指出的JAVA数据结构和算法-简单排序之冒泡排序和 JAVA数据结构和算法-简单排序之选择排序 算法中最好和效率最高的一种。虽然插入排序算法仍然需要O(n的平方)的时间,但是在一般情况下,它要比冒泡排序快一倍,比选择排序还要快一点。尽管它比冒泡排序算法和选择排序算法都更麻烦一些,但它也并不很复杂。它经常被用在较复杂的排序算法的最后阶段,例如快速排序。插入排序为棒球队员排序开始插入排序之前,把棒球队员按随机顺序排成一行。(他们可能着急想打球,但是现在显然没有时间原创 2020-08-24 11:14:33 · 341 阅读 · 0 评论 -
JAVA数据结构和算法-简单排序之选择排序
选择排序选择排序改进了JAVA数据结构和算法-简单排序之冒泡排序。将必要的交换次数从O(n的平方)减少到了O(n).不幸的是,比较次数仍然保持着O(n的平方)。然而,选择排序仍然为大记录量的排序提出了一个非常重要的改进,因为这些大量的记录需要在内存中移动,这就使交换的时间和比较的时间相比起来,交换的时间更为重要。(一般来说,在JAVA语言中不是这种情况,JAVA中只是改变了引用位置,而实际对象的位置并没有发生改变。)用选择排序算法来对棒球队员进行排序让我们再来考虑棒球队排序的问题。在选择排序中,不再只原创 2020-08-20 17:17:05 · 202 阅读 · 0 评论 -
JAVA数据结构和算法-简单排序之冒泡排序
解析冒泡排序算法运行起来非常慢,但在概念上它是排序算法中最简单的,因此冒泡排序算法在刚开始研究排序技术时是一个非常好的算法。使用冒泡排序算法对棒球队员排序如果人近视的像计算机一样,以至于只能看到站在他面前的两个相邻的棒球队员。在这种困难的情况下,如何为队员们进行排序呢?假设有N个队员,并且根据所占的位置从左到右分别给每个队员编号,从0到N-1。冒泡排序程序执行如下:从队列的最左边开始,比较0号位置和1号位置的队员。如果左边的队员(0号)高,就让两个队员交换。如果右边的队员高,就什么也不做。然后右移一原创 2020-08-20 17:12:56 · 215 阅读 · 0 评论 -
JAVA数据结构和算法-有序数组的二分查找
二分查找当使用二分查找时,就体现出有序数组的好处。这种查找比线程查找快很多,尤其是对于大的数组来说更为显著。猜数游戏二分查找使用的方法与我们在小时候常玩的猜数游戏中所用的方法一样。在这个游戏里,一个朋友会让你猜她整想的一个1至100之间的数。当你猜了一个数字后,她会告诉你三种选择中的一个:你猜的比她想的大、或小、或猜中了。JAVA数据结构和算法-有序数组的二分查找猜数游戏为了能使用最少的次数猜中,必须从50开始猜。如果她说你猜的太小,则推出那个数在51至100之间,所以下一次猜75(51至100原创 2020-08-18 11:56:47 · 275 阅读 · 0 评论 -
JAVA数据结构和算法之数组
一、简单使用/** * Created by Bruce on 2020/8/5 **/public class ArrayApp_01 { public static void main(String[] args) { long[] arr = new long[100];//最多有100个元素 int nElems = 0;//数量 int j ; long searchKey; arr[0] = 77;原创 2020-08-06 11:19:25 · 212 阅读 · 2 评论 -
LeetCode--节点与其祖先之间的最大差值
题目:给定二叉树的根节点 root,找出存在于不同节点 A 和 B 之间的最大值 V,其中 V = |A.val - B.val|,且 A 是 B 的祖先。(如果 A 的任何子节点之一为 B,或者 A 的任何子节点是 B 的祖先,那么我们认为 A 是 B 的祖先)示例:输入:[8,3,10,1,6,null,14,null,null,4,7,13]输出:7解释: 我们有大量的节点与其祖先的差值,其中一些如下:|8 - 3| = 5|3 - 7| = 4|8 - 1| = 7|10 -原创 2020-07-30 11:38:49 · 297 阅读 · 0 评论 -
LeetCode--除数博弈
题目:爱丽丝和鲍勃一起玩游戏,他们轮流行动。爱丽丝先手开局。最初,黑板上有一个数字 N 。在每个玩家的回合,玩家需要执行以下操作: 选出任一 x,满足 0 < x < N 且 N % x == 0 。 用 N - x 替换黑板上的数字 N 。如果玩家无法执行这些操作,就会输掉游戏。只有在爱丽丝在游戏中取得胜利时才返回 True,否则返回 False。假设两个玩家都以最佳状态参与游戏。示例 1:输入:2输出:true解释:爱丽丝选择 1,鲍勃无法进行操作。示例 2:原创 2020-07-29 10:01:46 · 154 阅读 · 0 评论 -
LeetCode--盛最多水的容器
题目:给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且 n 的值至少为 2。图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。示例:输入:[1,8,6,2,5,4,8,3,7]输出:49代码:p原创 2020-07-24 17:04:27 · 99 阅读 · 0 评论 -
LeetCode--回文数
题目:判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。示例 1:输入: 121输出: true示例 2:输入: -121输出: false解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3:输入: 10输出: false解释: 从右向左读, 为 01 。因此它不是一个回文数。进阶:你能不将整数转为字符串来解决这个问题吗?解题:方法一:/** * 下标比较-拆分后放入数组原创 2020-07-24 16:29:22 · 144 阅读 · 0 评论 -
LeetCode--字符串转换整数 (atoi)
题目:请你来实现一个 atoi 函数,使其能将字符串转换成整数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。接下来的转化规则如下: 如果第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字字符组合起来, 形成一个有符号整数。 假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成一个整数。 该字符串在有效的整数部分之后也可能会存在多余的字符,那么这些字符可以被忽略,它们对函 数不应该造成影响。注意:假如该字符串原创 2020-07-24 11:34:31 · 381 阅读 · 0 评论 -
LeetCode--整数反转
题目:给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例 1:输入: 123输出: 321示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。解法一:使用String的一些函数 public int reverse(int x) { if(x ==原创 2020-07-24 09:55:33 · 116 阅读 · 0 评论 -
LeetCode--Z 字形变换
题目描述:将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 “LEETCODEISHIRING” 行数为 3 时,排列如下:L C I RE T O E S I I GE D H N之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“LCIRETOESIIGEDHN”。请你实现这个将字符串进行指定行数变换的函数:string convert(string s, int numRows);示例 1:输入: s原创 2020-07-23 17:40:09 · 277 阅读 · 0 评论