计科1111-1114班第三周讲义、课外作业(截止日期:2014年3月27日23点-周四晚,学委飞信通知同学)

    第三周,我们主要探讨了 哈希算法 与 分治法。分治法是一个通用的算法框架,很多我们日常生活中接触到的算法都可以归类到分治法中。

本周重点

1. 哈希算法及其应用——MD5。大家应该明白哈希算法的主要三个作用,分别为:数据完整性校验、数据保密、快速查找。遇到相应的问题,能够想到使用哈希算法进行求解。

2. 分治法的步骤与要点——大问题分解成小问题、解决小问题、合并小问题的解得到原问题的解,即:分、治、合。并能够用 合并算法、大整数乘法、大矩阵相乘来理解分治法的要点。

3. 能够编写如下三个问题的程序——二分查找、归并排序、快速排序。

作业要求

1. 请各班学委飞信通知同学完成作业。 

2. 作业计入平时成绩,计分依据为大家的完成程度——态度(做 / 未做)。老师会根据大家作业的质量选择若干学生进行评论,以及提供个性化教学的依据。请大家依据自身能力,尽可能提供高水平的作业,为提高自身能力全力以赴。
3. 本次作业,老师将会抽查本班 学号位于最后5个的同学,请大家相互转告。从第四周开始,将会引入“同伴作业互评”机制,请大家做好准备。即:每个同学阅读本班其他5个同学的作业,并给出并汇总评价,进而达到相互学习的效果。

作业内容

    请大家至少完成其中的一题,鼓励完成两道题。把程序源码 与 运行结果截图 发博文到CSDN博客中。
1. 排序。对文件   largeW.txt(下载链接)中的数据,编程实现冒泡排序(方法名:bubbleSort) 与 归并排序(mergeSort),把排序后的结果分别保存到largeW_bubble.txt 和 largeW_merge.txt 中,把两种排序结果的运行时间输出到屏幕中(发博文时把运行时间的截图作为运行结果提交)。
     博文标题第三周作业——冒泡排序和归并排序
2. 查找。Bentley在他的著作《Writing Correct Programs》中写道,90%的计算机专家不能在2小时内写出完全正确的二分搜索算法。
    二分查找方法原型:int BSearch(int array[], int low, int high, int target ), array——含有若干整数的数组,low 与 high——查找的起始、结束下标,target——待查找的元素。
    顺序查找:int SSearch(int array[],  int low, int high, int target  ),其中S——Sequence(顺序)
    数组array中数据来自于第1题中的排序结果文件 largeW_bubble.txt,待查找数据来自于文件 tinyW.txt( 下载链接)。请在控制台输出不在 largeW_bubble.txt的数据。
   博文标题第三周作业——顺序查找和二分查找
    测试数据来自于《算法》 网站,敬表谢意。

补充内容

1.  怎样花两年时间去面试一个人,对大家定位自己有一定的参考价值。
2.  怎样花两月时间去应聘互联网公司,找工作,现在开始准备,可以做什么。
3. 前程无忧网站,搜索“算法”及“算法工程师”的岗位要求有哪些?
命令行参数、文本文件读写示例代码(Java)
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.Scanner;


public class ReadData {
	public static void main(String[] args) throws FileNotFoundException{
		//从命令行读取两个输入参数,分别为待处理的文本文件,以及保存处理结果的文本文件
		if(args.length<2){
			System.out.println("无输入数据!");
			System.out.println("程序使用方法(示例):ReadData tinyW.txt tinyW_bubble.txt");
			return;
		}
		
		//从文本文件中读取,并对数据进行处理后(×2),保存到相应的数据文件中
		String fileInput = args[0];
		Scanner sc = new Scanner(new File(fileInput));
		
		String fileOutput = args[1];
		PrintWriter pw = new PrintWriter(new File(fileOutput));
		
		int data = 0;
		int num = 0;
		while(sc.hasNextInt()){
			data = sc.nextInt();
			num = num+1;
			
			//System.out.println(data);
			pw.printf("%d: %d\n", num,2*data);
		}
		pw.close();
		sc.close();
		
		System.out.println("运行结束,一共有"+num+"个数据。");
		
	}
}




你可能感兴趣的:(二分查找,MD5,算法,归并排序,合并排序)