摘要: 问题的由来:有一组带权节点组成的森林,每个棵树都只有一个节点,其权值是被访问的概率.那么将这个森林合并为一颗二叉树,如何使根节点到这些节点的路径最短(优)?这样的树也叫判定树或选择树,而Huffman树是是判定树的最优实现.Huffman 树实现原理在森林中每次取两个权值最小的节点,... 阅读全文
posted @ 2017-10-29 09:15 zhangwang010 阅读(121) 评论(0) 推荐(0)
摘要: 简单描述交换排序是指通过比较键值的大小来交换这两个元素的位置,实现排序. 常见的交换排序有冒泡排序和快速排序. 冒泡排序的时间复杂度度是 O(n^2), 快速排序的时间复杂度度是 O(nlogn), 快速排序是对冒泡排序的改良.但是快速排序是不稳定的冒泡排序原理: 通过比较相... 阅读全文
posted @ 2017-10-29 09:15 zhangwang010 阅读(282) 评论(0) 推荐(0)
摘要: AJAX 简单理解和应用这几天做web小项目,发现没有AJAX真不方便,总是刷新整个页面确实不方便。 AJAX: AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。 AJAX 不是新的编程语言,而是一种使用... 阅读全文
posted @ 2017-10-29 09:15 zhangwang010 阅读(255) 评论(0) 推荐(0)
摘要: 堆排序堆排序是利用堆结构(特殊的完全二叉树)实现排序的算法,时间复杂度是O(nlogn)。堆排序不稳定。原理堆排序要构建一颗完全二叉树(存储在数组,详见: 二叉树的数组存储),这颗二叉树就是堆。堆有大堆和小堆两种(结构类似)。这里以大堆为例。 在最大堆中每个节点都比子节点大,根节点最... 阅读全文
posted @ 2017-10-29 09:15 zhangwang010 阅读(110) 评论(0) 推荐(0)
摘要: 快速排序(1)快速排序是一种不稳定的原地交换排序(据说可以改进),其平均时间复杂度是 O(nlogn)。最坏情况下是O(n^2)。当数组已是有序或接近有序时,是最坏的情况。在示例算法中,总是选取当前块的第一个元素作为key,当数组已经有序时,一趟排序总是把数组分成一个元素和其他元素两... 阅读全文
posted @ 2017-10-29 09:15 zhangwang010 阅读(226) 评论(0) 推荐(0)
摘要: 原理分析(升序)假定数组第一个数是有序的,从数组下标1开始遍历比较后面的数值。如果遍历到的数x小于排在它前面的数则交换他们,再比较x和x前面的数…直到x前面再也没有比它大的数了,这时x就移动到了有序队列的合适位置。上述比较称为插入。 《算法导论》里的比喻很合适:“插入排序就像玩扑克牌... 阅读全文
posted @ 2017-10-29 09:15 zhangwang010 阅读(79) 评论(0) 推荐(0)
摘要: 简单分析:归并排序是典型的用分治思想解决问题的算法, 其基本思想是: 有两个有序数组,从两个数组首端开始比较。将较大或较小的元素加入一个空数组中,同时在原数组中删除。剩下的元素如此重复。最后就将两个有序数组合并成一个有序数组了。这样的过程成为归并。与分治法结合在一起来考虑。如果不断递... 阅读全文
posted @ 2017-10-29 09:15 zhangwang010 阅读(106) 评论(0) 推荐(0)
摘要: 基数排序 基数排序算法的思想很有趣,他不依靠直接比较元素排序。而是采用分配式排序,单独处理元素的每一位。从最高位向最低位处理 称为:最高位优先(MSD)反之称为:最低位优先(LSD)。基数排序也称为桶排序。下面以最低位优先为例。 原理 准备10个容器,编号0-9,对应数字0-9。 容器是有序的(按添 阅读全文
posted @ 2017-10-29 09:15 zhangwang010 阅读(3254) 评论(0) 推荐(0)