★·········【算法与数据结构】
文章平均质量分 73
Ryze丶
不积跬步无以至千里
展开
-
数据结构与算法(1)-算法时间复杂度
1.算法时间复杂度:Ω-Θ-T(自下而上)大 O 记号 如果存在正常数 a、 N 和一个函数 f(n),使得对于任何 n > N,都有T(n) < a × f(n)我们就可以认为在 n 足够大之后, f(n)给出了 T(n)的一个上界。对于这种情况,我们记之为T(n) = O(f(n))这里的 O 称作“大 O 记号( Big-O notation)”。...原创 2018-09-04 10:27:37 · 251 阅读 · 0 评论 -
数据结构和算法(2)-栈与队列
引言栈与队列两种实现方法:数组及链表。 数组实现采用“基于下标访问”( Index-based access)的模式,而链表实现则是基于“节点”( Node)或“位置”( Position)的概念。无论是哪种实现方式,栈与队列的每一基本操作都可以在常数时间内完成。栈ADTPOP:移除栈定元素 操作 描述 push(x) 将对象 x 压至栈顶...转载 2018-09-13 17:39:16 · 274 阅读 · 0 评论 -
数据结构和算法(3)-向量,列表与序列
序列( Sequence),就是依次排列的多个对象。两种典型的序列:向量( Vector)和列表( List)。3.1 向量与数组通过[0, n-1]之间的每一个整数,都可以直接访问到唯一的元素 e,而这个整数就等于 S 中位于 e 之前的元素个数⎯⎯在此,我们称之为该元素的秩( Rank)。3.1.1 向量 ADT操作方法功能描述getSize():报告向量中的元素...原创 2018-09-26 23:37:18 · 3046 阅读 · 0 评论 -
数据结构和算法(4)-树
基于数组实现的结构允许我们通过下标或秩,在常数的时间内找到目标对象,并读取或更新其内容。然而,一旦需要对这类结构进行修改,那么无论是插入还是删除,都需要耗费线性的时间O(n)。反过来,基于链表实现的结构允许我们借助引用或位置对象,在常数的时间内插入或删除元素O(1);但是为了找出居于特定次序的元素,我们不得不花费线性的时间对整个结构进行遍历查找。树:可以结合两者的优点.4.1 术语及性质4...原创 2018-09-27 21:50:58 · 334 阅读 · 0 评论 -
ArrayList/Vector/Stack底层分析
ArrayListArrayList 实现于 List、RandomAccess 接口。可以插入空数据null,也支持随机访问。List接口中的特有的增删改查:增:add( int index , Object element )删:remove( int index ) //注意是下标而不是元素改:set( int index , Object newElement )查:get(...原创 2018-10-06 13:57:43 · 223 阅读 · 0 评论 -
LinkedList源码浅析
LinkedList基于双端链表实现;对元素的定位由秩(rank,index)到位置(position);public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, java.io.Seri...原创 2018-10-06 16:03:59 · 182 阅读 · 0 评论 -
HashSet源码浅析
引言HashSet 实现set接口,继承AbstractSet类;是一个不允许存储重复元素的集合;public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, java.io.SerializableHashSet类两个主要属性成员变量map修饰...原创 2018-10-06 21:41:41 · 242 阅读 · 0 评论 -
[JDK1.7]LinkedHashMap源码浅析
引言HashMap 是一个无序的 Map,因为每次根据 key 的 hashcode 映射到 Entry 数组上,所以遍历出来的顺序并不是写入的顺序。LinkedHashMap 的底层是继承于 HashMap 实现的,由一个双向链表所构成;accessOrder-排序顺序 /** * The iteration ordering method for this linked ...转载 2018-10-07 15:54:49 · 621 阅读 · 0 评论 -
[JDK1.8]LinkedHashMap源码浅析
引言上篇我们了解了JDK1.7中LinkedHashMap的源码,这篇文章试着分析一下JDK1.8中LinkedHashMap的源码(由于1.8HashMap做了优化,所以作为其子类的LinkedHashMap自然也做了一些修改.基于1.8的HashMap源码分析在之前的文章已经有了,不多阐述)...原创 2018-10-07 19:17:00 · 1076 阅读 · 0 评论 -
数据结构和算法(5)-树
上接前篇数据结构和算法(4)-树4.3 树的基本算法4.3.1 getSize()⎯⎯统计(子)树的规模一棵树的规模,等于根节点下所有子树规模之和再加一,也等于根节点的后代总数。...原创 2018-09-28 22:14:19 · 649 阅读 · 0 评论 -
分布式全局唯一ID生成策略
为什么分布式系统需要用到ID生成系统在复杂分布式系统中,往往需要对大量的数据和消息进行唯一标识。如在美团点评的金融、支付、餐饮、酒店、猫眼电影等产品的系统中,数据日渐增长,对数据库的分库分表后需要有一个唯一ID来标识一条数据或消息,数据库的自增ID显然不能满足需求;特别一点的如订单、骑手、优惠券也都需要有唯一ID做标识。此时一个能够生成全局唯一ID的系统是非常必要的。概括下来,业务系统对ID号...转载 2018-10-08 14:07:20 · 261 阅读 · 0 评论 -
ThreadLocal源码解读
1. 背景ThreadLocal源码解读,网上面早已经泛滥了,大多比较浅,甚至有的连基本原理都说的很有问题,包括百度搜索出来的第一篇高访问量博文,说ThreadLocal内部有个map,键为线程对象,太误导人了。ThreadLocal非常适合对Java多线程编程感兴趣的程序员作为入门类阅读,原因两方面:加上注释源码也不过七八百行。结构清晰,代码简洁。本文重点导读ThreadLocal中的...转载 2018-10-08 17:06:52 · 134 阅读 · 0 评论 -
数据结构和算法(5)-二叉树
去原创 2018-09-29 23:01:35 · 242 阅读 · 0 评论 -
二分查找的时间复杂度
1.二分查找的时间复杂度 假使总共有n个元素,那么二分后每次查找的区间大小就是n,n/2,n/4,…,n/2^k(接下来操作元素的剩余个数),其中k就是循环的次数。 最坏的情况是K次二分之后,每个区间的大小为1,找到想要的元素 令n/2^k=1, 可得k=log2n,(是以2为底,n的对数),所以时间复杂度可以表示O()=O(logn).2.算法的时间复杂度 定义: 存在常数 c...原创 2018-06-19 22:46:58 · 46641 阅读 · 0 评论 -
Java8系列之重新认识HashMap
摘要HashMap是Java程序员使用频率最高的用于映射(键值对)处理的数据类型。随着JDK(Java Developmet Kit)版本的更新,JDK1.8对HashMap底层的实现进行了优化,例如引入红黑树的数据结构和扩容的优化等。本文结合JDK1.7和JDK1.8的区别,深入探讨HashMap的结构实现和功能原理。简介Java为数据结构中的映射定义了一个接口java.util...转载 2018-06-27 22:47:11 · 176 阅读 · 0 评论 -
排序算法(2)-冒泡排序及优化
1.冒泡排序之前写过一个排序算法(1),其中总结了冒泡排序 . 冒泡排序的思想,是把相邻的元素两两比较,根据大小来交换元素的位置,每经过一轮的扫描,就会确定出一个最大的元素,即是一个元素有序.原始的冒泡排序是稳定排序(如果一个数组中存在几个相同的元素,排序前后的相同元素的前后顺序不会发生变更,则认为排序是稳定的)。由于该排序算法的每一轮要遍历所有元素,轮转的次数和元素数量相当,所以时间复...原创 2018-07-18 21:29:24 · 259 阅读 · 0 评论 -
排序算法(1)-冒泡排序,选择排序,插入排序,希尔排序,快速排序
一些基本的排序算法:package tenSortingMethods;/** * @author zhangdi * @description 排序算法 * @Date 20180531 */public class Sort { public static void main(String[] args) { int[] arr = {6,1,2,...原创 2018-06-06 10:11:44 · 734 阅读 · 0 评论