求最小生成树的克鲁斯卡尔(Kruskal)算法

Kruskal算法是利用贪心算法,每一次选出最小边加入生成树中,并利用并查集判断是否有回路,若有回路,则不能生成树,需要注意的是,这里在比较两条边的大小时 ,要使用权值进行比较。 【贪心算法】是指在问题求解时,总是做出当前看起来最好的选择。也就是说贪心算法做出的不是整体最优的的选择,而是某种...

2017-11-30 18:03:38

阅读数 445

评论数 0

【数据结构】:图

概念: 图是另一种非线性结构,由顶点集合(vertex)及顶点间的关系集合组成的一种数据结构。 完全图:在由n个顶点组成的无向图中,若有N(N-1)/2条边,则称为无向完全图。(也就是说任意两个顶点间都有边相连)权重:在一些图中,边具有与之相关的数值,称为权重。(权重可以表示从一个顶点到另...

2017-11-29 09:13:52

阅读数 375

评论数 0

并查集解决朋友圈问题

题目:加入已知n个人和m对好友关系(存于数组r),如果两个人是直接或间接的好友(好友的好友的好友………),则认为他们属于同一个朋友圈。请写程序求出这n个人里一共有多少个朋友圈。 例如:n=5,m=3,r={{1,2},{2,3},{4,5}},表示有5个人,1和2是好友,2和3是好友,4和5是好...

2017-11-28 20:06:55

阅读数 1162

评论数 0

非比较排序:计数排序和基数排序

计数排序 计数排序的基本思想: 给一个需要排序的数组,选出数组中的最大值和最小值确定这个数组的范围,新开辟一个这个范围大小的数组空间,这个临时数组中存储的是原来数组中各个元素出现的次数,最后再根据元素出现的次数将元素拷回原数组,此时,原数组有序。 代码实现://计数排序 void Cou...

2017-11-28 17:00:47

阅读数 224

评论数 0

浅谈B-树、B+树

B树数据库的索引大多用B+树实现,要了解B+树,我们必须先了解什么是B-树? 首先要清楚的是,B-树不能叫做B减树,否则可就让人笑掉大牙了,所以,后文中我们直接用作B树。 之前我们讲过,二叉搜索树的效率是O(log2^N),那为何数据库中不用二叉搜索树来作为索引呢?此时我们必须考虑到磁盘IO。...

2017-11-25 14:00:00

阅读数 282

评论数 0

连续数组的最大和

题目:输入一个整型数组,数组里有正数也有负数。数组中一个或连续的多个数组组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(N)比如,我们给出数组:arr[] = {2,-1,3,-5,-3,5,6,1},第一步加上数字2,此时和为2。接着,2+(-1),和变成1,因为第二个元素是负数,...

2017-11-17 16:11:32

阅读数 163

评论数 0

最小的K个数

题目:输入n个整数,找出其中最小的K个数。例如输入4,5,1。6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。这道题类似于之前讲堆的那篇文章中,求公司员工喜欢的前K种水果,那道题我们可以使用最小堆解决,同样的思路,这道题我们可以使用最大堆解决,在最大堆中,根节点的值总是大于它的子树...

2017-11-16 17:24:01

阅读数 154

评论数 0

布隆过滤器

Bloom-Filter算法简介 Bloom-Filter,即布隆过滤器,1970年由Bloom中提出。它可以用于检索一个元素是否在一个集合中。 Bloom Filter(BF)是一种空间效率很高的随机数据结构,它利用位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集合。...

2017-11-15 20:29:40

阅读数 299

评论数 0

二叉树中和为某一值的路径

输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶子节点所经过的节点形成一条路径。 比如上面这棵二叉树中,和为22的路径有两条:一条是10、12,另一条路径是10、5、7.分析题意后,可以看出,路径都是从根节点开始打印,所以我们需要前序遍历这...

2017-11-15 20:12:12

阅读数 161

评论数 0

将二叉搜索树转化为双向链表

题目:输入一棵二叉树,将该二叉树转换成一个排序的双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。 在二叉搜索树中,左子节点的值总是小于父节点的值,右子节点的值总是大于父节点的值,因此,我们在转换成排序双向链表时,原先指向左子节点的指针调整为指向前一个节点的指针,原先指向右子节...

2017-11-15 19:02:37

阅读数 451

评论数 0

【数据结构】:哈希表(hashtable)

hashtable—-哈希表,也称散列表,是根据关键字直接访问在内存存储位置的数据结构。它通过一个关键值得函数将所需的数据映射到所需的位置来访问数据,这个映射函数叫散列函数,存放记录的数组叫做散列表。构造哈希表的几种方法。 1,直接定址法—-取关键字的某个线性函数为散列地址,Hash(key)=...

2017-11-15 15:28:36

阅读数 191

评论数 0

二叉搜索树的后序遍历序列

题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false.假设输入的数组任意两个数字都不相同。 首先,我们知道,二叉搜索树的特点是:左子树的所有节点都小于根节点,右子树的节点都大于根节点。题目所说的是后序遍历这棵二叉树,我们便可以得出结论...

2017-11-13 20:06:17

阅读数 146

评论数 0

栈的压入、弹出序列

输入两个整数序列,第一个序列表示栈的压入顺序。请判断第二个序列是否为栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1、2、3、4、5是某栈的压栈序列,序列4、5、3、2、1是压栈序列对应的一个弹出序列,但4、3、5、1、2就不可能是该压栈序列的弹出序列。 这道题的规律如下:如果下一个弹出的...

2017-11-13 11:54:19

阅读数 143

评论数 0

进程和线程的区别和联系

一、进程进程:指在系统中能独立运行并作为资源分配的基本单位,它是由一组机器指令、数据和堆栈等组成的,是一个能独立运行的活动实体。    注意,进程一般有三个状态:就绪状态、执行状态和等待状态【或称阻塞状态】;进程只能由父进程建立,系统中所有的进程形成一种进程树的层次体系;挂起命令可由进程自己和其他...

2017-11-12 13:56:08

阅读数 152

评论数 0

打印1到最大的n位数

题目:输入数字n,按顺序打印出从1到最大的n位十进制数,比如输入数字3,则打印出1,2,3一直到最大的三位数999。这道题中,题目并没有说明n的范围,所以我们需要考虑到大数问题。我们通常用字符串或数组表达大数,字符串里的每个字符都是‘0’到‘9’之间的某一个字符,用来表示数字中的一位,因为数字最大...

2017-11-10 09:27:16

阅读数 200

评论数 0

数值的整数次方

题目:实现函数double Power(double base,int exp),求base的exp次方。不得使用库函数,同时不需要考虑大数问题。 这道题本身难度不大,但有些细节需要注意。由于题目已经给出了返回值呵参数中的double型,所以在进行判0的时候,就不能再用if(base == 0)...

2017-11-09 17:23:09

阅读数 281

评论数 0

菲波那切数列的递归与非递归解法以及青蛙跳台阶问题

说到求菲波那切数列中的第n个数,大家首先想到的就是递归解法,简单易懂。long long Fibonacci(int n) { if (n <= 0) return 0; if (n == 1) return 1; return Fib...

2017-11-08 16:01:06

阅读数 313

评论数 0

旋转数组的最小数字

题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小元素为1。 我们可以想到,这个旋转后的数组可以以看成两段有序区间。如上述题目中, 3,4...

2017-11-08 13:55:53

阅读数 343

评论数 0

【linux】:各目录下的内容和作用

文章转自http://blog.csdn.net/ArchyLi/article/details/78437891 一、概述在早期阶段,各个厂家定义了自己的Linux的系统文件目录,非常混乱,但是在后期,FHS标准规定了Linux下根目录各文件夹的名称以及作用,统一...

2017-11-05 09:45:25

阅读数 166

评论数 0

map和set的使用以及模拟实现

1,set 我们先来看看STL中set的接口有哪些 set的底层使用红黑树来实现,红黑树是一个不暴露给外界的数据结构,map和set都用它来实现,所以map和set是属于关联式容器。set的特性: 所有的元素都会根据元素的键值自动排序,set的元素不像map那样可以同时拥有实值(valu...

2017-11-04 23:52:42

阅读数 664

评论数 0

提示
确定要删除当前文章?
取消 删除
关闭
关闭