自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(80)
  • 收藏
  • 关注

原创 一个简单的分布式的知乎爬虫

源代码地址:https://github.com/WiseDoge/ZhiHu_Spider一个分布式的网络爬虫,用于抓取知乎的用户详细信息,包括用户名、行业、位置、毕业院校、介绍、关注者、关注人等。 原理主机 负责分发任务。从起始位置开始,将当前用户的所有关注者提取出来,并压入Redis任务队列,然后随机的进入到其中一个关注者的主页,递归上述操作。 从机 负责抓取网页。连接至Redis

2016-09-16 22:23:45 4762

原创 《ACM程序设计》课程总结

目录 一、我校ACM程序设计竞赛的现状二、我对这门课的理解三、我为什么要选择这门课四、对这门课的体会五、我从这门课中学到了什么六、这门课对我的发展方向有什么帮助 一、我校ACM程序设计竞赛的现状正文  ACM国际大学生程序设计竞赛(英文全称:ACM International Collegiate Programming Cont

2016-06-26 15:05:55 4386

原创 练习4——图论总结

在最后一个专题,我们学习了图论,了解了什么是图,一些常见的图,以及一些图算法。 图的概念图是由顶点集合以及顶点间的关系的集合组成的一种关系的数学表示。几种常见的图有向图:图中的边是有方向的。E (x ,y) 和E ( y ,x)表示的边不同。无向图:图中的边是没有方向的。完全图(暂时还没有接触过):n个顶点的图两两连边,即有 n(n-1)/2条边。 图的表示邻接矩阵(Adja

2016-06-26 14:56:11 804

原创 练习3——动态规划总结

动态规划程序设计是对解最优化问题的一种途径、一种方法,而不是一种特殊算法。不像搜索或数值计算那样,具有一个标准的数学表达式和明确清晰的解题方法。动态规划程序设计往往是针对一种最优化问题,由于各种问题的性质不同,确定最优解的条件也互不相同,因而动态规划的设计方法对不同的问题,有各具特色的解 题方法,而不存在一种万能的动态规划算法,可以解决各类最优化问题。     动态规划问题运算量比较大,通

2016-05-18 22:40:36 541

原创 练习2——搜索总结

原来对DFS的理解仅仅局限于图,现在发现这只是最基础的。DFS更多的表示的是一种状态,然后利用某中很简单的思维进行一次次的尝试,每次尝试成功了,就深入一层递归进行下一次尝试,直到之后的尝试表明已经失败了不会成功,则回溯到这里。取消这次的尝试,去尝试其他的操作。简单地说,就是暴搜。只不过利用了递归来实现尝试失败时的回溯,从而进行新的尝试。

2016-04-23 15:58:27 498

原创 练习1——贪心算法总结

贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。   实现贪心的具体步骤是:Begin 从问题的某一初始解出发;while 能朝给定总目标前进一步 do  求出可行解的一个解元素;由所有解元素组合成问题的一个可行解     从我的理解来看,目前遇到的贪心问题

2016-03-23 23:38:12 651

转载 KD-Tree 算法的 C++ 实现

阅读本文前,建议查阅相关资料,了解 KNN 算法与 KD 树。基础知识如图所示,假设一个点 a 目前的最近邻点为 b,如果存在相对于 b 离 a 更近的点,那么这个点一定在以 a 为圆心,ab 为半径的圆内。 现右侧的区域是未知的,如果 a 到分界线的距离 l 大于目前的最近距离 L(圆半径),则没有必要在右侧的未知区域继续寻找最近邻点(如图一),反之,则要继续寻找(如图二)。 相应的,投射到多

2017-12-21 10:15:31 3496 1

原创 用Python实现代理池(Proxy Pool)系统

项目的代码在这里:https://github.com/WiseDoge/ProxyPool 跨语言高性能IP代理池,Python实现。 注意:请运行程序前先更新一下抓取代理的函数。运行环境Python 3.5(请务必保证Python的版本在3.5以上,否则异步检验无法使用。)Redis Redis官网并没有提供Windows的安装版,Windows用户可以点击此处下载一个我自己编译

2017-03-07 18:45:23 11595 2

原创 BP神经网络的Python实现

测试代码和更多机器学习算法详见 https://github.com/WiseDoge/ML-by-Pythonimport numpy as npclass BPNetWork(object): """ 全连接神经网络,采用BP算法训练。 """ def __init__(self, layers, act_func='tanh'): """

2017-03-06 21:59:37 1310

原创 CART决策树的Python实现

完整的代码请见:https://github.com/WiseDoge/ML-by-Pythonfrom collections import defaultdictimport numpy as npclass TreeNode(object): """决策树节点""" def __init__(self, **kwargs): ''' attr_

2017-02-25 12:39:30 3017

原创 支持向量机(SVM)算法的Python实现

支持向量机(SVM)算法的Python实现更多机器学习算法的实现,详见 https://github.com/WiseDoge/ML-by-Pythonimport numpy as npclass SVC(object): """ 支持向量机(Support Vector Machine)二分类器, 默认的核函数是 多项式函数。 使用时,正类用1表示,负类用-1表

2017-02-25 12:36:00 4967 1

原创 常见机器学习算法的Python实现

内容K近邻算法感知机朴素贝叶斯分类器决策树(Decision Tree)随机森林(Random Forests)支持向量机(Support Vector Machine)线性回归(Linear Regression)逻辑斯蒂回归(Logistic Regression)Bagging算法神经网络(BP算法)隐马尔科夫模型(HMM)K-Means聚类算法LVQ聚类算法主成份分析法(PCA)

2017-02-25 08:45:24 1772

原创 练习四 1019

概述:有一个物种的一些个体,给出一些数对x,y,表示x和y不是一种性别,然后给出许多数对,问有没有矛盾。思路:分组并查集,用两个并查集,表示两种性别,然后不断的合并,如果有冲突,就终止,否则就一直合并,最后输出结果。感想:很有实际意义的问题。#include #include #include #include using namespace std;const int MA

2016-07-01 12:47:25 454

原创 练习四 1011

概述:虽然草儿是个路痴(就是在杭电待了一年多,居然还会在校园里迷路的人,汗~),但是草儿仍然很喜欢旅行,因为在旅途中 会遇见很多人(白马王子,^0^),很多事,还能丰富自己的阅历,还可以看美丽的风景……草儿想去很多地方,她想要去东京铁塔看夜景,去威尼斯看电影,去阳明山上看海芋,去纽约纯粹看雪景,去巴黎喝咖啡写信,去北京探望孟姜女……眼看寒假就快到了,这么一大段时间,可不能浪费啊,一定要给自己好

2016-07-01 12:15:38 487

原创 练习四 1022

概述:龙珠分布在许多城市,而且,经过一段时间之后,一些城市的龙珠就会被运送到其他的城市,如果是输入T a b,那么进行移动, 把编号a的龙珠所在的城市的所有龙珠移动到编号b龙珠所在的城市。输入Q a, 那么输出a龙珠所在的城市, a龙珠所在城市有的龙珠的个数, 以及a龙珠移动的次数。思路:也是一个简单的并查集问题,继续套用 find 和 merge 函数。感想:这个题和1023是一

2016-06-27 16:49:59 317

原创 练习四 1023

概述:在一个会场举行文艺演出,安排坐区,编号为B的人必须在编号为A顺时针方向X,给你一些规则,找出不正确的,输出个数。思路:带权值的并查集问题,在该题中可以转化为List[b] = List[x] + m - List[y],基本的find和merge函数和其他的并查集类问题一样。感想:没想到简单的题在后面。#include #include #include #includ

2016-06-27 16:32:52 424

原创 练习四 1012

概述:n*m大小的矩形,起点在矩形的左上角, 终点在右下角,里面一个小矩形代表一个街区(block)。每个小矩形的边长都是2520, 小矩形的边有一个速度限制,范围是0~9, 如果是0表示这条边不能行驶。思路: 绝对是一道水题。每一条边是  "数字"+“空格”+“符号”的形式, 数字表示这条边的限速, 符号表示这条路是单向(还分东西, 南北)的还是双向的。处理完复杂的输出和读取问题之后,用Di

2016-06-26 15:25:45 583

原创 练习四 1008

概述:给你一个不成环的图,让你在只能构成一个环的情况下,求出这个环的权值和的最大值思路:并查集问题,还是按照以前的套路,当边上的两个节点的根节点相同时,会构成环,这时候就要考虑是构成一个环还是构成两个环,如果构成一个环,那么保留,如果是两个环,就舍弃,把整个图遍历之后,输出最大值即可感想:在处理是否成环的时候要谨慎对待。#include#include#include#inclu

2016-06-20 10:10:35 523

原创 练习四 1009

概述:在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt。但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店到赛场的路线,你可以帮助他们吗?思路:从一个无向图中给定的一个顶点,求这个定点到其他任意点权值和的最小值,应该使用Dijkstra算法,我我们从1点开始搜索,逐步寻找离他最近的点,每个点到1点的最短距离用d[i]表

2016-06-20 09:44:02 1175

原创 练习四 1006

概述:也是修路问题,给定一个地图,求修路的最小花费。思路:最小生成树的题目,这次使用的Prim算法,选一个节点放到数组中,找出和他相邻的最便宜的节点,再把这个节点放到数组中,然后继续重复这个步骤,金钱也不断的累加,最后输出金钱数目即可。感想:感觉前6个题,用一套代码改改就行。。。#include #include #include #include const long

2016-06-19 11:25:33 397

原创 练习四 1005

概述:省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可)。现得到城镇道路统计表,表中列出了任意两城镇间修建道路的费用,以及该道路是否已经修通的状态。现请你编写程序,计算出全省畅通需要的最低成本。思路:此题在1004题的基础上做了些许改动,即有些城镇之间早已有了路,把这个描述转化成代码的话很简单,只要让这条边的权值为0即可,这

2016-06-18 08:50:40 533

原创 练习四 1002

概述:在平面坐标系中给你一些孤立的点,求把这些点联系起来的最小路程。思路:这是经典最小生成树问题的一个变种,因为点的坐标是Double型的,所以比较难像其他题一样用位置表示点的根节点,所以,要从新给每个输入的点分配一个ID,然后就转化为经典的问题了。在这里我采用的仍然是Kruskal算法。感想:无。#include #include #include #include #inc

2016-06-18 08:46:13 518

原创 练习四 1003

概述:某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇。省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通过道路可达即可)。问最少还需要建设多少条道路?思路:并查集问题,只要找出根节点的数目即可,很简单。感想:第一节课听老师讲了,第二节课立刻去A了,感觉比较简单。#include #include #

