随笔分类 - 数据结构算法分析
摘要:RSA 加密算法是一种典型的非对称加密算法,它基于大数的因式分解数学难题,它也是应用最广泛的非对称加密算法。非对称加密是通过两个密钥(公钥-私钥)来实现对数据的加密和解密的。公钥用于加密,私钥用于解密。
阅读全文
摘要:高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法的)。对称加密算法也就是加密和解密用相同的密钥,具体的加密流程如下图:
阅读全文
摘要:现在假设有一个很实际的问题:我们要在 n 个城市中建立一个通信网络,则连通这 n 个城市需要布置 n-1 一条通信线路,这个时候我们需要考虑如何在成本最低的情况下建立这个通信网?于是我们就可以引入连通图来解决我们遇到的问题, n 个城市就是图上的 n 个顶点,然后,边表示两个城市的通信线路,每条边上
阅读全文
摘要:在搜索算法中优化中,剪枝,就是通过某种判断,避免一些不必要的遍历过程,形象的说,就是剪去了搜索树中的某些“枝条”,故称剪枝。应用剪枝优化的核心问题是设计剪枝判断方法,即确定哪些枝条应当舍弃,哪些枝条应当保留的方法。
阅读全文
摘要:将所有待比较数值(正整数)统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后,数列就变成一个有序序列。 public class radixSort {int a[]={49,38,65,97,76,13,27,49,78,34
阅读全文
摘要:桶排序的基本思想是:把数组 arr 划分为 n 个大小相同子区间(桶),每个子区间各自排序,最后合并 。基数排序是桶排序的一种特殊情况,可以把基数排序当成每个桶里只有一个元素的情况。1.找出待排序数组中的最大值 max、最小值 min2.我们使用 动态数组 ArrayList 作为桶,桶里放的元素也
阅读全文
摘要:归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。 public class MergeSortTest {public static void main(String[] args)
阅读全文
摘要:基本思想:先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序” 时,再对全体记录进行依次直接插入排序。1. 操作方法:选择一个增量序列 t1, t2, …, tk,其中 ti>tj, tk=1;2. 按增量序列个数 k,对序列进行 k 趟排序;3. 每趟排序
阅读全文
摘要:快速排序的原理:选择一个关键值作为基准值。比基准值小的都在左边序列(一般是无序的),比基准值大的都在右边(一般是无序的)。 一般选择序列的第一个元素。一次循环:从后往前比较,用基准值和最后一个值比较,如果比基准值小的交换位置,如果没有继续比较下一个,直到找到第一个比基准值小的值才交换。 找到这个值之
阅读全文
摘要:通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应的位置并插入。插入排序非常类似于整扑克牌。在开始摸牌时,左手是空的,牌面朝下放在桌上。接着,一次从桌上摸起一张牌,并将它插入到左手一把牌中的正确位置上。 为了找到这张牌的正确位置,要将它与手中已有的牌从右到左地进行比较。无论什么时
阅读全文
摘要:(1)比较前后相邻的二个数据,如果前面数据大于后面的数据,就将这二个数据交换。(2)这样对数组的第 0 个数据到 N-1 个数据进行一次遍历后,最大的一个数据就“沉” 到数组第N-1 个位置。(3) N=N-1,如果 N 不为 0 就重复前面二步,否则排序完成 public static void
阅读全文
摘要:又叫折半查找,要求待查找的序列有序。每次取中间位置的值与待查关键字比较,如果中间位置的值比待查关键字大,则在前半部分循环这个查找的过程,如果中间位置的值比待查关键字小,则在后半部分循环这个查找的过程。直到查找到了为止,否则序列中没有待查的关键字。 public static int biSearch
阅读全文
摘要://面向对象思想实现篮子物品交换public class Demo5 {public static void main(String[] args) {//创建篮子Basket A = new Basket("A");Basket B = new Basket("B");//装载物品A.load("
阅读全文
摘要:3、假设今日是2015年3月1日,星期日,请算出13个月零6天后是星期几,距离现在多少天(请用代码实现,谢绝调用API方法)import java.util.Scanner;//算出星期几public class Demo4 {public static String[] week = {"星期日"
阅读全文
摘要:写出代码判断一个整数是不是2的阶次方(请代码实现,谢绝调用API方法) public class Demo2 {public static boolean check(int sum) {boolean flag = true; //判断标志while(sum > 1) {if (sum % 2 =
阅读全文
摘要:数据里有{1,2,3,4,5,6,7,8,9},请随机打乱顺序,生成一个新的数组(请以代码实现) import java.util.Arrays;//打乱数组public class Demo1 {//随机打乱public static int[] srand(int[] a) {int[] b =
阅读全文
摘要:位图的原理就是用一个 bit 来标识一个数字是否存在,采用一个 bit 来存储一个数据,所以这样可以大大的节省空间。 bitmap 是很常用的数据结构,比如用于 Bloom Filter 中;用于无重复整数的排序等等。 bitmap 通常基于数组来实现,数组中每个元素可以看成是一系列二进制数,所有元
阅读全文
摘要:B-tree 又叫平衡多路查找树。一棵 m 阶的 B-tree (m 叉树)的特性如下(其中 ceil(x)是一个取上限的函数) 1. 树中每个结点至多有 m 个孩子;2. 除根结点和叶子结点外,其它每个结点至少有有 ceil(m / 2)个孩子;3. 若根结点不是叶子结点,则至少有 2 个孩子(特
阅读全文
摘要:红黑树的特性(1)每个节点或者是黑色,或者是红色。(2)根节点是黑色。(3)每个叶子节点(NIL)是黑色。 [注意:这里叶子节点,是指为空(NIL 或NULL)的叶子节点! ](4)如果一个节点是红色的,则它的子节点必须是黑色的。(5)从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点。左
阅读全文
摘要:前缀树(Prefix Trees 或者 Trie)与树类似,用于处理字符串相关的问题时非常高效。它可以实现快速检索,常用于字典中的单词查询,搜索引擎的自动补全甚至 IP 路由。下图展示了“top”, “thus”和“their”三个单词在前缀树中如何存储的
阅读全文