
结构算法之美
booirror
享受编程的乐趣
展开
-
Huffman(哈夫曼) 编码压缩算法
前两天发布那个rsync算法后,想看看数据压缩的算法,知道一个经典的压缩算法Huffman算法。相信大家应该听说过 David Huffman 和他的压缩算法—— Huffman Code,一种通过字符出现频率,Priority Queue,和二叉树来进行的一种压缩算法,这种二叉树又叫Huffman二叉树 —— 一种带权重的树。从学校毕业很长时间的我忘了这个算法,但是网上查了一下,中文社区转载 2012-05-25 22:08:09 · 6011 阅读 · 1 评论 -
秒懂单链表及其反转(reverse)
什么是链表,这种数据结构是由一组Node组成的,这群Node一起表示了一个序列。链表是最普通,最简单的数据结构,它是实现其他数据结构如stack, queue等的基础。链表比起数组来,更易于插入,删除。Node可以定义如下:typedef int element_type;typedef struct node *node_ptr;struct node {el原创 2015-04-29 23:00:36 · 12070 阅读 · 0 评论 -
秒懂冒泡排序
长时间不复习,简单的算法也会忘记啊。冒泡排序的核心:两两比较相邻元素,将最大或最小的元素像气泡一样,向数组的一端”浮“。冒泡排序的平均时间复杂度:冒泡排序的C语言实现:#include void bubble_sort(int array[], int n){ int i,j,tmp; for (i = 0; i < n - 1; i++) {原创 2015-04-28 15:41:16 · 1497 阅读 · 0 评论 -
秒懂插入排序与选择排序
插入排序原理:它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序核心:假设第一个元素排好,之后的元素对排好的部分从后向前比较并逐一移动。插入排序实现:void insertion_sort(int a[], int n){ int i,j,tmp; for (i = 1; i < n; i++) { tmp = a[i原创 2015-04-28 17:50:26 · 19793 阅读 · 6 评论 -
秒懂快速排序
快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序n个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(n log n)算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来快速排序核心:"基准"(pivot),分区(partition),交换(swap),递归(r原创 2015-04-28 21:54:27 · 1796 阅读 · 1 评论 -
A*算法可视化详解与实现
在计算机科学中,A*算法广泛应用于寻路和图的遍历。最早是于1968年,由Peter Hart, Nils Nilsson 和Bertram Raphael3人在斯坦福研究院描述了 该算法。是对Dijkstra算法的一种扩展。是一种高效的搜索算法。这是个比较常用的算法,游戏中的寻路通常会使用这个算法,在理解这个算法之前,先明白几个概念:搜索区域(The Search Ar原创 2016-03-09 14:12:52 · 14886 阅读 · 4 评论