随笔分类 - 算法
一些算法的学习
摘要:1->比如给你一个数组,里面的数有200个,最大的数是1000,时间效率的重要性高于空间效率,那么你会采用哪种排序策略呢?能否达到O(n)思路:对于这种问题,可能我们会想到很多种排序方法,冒泡排序,快速排序,希尔排序,堆排序,插入排序,选择排序以及归并排序;可是仔细想想他们的时间复杂度:冒泡排序中第n个数据分别比较n-1次,时间复杂度是O(n^2);复杂度太高;快速排序,也是基于分治的思想,他的每次划分都至少把一个元素放在正确位置上,基本有序时间复杂度为O(n^2),最好情况O(nlogn);希尔排序,需要定义步长的排序方法,对于大数据量的排序,比插入排序效率高很多,最好时间复杂度O(n
阅读全文
摘要:1->链表的翻转typedef struct List{ int val; List * next;}LinkList;reverse(LinkList *head){ LinkList *temp = head->next; LinkList *pre = head; LinkList *next = head ->next->next; for(next != NULL) { temp ->next = pre; pre = temp; temp = next; next = next->next;...
阅读全文
摘要:归并排序最差运行时间是O(nlogn),它是利用递归设计程序的典型例子。采用分治的思想。归并排序的最基础的操作就是合并两个已经排好序的序列。假设我们有一个没有排好序的序列,那么首先我们使用分割的办法将这个序列分割成一个一个已经排好序的子序列。然后再利用归并的方法将一个个的子序列合并成排序好的序列。分割和归并的过程如下: 1 4 3 5 2 6 / \ 1,4,3 5,2,6 / \ / \ 1,4 3 5,2 6 / / \ / / \...
阅读全文
摘要:二叉树的中序遍历->递归算法:typedef struct node_t{ char *value; node_t *left; node_t *right;}*tree, node;void traverse(tree root, void (*visit)(node)) { if(root != NULL) { traverse(root->left, visit); visit(root); traverse(root->right, visit); }}二叉树中序遍历->非递归算法:typedef struct n...
阅读全文
摘要:今天在公司做一个日志分析的任务,在做统计的时候,遇到这样一个问题,
之前已经将数据拆分好,出现这样一张中间表Table,简略写如下:
A属性 B属性 C属性 D属性
1 3 5 7
2 4 6 8
现在A属性 B属性 C属性 D属性代表Table表中的四个字段,他们的value有多个,四个属性都是不为空的,现在需要计算出A属性、B属性、C属性、D属性分别组合之后的组合在Table表中的存在数据条数。
阅读全文
摘要:Bloom Filter是由 Howard Bloom在 1970 年提出的一种多哈希函数映射的快速查找算法,它是一种空间效率很高的随机数据结构,利用位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集合,非常快速的判定某个元素是否在一个集合之外。不过,这种检测只会对在集合内的数据错判,而不会对不是集合内的数据进行错判,也就是说,在判断一个元素是否属于某个集合时,有可能会把不属于这个集合的元素误认为属于这个集合(false positive),这样每个检测请求返回有“在集合内(可能错误)”和“不在集合内(绝对不在集合内)”两种情况。
阅读全文

浙公网安备 33010602011771号