C++基础
文章平均质量分 77
Tander_Tang
喜欢数学,喜欢算法,喜欢编程,喜欢计算机。
展开
-
模板编程的文件组合方式
在模板编程时,当你出现error:Link2019,在main中出现无法解析的现象时。 由于模板的实例化发生在第一次使用模板的地方。而实例化是以模板定义的代码来参照的。这样一来就要求模板定义与模板使用同在一个编译单元(源文件)。既然使用模板首先需要模板声明,而且模板定义要求在使用模板同一个编译单位中,因此一般做法是将模板的整个定义都放在头文件内。如果是类模板,需要将类模板定义和成员原创 2016-03-04 14:35:27 · 305 阅读 · 0 评论 -
二叉搜索树基本数据结构实现
二叉搜索树基本数据结构实现,非递归与递归。二叉搜索树中一个结点包含3个指针left,right, prev和一个卫星数据key。这三个指针分别指向左儿子,右儿子,父节点。如果孩子结点和父亲结点不存在,相应指针为空。根结点的prev指向空。 1)遍历(中序遍历,先序遍历,后续遍历) 2)查找一个关键字,返回该关键字的结点指针 3).返回最大关键字最小关键字结点指针 4)寻找关键字key的后继结点原创 2016-03-04 14:49:37 · 517 阅读 · 0 评论 -
统计一篇短文中单词出现频率
散列查找的应用:给定一个英文文本文件,统计文件中所有单词出现的频率。解决这问题最基本的工作是不断地对读入的单词在已有的单词中查找,如果存在就将该单词频数加1,如果不存在就将该单词插入并记录频数为1.下面C++代码的哈希函数使用了双重探测的办法。在确定表的时候是取比输入整数小且距离输入整数最近的素数。#include#include#include#include#includeu原创 2016-03-05 18:05:02 · 1209 阅读 · 0 评论 -
C语言的输入与输出
在提交ACM代码时,C++的输入输出在时间上并不占优势,而C语言的 printf 和 scanf 相对来说效率更高。所以在比赛时,尽量选择使用C语言的输入输出。C语言本身不提供输入输出语句,输入输出操作是C语言标准库的函数来实现的。在C的标准库函数提供了输入输出函数,例如printf函数和scanf函数。它们不是C的关键字,而是库的函数名。 1. printf 函数的一般格式:prin原创 2016-03-19 21:32:05 · 2134 阅读 · 0 评论 -
平均时间复杂度为O(n)的选择算法
问题:求一列数中第i小的数求解第k小的数,使用的是快速排序的模型。描述:输入一列数a[0],a[1]...a[n-1]共n个和一个整数i,求第i小的数。分析:对于数组a[p..r]中寻找第k小的数,首先设置一个键值key,比如key=a[p],然后扫描数组一次将数组a[p...r]分解为小于或等于key和大于key的两部分,设key此时所在位置下标为position,于是小于或者等于key原创 2016-02-27 20:47:39 · 1609 阅读 · 0 评论 -
最坏情况为线性时间的选择算法
输入:一系列数a[0]...a[n-1]和一个整数K输出:这列数中第k小的数同样的问题在上篇文章中用快速排序模型,我们得到的平均时间复杂度是O(n),但是遗憾的是最坏情况会达到O(n^2)。这篇文章中我们还是使用快速排序的模型,但是改变了划分的方式,这个算法会保准得到一个很好的划分。将该算法叫做Select,具体如下: 1.将输入数组划分为n/5组,每组有5个元素,且剩下的至多原创 2016-02-28 14:37:13 · 5223 阅读 · 1 评论 -
求k分位数的k-1个顺序统计量
问题:对于一个包含n个元素的集合来说,k分为数就是指能把有序集合分成k个等大小集合的“k-1个顺序统计量”,给出一个能找出某一集合的k分位数的O(nlogk)的算法。 首先k要整除n,这样才可以分为k个等大小的集合。若将一个大小为n的集合按照顺序排好,我们所要求的这k-1个数就是要把这个集合平均分为k个集合。例如集合A= { 8, 4,0, -89, -12, 0, 36, 7原创 2016-02-28 16:59:36 · 2061 阅读 · 0 评论 -
确定集合S中与S中位数最接近的k个数
问题描述:设计一个O(n)时间的算法,对于一个给定的包含n个不同元素的集合S和一个正整数K问题分析,我们前面已知Select算法求n个数集合中第k大的数算法复杂度为O(n),解决此问题可以分为以下几步: 1.求出中位数x(可以利用Select函数求集合中第(n+1)/2小的数就是中位数。 2.用x减去集合中的每个数得到差的绝对值储存在数组b[n]中原创 2016-02-28 21:11:54 · 2785 阅读 · 0 评论