`

# 0827--算法练习题

阅读更多

1. 一个文本文件有多行,每行为一个URL。请编写代码,统计出URL中的文件名及出
现次数。

  a) 文件名不包括域名、路径和URL参数,例如http://www.rs.com/n.op/q/rs?id=1中的
文件名是rs

  b) 部分URL可能没有文件名,例如http://www.abc.com/,这类统计为空文件名

  c) 出现在不同URL中的相同文件名视为同一文件名,例如
http://www.ceshi.com/hi.php
ftp://ftp.cdef.com/hi.php为同一文件名

  文件内容示例如下:

  http://www.test.com/abc/de/fg.php?id=1&url=http://www.test.com/index.html

  http://www.ceshi.com/hi.jsp

  ftp://ftp.ceshi.com/hi.jsp

  http://www.hello.com/cw/hi.jsp?k=8

  http://www.hi.com/jk/l.html?id=1&s=a.html

  http://www.rs.com/n.op/q/rs?id=1

  http://www.abc.com/

 

 

 

import java.io.*;
import java.util.*;

public class URL1{
	public HashMap<String,Integer> parseURLs(String path){
		HashMap<String,Integer> map=new HashMap<String,Integer>();
		try{
			BufferedReader br=new BufferedReader(new FileReader(path));
			String str,url;
			int count,len;
			
			while((str=br.readLine())!=null){
				int index;
				if((index=str.indexOf('?'))!=-1){
					str=str.substring(0,index);
				}
				
				String[] tmp=str.split("/");
			  len=tmp.length;
				if(len==3){
					url="null";
				}else{
					url=tmp[len-1];
				}
				
				if(map.containsKey(url)){
					count=map.get(url).intValue();
				}else{
					count=0;
				}
				map.put(url,count+1);
			}
			
		}catch(Exception ex){
		}
					
		return map;
	}
				
	public static void main(String[] args){
		URL1 url1=new URL1();
		HashMap<String,Integer> map=url1.parseURLs("url1.txt");
	
	 /*	Iterator it=map.entrySet().iterator();          //注意hashMap的遍历方法
		while(it.hasNext()){
			Map.Entry<String,Integer> me=(Map.Entry)it.next();
			System.out.println(me.getKey()+","+me.getValue());
		}
	
		System.out.println("--------------");
	 */
	 
		System.out.println(map);
	}

}

 

 

 

awk -F / '{for(i=0;i<NF;i++){n=index($i,"?"); if(n!=0){$i=substr($i,0,n); count[$i]++; break;}} if(i==NF){if($(i-1)=="") {count["null"]++;}  else{count[$(i-1)]++;}}} END{for(file in count){print file,":",count[file]}}' file

  

 测试数据:

http://www.test.com/abc/de/fg.php?id=1&url=http://www.test.com/index.html
http://www.ceshi.com/hi.jsp
ftp://ftp.ceshi.com/hi.jsp
http://www.hello.com/cw/hi.jsp?k=8
http://www.hi.com/jk/l.html?id=1&s=a.html
http://www.rs.com/n.op/q/rs?id=1
http://www.abc.com/

 

 

2. 编写一个C语言函数,要求输入一个url,输出该url是首页、目录页或者其他url
如下形式叫做首页:
militia.info/
www.apcnc.com.cn/
http://www.cyjzs.comwww.greena888.com/
www.800cool.net/
http://hgh-products.my-age.net/
如下形式叫做目录页:
thursdaythree.net/greenhouses--gas-global-green-house-warming/
http://www.mw.net.tw/user/tgk5ar1r/profile/
http://www.szeasy.com/food/yszt/chunjie/
www.fuckingjapanese.com/Reality/

请注意:
a) url有可能带http头也有可能不带
b)动态url(即含有"?"的url)的一律不算目录页,如:
www.buddhismcity.net/utility/mailit.php?l=/activity/details/3135/
www.buddhismcity.net/utility/mailit.php?l=/activity/details/2449/

另:如果你会linux,请用linux下的grep命令实现第2题的功能(附加5分)。

 

public class URL2{
	public void parseURL(String url){
		int index,len,firLen;
		if(url.indexOf('?')!=-1){
			System.out.println(url+": 其他url");
			return;
		}else{
			String[] tmp=url.split("/");
			len=tmp.length;
			
			if((index=url.indexOf("http://"))!=-1){
				firLen=3;
			}else{
				firLen=1;
			}
		
			if(len==firLen){
				System.out.println(url+": 主页");
				return;
			}else if(len>firLen){
				if((tmp[len-1].indexOf('.'))==-1){
					System.out.println(url+": 目录页");
					return;
				}else{
					System.out.println(url+": 其他url");
			   	return;
			  }
			}
		}
	}
	
	public static void main(String[] args){
		URL2 url2=new URL2();
		url2.parseURL("http://www.cyjzs.comwww.greena888.com/");
		url2.parseURL("www.apcnc.com.cn/");
		url2.parseURL("thursdaythree.net/greenhouses--gas-global-green-house-warming/");
		url2.parseURL("www.buddhismcity.net/utility/mailit.php?l=/activity/details/3135/");
		url2.parseURL("www.buddhismcity.net/utility/mailit.php");
	}
	
}

 

 

awk -F / '{if((index($0,"?"))!=0){print "其他url";}else{if((index($0,"http://")!=0){len1=3;}else{len1=1;}if(NF==len1) {print "首页";}else{if((index($(NF-1),".")!=0){print "其他url"}else{print "目录页"}}}' file

 

 

 

 

 

 

 

3. 对给定的上亿条无序的url,请按照domain、site以及path分别排序,并请指出排序过程中可能会遇到的哪些问题?如何提高效率?

例如:http://www.baidu.com/path/about.html,domain、site以及path的定义分别如下:

Domain:baidu.com

Site:www.baidu.com

Path: www.baidu.com/path

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    turboFei#CS-Notes#算法与数据结构1

    1. 数据结构/算法导论 : 2. OJ练习题 : 1.从数据结构的角度索引 : 1. 一个顺序的数组[1,2,3,5,6],缺少了一个数字,如何找到它 2.

    算法导论配套练习题的答案讲解

    本书中的习题被设计来帮助读者深入理解和掌握各种算法的设计与分析技巧。以下是对给定部分内容的知识点总结和解释。 ### 第2章:算法的基础 #### 2.1-1 至 2.1-4 这些题目可能涉及了算法的基本概念、如何表示算法...

    算法导论课后习题-算法导论

    根据提供的信息,《算法导论》是一本非常经典的教材,涵盖了计算机科学中算法设计与分析的基础理论及实践应用。...通过这些习题的练习,可以帮助读者加深对算法设计原理的理解,提高解决实际问题的能力。

    算法导论中文版答案详解

    根据提供的信息,《算法导论中文版答案详解》涵盖了多个章节的习题解答,涉及了算法设计与分析的基础概念和技术。以下是对所列出的部分章节及题目解答的深入解析: ### 第2章 - 分析 #### 2.1-1 至 2.1-4 这些题目...

    算法导论答案完整珍藏版

    根据提供的信息,《算法导论答案完整珍藏版》是一份针对《算法导论》这本经典计算机科学教材的习题解答。这份文档包含了从第2章到第25章(某些章节可能遗漏)的详细答案。下面将针对文档中提到的部分章节及题目进行...

    算法导论答案(经典)

    本书中的习题涵盖了从基础到高级的各种算法概念和技术。下面将基于给出的部分章节题目来详细阐述相关的知识点。 ### 第2章:引言 #### 2.1-1 至 2.1-4 这部分内容主要涉及算法的基本概念和分类,如算法的定义、...

    算法导论答案

    本书通过大量的实例和习题来帮助读者理解并掌握各种算法的工作原理及其实现方式。 ### 二、第二章:简介 这一章节主要是对算法的基础概念进行介绍,并通过一些简单的例子来说明如何设计和分析算法。其中包括了算法...

    算法导论答案 中文版

    根据提供的信息,《算法导论答案 中文版》涵盖了多个章节的习题解答,涉及了算法设计与分析的基础概念和技术。接下来将对给定的部分内容进行详细的解析和扩展,旨在提炼出重要的知识点,并对其进行深入的解释。 ###...

    算法导论 答案

    - **2.1-1 至 2.1-4** 这些习题主要关注于理解基本的算法概念,比如递归调用的原理以及如何计算递归算法的时间复杂度。 #### 2.2-1 至 2.2-4 - **2.2-1 至 2.2-4** 这几道习题进一步探讨了递归算法的设计与分析,...

    算法导论参考答案

    根据提供的信息,《算法导论参考答案》包含了对书中的练习题解答。这是一本非常重要的教材,被广泛用于计算机科学教育领域,特别是算法设计与分析的课程中。下面将对提供的部分章节及其练习题进行详细解析,以帮助...

    麻省算法导论麻省算法导论全集(教材+讲义+答案)

    本书不仅包括了理论讲解,还提供了大量的习题及其解答,是学习算法的重要资源之一。以下是从该书中抽取的一些关键知识点进行的详细解释。 ### 第2章:排序与分析 #### 2.1-1 至 2.1-4 这些题目主要涉及基本排序...

    算法导论经典教材课后答案

    根据给定的信息,本文将对《算法导论》这本经典教材的部分章节课后习题解答进行详细解析,包括但不限于代码实现、理论分析以及解题思路等。 ### 第2章 排序与合并 #### 2.1-1 至 2.1-4 这些题目主要考察学生对合并...

    算法导论第二版(中文,高清)经典答案

    根据提供的信息,《算法导论第二版(中文...通过以上对各章节习题的解析,可以看出《算法导论》第二版这本书覆盖了算法设计与分析领域的核心知识点,不仅提供了理论上的指导,还提供了大量的实践案例供读者学习和练习。

    #-ssm-023-mysql-协同过滤算法的离散数学题推荐系统

    本文所设计和开发的是一个基于协同过滤算法的离散数学题推荐系统,本系统开发的目的是方便学生进行离散数学的考试以及离散数学习题的复习,提高老师批阅试卷的效率,更加清楚的了解学生能够的离散数学学习情况,提高...

    算法导论第三版课后答案

    这份文档包含了一些章节的课后习题解答,虽然只有一部分答案,并非全书的完整解答,但这些解答对于理解算法的基本概念和技术非常有用。下面将针对给定的部分内容中的几个典型章节进行详细的知识点解析。 ### 一、第...

    #-ssm-023-mysql-协同过滤算法的离散数学题推荐系统-.zip

    本文所设计和开发的是一个基于协同过滤算法的离散数学题推荐系统,本系统开发的目的是方便学生进行离散数学的考试以及离散数学习题的复习,提高老师批阅试卷的效率,更加清楚的了解学生能够的离散数学学习情况,提高...

    k-means算法实例

    **K-means算法详解** K-means是一种广泛应用的无监督学习方法,主要用于数据的聚类分析。它通过迭代过程将数据点分配到预定义数量(K)的类别中,目标是使得同一类别内的数据点相互接近,不同类别之间的数据点尽...

    算法竞赛入门经典各章习题答案.pdf

    根据提供的文件信息,可以看出这份文档包含了《算法竞赛入门经典》一书第一章与第二章的部分习题解答。下面将对这些习题进行详细分析,并总结出其中涉及的重要知识点。 ### 第一章 #### 习题1-1:计算三个整数的...

Global site tag (gtag.js) - Google Analytics