• 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程序设计与数据结构教程(第二版)》学习指导

  • 相关阅读:
    垃圾回收器总结(一)
    JVM 总结
    如何提升自己?
    堆和栈的区别
    Java 8 Streams API 详解
    说一说JVM双亲委派机制与Tomcat
    说一说switch关键字的奥秘
    深入了解 Java Resource && Spring Resource
    Spring 动态代理 之 but was actually of type 'com.sun.proxy.$Proxy14 Exception
    架构设计基础:单服务.集群.分布式,基本区别和联系
  • 原文地址:https://www.cnblogs.com/zhaoqianchen/p/10093375.html
Copyright © 2020-2023  润新知