数据结构与算法
水越帆
当知识撑不起理想的时候,应该静下心学习。
展开
-
Andriod和java后台通信加密----RSA+AES加密通信
安卓apk反编译的问题很让人头疼,对于一些机密的数据,不加密传输要是被提取出来是会造成巨大损失,研究了两种方式(相似的)第一种:1首先需要有一对RSA的公钥和私钥 , 然后私钥留在服务器,公钥随apk发布(即安卓端写成文件,用的是时候读取,我感觉不是绝对安全,但相对方便);2 通信的时候,首先由android端,随机生成一个字符串作为AES加密算法的key,用AES加密算法来加密与服...原创 2020-03-30 16:42:28 · 826 阅读 · 0 评论 -
B-树、B+树以及B*树的原理详解
B-树 B-树是一种多路搜索树(并不一定是二叉的)1970年,R.Bayer和E.mccreight提出了一种适用于外查找的树,它是一种平衡的多叉树,称为B树(或B-树、B_树)。 一棵m阶B树(balanced tree of order m)是一棵平衡的m路搜索树。它或者是空树,或者是满足下列性质的树:1、根结点至少有两个子女;2、每个非根节点所包含的关键字个数 j 满足:...原创 2018-10-20 16:47:37 · 20402 阅读 · 0 评论 -
红黑树及TreeMap的实现原理(易懂)
红黑树:https://blog.csdn.net/v_JULY_v/article/category/774945TreeMap实现:https://blog.csdn.net/chenssy/article/details/26668941转载 2018-10-19 00:55:08 · 762 阅读 · 0 评论 -
排序算法八--基数排序
基数排序(radix sort)是一种特殊的桶排序(bucket sort),相对于常见的比较排序,基数排序是一种分配式排序,即通过将所有数字分配到应在的位置最后再覆盖到原数组完成排序的过程。它是一种稳定的排序算法,但有一定的局限性: 1、关键字可分解; 2、记录的关键字位数较少,如果密集更好; 3、如果是数字时,最好是无符号的,否则将增加相应的映射复杂度,可先将其正负分开排序。 ...转载 2018-10-18 22:18:18 · 160 阅读 · 0 评论 -
排序算法七--堆排序
什么是堆? 堆是一棵顺序存储的完全二叉树。 小根堆:每个结点的关键字都不大于其孩子结点的关键字。 大根堆:每个结点的关键字都不小于其孩子结点的关键字。 对于n个元素的序列{R0, R1, … , Rn}当且仅当满足下列关系之一时,称之为堆: (1) Ri <= R2i+1 且 Ri <= R2i+2 (小根堆) (2) Ri >= R2i+1 且 Ri >= R...转载 2018-10-18 21:25:53 · 260 阅读 · 0 评论 -
排序算法六--归并排序
基本思想:归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法的一个非常典型的应用。首先考虑下如何将2个有序数列合并。这个非常简单,只要从比较2个数列的第一个数,谁小就先取谁,取了后就在对应数列中删除这个数。然后再进行比较,如果有数列为空,那直接将另一个数列的数据依次取出即可//将有序数组a[]和b[]合并到c[]中void MemeryArray(int a[], ...原创 2018-10-18 19:47:52 · 143 阅读 · 0 评论 -
排序算法五--希尔排序
前言: 数据序列1: 13-17-20-42-28 利用插入排序,13-17-20-28-42. Number of swap:1; 数据序列2: 13-17-20-42-14 利用插入排序,13-14-17-20-42. Number of swap:3; 如果数据序列基本有序,使用插入排序会更加高效。 基本思想: 在要排序的一组数中,根据某一增量分为若干子序列,并对子序列...原创 2018-10-18 19:16:04 · 130 阅读 · 0 评论 -
排序算法四--插入排序
直接插入排序直接插入排序是一种简单插入排序,基本思想是:把n个待排序的元素看成为一个有序表和一个无序表。开始时有序表中只包含1个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,将它插入到有序表中的适当位置,使之成为新的有序表,重复n-1次可完成排序过程过程: 类似我们摸牌,一开始有一堆牌(待排序的)。由于第一次摸牌时手中没牌,所以不需要排序。第二次摸牌时和手...原创 2018-10-18 18:45:24 · 106 阅读 · 0 评论 -
排序算法三--选择排序
选择排序(SelctionSort) 基本思想: 在长度为N的无序数组中,第一次遍历n-1个数,找到最小的数值与第一个元素交换; 第二次遍历n-2个数,找到最小的数值与第二个元素交换; 。。。 第n-1次遍历,找到最小的数值与第n-1个元素交换,排序完成。 过程: 平均时间复杂度:O(n2)java代码实现:public static void selec...原创 2018-10-18 18:11:58 · 116 阅读 · 0 评论 -
排序算法二--快速排序
快速排序(Quicksort) 基本思想:(分治) 先从数列中取出一个数作为key值; 将比这个数小的数全部放在它的左边,大于或等于它的数全部放在它的右边; 对左右两个小数列重复第二步,直至各区间只有1个数。 辅助理解:挖坑填数 初始时 i = 0; j = 9; key=72 由于已经将a[0]中的数保存到key中,可以理解成在数组a[0]上挖了个坑,可以将其...原创 2018-10-18 17:29:54 · 311 阅读 · 0 评论 -
排序算法一--冒泡排序
冒泡排序(BubbleSort)基本思想:两个数比较大小,较大的数下沉,较小的数冒起来思路:比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。针对所有的元素重复以上的步骤,除了最后一个。持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较举例说明...原创 2018-10-18 15:58:07 · 194 阅读 · 0 评论