当前位置: 首页 > news >正文

查找

一、学习总结

1.1查找的思维导图

1.2 查找学习体会

在学习完查找后,了解了线性表的查找,树表的查找,哈希表的查找,其中哈希表的查找较为难以理解,还需多加深入学习。

2.PTA实验作业

2.1 题目1:6-2 是否二叉搜索树

2.2 设计思路(伪代码或流程图)

2.3 代码截图

 2.4 PTA提交列表说明

2.1 题目2:6-3 二叉搜索树中的最近公共祖先

2.2 设计思路(伪代码或流程图)

 

  2.3 代码截图

2.4 PTA提交列表说明

 

 

 

 刚开始条件没有考虑周全没考虑到两节点之一是答案,两节点是兄弟等条件。

2.1 题目3:7-1 QQ帐户的申请与登陆

2.2 设计思路(伪代码或流程图)

 

 2.3 代码截图

 

 2.4 PTA提交列表说明

 

 这题用到了map的用法,由于对于map用法不是很了解并且不能掌握如何应用,就参考了其他同学的做法。

3.截图本周题目集的PTA最后排名

3.1 PTA排名

 

 

 4. 阅读代码

 斐波那契查找与折半查找很相似,他是根据斐波那契序列的特点对有序表进行分割的。他要求开始表中记录的个数为某个斐波那契数小1,及n=F(k)-1;

 开始将k值与第F(k-1)位置的记录进行比较(及mid=low+F(k-1)-1),比较结果也分为三种

  1)相等,mid位置的元素即为所求

  2)>,low=mid+1,k-=2;

  说明:low=mid+1说明待查找的元素在[mid+1,high]范围内,k-=2 说明范围[mid+1,high]内的元素个数为n-(F(k-1))= Fk-1-F(k-1)=Fk-F(k-1)-1=F(k-2)-1个,所以可以递归的应用斐波那契查找。

  3)<,high=mid-1,k-=1。

  说明:low=mid+1说明待查找的元素在[low,mid-1]范围内,k-=1 说明范围[low,mid-1]内的元素个数为F(k-1)-1个,所以可以递归 的应用斐波那契查找。

  复杂度分析:最坏情况下,时间复杂度为O(log 2n),且其期望复杂度也为O(log 2n)。

  C++实现源码:

// 斐波那契查找.cpp 

#include "stdafx.h"
#include <memory>
#include  <iostream>
using namespace std;

const int max_size=20;//斐波那契数组的长度

/*构造一个斐波那契数组*/ 
void Fibonacci(int * F)
{
    F[0]=0;
    F[1]=1;
    for(int i=2;i<max_size;++i)
        F[i]=F[i-1]+F[i-2];
}

/*定义斐波那契查找法*/  
int FibonacciSearch(int *a, int n, int key)  //a为要查找的数组,n为要查找的数组长度,key为要查找的关键字
{
  int low=0;
  int high=n-1;
  
  int F[max_size];
  Fibonacci(F);//构造一个斐波那契数组F 

  int k=0;
  while(n>F[k]-1)//计算n位于斐波那契数列的位置
      ++k;

  int  * temp;//将数组a扩展到F[k]-1的长度
  temp=new int [F[k]-1];
  memcpy(temp,a,n*sizeof(int));

  for(int i=n;i<F[k]-1;++i)
     temp[i]=a[n-1];
  
  while(low<=high)
  {
    int mid=low+F[k-1]-1;
    if(key<temp[mid])
    {
      high=mid-1;
      k-=1;
    }
    else if(key>temp[mid])
    {
     low=mid+1;
     k-=2;
    }
    else
    {
       if(mid<n)
           return mid; //若相等则说明mid即为查找到的位置
       else
           return n-1; //若mid>=n则说明是扩展的数值,返回n-1
    }
  }  
  delete [] temp;
  return -1;
}

int main()
{
    int a[] = {0,16,24,35,47,59,62,73,88,99};
    int key=100;
    int index=FibonacciSearch(a,sizeof(a)/sizeof(int),key);
    cout<<key<<" is located at:"<<index;
    return 0;
}

 

 

转载于:https://www.cnblogs.com/wxyyy666/p/9095648.html

相关文章:

  • cmd 打开资源监视器
  • 20180516
  • KVM虚拟机新建
  • 异步socket处理
  • jQuery API的特点
  • 爬虫实战篇(模拟登录)---我们以模拟去哪儿网为例
  • 第 11 章 字符串和字符串函数(命令行参数)
  • vue 应用 :关于 ElementUI 的 message 组件
  • Equal Sums
  • [编程之法]2.2 寻找和为定值的两个数
  • 智能对话机器人实战开发案例剖析(1)- 体系结构和分类
  • 第十二 包
  • java8 数据结构的改变(一)
  • 非正常卸载Chrome浏览器导致无法重新安装
  • FCC(ES6写法) Symmetric Difference
  • JavaScript 如何正确处理 Unicode 编码问题!
  • Debian下无root权限使用Python访问Oracle
  • Git学习与使用心得(1)—— 初始化
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • JWT究竟是什么呢?
  • React-redux的原理以及使用
  • Vue 动态创建 component
  • webpack项目中使用grunt监听文件变动自动打包编译
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 基于web的全景—— Pannellum小试
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 深入浅出webpack学习(1)--核心概念
  • 一个项目push到多个远程Git仓库
  • 译有关态射的一切
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • ionic异常记录
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • !!Dom4j 学习笔记
  • #vue3 实现前端下载excel文件模板功能
  • (20050108)又读《平凡的世界》
  • (4)事件处理——(7)简单事件(Simple events)
  • (arch)linux 转换文件编码格式
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • (转)Oracle存储过程编写经验和优化措施
  • *p++,*(p++),*++p,(*p)++区别?
  • ./configure,make,make install的作用
  • .NET Core引入性能分析引导优化
  • .NET 跨平台图形库 SkiaSharp 基础应用
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)...
  • @html.ActionLink的几种参数格式
  • @Resource和@Autowired的区别
  • [ 渗透工具篇 ] 一篇文章让你掌握神奇的shuize -- 信息收集自动化工具
  • [1181]linux两台服务器之间传输文件和文件夹
  • [Angular 基础] - 指令(directives)
  • [BUAA软工]第一次博客作业---阅读《构建之法》