数据结构(四)

数据结构(四)

  • 算法
    • 算法的特征
    • 算法和程序的区别
    • 怎么样评判一个算法的好坏
  • 常见的查找算法
    • 线性
    • 树状
    • 哈希查找
      • 构建哈希函数的方法
        • 质数求余法
        • 解决冲突

算法

一堆指令的有序集合

算法的特征

唯一性:每一句话只有一种解释
有穷性:算法能描述完
可行性:可以执行的
输入:
一堆指令的有序集合
输出:

算法和程序的区别

程序是用语言实现算法的代码
算法是静态的,程序是动态的
算法是有穷的,程序是无穷的

怎么样评判一个算法的好坏

1.算法是否容易被实现,容易被人阅读、理解、维护
2.算法的执行的代价
空间复杂度:算法在执行的时候,需要内存提供给我们多少空间才能保证算法正常工作
1.字节对齐
2.位域
3.减少额外的空间
4.用完即释放
时间复杂度:算法在执行的时候,需要花费的时间
研究时间复杂度,研究的是我们的量级 O(n)
优化时间复杂度:
1.减少循环的使用
2.减少无用的代码存在

常见的查找算法

线性

顺序查找:从前往后按顺序查找。
二分查找:对于有序的顺序表来说,可以使用二分查找。
分块查找:块间有序,块内无序。

在这里插入图片描述

