- 博客(67)
- 收藏
- 关注
原创 Java泛型中的通配符
1、上界通配符首先,需要知道的是,Java语言中的数组是支付协变的,什么意思呢?看下面的代码: static class A extends Base{ void f() { System.out.println("A.f"); } } static class B extends A { void f()
2017-09-24 19:15:46
458
1
原创 poj 2542
题意:给定多组(x,y),x和y的信仰相同,估计信仰的数量 解法:并查集,初始化ans为总人数,当添加一对(x,y)后,判断,如果已经是一组了,不做,如果不是,ans-1.#include #include #include /* *This file is about union set operations. *and the program
2016-05-26 14:49:30
624
原创 poj 1611
题意:输入n,m分别表示学生人数和组数,然后输入m组数据,现在已经知道如果一个小组里面的一个人得病,那么该小组都有可能得病。而且已经知道0号学生已经得病,问:一共有多少人可能得病? 解法:并查集 用树高代表集合的大小,最后输出根为0的小组的人数就可以了!#include #include#define max_n 30005int father[m
2016-05-26 14:33:35
500
原创 并查集的实现c
#ifndef _UNION_SET_H_#define _UNION_SET_H_#include #include #include /* *This file is about union set operations. *and the program is c-style,you can transfer it to *cpp-style. *you
2016-05-26 14:22:50
562
原创 POJ 1251
这道题就是对优先队列的应用。 huffman+priority_queue #include #include #include #include #include #include #include #include using namespace std;int main(){ string in; int count[200]; //
2016-05-24 16:41:53
382
原创 poj 2431
题意:这道题要求的是最少的加油次数,告诉你n个加油站的距离和每个加油站可以加的油。让你求能不能到达终点,如果可以的话最少需要加多少油。 解法:这可以用优先队列来解决。我们想象,当经过一个加油站时,我们不一定加油,但是我们一定可以加油。因为我们到达了这个加油站,所以相应的获得了可以加油的权利,但是我们可以不加,当我们足以行驶到下一个加油站时,我们就可以选择不加,但是当我们无法行驶到下
2016-05-24 16:02:48
435
原创 数据结构之堆的实现
堆:孩子都比父亲大,或者孩子都比父亲小#ifndef _HEAP_H_#define _HEAP_H_#include #include #include /* *this file is about heap of c-style,and i will offer the interface of push/pop/top/size *but,the pro
2016-05-24 12:26:11
373
原创 哈夫曼树的c++实现
huffman 树称为最优二叉树,用其来对字符编码是一种比较好的选择,huffman树的实现也比较简单,构造huffman树的思想就是每次从序列中取出权值最小的两个,然后构造出一个树,然再去构造,一直到只有一个根节点为止。根据这个“每次从中选出最小的两个值”,我们应该想到优先队列,优先队列可以迅速的从一堆数中找出极小值或者极大值,用优先队列的这个性质可以很简单的构造huffman树。 当
2016-05-24 11:21:10
2690
原创 poj 2406
题意:找一个字符串中的循环字符串次数比如:ababab循环字符串为ab,次数为3又比如:abcab的循环节为abcab,次数为1解法:用kmp数组,kmp数组的含有是当不匹配时可以直接回退到next[j],我们求完next数组之后。用 length%(length-next(length))判断是否具有循环节(自身其实也是一个循环节),如果可以整除,则说明该字符串是由l
2016-05-22 17:39:14
345
原创 poj 2752
题意为:给一个字符串,找出又是前缀又是后缀的子字符串的长度,从小到大输出。解法:利用kmp中的next数组来求解这个问题就很简单了。首先,我们应该理解kmp算法中的next数组含义:当失去匹配之后,只需要回退一些,不需要从0开始。也就是对于一个下标j,next[j]的值代表回退过去的位置,next[j]之前的字符串已经匹配成功过。所以不需要再次匹配那对于这道题来说,
2016-05-22 17:15:01
346
原创 poj 3461
本题求解的是说输入两个字符串,求第一个字符串在第二个字符串中出现的次数。直观理解就好,用kmp算法很好实现,只要稍微改一下标准kmp算法就可以。首先,next数据求解还是一样,在kmp进行过程中,如果第一个字符串不是第二个字符串的子字符串,那么没什么问题,答案是0.如果第一个字符串是第二个字符串的子字符串,而且只出现一次,那也可以直接用kmp实现,不需要修改,答案是1。但是,当第一
2016-05-22 16:02:54
430
原创 KMP算法实现才 c++
kmp算法可以有效提高字符串匹配的速度,当匹配字符串中出现较多循环节时尤其有效,但是当一个字符串中几乎每一个字符都不相同的时候,kmp算法并不能很好的加速整个匹配过程,但是光思想就可以甩brute-force算法几条街。下面给出了两种算法的具体实现,对于kmp算法,其关键思想是:当与源字符串出现不匹配时,无需从头再来,而是可以只退回到next[j]的位置,j为当前匹配字符串的位置,所以kmp算法的
2016-05-22 15:49:34
962
原创 辅助编译
是时候上传一个自己的一个十分简便的辅助编译程序,我也不知道为什么要做,但是控制不住!!!#include "head.h"/* *This program is just use for hujian's program. *And this peogram is do some easy work for hujian *You can look up the sou
2016-05-21 18:20:08
495
原创 poj 1017
/*题意:给出一些忽略高度的只看面积的东西,大小从1*1....6*6给出这些大小的数量,现在只有6*6的箱子来装这些东西但是为了赚钱,需要尽可能少的箱子,那么最少的箱子数是多少个呢思路:一路贪心下去,先装大的,然后再用小的填空白*/#includeusing namespace std;int box[6];int main(){ //这个数组用来保存当一个箱子里面装入了
2016-05-18 22:07:30
332
原创 二叉查找树的实现(c++)
#ifndef _HJ_STL_BST_H_#define _HJ_STL_BST_H_/** Author:hujian* Time:2016/5/8* discription:this file is about binary search tree<BST>.** NOTICE:you should not use hjstl_vector in anywhere.* beca
2016-05-10 12:06:00
1022
原创 STL源码剖析heap
现在可以到github上下载目前为止的所有文件了。 其中,hjstl_vector目前无法正常工作,后期会回来修复bug。 下面是地址:https://github.com/pandening/HJSTL#ifndef _HJ_STL_HEAP_
2016-05-05 10:14:55
505
原创 STL 源码剖析 queue
#ifndef _HJSTL_QUEUE_H_#define _HJSTL_QUEUE_H_/** Author:hujian* Time:2016/4/30* discription:this file is about queue structure.* NOTICE:using deque as the low-level structure of queue.* you ca
2016-04-30 20:54:45
384
原创 STL 源码剖析 stack
#ifndef _HJSTL_STACK_H_#define _HJSTL_STACK_H_/** Author:hujian* Time:2016/4/30* discription:this file is about stack structure.* NOTICE:using deque as the low-level structure of stack.* you ca
2016-04-30 20:53:50
398
原创 STL 源码剖析 deque实现源码
#ifndef _HJSTL_DEQUE_H_#define _HJSTL_DEQUE_H_/* * Author:hujian * Time:2016/4/28 * discription:this file is about deque structure. **/#include "hjstl_alloc.h"#include "hjstl_construct.h
2016-04-28 14:31:10
2336
原创 STL list
/*** Copyright (c) 2016 hujian.* Permission to use, copy, modify, distribute and sell this software* and its documentation for any purpose is hereby granted without fee,* provided that the above c
2016-04-18 21:47:11
392
原创 opencv remap
什么叫做重映射呢? 重映射,就是把一幅图像中的某个位置上的像素放到另一个图像中指定位置上的过程。为了完成这样的映射,我们需要一个重映射函数来讲源图像与目标图像的坐标对应起来。 像这样:g(x,y)=f(h(x,y)) g函数是目标图像上的坐标点,f是原图像的,而h函数是作用于原图像上的函数。remap( )函数会根据我们指定的映射形式,将源图像进行重映射几何变换,基于的式子如下: void r
2016-04-17 19:02:05
2802
原创 opencv角点检测
什么叫角点呢? “如果某一点在任意方向的一个微小变化都会造成图像灰度很大的变化,那么这个点就是角点”,我们可以把角落看成是角点的现实体现,对于墙角来说,墙角是所有平面的开始点,只要这个点变化,就会引起所有从这个点出发的平面的变化,这就是角点。下面是几个角点的具体描述1、一阶导数,也就是图像灰度的梯度的局部最大所对应的像素点2、两条以及两条以上边缘的交点3、图像中梯度值和梯度
2016-04-17 18:29:32
387
原创 STL vector
/*** Copyright (c) 2016 hujian.* Permission to use, copy, modify, distribute and sell this software* and its documentation for any purpose is hereby granted without fee,* provided that the above
2016-04-17 16:42:04
394
原创 opencv漫水填充算法
一、什么叫做漫水填充呢 用特定的颜色填充联通的区域,通过设置可联通像素的上下限以及联通方式来达到不同的填充效果图。漫水填充常常被用来标记或者分离图像中的一部分以便对这部分的图像进行进一步的处理,也可以从输入图像中获得图像掩码区域,图像掩码会加速图像处理过程,可以只处理掩码指定的像素点,操作的结果总是一片连续的区域。 那,漫水填充算法是怎么运行的呢? 漫水填充就是自动选中了和种子像
2016-04-16 21:40:46
531
原创 STL迭代器(二)
这是SGI STL迭代器学习的第二部分,上一部分我对整个STL迭代器做了一些学习,知道了什么叫迭代器,什么叫traits编程技术,算是对迭代器有了一个整体上的认识,那么在这一部分中,我想要深入一点,了解一些本质上的东西,并且期望做到整体把握迭代器的设计原理与方法。 指针(原生)是一种特殊的迭代器,因为它可以达到迭代器一样的功能,反过来,迭代器是一种指针,这样对吗? 确实,迭代器就是
2016-04-11 12:14:21
473
原创 递归搜索之朋友配对数
/* *这是一道关于暴力搜索的题目,题目要求输入一组朋友关系,然后输出有多少种 *两两朋友组队在一起的方法 *设计:我们使用递归函数来解决,在这个问题中,将整个问题分为n/2个操作,每个 *操作等同于对两名学生的组队,此问题变为:给定还没有组队的学生名单时,计算出 *两名朋友之间组成一对的组合个数,对名单中两名为朋友关系的学生组队后,还是和 *原来一样需要处理同样的问题,所
2016-04-10 21:34:57
630
原创 套接字源码分析
我是非常喜欢linux内核的,作为世界上最伟大的开源软件(我觉得),随手可得的最新版本的源代码,有那么多大牛在维护与更新,读读它,真的对我的帮助特别大,零零散散的很久了,现在想要学习网络,学习网络就需要懂套接字编程,也就是去学习一大堆API的用法,但是这样很容易忘记也没有什么 价值,我觉得最好的学习套接字的方法,就是去读源代码,网络协议栈是linux源代码中比较庞大的一部分,特别是比较新的版本,
2016-04-10 20:30:03
2939
原创 opencv图像霍夫变化
霍夫变化可以从图像中快速的提取出直线或者圆等形状的图像。 霍夫变化是图像处理中的一种特征提取技术,霍夫变化分为霍夫线变化和霍夫圆变化。一、霍夫线变化 霍夫线变化用来寻找直线,在进行霍夫线变化之前,需要对图像进行边缘检测处理,也就是说,霍夫线变化的输入只能是二值图像。 在opencv中,支持三种霍夫线变化: (1)、标准霍夫变化,HoughLines函数 (2)、多尺度霍夫变化,
2016-04-10 18:06:21
1124
原创 opencv图像金字塔
我们可以使用下面的函数来将某种size的图像转换为另一种size的图像: (1)、resize函数void resize(InputArray src,OutputArray dst, Size dsize, double fx=0, double fy=0, int interpolation=INTER_LINEAR )第一个参数,InputArray类型的src,输入图像,即源图像,填Ma
2016-04-10 15:02:46
435
原创 STL迭代器(一)
迭代器学习(一)《STL 源码剖析》中,第三章叫“迭代器概念与traits编程技法”。总共33页,我艰难的读了一遍,愚蠢的我还是被所谓“traits技法”惊呆了!说白了,想要真正明白迭代器,就必须了解traits编程技术。 但不忙,在看什么是traits之前,先看看什么叫“迭代器”:迭代器是一种设计模式,他要求提供一种方法,使之能够一次访问某个聚合物内部的元素,而又无需暴露该聚合物内部的表达方式。
2016-04-10 13:59:32
602
原创 STL配置器(四)----内存池技术
关于内存池,我相信大家都比较感兴趣,实现的版本也很多,但无论怎么实现,我觉得很重要的一点是:不能让管理内存池的成本太大!这是关键。比如,你管理100M的内存需要花50M的空间才能搞定,那我觉得不如直接用malloc和free来得实在,除了管理内存消耗外,还要注意效率,如果效率太低那也没什么意义。本质上,内存池技术的出现是为了减少fragment碎片问题,用malloc和free来操作内存容易造
2016-04-08 22:48:22
2587
转载 图像边缘检测概论
一、概论下面将学习opencv中边缘检测的各种算子和滤波器:包括canny算子,sobel算子,scharr算子。什么叫做边缘检测呢?边缘检测的目标是标识数字图像中亮度变化明显的点。图像属性中的显著变化通常反应了属性的重要事件和变化,包括:(1) 、深度上的不连续(2) 、表面方向的不连续(3) 、物质属性变化(4) 、场景照明变化边缘检测剔除了大量认为与图像特
2016-04-07 13:28:09
3350
原创 STL空间配置器(三)
上一篇没写完的代码,因为我用的是VS2013所以无法测试我的配置器,我是照着SGI的版本写的,所以不符合STL标准规范,而VS随身带的STL是符合STL规范的,所以我无法测试,等到我自己写好了迭代器,容易之后,就可以测试了,不过在这之前,我将专门用一篇文件来学习并且自己写一个内存池,然后将这个内存池部署到我的HJSTL里面,下面是完整的HJSTL 空间配置器代码 1.0.0,大规模模仿SGI,但是
2016-04-07 10:34:20
454
原创 图像开运算、闭运算、形态学梯度、“礼帽”和“黑帽”
一、概念 图像的腐蚀和膨胀可以做更多的事情,可以通过膨胀和腐蚀来做一些图像的高级形态学变化,图像的高级形态学变化 有图像的开运算、闭运算、形态学梯度、顶帽,黑帽。二、图像高级形态学变化 1、开运算:先腐蚀后膨胀开运算可以用来消除小物体,在纤细点分离物体,平滑较大物体的边界的同时不明显的改变其面积。2、闭运算:先膨胀后腐蚀闭运算可以排除小的黑色区域。3、形态学梯度:膨胀与腐蚀图之差我们可以用
2016-04-06 21:20:27
5362
原创 图像腐蚀和膨胀
一、概论 数学形态学(Mathematical morphology) 是一门建立在格论和拓扑学基础之上的图像分析学科,是数学形态学图像处理的基本理论。其基本的运算包括:二值腐蚀和膨胀、二值开闭运算、骨架抽取、极限腐蚀、击中击不中变换、形态学梯度、Top-hat变换、颗粒分析、流域变换、灰值腐蚀和膨胀、灰值开闭运算、灰值形态学梯度等。膨胀与腐蚀是图像的最基本的两种变化,他们能实现的功能包括但不限于
2016-04-06 20:39:05
2878
原创 STL空间配置器(二)
上一篇是对STL空间配置器的入门级理解,在这一篇中,我将讨论更加深入的SGI STL空间适配器的内容。在下一节中,我将根据自己的理解,结合STL标准接口,实现一个符合STL标准的具有次级配置能力的简单空间配置器,将剪掉一切不需要的代码,在加上我自己的理解,实现一个更容易阅读与理解的空间配置器。 在开始进入正题之前,我先来谈谈为什么要花这么长的时间在看空间配置器的部分,而且对于学习如何使用STL来说
2016-04-06 19:57:32
1466
原创 递归(一)
n n n n s n e e e n n e y e n n e e e n n n n n n看上面的矩阵,从某一个点开始,任意组合的字符可以组合成某个特定的单词吗?比如从位置(2,2)开始可以组合成单词“yes”吗? 我们需要分析问题需要做的事情,就是比较字符,最终得到一个相同的字符,那我们分解为每次比较一个字符,然后递归下去就可以得到结果。 出口在哪? 1、如果
2016-04-05 23:49:36
425
原创 <<unix/linux programming>>学习标记整理
SI/O of linux/unix------------------------------------------------------1、linux/unix 中文件名的最大长度是 NAME_MAX,路径的最大长度是 PATH_MAX2、用于打开和关闭一个文件流的函数有三个(1)、fopen(2)、fclose()(3)、freopen()3、我们可以使用 f
2016-04-05 20:35:24
2021
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人