2016-06-14 21:26:52 451

原创 练习四 1004

概述:给你一些镇子,和镇子之间的距离,现在要修一条路,把所有镇子连起来,求路的最短距离。思路:最小生成树问题,我采用的还是KRUSKAL是第一题的简化版,详情请看第一题。感想:刷了第一题,再看这个题,感觉好简单。#include #include #include using namespace std;const int N = 105;int father[N];int

2016-06-14 21:23:02 471

原创 练习四 1001

概述:给你一些城镇,以及各个镇之间的距离,现在要修建道路,把这些镇子穿起来,已知一些镇子之间已经有了道路(即不用再修了),现在求施工的最短路径。思路:这是最小生成树问题,我采用的是kruskal算法。感想:“一些镇子之间已经有了道路”这个条件比较难缠,想了一会才明白,只要另这些镇子的距离为0就可以,这样就不会影响结果。#include #include #include usin

2016-06-14 21:18:17 599

原创 练习三 1018

概述:给出小猪钱罐的重量和装满钱后的重量,然后是几组数据,每组数据包括每种钱币的价值与重量,要求出重量最少能装满钱罐时的最大价值。思路:完全背包问题,感想:无。#include #include #include #include #include using namespace std;const int MAX = 600;int value[MAX];

2016-05-22 11:08:41 341