#include <stdio.h>
//失败,返回-1,成功返回下标
int BinLookUp(int data[], int low, int high, int item)
{int mid = 0;while(low <= high){mid = (low + high) / 2;if(data[mid] == item){return mid;}if(data[mid] > item){//再左边找,改上界high = mid-1;}if(data[mid] < item){low = mid+1;}}return -1;
}
int main(int argc, const char *argv[])
{
int opt = 0;
int ret = 0;
int arr[13] = {11, 13, 23, 25, 28, 29, 33, 35, 37, 39, 47, 49, 55};
while(1)
{printf("请输入要朝找的值:");scanf("%d", &opt);if(-1 == opt) break;//找ret = BinLookUp(arr, 0, 12, opt);if(-1 == ret){puts("没找到!");}else{printf("arr[%d] = %d\n", ret, opt);}
}
return 0;
}

树状

排序二叉树:排序二叉树类似于链表的二分查找

哈希查找

在这里插入图片描述

构建哈希函数的方法

直接地址法
在这里插入图片描述
平方取中法

质数求余法

在这里插入图片描述

冲突:多个记录的关键字指向同一个空间

解决冲突

开放地址法
在这里插入图片描述
链地址法
在这里插入图片描述
采用质数求余法设立哈希函数,链地址法解决冲突

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//定义表结点结构体
typedef struct linknode
{/* member */int Data;struct linknode *Next;
}HNode;
//定义哈希函数
int HashFunc(int key)
{return key%13;
}
//定义哈系表的插入函数
//形参:插入的表,插入的值
void InsertHash(HNode *arr[], int item)
{//将item插入到arr里面int key = HashFunc(item);//分配结点并赋值HNode *pNew = (HNode *)malloc(sizeof(HNode));if(!pNew) return ;memset(pNew, 0, sizeof(HNode));pNew->Data = item;//插入//头插//1、保护结点pNew->Next = arr[key];//2、插入arr[key] = pNew;return ;
}
//在哈系表中查询元素
//参数:被查询的表、被查询的元素
//返回值:找到返回下标,没找到返回-1
int SearchHash(HNode *arr[], int item)
{//经过哈希函数计算得到位置int key = HashFunc(item);//在 arr[key] 所指向的表中查询itemHNode *pTmp = arr[key];while(pTmp!=NULL){if(pTmp->Data == item) return key;//ptmp往后移动pTmp = pTmp->Next;}return -1;
}
int main(int argc, const char *argv[])
{int opt = 0, ret = 0;//定义存储被放入到哈西的值int data[14] = {82, 28, 99, 56, 37, 22, 19, 31, 67, 34, 66, 38, 15, 93};//定义哈希空间,结构体指针数组HNode *Hash[15] = {NULL};//将元素插入到Hash表中 data[i] -> Hashfor(int i=0; i<14; i++){InsertHash(Hash, data[i]);}while(1){puts("请输入要查询的元素:");scanf("%d", &opt);if(-1 == opt) break;//在Hash里面查询 optret = SearchHash(Hash, opt);if(-1 == ret) puts("没找到!");else printf("找到了,Hash[%d]里面有!", ret);}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/16260.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

企业活动想找媒体报道宣传怎样联系媒体?

在那遥远的公关江湖里,有一个传说,说的是一位勇士,手持鼠标和键盘,踏上了寻找媒体圣杯的征途。这位勇士,就是我们亲爱的市场部门小李,他的任务是为公司即将举行的一场盛大的企业活动找到媒体的聚光灯。 小李的故事,开始于一张空白的Excel表格,上面列着各大媒体的名称,旁边是一片…

Element-UI10分钟快速入门

Element-UI 是一个基于 Vue.js 的桌面端组件库&#xff0c;它为开发者提供了一套完整、易用、美观的组件解决方案&#xff0c;极大地提升了前端开发的效率和质量。以下是一个 Element-UI 的快速入门指南&#xff1a; 1. 安装 Element-UI 首先&#xff0c;确保你已经创建了一个…

如何让大模型更聪明

目录 如何让大模型更聪明&#xff1f; &#x1f349;算法创新 &#x1f348;新型优化算法 &#x1f34d;案例分析&#xff1a;LAMB优化器 &#x1f348;对比学习 &#x1f34d;应用案例&#xff1a;SimCLR &#x1f348;强化学习 &#x1f34d;案例分析&#xff1a;Alph…

【30天精通Prometheus:一站式监控实战指南】第4天:node_exporter从入门到实战:安装、配置详解与生产环境搭建指南,超详细

亲爱的读者们&#x1f44b;   欢迎加入【30天精通Prometheus】专栏&#xff01;&#x1f4da; 在这里&#xff0c;我们将探索Prometheus的强大功能&#xff0c;并将其应用于实际监控中。这个专栏都将为你提供宝贵的实战经验。&#x1f680;   Prometheus是云原生和DevOps的…

蓝桥杯-班级活动

题目描述 小明的老师准备组织一次班级活动。班上一共有 ( n ) 名&#xff08;( n ) 为偶数&#xff09;同学&#xff0c;老师想把所有的同学进行分组&#xff0c;每两名同学一组。为了公平&#xff0c;老师给每名同学随机分配了一个 ( n ) 以内的正整数作为 id&#xff0c;第 …

C++标准库中string的底层实现方式

对于C中 std::string 的一些基本功能和用法&#xff0c;我们应该都很熟悉。但它底层到底是如何实现的呢? 其实在 std::string 的历史中&#xff0c;出现过几种不同的方式。下面我们来一一揭晓。 我们可以从一个简单的问题来探索&#xff0c;一个 std::string 对象占据的内存空…

RK3568笔记二十五:RetinaFace人脸检测训练部署

若该文为原创文章&#xff0c;转载请注明原文出处。 一、介绍 Retinaface是来自insightFace的又一力作&#xff0c;基于one-stage的人脸检测网络。RetinaFace是在RetinaNet基础上引申出来的人脸检测框架&#xff0c;所以大致结构和RetinaNet非常像。 官方提供两种主干特征提取网…

Python 中别再用 ‘+‘ 拼接字符串了!

当我开始学习 Python 时&#xff0c;使用加号来连接字符串非常直观和容易&#xff0c;就像许多其他编程语言&#xff08;比如Java&#xff09;一样。 然而&#xff0c;很快我意识到许多开发者似乎更喜欢使用.join()方法而不是。 在本文中&#xff0c;我将介绍这两种方法之间的…

关于数据库和数据表的基础SQL

目录 一. 数据库的基础SQL 1. 创建数据库 2. 查看当前有哪些数据库 3. 选中数据库 4. 删除数据库 5. 小结 二. 数据表的基础SQL 1. 创建数据表 2. 查看当前数据库中有哪些表 3. 查看指定表的详细情况(查看表的结构) 4. 删除表 5. 小结 一. 数据库的基础SQL 1. 创建…

Qt中的网络编程(Tcp和Udp)详解 及 实现

Qt中的网络编程&#xff08;Tcp和Udp&#xff09;详解 及 实现 代码 卡的格式不对&#xff0c;看我的代码标题去 拷贝 &#xff0c;共四个文件。 1、安装qty软件&#xff0c;官网直接下载 在线安装。 怕以后麻烦直接安装选择一个完整版本QT勾选。 在线下载i30多g应该&#xff…

Stream浅解析

Stream流浅解析 package com.w.earn.share;import java.util.*; import java.util.stream.Collectors;/*** Author yang kai bo* Date 2024/5/26 19:43* Description* 概念&#xff1a;stream流是一种对 Java 集合运算和表达的高阶抽象。* 优点&#xff1a;写法简单&#xf…

python内置函数map/filter/reduce详解

在Python中&#xff0c;map(), filter(), 和 reduce() 是内置的高级函数(实际是class)&#xff0c;用于处理可迭代对象&#xff08;如列表、元组等&#xff09;的元素。这些函数通常与lambda函数一起使用&#xff0c;以简洁地表达常见的操作。下面我将分别解释这三个函数。 1. …

mac安装git心得

我是买了一个新的mac但是当我安装git的时候遇见了很多问题 安装不上各种报错 首先我们直接打开git网址&#xff0c;然后打开mac的命令提示&#xff0c;里边输入git大概1g左右&#xff0c;下载完了直接好了

持续总结中!2024年面试必问 20 道 Redis面试题(七)

上一篇地址&#xff1a;持续总结中&#xff01;2024年面试必问 20 道 Redis面试题&#xff08;六&#xff09;-CSDN博客 十三、Redis集群的主从复制模型是怎样的&#xff1f; Redis集群的主从复制模型是一种高可用性架构&#xff0c;它允许数据在多个节点之间进行复制&#x…

pod 之资源限制 与健康检查

目录 一 资源限制 1&#xff0c;资源限制是什么 2&#xff0c;资源限制的 标准 3&#xff0c; k8s 创pod 显示 OOMKILLED 是 requests小了 还是limits小了 4&#xff0c; Pod 和 容器 的资源请求和限制 &#xff08;yaml&#xff09; 5&#xff0c; CPU 资源单位 6&…

xgboost项目实战-保险赔偿额预测与信用卡评分预测001

目录 算法代码 原理 算法流程 xgb.train中的参数介绍 params min_child_weight gamma 技巧 算法代码 代码获取方式&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1QV7nMC5ds5wSh-M9kuiwew?pwdx48l 提取码&#xff1a;x48l 特征直方图统计&#xff1a; fig, …

这次泰迪杯应该不能答辩

检查了里面还有没修改完的&#xff0c;只能但愿没看到 魔改了又去投水赛&#xff0c;理论加应用

各大模型厂商API使用:百度、阿里、豆包、kimi、deepseek

百度ERNIE(支持requests接口) ERNIE Speed、ERNIE Lite免费 免费测试下来模型ernie_speed输出吞吐量计算20-30来个,“{length/cost} tokens/s” 输出总长度/耗时 https://qianfan.cloud.baidu.com/ 文档: https://cloud.baidu.com/doc/WENXINWORKSHOP/s/dltgsna1o a…

JavaScript-函数的使用

函数的语法 函数就是包裹在花括号里面的代码&#xff0c;当用户需要多次使用 某个代码时&#xff0c;可以用函数包裹住这个代码&#xff0c;然后调用函数即可 比如js自己封装好的函数doucument.write(),console.log()等等 function functionname() {/*代码块*/ } 函数的组成部…

Flink Kylinv10 java8 Flink镜像制作

1&#xff09;基于麒麟v10版本制作JDK8基础镜像在这里插入代码片 FROM kylinv10/kylin:b09 RUN set -ex; \dnf install -y wget java-1.8.0-openjdk java-1.8.0-openjdk-devel tar; \yum clean all RUN java -version CMD ["echo", "kylinv10 JDK 8 image is …