摘要:1、二分法查找 对一个序列使用二分法查找的话前提是这个序列是有序的,下面是二分法查找的实现: int HalfFindValue(int ary[], const int& value, int low, int high) { if (low > high) //未找到 return -1; in
阅读全文
摘要:1、定义 散列(Hash,哈希)是一种对数据的处理方法,通过某种特定的算法将要检索的项与用来检索的索引(称为散列,或者散列值)关联起来,然后可以生成一种便于搜索的数据结构(称为散列表)。 c++11中增加了获得hash值的方法,通过hash,hash是实现了operator()的类,所以其对象是函数
阅读全文
摘要:1、满二叉树 除叶子结点外的所有结点均有两个子结点的二叉树称为满二叉树。如果一个满二叉树的深度为h,则结点个数为2^h - 1。 由满二叉树可推出,二叉树的第k层最多有2^(k-1)个结点,深度为h的二叉树最多有2^h-1个结点。如下图所示: 2、树的遍历 前序遍历:对结点的处理工作是在所有儿子结点
阅读全文
摘要:一、 1、线性表 线性表包括顺序存储结构(用一段连续地址存储)和链式存储结构(数据域+指针域)。顺序存储结构的代表是C/C++中的数组,其读时间复杂度为O(1),插入/删除为O(n),因为从插入/删除位置到最后一个元素都要向前/后移动一个位置。链式存储结构包括单链表(普通链表)、循环链表、双向链表等
阅读全文
摘要:递归的概念 递归在维基中是这样定义的:在计算机科学中递归是指一种通过重复将问题分解为同类的子问题而解决问题的方法。下是另一个可能更有利于理解递归过程的解释: ①、我们已经完成了吗?如果完成了,返回结果。如果没有这样的终止条件,递归将会永远地继续下去。 ②、如果没有,则简化问题,解决较容易的问题,并将
阅读全文
摘要:一、算法的时间复杂度 1、概述 算法的时间复杂度使用大O表示法,如O(1)、O(n)、O(logn)、O(n²)、O(n³)、O(2ⁿ)、O(n!)、O(√n)等,分别可以称为常数阶、线性阶、对数阶、平方阶、立方阶、指数阶、阶乘阶、平方根阶。 推导大O阶可以遵循以下规则: ①. 用常数1来取代运行时
阅读全文
摘要:1、将整形a的第m位赋值到整形b的第n位 int fun4(int a, int m, int b, int n) { a = (a>>m) & 1;//将a的第m位取出,为1或0,故分两种情况 if(a == 1)//a的第m位为1,即将b的第n位设为1 { a = a << n; b = b |
阅读全文