随笔分类 -  数据结构与算法分析

一些常用的数据结构和算法总结
摘要:如果计算一个表达式,比如 4+5+6*2,随着计算器的不同,简单的四功能计算器是30,许多科学计算器知道乘法的优先级高于加法,所以科学答案是21。典型计算顺序可以是计算4+5,存为临时变量a,再计算6*2,存为b,最后计算a+b可得出最后结果。这种操作顺序如下:45+62*+ 这种记法就是后缀表达式 阅读全文
posted @ 2017-02-12 16:03 luoxn28 阅读(4315) 评论(0) 推荐(0) 编辑
摘要:1 二分查找 二分查找是一个基础的算法,也是面试中常考的一个知识点。二分查找就是将查找的键和子数组的中间键作比较,如果被查找的键小于中间键,就在左子数组继续查找;如果大于中间键,就在右子数组中查找,否则中间键就是要找的元素。 (图片来自《算法-第4版》) 每次移动left和right指针的时候,需要 阅读全文
posted @ 2016-08-13 16:01 luoxn28 阅读(105751) 评论(19) 推荐(42) 编辑
摘要:优先队列是一种用来维护一组元素构成的结合S的数据结构,其中每个元素都有一个关键字key,元素之间的比较都是通过key来比较的。优先队列包括最大优先队列和最小优先队列,优先队列的应用比较广泛,比如作业系统中的调度程序,当一个作业完成后,需要在所有等待调度的作业中选择一个优先级最高的作业来执行,并且也可 阅读全文
posted @ 2016-06-27 21:23 luoxn28 阅读(55510) 评论(0) 推荐(4) 编辑
摘要:各种排序算法总结已经介绍了几种能在O(n*log(n))时间内培训n个数的算法。归并排序和堆排序达到了最坏情况下的上界;快速排序在平均情况下达到该上界。这些算法都有一个有趣的性质:在排序的最终结果中,各元素的次序依赖于它们之间的比较。这类算法为比较算法,还有一类算法是线性时间复杂度的排序算法,有计数 阅读全文
posted @ 2016-06-19 14:18 luoxn28 阅读(987) 评论(0) 推荐(1) 编辑
摘要:1、二分查找 二分查找时,先将被查找的键和子数组的中间键比较。如果被查找的键小于中间键,就在左子数组继续查找,如果大于中间键,就在右子数组中查找,否则中间键就是要找的元素。 每次移动left和right指针的时候,需要在mid的基础上+1或者-1, 防止出现死循环, 程序也就能够正确的运行。 但如果 阅读全文
posted @ 2016-06-05 06:59 luoxn28 阅读(1877) 评论(0) 推荐(0) 编辑
摘要:红黑树是平衡树的一种,保证最坏情况下操作时间复杂度为O(lgo(n))。红黑树的应用比较广泛,比如作为C++中STL的set和map的底层数据结构,Java集合中TreeSet和TreeMap的底层数据结构等。学习红黑树,可以把二叉查找树作为参考,这样有助于加深理解。红黑树的操作主要包括节点旋转、插 阅读全文
posted @ 2016-05-31 20:31 luoxn28 阅读(3160) 评论(0) 推荐(1) 编辑
摘要:排序(Sorting) 是计算机程序设计中的一种重要操作,它的功能是将一个数据元素(或记录)的任意序列,重新排列成一个关键字有序的序列。 选择排序是一种直观简单的排序算法,它每次从待排序的数据元素中选出最小(或者最大)元素存放到序列的起始位置,直到全部待排序的数据元素排完。注意,选择排序并不是稳定的 阅读全文
posted @ 2016-03-20 07:41 luoxn28 阅读(3281) 评论(1) 推荐(0) 编辑