数据机构和算法
强迫症Kobe
与其焦虑成疾,不如静心学习。
展开
-
三种快速排序以及快速排序的优化
1、快速排序的基本思想: 快速排序使用分治的思想,通过一趟排序将待排序列分割成两部分,其中一部分记录的关键字均比另一部分记录的关键字小。之后分别对这两部分记录继续进行排序,以达到整个序列有序的目的。2、快速排序的三个步骤:(1)选择基准:在待排序列中,按照某种方式挑出一个元素,作为 "基准"(pivot)(2)分割操作:以该基准在序列中的实际位置,把序列分成两个转载 2018-01-16 22:55:57 · 213 阅读 · 0 评论 -
最长公共子序列
看了很多相关文章,把觉得好的放在这里,方便以后查看,文章1:简洁文章2:全面 文章1: https://www.cnblogs.com/en-heng/p/3963803.html文章2:https://blog.csdn.net/wangdd_199326/article/details/76464333...转载 2018-09-05 16:56:29 · 195 阅读 · 0 评论 -
页面置换算法--LFU算法实现-O(1)时间复杂度
eetcode题目地址https://leetcode.com/problems/lfu-cache/?tab=Description题目描述Design and implement a data structure for Least Frequently Used (LFU) cache. It should support the following operations: ge...转载 2018-09-02 19:59:12 · 2763 阅读 · 0 评论 -
一个Sqrt函数引发的血案
我们平时经常会有一些数据运算的操作,需要调用sqrt,exp,abs等函数,那么时候你有没有想过:这个些函数系统是如何实现的?就拿最常用的sqrt函数来说吧,系统怎么来实现这个经常调用的函数呢?虽然有可能你平时没有想过这个问题,不过正所谓是“临阵磨枪,不快也光”,你“眉头一皱,计上心来”,这个不是太简单了嘛,用二分的方法,在一个区间中,每次拿中间数的平方来试验,如果大了,就再试左区间的中间数;...转载 2018-08-28 21:05:35 · 310 阅读 · 0 评论 -
一篇很好的动态规划总结的地址
https://blog.csdn.net/u013309870/article/details/75193592转载 2018-07-22 22:20:37 · 293 阅读 · 0 评论 -
二叉树遍历的递归、非递归算法(Java实现)
二叉树的先序和中序遍历大家都是差不多的,但是后序遍历有很多不同的实现方法,在查了很多资料之后,感觉这一种是比较直观而且很巧妙的利用stack和queue的实现方式。构造二叉树采用二叉链表为二叉树的存储结构,实现基于带空子树的遍历序列构造二叉树的方法 //基于带空子树的遍历序列构造二叉树 private int i = 0; //[1] private BinaryNode&l...转载 2018-06-25 16:59:07 · 1550 阅读 · 1 评论 -
Boyer-Moore算法
一.简述 在当前用于查找子字符串的算法中,BM(Boyer-Moore)算法是当前有效且应用比较广的一中算法,各种文本编辑器的“查找”功能(Ctrl+F),大多采用Boyer-Moore算法。比我们在学习的KMP算法快3~5倍。 Boyer-Moore算法不仅效率高,而且构思巧妙,容易理解。1977年,德克萨斯大学的Robert S. Boyer教授和J Strothe...转载 2018-06-17 10:01:04 · 2931 阅读 · 0 评论 -
电话号码排序
编程珠玑第一章,电话号码排序,问题是这样的,给你大约1000万个数字,让你用最快的方式进行排序,限制如下:1. 内存大约1M2. 数字都是整数,且不重复3. 数字的范围最大是7位数。文章提到了大约三种解法,第一种是归并算法,只不过不在内存,在外存上做归并排序。大致思路是将原始文件读入,然后按照数字的大小划分10份,写到10个文件里。这样每个文件就小于1M,然后对每个文件进行排序,排序之后,将文件合...转载 2018-05-08 00:31:47 · 4401 阅读 · 0 评论 -
OpenJDK 源代码阅读之 TimSort
概要这个类在 Oracle 的官方文档里是查不到的,但是确实在 OpenJDK 的源代码里出现了,Arrays 中的 sort 函数用到了这个用于排序的类。它将归并排序(merge sort) 与插入排序(insertion sort) 结合,并进行了一些优化。对于已经部分排序的数组,时间复杂度远低于 O(n log(n)),最好可达 O(n),对于随机排序的数组,时间复杂度为 O(nlog(n)...转载 2018-04-27 15:35:18 · 158 阅读 · 0 评论 -
Java8 Arrays.sort VS Arrays.parallelSort
所有的开发者都会用到Arrays.sort来进行对象和原生数组进行排序,这个API会使用归并排序或者Tim排序来进行排序,源码如下所示:123456public static void sort(Object[] a) { if (LegacyMergeSort.userRequested) legacyMergeSort(a); else ComparableTimSort.so...转载 2018-04-27 15:20:58 · 361 阅读 · 0 评论 -
Redis为什么用跳表而不用平衡树?
Redis里面使用skiplist是为了实现sorted set这种对外的数据结构。sorted set提供的操作非常丰富,可以满足非常多的应用场景。这也意味着,sorted set相对来说实现比较复杂。同时,skiplist这种数据结构对于很多人来说都比较陌生,因为大部分学校里的算法课都没有对这种数据结构进行过详细的介绍。因此,为了介绍得足够清楚,本文会比这个系列的其它几篇花费更多的篇幅。我们将...转载 2018-04-23 21:56:04 · 937 阅读 · 0 评论 -
SkipList 跳表 的原理和使用例子
跳表的原理与特点跳跃链表是一种随机化数据结构,基于并联的链表,其效率可比拟于二叉查找树(对于大多数操作需要O(log n)平均时间),并且对并发算法友好。基本上,跳跃列表是对有序的链表增加上附加的前进链接,增加是以随机化的方式进行的,所以在列表中的查找可以快速的跳过部分列表(因此得名)。所有操作都以对数随机化的时间进行。跳跃列表是按层建造的。底层是一个普通的有序链表。每个更高层都充当下面列表的"快...转载 2018-04-23 21:47:53 · 3120 阅读 · 0 评论 -
跳跃表的原理及实现
1. 跳跃表的原理 学过数据结构的都知道,在单链表中查询一个元素的时间复杂度为O(n),即使该单链表是有序的,我们也不能通过2分的方式缩减时间复杂度。 如上图,我们要查询元素为55的结点,必须从头结点,循环遍历到最后一个节点,不算-INF(负无穷)一共查询8次。那么用什么办法能够用更少的次数访问55呢?最直观的,当然是新开辟一条捷径去访问55。 如上图,我们要查询...转载 2018-04-23 21:34:28 · 44550 阅读 · 3 评论 -
ArrayList的contains方法和HasMap的containsKey效率差十倍
问题源自于leetcode上的一道题:twoSum:Given an array of integers, return indices of the two numbers such that they add up to a specific target.You may assume that each input would have exactly one solution.Exampl...转载 2018-04-06 15:20:50 · 2511 阅读 · 0 评论 -
字符串相关算法汇总
1)求最长回文串:Manacher算法(“马拉车”算法):https://blog.csdn.net/dyx404514/article/details/42061017转载 2018-09-14 10:08:06 · 223 阅读 · 0 评论