数据结构与算法分析
IceCaptain
IT小雏鸡
展开
-
堆
首先介绍一下什么是堆: 引入百度百科: (英语:heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。堆总是满足下列性质: 堆中某个节点的值总是不大于或不小于其父节点的值; 堆总是一棵完全二叉树。 将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。常见的堆有二叉堆、斐波那契堆等。 堆的定义如下:n个元素的序列...原创 2018-05-03 10:54:01 · 614 阅读 · 0 评论 -
排序算法
本文将介绍6种排序算法:冒泡排序,选择排序,插入排序,希尔排序,归并排序,快速排序。 冒泡排序(每趟排序会将当前序列最大值沉到尾部): 选择排序(每趟排序将当前序列的最小值沉到首部): 插入排序(每趟排序将当前元素插到其之前序列合适位置): 希尔排序(每趟排序将步长为n所在位置的数进行排序): 归并排序(每趟排序将相邻的两个区间合并成一个有序区间): 快速排序(...原创 2018-05-03 11:16:57 · 424 阅读 · 0 评论 -
0-1背包问题
什么是背包问题?问题描述:给定一组物品,每种物品都有自己的重量和价格,在限定的总重量内,我们如何选择,才能使得物品的总价格最高。即给定一个载重量为room的背包,另有num个物品,其每个物品重量为size_i,价值为value_i,1<=i<=n,选择物品装入背包,使得背包内的物品价值最大。问题分析: 0-1背包问题可以看作是动态规划的一个经典案例。 在该问题中,物体只能选...原创 2018-05-03 13:02:55 · 559 阅读 · 0 评论 -
二叉搜索树
二叉树的定义:二叉树是每个结点最多有两个子树的树结构,通常子树被称作“左子树”和“右子树”。二叉树的每个结点最多只有两棵子树,二叉树的子树有左右之分,次序不能颠倒。下图为一颗二叉树: 二叉搜索树的定义:它是具有下列性质的二叉树,若它的左子树不为空,则左子树上所有结点的值均小于它的根结点的值;若它的右子树不为空,则右子树上所有结点的值均大于它的根结点的值;它的左右子树也分别为二叉搜索树。...原创 2018-05-03 13:28:28 · 443 阅读 · 0 评论 -
第K大的数
问题描述:给定一组数,找到其中第K大的数。问题分析: 借助快排的思想,根据基准划分数组子区间。因为左子区间的数全部小于基准元素,所以若K小于基准坐标,则在其左子区间递归划分查找;因为右子区间的数全部大于基准元素,所以若K大于基准坐标,则在其右子区间递归划分查找。显然,当K等于基准坐标时,即查找结束,返回结果。测试: 输入一组整数:5, 3, 4, 1, 2, 9, 6, 8, 7 找...原创 2018-05-25 17:07:36 · 425 阅读 · 0 评论 -
剑指offer —— 二维数组中的查找
问题描述:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。问题分析: 两种方案: 方案一:因为矩阵每一行从左到右都是递增的,可以对矩阵的每一行进行二分查找。 方案二:因为矩阵从左到右是递增的,同时从上到下也是递增的,可以发现在矩阵左下角处是一个非常巧妙的位置,右边的数比其...原创 2018-06-11 20:44:07 · 219 阅读 · 0 评论