原创 练习三 1021

概述:有六种物品,每种物品对应的价值为1~6,给定每种物品的个数,切不可分割,问能否把这堆物品分为等价值的两份。思路:多重背包,计算过程比较复杂,所以要优化一下,先把总价值为奇数的组排除掉(因为奇数不可能分为等价值的两份),然后再套模板计算即可。感想:无。#include #include using namespace std;int map[7];int dp[10

2016-05-22 10:54:17 317

原创 练习三 1022

概述:小偷偷东西,给出他被抓的几率,求他能偷到的最大财富。思路:既然是最大财富,那就是当他正好被抓到时,钱最多,在将被抓概率转化为存活概率,利用概率相乘原理,转化为01背包问题(怎么又是01背包)即可。感想:无。#include #include using namespace std;struct Bank{ int mom; double p;} Bank[1000

2016-05-07 17:53:47 490

原创 练习三 1003

概述:求最长升序子列。思路:这个题还用想吗-  =,出题人一点也没拐弯抹角,直接就告诉你求最长升序子列。如果 f(n)>f(n-1),则 在n除的最长升序子列等于在n-1的加一,按照这种方法循环下去即可。感想: 无。#include #include #include using namespace std;const int maxn=1002;int num[maxn

2016-05-07 17:16:23 421

原创 练习三 1017

概述:给出一组产品的价值和体积以及包的容量,求包能装的产品的最大价值。思路:与1019题类同,同为01背包问题。状态方程为 dp[j] = max(dp[j], dp[j - w[i]] + v[i]);感想:这套题里有好多01背包啊。#include #include #include using namespace std;const int MAX = 1005

