• 20172316 2017-2018-2 《程序设计与数据结构》实验三报告


    课程:《程序设计与数据结构》
    班级: 1723
    姓名: 赵乾宸
    学号:20172316
    实验教师:王志强
    必修/选修:必修


    1.实验内容

    1

    定义一个Searching和Sorting类,并在类中实现linearSearch(教材P162 ),SelectionSort方法(P169),最后完成测试。
    要求不少于10个测试用例,提交测试用例设计情况(正常,异常,边界,正序,逆序),用例数据中要包含自己学号的后四位
    提交运行结果图。

    2

    重构你的代码
    把Sorting.java Searching.java放入 cn.edu.besti.cs1723.(姓名首字母+四位学号) 包中(例如:cn.edu.besti.cs1723.G2301)
    把测试代码放test包中
    重新编译,运行代码,提交编译,运行的截图(IDEA,命令行两种)

    3

    参考http://www.cnblogs.com/maybe2030/p/4715035.html 在Searching中补充查找算法并测试
    提交运行结果截图

    4

    补充实现课上讲过的排序方法:希尔排序,堆排序,二叉树排序等(至少3个)
    测试实现的算法(正常,异常,边界)
    提交运行结果截图


    2. 实验过程及结果

    (1) 在实验三(1)中,分别实现线性查找和选择排序,皆是书上代码,曾经实现过,再加深理解之后复制了过来。测试时采用Junit测试,在数组{2, 0, 1, 7, 2, 3, 1, 6}中,分别查找位于最后的“6”,重复的“2”,中间的“7”,索引0、索引7处的数字,以及所找数字不存在的情况。结果正常。

    然后对选择排序进行测试,分别使用数字、英文字母、特殊字符、中文进行了测试,结果正常。

    (2) 对原有代码重构了之后,在IDEA和虚拟机上分别对代码进行测试,测试通过。

    (3) 在原有代码基础上增加新的查找方法。
    我增添了三个新的查找方法:二分查找、插值查找、以及斐波那契(Fibonacci)查找。由于C++和Java语言非常相似,转换起来并不困难。

    (4) 补充排序方法。我补充了四个排序方法:冒泡排序、归并排序、希尔排序以及插入排序


    3. 实验过程中遇到的问题和解决过程

    (1) 从基本原理上来看,斐波那契查找和二分查找几乎没有什么不同,区别仅仅在于分割的位置不同,为什么会去选择斐波那契查找?
    两者貌似没有什么太大的不同,但实验三(3)中提供的博客中提到,

    (斐波那契查找在)最坏情况下,时间复杂度为O(log2n),且其期望复杂度也为O(log2n)

    而二分查找在

    最坏情况下,关键词比较次数为log2(n+1),且期望时间复杂度为O(log2n)

    其次,斐波那契查找在进行查找之前,已经建立好了一个斐波那契数列,以便于查找的进行,每一次分割时都直接取数列中确定的索引值,相对于二分查找节省了一次除法运算。

    (可以看到,过程中不需要除以二或其他运算,直接从斐波那契数列中拿到下一个分割点)


    参考资料

    《Java程序设计与数据结构教程(第二版)》
    《Java程序设计与数据结构教程(第二版)》学习指导

  • 相关阅读:
    BFPRT算法O(n)解决第k小的数
    Manacher练习
    KMP全家桶练习
    Codeforces Round #552 (Div. 3)
    Manacher's Algorithm
    poj 2559 (单调栈)
    单调队列
    单调栈
    multiset用法
    poj3660 Cow Contest(Floyd-Warshall方法求有向图的传递闭包)
  • 原文地址:https://www.cnblogs.com/zhaoqianchen/p/10093375.html
Copyright © 2020-2023  润新知