效率优化

寻找丑数及关于程序优化效率的一点说明

风格不统一 提交于 2019-12-07 00:06:33
一、问题描述 如果一个整数值含有因数2,3,5(包括1和该整数本身)的整数称为丑数(Ugly Number)。换句话说丑数ugly_number是可以表示成形如下面表达式的形式,表达式中的i,j,k均是大于等于0的整数。 举个例子,18 = 2 * 3 * 3,所以18是一个丑数。而14 = 2 * 7,所以14不是一个丑数。 现在有个需求就是要找到第2013个丑数。 二、问题分析 解决问题的思路显然是要根据丑数的性质。主要有两种思考的切入点。 第一种方法,按照整数正好三顺序一个一个找,并判断该整数是不是丑数,如果是丑数的个数加1,如果不是继续查找下一个,直到找到问题要求的第N个丑数即可,这种方法的效率不是很好,但是很好理解,所以在这里只给出伪代码。伪代码如下: while(i < N) if(true == judge_ugly_number(number)) i++; ugly_numbers[i] = number; number++; else number++; 判断一个数是否是丑数的伪代码如下: while(0 == number % 2) number /= 2; while(0 == number % 3) number /= 3; while(0 == number % 5) number /= 5; if(1 == number) reutrn true;

Nutch的Hadoop方式爬取效率优化

本小妞迷上赌 提交于 2019-11-30 21:49:51
下面这些是潜在的影响爬取效率的内容(官方资料翻译): 1)DNS设置 2)你的爬虫数量,太多或太少 3)带宽限制 4)每一主机的线程数 5)要抓取的urls的分配不均匀 6) robots.txt中的高爬取延时(通常和urls的分配不均匀同时出现) 7)有很多比较慢的网页(通常和分配不均匀同时出现) 8)要下载太多的内容(PDF,大的html页面,通常和分配不均匀同时出现) 9)其它 那现在怎样改善它们? 1)在每一个本地的爬虫机器上设置DNS,如果是多个爬取机器和一个单独的DNS中心这种情况,那么它就会像有DOS攻击在DNS服务器上那样,使整个系统变慢。我们经常设置两层,首先命中本地DNS缓存,然后就是大的DNS缓存,就像OpenDNS或Verizon。 2)这将是map任务数乘以fetcher.threads.fetch属性值的数量。所以10个map任务*20个线程=一次200个爬取列表。太多的话会超过你系统的负担,太少的话就会使一些机器闲置。你需要认真考虑在你的环境下如何设置这些属性。 3)带宽限制,用ntop,ganglia和其它监控软件来测定你使用了多少的带宽。计算输入和输出的带宽。可以做一个简单的测试,用抓取网络中一台不用作爬虫的服务器中,如果它与其中一台爬虫机器连接时或当那台机器抓取时从中下载信息时非常慢,这时你就可以加大带宽