2016-05-07 17:08:36 327

原创 练习三 1019

概述:给出每个物体的价值和物体的数量,如何分使得A,B所得价值最接近并且A的价值不能小于B思路:将价值的总和平分,就可以转化为01背包问题,状态方程为 dp[j] = max(dp[j],dp[j-val[i]]+val[i]);感想:无。#include #include #include using namespace std;int val[6005];int

2016-05-07 17:02:28 309

原创 练习三 1002

概述:给出两个字符串,求出它们最长的公共部分的长度。思路:这个题用到了LCS(最大公共序列)算法,老师没有讲过,于是我查了一下,思路是这样的,将两个序列分别比作矩阵的行和列,如下图矩阵初始都置为0,一旦一个格的行和列相等,就把对应格的值变为左上对角线格的值+1,否则,就取他左或上一格的大者,此题就是用了此种解法感想:上课没讲的东西,不代表不重要。#include #inclu

2016-05-07 16:54:36 527

原创 练习三 1024

概述:首先给出物品数量和手中资金,人后每样物品给出价格,需要购买时手中至少需要多少资金,还有物品本身的价值,要求求出最大资金。思路:一定要按q-p排序,不要按价值排序。感想:无。#include #include using namespace std; //crucial#define N 500#define M 5000struct Item{ int pi;

2016-05-03 16:32:50 273

原创 练习三 1011

概述:有一只经过训练的蜜蜂只能爬向右侧相邻的蜂房,不能反向爬行。请编程计算蜜蜂从蜂房a爬到蜂房b的可能路线数。思路:典型的斐波拉契数列问题,相距N步与相距N-1步和相距N-2步有关,f(n)=f(n-1)+f(n-2),没啥好说的。感想:这是我在本套题遇第三次这类问题。#include using namespace std;long long dp[60];int main(){

2016-05-03 16:27:21 344

原创 练习三 1004

概述:有一个数列,它的成员都是2,3,5,7的倍数,输入一个n,求出这个数列的第n个数。思路:先列一个表,把这些数据全求出来,利用循环,设a,b,c,d=1,分别对他们*2,*3,*5,*7,取最小值入表,并将其+1,依次类推,最后输出所求值即可。感想:以前做过的题,拿来想想就有思路了。#include #include using namespace std;typedef

2016-05-03 16:23:58 405

原创 练习三 1005

概述:给定一块砖的 长宽高,让你叠金字塔,下面砖的表面积必须大于上面的,求能叠到的最高高度。思路:先将给定的所有的砖分成三种,这样的话,一块砖就有三种形态,然后将所有的排序,然后挑选,最后将所选的高加到一起即可。感想:题意不太好理解。 #include #include #include #include #include

2016-05-03 16:18:20 445

原创 练习三 1001

概述:求最大字段和,d[i]表示已 i 结尾(字段和中包含 i )在 a[1..i] 上的最大和。思路:利用递推公式d[i]=(d[i-1]+a[i]>a[i])?d[i-1]+a[i]:a[i];max = {d[i],1感想:第一题。#include using namespace std; int get(int data[] , in

2016-05-03 16:13:40 352

原创 练习三 1023

概述:Speakless很早就想出国,现在他已经考完了所有需要的考试,准备了所有要准备的材料,于是,便需要去申请学校了。要申请国外的任何大学,你都要交纳一定的申请费用,这可是很惊人的。Speakless没有多少钱,总共只攒了n万美元。他将在m个学校中选择若干的(当然要在他的经济承受范围内)。每个学校都有不同的申请费用a(万美元),并且Speakless估计了他得到这个学校offer的可能性b。不同

2016-04-28 22:45:24 505

原创 练习三 1016

概述:在一无限大的二维平面中,我们做如下假设:1、  每次只能移动一格;2、  不能向后走(假设你的目的地是“向上”,那么你可以向左走,可以向右走,也可以向上走,但是不可以向下走);3、  走过的格子立即塌陷无法再走第二次;求走n步不同的方案数(2种走法只要有一步不一样,即被认为是不同的方案)。思路:f[n]表示走n步的方案数,x[n]表示向下走的方案数,z[n]表示向

2016-04-28 22:42:23 540

原创 练习三 1015

概述:给出一个十进制整数,求二进制形式。思路:水水水水水水水水水水水水题。感想:水水水水水水水水水水水水#include#includeusing namespace std;int main(){ int n; vectorv; while (cin >> n&&n) { v.clear(); while (n) { v.push_back(n %

2016-04-28 22:36:53 340

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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