C++算法
爱喝奶茶的火锅
程序员有梦想是可以改变世界的!C/C++是亘古不变的经典,C#是生存的必备法宝,swift是新世界大门的开启钥匙,我想我爱上了编程。
展开
-
交互两个数(不引入第三个变量)
#include <stdio.h> ...转载 2018-06-03 23:04:34 · 238 阅读 · 0 评论 -
【转】数据结构--最小生成树详解
前言 A wise man changes his mind,a fool never. Name:Willam Time:2017/3/11、什么是最小生成树现在假设有一个很实际的问题:我们要在n个城市中建立一个通信网络,则连通这n个城市需要布置n-1一条通信线路,这个时候我们需要考虑如何在成本最低的情况下建立这个通信网? 于是我们就可以引入连通图来解决我们遇到的问题,n个城市就...转载 2018-08-02 23:00:14 · 536 阅读 · 2 评论 -
海量数据处理 - 10亿个数中找出最大的10000个数(top K问题)
先拿10000个数建堆,然后一次添加剩余元素,如果大于堆顶的数(10000中最小的),将这个数替换堆顶,并调整结构使之仍然是一个最小堆,这样,遍历完后,堆中的10000个数就是所需的最大的10000个。建堆时间复杂度是O(mlogm),算法的时间复杂度为O(nmlogm)(n为10亿,m为10000)。 优化的方法:可以把所有10亿个数据分组存放,比如分别放在1000个文件中。这...转载 2018-08-04 22:46:23 · 333 阅读 · 0 评论 -
最小堆的应用之哈弗曼树
转:https://blog.csdn.net/qq_26046771/article/details/69388436 哈夫曼树又称最优二叉树,是一种带权路径长度最短的二叉树。所谓树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的路径长度的乘积之和。哈弗曼编码是它的重要应用,哈弗曼编码是一种无前缀编码。 假设计算机世界里文字只由由A、B、C、D、E四个字符组成,它们出现...转载 2018-08-04 22:31:51 · 226 阅读 · 0 评论 -
线索二叉树的详细理解
转自http://blog.csdn.net/u014492609/article/details/40477795 一、线索二叉树的原理 通过考察各种二叉链表,不管儿叉树的形态如何,空链域的个数总是多过非空链域的个数。准确的说,n各结点的二叉链表共有2n个链域,非空链域为n-1个,但其中的空链域却有n+1个。如下图所示。 因此,提出了一种方法,利用原来的空链域存放...转载 2018-07-30 20:51:02 · 58855 阅读 · 7 评论 -
C++实现归并排序
转载:https://www.cnblogs.com/rio2607/p/4489893.html 归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。归并过程为:比较a[i]和a[...转载 2018-07-22 17:52:49 · 1285 阅读 · 0 评论 -
八皇后问题的三种解法
问题描述会下国际象棋的人都很清楚:皇后可以在横、竖、斜线上不限步数地吃掉其他棋子。如何将8个皇后放在棋盘上(有8 * 8个方格),使它们谁也不能被吃掉!这就是著名的八皇后问题。 对于某个满足要求的8皇后的摆放方法,定义一个皇后串a与之对应,即a=b1b2…b8,其中bi为相应摆法中第i行皇后所处的列数。已经知道8皇后问题一共有92组解(即92个不同的皇后串)。给出一个数b,要求输出第b个串。串...转载 2018-07-29 15:26:57 · 1220 阅读 · 0 评论 -
用递归算法的来解决汉诺塔问题
转自:https://blog.csdn.net/xb2355404/article/details/79144451 汉诺塔汉诺塔是一个发源于印度的益智游戏,也叫河内塔。相传它源于印度神话中的大梵天创造的三个金刚柱,一根柱子上叠着上下从小到大64个黄金圆盘。大梵天命令婆罗门将这些圆盘按从小到大的顺序移动到另一根柱子上,其中大圆盘不能放在小圆盘上面。当这64个圆盘移动完的时候,世界就将毁...转载 2018-07-29 15:06:18 · 598 阅读 · 0 评论 -
数据结构与算法系列 目录大全!!!!【必看必学】
感谢原作者,谢谢。转载自:http ://www.cnblogs.com/skywang12345/p/3603935.html电极上方链接,选择就可以了。转载 2018-07-12 20:10:24 · 2240 阅读 · 0 评论 -
堆排序原理及其实现(C++)
堆排序原理及其实现(C++)1. 堆排序的引入我们知道简单选择排序的时间复杂度为O(n^2),熟悉各种排序算法的朋友都知道,这个时间复杂度是很大的,所以怎样减小简单选择排序的时间复杂度呢?简单选择排序主要操作是进行关键字的比较,所以怎样减少比较次数就是改进的关键。简单选择排序中第i趟需要进行n-i次比较,如果我们用到前面已排好的序列a[1...i-1]是否可以减少比较次数呢?答案是可以的。...转载 2018-07-12 19:55:49 · 430 阅读 · 0 评论 -
C++实现堆排序
转:https ://www.cnblogs.com/dlutxm/archive/2011/10/19/2218186.html堆的定义: ñ个关键字序列吉隆坡,K2,...,KN称为堆,当且仅当该序列满足如下性质(简称为堆性质): (1)ki <= k(2i + 1)且ki <= k(2i + 2)(1≤i≤n),当然,这是小根堆,大根堆则换成>...转载 2018-06-24 15:28:04 · 181 阅读 · 0 评论 -
C++实现希尔排序
转: https: //blog.csdn.net/jx232515/article/details/51547610希尔排序(Shell排序),也称为递减增量排序算法,的英文插入排序的一种高速而稳定塔的改进版本。希尔排序的英文基于插入排序的以下两点性质而提出改进方法的:1。 。插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率; 2。但插入排序一般来说是低效的,因为插入排序...转载 2018-06-24 15:26:36 · 786 阅读 · 1 评论 -
C++用位移运算符求两数的平均值
1,((X,Y)+(X | Y))>> 1;2,(X&y)+((x^y)>>1);原创 2018-06-24 15:15:27 · 559 阅读 · 0 评论 -
图解——》希尔排序(2)
希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序,同时该算法是冲破O(n2)的第一批算法之一。本文会以图解的方式详细介绍希尔排序的基本思想及其代码实现。基本思想 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越...转载 2018-08-07 19:29:05 · 210 阅读 · 0 评论