
数据结构与算法
ddddfang
这个作者很懒,什么都没留下…
展开
-
大顶堆
1. 概述: 最大堆(大顶堆)一句话 heap:一种数据结构,完全二叉树(若二叉树高 h,则除过最底层 h 层,其他 1~h-1 层都是满的;并且最底层从左到右不能有空隙)。有最大堆和最小堆两种,最大堆即根节点的键值比其他所有节点键值都大;最小堆即根节点的键值比其他所有节点键值都小。在实现上,它没有选择一般的二叉树数据结构(即一个节点包含指向两个孩子的指针),使用的是数组;heap 最为常用的...原创 2019-03-29 15:51:26 · 6043 阅读 · 1 评论 -
使用protobuf序列化buffer
关于什么是 protobuf(for c++/matlab/python)https://www.ibm.com/developerworks/cn/linux/l-cn-gpb/Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化(神经网络->caffe学习资料中,提到 caffe.proto 的解析。github上qt-dem...原创 2019-04-02 13:25:39 · 829 阅读 · 0 评论 -
Huffman编码
ASCII 和 UNICODE 均为等长编码,浪费空间。huffman 编码为非等长编码,出现概率大的数据编码短,出现概率小的数据编码长,这样可以极大提高编码效率。huffman 编码的过程即构造 huffman 树(又称最优二叉树)的过程,算法模型:1、有一组需要编码且带有权值的数据(通常就是字母),eg: a(4), b(8), c(1), d(2), e(11)2、选取权值较小(出现...原创 2019-04-02 13:17:42 · 1185 阅读 · 0 评论 -
从头到尾彻底理解KMP
来自 <http://blog.youkuaiyun.com/v_july_v/article/details/7041827>1.引言 从暴力匹配算法讲起,随后阐述KMP的流程、next数组的简单求解 递推原理。接着基于next数组匹配,next数组的优化,KMP的时间复杂度分析,最后简要介绍两个KMP的扩展算法。2.暴力匹配算法 问题:有一...转载 2019-04-02 13:08:33 · 683 阅读 · 0 评论 -
二叉树遍历相关
红黑树也是二叉树,这里只是说明对树的遍历访问。插入、 查找、 删除 等操作参看红黑树那里1、深度优先搜索:每种都有递归和迭代两种实现(迭代需要借助stack)前序遍历:10,6,4,8,14,12,16中序遍历:4,6,8,10,12,14,16(如果是二叉排序树就是输出排序结果了哈)后序遍历:4,8,6,12,16,14,10a.递归实现递归实现相当简单:v...原创 2019-03-30 16:32:10 · 145 阅读 · 0 评论 -
并查集
用于归类,判断动态连通性的一种概念。比如下面 0-9 个点,归并(4,3)即认为 4和3 同组(或者连通)。一波 归并 操作之后,查看某两个点是否连通(同组)。http://blog.jobbole.com/108359/实现思路:1、我们可以给每个元素设定一个 group_id 变量,指示自己所属的组。每当归并两个元素(A 和 B,group_id 分别为 group_id1 和 gr...原创 2019-03-29 16:52:58 · 130 阅读 · 0 评论 -
hash table
1. 概述A hash table consists of an array of ‘buckets’(吊桶), each of which stores a key-value pair. In order to locate the bucket where a key-value pair should be stored, the key is passed through a has...原创 2019-03-29 16:47:33 · 351 阅读 · 0 评论 -
二分查找
二分查找(注意二分查找的前提是: 这个数组是有序的~):#include <stdio.h>#include <stdlib.h>#include <string.h>int binary_search(int* a, int len, int goal, int left) //left代表若查到多个目标,是否需要返回最左边的那个{ ...原创 2019-03-29 16:41:53 · 108 阅读 · 0 评论 -
红黑树
1. 介绍Key-value 键值对貌似有用红黑书实现的(或者使用hash表实现,二者各有优劣),关于红黑树的详细介绍可以参看http://blog.youkuaiyun.com/v_JULY_v/article/details/6105630红黑树必须满足的规则:所有节点都有颜色,要么红色,要么黑色 根节点是黑色,所有叶子节点也是黑色 叶子节点中不包含数据 非叶子节点都有2个子节点 如...原创 2019-03-29 16:36:58 · 210 阅读 · 0 评论 -
list
list.h这个list.h其实是linux内核中链表实现的精简版(只需要一个头文件),linux提供的这套接口更像是构造list的零部件。用户可以选择直接用它定制化自己的 list型数据结构,甚至可以实现一个更为 高层次的、通用的 list接口(如下面的clist)#ifndef _LIST_H_#define _LIST_H_#ifdef __cplusplusextern "...原创 2019-03-29 16:21:39 · 182 阅读 · 0 评论 -
排序相关
快速排序中的核心函数int Partition(int a[], int start, int end) //返回调整后基准数的位置(也就是它在最终排序数组中的位置){ int i = start, j = end; int x = a[i]; //a[i]就是第一个坑,这里可以先安排一个a[i] <---> a[randint(start,end)] ...原创 2019-03-29 16:05:34 · 131 阅读 · 0 评论 -
bit array
以下摘自How can I implement sets or arrays of bits?,仅使用几个简单的宏就实现了一个基本的位数组(bitset,又名 bitmap)#include <limits.h> /* for CHAR_BIT *///CHAR_BIT is the number of bits in char,almost all arch...原创 2019-03-29 16:00:33 · 374 阅读 · 0 评论 -
skip-list
1. 介绍http://blog.youkuaiyun.com/ict2014/article/details/17394259类似 并联的链表,意图替代 红黑树 等 平衡树,与红黑树一样是一种 sorted set/map。 在类似排行榜的应用场景中很常见。插入、查找、删除 复杂度亦为 O(logN) (基于概率),内部排序。优势在于实现简单,不用rebalance。与普通链表最大区别在于 每个节点 ...原创 2019-03-29 15:55:12 · 233 阅读 · 0 评论 -
使用cblas线性代数库
下载源码并安装使用 cblas+lapack,参考:https://www.linuxidc.com/Linux/2015-02/113169.htmhttps://blog.youkuaiyun.com/mlnotes/article/details/9676269按照上面所说的编译后,可能会出错,xerbla.f:(.text+0x69): undefined reference t...原创 2019-04-02 13:28:57 · 1134 阅读 · 0 评论