随笔分类 - 算法
摘要:AES加密叫Advanced Encryption Standard,是高级加密标准。 这个标准用来替代原来的DES 优点: ① 抵抗所有已知的攻击。 ② 在多个平台上速度快,编码紧凑。 ③ 设计简单。 Java加密代码如下: import javax.crypto.Cipher; import j
阅读全文
摘要:DES是一种对称加密算法 英文名:Data Encrption Standard(数据加密标准) DES算法的加密与解密都是使用同一个密钥,密钥的长度为8个字节 如下为加密算法: 扩展:3DES (Triple DES: 三重数据加密算法),对每个数据块应用3次DES加密算法(使用3条56位的密钥对
阅读全文
摘要:经典问题:给定一个int[]数组,求其最大子序列之和(条件:数组中不全部都是负数)。最优算法,线性时间复杂度:public static int maxSubSum(int[] a){ int maxSum = 0; int thisSum = 0; for(int i=0; i maxSum) maxSum = thisSum; else if(thisSum<0) thisSum = 0; } return maxSum;}
阅读全文
摘要:B树是一种数据结构。它具备“树”所拥有的一般特征,比如有根结点、非叶结点和叶结点。不过它有自己的限制。一般而言,一个M路B树的度是M,即它的任何一个结点的子结点个数不大于M。其实,B树的根结点至少有2个子结点,非叶中间结点必须有ceiling(M/2)到M个子结点。B树所有的叶结点都位于同一层上。B树的每个中间结点都是指针与键值间隔分布的,比如 p0,k0,p1,k1,p2,k2,p3,如果在k0, k1,k2中找到所需值则返回,如果没有找到:1、比k0小就寻找p0指针所指子结点2、比k0大、比k1小就寻找p1指针所指子结点3、以此类推
阅读全文
摘要:Hash,一般翻译做"散列",也有直接音译为"哈希"的,就是把任意长度的输入(又叫做预映射,pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。 HASH主要用于信息安全领域中加密算法,他把一些不同长度的信息转化成杂乱的128位的编码里,叫做HASH值.也可以说,hash就是找到一种数据内容和数据存放地址之间的映射关系。了解了ha
阅读全文
摘要:长度为n的数组乱序存放着0至n-1. 现在只能进行0与其他数的swap 请设计并实现排序。google笔试小题。题目来源:http://wenku.baidu.com/view/5aa818dda58da0116c17498b.html休闲小题。2个key一个是只能与0 swap,另一个是数组的下标和值是一一对应的。第二个容易被忽略。所以读到一个元素时,如果值和下标不等,那么可以直接把这个元素的值放到正确位置上去,目标位置的值挪回来。当然这个过程要借助元素0来完成。假设输入是 2,0,3,1step 1遍历数组,找出值为0的元素,和num[0]交换0 2 3 1step 2如果num[1]下标
阅读全文
摘要:比如:1(头)->2->2->3->3->1->1(头) 去除以后的结果是1->2->3,注意头尾的1也要去掉一个。#include "stdafx.h"#include using namespace std;struct tnode{ tnode* next; int value;};tnode* unique(tnode *head){ tnode* p = head; while (p->next != head) { if (p->next->value == p->value) { tnod
阅读全文
摘要:// CPP.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include#include#includeusing namespace std;int main(){ int n, i; cout > n; if (n = i) { if (n % i == 0) { cout << i << '*'; n /= i; val = sqrt(n); } ...
阅读全文
摘要:// CPP.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #include using namespace std;bool IsPrime(const int a){ bool flag = true; int b = a / 2; // 这里是a除以2,没有必要计算更大的值 while (b >= 2){ if (a % b == 0){ flag = false; break; } else{ b--; ...
阅读全文
摘要:Java全排列算法: 第一遍循环:将list数组index==0的元素依次与数组的每个元素交换,从而保证index==0的位置先后出现n个不同元素之一,实现对index==0位置的遍历。 第 i 遍循环:通过交换, 使index==i的元素,依次与index 为[ i, length-1] 的元素交
阅读全文
摘要:题目:有一个人在论坛上发的帖子数超过了帖子总数的一半,每个帖子作者都有ID,怎么样迅速找出这个水王?解法一:先将所有ID排序,再扫描一遍求得每个ID出现的次数。解法二:先将所有ID排序,在N / 2处的ID一定是水王的。解法三:Type Find(Type* ID, int N){ Type candidate; int nTimes, i; for(i=nTimes=0;i<N;i++) { if(nTimes==0) { candidate = ID[i]; nTimes = 1; } ...
阅读全文
摘要:这是一个简单的问题,大一刚学编程的时候做的笔记。打印出从1、2、3……n中取出r个数的不同组合(n>=r>=1)例如n=3,r=2,输出:1,22,3下面是实现的代码:public class Combination { public static void combine(int[] list, int k, int l, int r, int n) { if (k + l > n + 1) return; if (l == 0) { for (int i = 0; i < r; i++) ...
阅读全文
浙公网安备 33010602011771号