首页
学习
活动
专区
工具
TVP
发布

大闲人柴毛毛

专栏作者
189
文章
252116
阅读量
63
订阅数
回溯法(一)——n皇后问题
问题描述 在一个n*n的棋盘上放置皇后,要求:一个皇后的同一行、同一列、同一条对角线上不允许出现其他皇后。请给出所有的放置方案。 算法思路 思路很简单,由于每行每列不能出现两个皇后,因此每行只能放一
大闲人柴毛毛
2018-03-12
1.5K0
Redis源码分析(一)——Redis数据结构-字符串SDS
1. SDS简介 Redis中使用的字符串均为『简单动态字符串』(Simple Dynamic String),简称SDS。 SDS是在C字符串的基础上进行了一些包装,使得它更符合Redis的使用场景。 在Redis中,C字符串只用在一些无需修改的地方,如日志打印;其他需要使用字符串的地方基本上使用的都是SDS。 2. 数据结构 struct sdshdr{ int len; int free; char buf[]; }; len:buf数组中字符串的实际使用量。 free:buf数组中空闲
大闲人柴毛毛
2018-03-09
7740
Redis源码分析(二)——Redis数据结构-链表
数据结构——节点 typedef struct listNode{ struct listNode *prev; struct listNode *next; void *value; }listNode; prev:链表节点的前驱 next:链表节点的后继 value:节点中的值 数据结构——链表 typedef struct list{ listNode *head; listNode *tail; unsigned long len; }list; head:链表头节点 ta
大闲人柴毛毛
2018-03-09
9110
Redis源码分析(三)——Redis数据结构-字典
1. 数据结构 1.1 哈希表 typedef struct dictht{ dictEntry **table; unsigned long size; unsigned long si
大闲人柴毛毛
2018-03-09
6390
Redis源码分析(四)——Redis数据结构-整数集合
1. 整数集合特点 有序:集合中所有值按照从小到大顺序排列。 不重复 可以存储int16_t、int32_t、int64_t三种类型的整数 1. 数据结构 typedef struct intset{ unit32_t encoding; unit32_t length; int8_t contents[]; } intset; encoding:content数组中存储的整数类型(int16_t、int32_t、int64_t三者之一) length:contents数组中元素的个数 con
大闲人柴毛毛
2018-03-09
8050
彻底搞懂红黑树
红黑树性质 1、每个结点或是红色的,或是黑色的 2、根节点是黑色的 3、每个叶结点(NIL)是黑色的 4、如果一个节点是红色的,则它的两个儿子都是黑色的。 5、对于每个结点,从该结点到其叶子结点构成的所有路径上的黑结点个数相同。 和AVL树的比较 AVL树是一棵严格的平衡树,它所有的子树都满足二叉平衡树的定义。因此AVL树高被严格控制在XXX,因此AVL树的查找比较高效。但AVL树插入、删除结点后旋转的次数比红黑树多。 红黑树用非严格的平衡来降低插入删除时旋转的次数。 因此,如果你的业务中
大闲人柴毛毛
2018-03-09
9730
贪心算法(五)——迪杰斯特拉算法
问题描述 给一个有向无环带权图,并给一个起点,求出该原点到所有顶点的最短路径。 数据结构 dis: Map<String,Integer> dis; 存储原点s到指定节点的最短路径长度。 k
大闲人柴毛毛
2018-03-09
8070
动态规划法(二)——弗洛伊德算法
问题描述 给定一个带权有向图,计算任意两结点间的最短路径。 迪杰斯特拉算法可以计算指定起点到所有结点的最短路径长度,因此分别对每个结点使用一次迪杰斯特拉算法即可求的任意两结点间的最短路径。迪杰斯特拉算法的时间复杂度为O(n^2),因此采用这种方法的时间复杂度为O(n^3)。 但是,迪杰斯特拉算法不允许权值为负数,因此需要使用弗洛伊德算法。 弗洛伊德算法允许权值为负数的边,但不允许回路的路径长度为负数。因为,若回路长度为负数,那么走一次回路,路径长度一定比上一次小,故这个问题就没有意义了。 数
大闲人柴毛毛
2018-03-09
1K0
动态规划法(五)——多段图问题
问题描述 给定一个多段图,求出多段图中的最短路径和最短路径长度。 什么是多段图? 多段图是一个有向、无环、带权 图。 有且仅有一个起始结点(原点source) 和 一个终止结点(汇点target)。
大闲人柴毛毛
2018-03-09
1.8K0
深入理解JVM(九)——类加载的过程
通过之前的介绍可知,类加载过程共有5个步骤,分别是:加载、验证、准备、解析、初始化。其中,验证、准备、解析称为连接。下面详细介绍这5个过程JVM所做的工作。 加载 注意:“加载”是“类加载”过程的第一步,千万不要混淆。 1. 加载的过程 在加载过程中,JVM主要做3件事情: 通过一个类的全限定名来获取这个类的二进制字节流,即class文件: 在程序运行过程中,当要访问一个类时,若发现这个类尚未被加载,并满足类初始化时机的条件时,就根据要被初始化的这个类的全限定名找到该类的二进制字节流,开始加载过程。 将
大闲人柴毛毛
2018-03-09
7010
没有更多了
社区活动
腾讯技术创作狂欢月
“码”上创作 21 天,分 10000 元奖品池!
Python精品学习库
代码在线跑,知识轻松学
博客搬家 | 分享价值百万资源包
自行/邀约他人一键搬运博客,速成社区影响力并领取好礼
技术创作特训营·精选知识专栏
往期视频·千货材料·成员作品 最新动态
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档