【时空权衡】

news2024/11/24 17:46:02

目录

  • 知识框架
  • No.0 时空权衡
    • 一、基本思想
  • No.1 计数排序
    • 二、分布计数
  • No.2 散列法

知识框架

No.0 时空权衡

一、基本思想

其实时空权衡:是指在算法的设计中,对算法的时间和空间作出权衡。

本文主要是是用空间来换时间的。(应该是这样吧)

  1. 对问题的部分或全部输入预处理,然后对获得的额外信息进行存储,以加速后面问题的求解——输入增强
  2. 使用额外空间来实现更快和(或)更方便的数据存取——预构造。(感觉像是存放脑信息)

以常见的以空间换取时间的方法有:主要是两个方法:然后代表。

  1. 输入增强
    1. 计数排序
  2. 预构造
    1. 散列法

那面是计数排序和散列法的详细介绍:

No.1 计数排序

针对待排序列表中的每个元素,算出列表中小于该元素的元素个数,并把结果记录在一张表中。

  1. 这个“个数”指出了元素在有序列表中的位置
  2. 可以用这个信息对列表的元素排序,这个算法称为“比较计数”

步骤:思路:针对待排序列表中的每一个元素,算出列表中小于该元素的元素个数,把结果记录在一张表中。

在这里插入图片描述

代码如下:

{	//用比较计数法对数组排序	
	for(i=0;i < n;i++)    Count[i]=0;
	for(i=0;i < n-1;i++) 
        for(j=i+1;j < n; j++)
			if(A[i]<A[j]) Count[j]++;
			else  Count[i]++;
   for(i=0;i < n;i++) S[Count[i]] = A[i];
	return  S;
}	

复杂度效率问题:

  1. 该算法执行的键值比较次数和选择排序一样多,
  2. 并且还占用了线性数量的额外空间,所以几乎不能来做实际的应用
  3. 但在一种情况下还是卓有成效的——待排序的元素值来自一个已知的小集合
    1.

二、分布计数

待排序的数组元素有一些其他信息和键值相关(不能改写列表的元素)

因为这种频率的累积和在统计中称为分布,这个方法也称为“分布计数”。

  1. 将A数组元素复制到一个新数组S[0…n-1]中
  2. A中元素的值如果等于最小的值L,就被复制到S的前F[0]个元素中,即位置0到F[0]-1中
  3. 值等于L+1的元素被复制到位置F[0]至(F[0]+F[1])-1,以此类推。

步骤:

  1. 比如数据是: 13 11 12 13 12 12

  2. 首先需要整理表格内容:

    1. 数组值111213
      频率132
      分布值146
  3. 得到这样的内容

代码:

{	//分布计数法对有限范围整数的数组排序
	for(j=0;j <= u-L ;++i)  D[j]=0;//初始化频率数组
	for(i=0;i < n; ++i)      D[A[i]-L]++;//计算频率值
	for(j=1;j <= u-L ; ++j)  D[j]+=D[j-1];//重用分布
   for(i=n-1;i>=0;--i){
		j = A[i] – L ;
		S[D[j]-1] = A[i];
		D[j]--;
	}   
	return  S;
}	

No.2 散列法

  1. 一种非常高效的实现字典的方法
    1. 字典是一种抽象数据类型,即一个在其元素上定义了查找、插入和删除操作的元素集合
    2. 集合的元素可以是容易类型的,一般为记录
  2. 散列法的基本思想是:把键分布在一个称为散列表的一维数组H[0…m-1]中。
    1. 可以通过对每个键计算某些被称为“散列函数”的预定义函数h的值,来完成这种发布
    2. 该函数为每个键指定一个称为“散列地址”的位于0到m-1之间的整数

. 集合的元素可以是容易类型的,一般为记录
2. 散列法的基本思想是:把键分布在一个称为散列表的一维数组H[0…m-1]中。

  1. 可以通过对每个键计算某些被称为“散列函数”的预定义函数h的值,来完成这种发布
  2. 该函数为每个键指定一个称为“散列地址”的位于0到m-1之间的整数

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

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

相关文章

同样是做大模型的科技公司,为啥差距这么大呢?

2022年OpenAI亏了30多亿元&#xff0c; 站在风口上&#xff0c;谁的压力会小呢&#xff1f; 【科技明说 &#xff5c; 每日看点】站在风口上。OpenAI公司在2022年亏得十分“灿烂”&#xff0c;和往年同比几乎翻了一倍&#xff0c;亏损约达5.4亿美元&#xff0c;折合人民币约31…

微服架构基础设施环境平台搭建 -(五)Docker常用命令

微服架构基础设施环境平台搭建 -&#xff08;五&#xff09;Docker常用命令 本文主要列出了Docker常用的命令 微服架构基础设施环境平台搭建 系列文章 微服架构基础设施环境平台搭建 -&#xff08;一&#xff09;基础环境准备 微服架构基础设施环境平台搭建 -&#xff08;二&am…

富文本输出如何避免XSS

有时网站为了美观&#xff0c;会允许用户输入一些富文本&#xff0c;这样在显示的时候&#xff0c;就可以显示的更友好。虽然在输入富文本的时候在客户端进行了控制&#xff0c;但是&#xff0c;仍然难易避免一些攻击者通过抓包篡改数据绕过客户端的控制。因此&#xff0c;在服…

【飞行棋】多人游戏-微信小程序开发流程详解

可曾记得小时候玩过的飞行棋游戏&#xff0c;是90后的都有玩过吧&#xff0c;现在重温一下&#xff0c;这是一个可以二到四个人参与的游戏&#xff0c;通过投骰子走棋&#xff0c;一开始靠运气&#xff0c;后面还靠自己选择&#xff0c;谁抢占先机才能赢&#xff0c;还可以和小…

Redis 三大特殊数据类型常见命令

Geospatial 朋友的定位&#xff0c;附近的人&#xff0c;打车距离计算 底层是 Zset&#xff0c;即可以使用Zset的命令操作Geospatial Redis3.2 开始支持的 1.添加地理位置 两极无法添加经度&#xff1a;-180 ~ 180&#xff08;度&#xff09;纬度&#xff1a;-85.05112878 ~ 8…

一、RestTemplate的使用

目录 1、新建项目springcloud&#xff08;File--->New--->Project&#xff09; 使用maven quickstart快速新建Maven项目 输入项目名称和Maven信息 确认Maven目录、配置文件、本地仓库&#xff0c;Finish即可 2、创建聚合项目springcloud-member、springcloud-order(项…

【人力资源管理】第2集 免费开源ERP: Odoo 16 Recruitment招聘管理 构建一体化企业人力资源管理

文章目录 前言一、概览二、主要功能1.组织空缺职位和职位申请2.追踪工作机会&#xff08;查看哪个渠道收到的申请最多&#xff09;3.定制您的招聘流程4.集成文档&#xff08;定义您自己的文件管理流程&#xff09;5.与Odoo应用程序完全集成 总结 前言 轻松处理您的招聘流程。 …

C++ 中到底是应该include .h文件还是应该include .cpp文件

在阅读一个较大的解决方案中&#xff0c;对于其他文件夹下的.h和.cpp文件&#xff0c;有时候#include“XXX.h”文件&#xff0c;有时候是#include“XXX.cpp”文件&#xff0c;而且二者还不能更换。下面就好好分析一下他们二者的区别。 测试 测试&#xff1a;XXX.h和XXX.cpp…

连接器:一种可靠耐用、节约成本的同为科技(TOWE)工业连接器

随着我国经济建设水平的飞速发展&#xff0c;工业连接器被广泛应用于工业、化工、机场、船舶、码头、建筑、铁路、医疗、会展、商业演出等领域。工业连接器的作用是用于连接一个电路导体与另一个电路导体、或一个传输元件与另一个传输元件的装置&#xff0c;并且为两个电路子系…

知识变现海哥:六种常见的知识变现渠道

什么是知识变现&#xff1f;就是用你所会的知识技能&#xff0c;在网上进行展示&#xff0c;吸引人们为其付钱。互联网发展到今天&#xff0c;我们可以看到它各方面已经逐渐完善了&#xff0c;但曾经在互联网上的不花钱的知识&#xff0c;在今天却要为其花费金钱。在此基础上&a…

CCSA TC1演讲分享 | 全域智能,构建平台化生态

日前&#xff0c;中国通信标准化协会&#xff08;CCSA&#xff09;成功召开互联网与应用技术工作委员会&#xff08;TC1&#xff09;第四十次全会&#xff0c;全会期间&#xff0c;TC1 WG7 IT内控与审计技术标准工作组举办了第3次工作组会议。此次会议重点讨论了各项标准文稿及…

微服架构基础设施环境平台搭建 -(四)在Kubernetes集群基础上搭建Kubesphere平台

微服架构基础设施环境平台搭建 -&#xff08;四&#xff09;在Kubernetes集群基础上搭建Kubesphere平台 通过采用微服相关架构构建一套以KubernetesDocker为自动化运维基础平台&#xff0c;以微服务为服务中心&#xff0c;在此基础之上构建业务中台&#xff0c;并通过Jekins自动…

Docker安装及容器安装

Docker安装及容器安装 一、Docker简单介绍 1、Docker是什么 Docker是基于Go语言实现的云开源项目。 Docker是一个开源的应用容器引擎&#xff0c;是容器技术的一种&#xff0c;采用Go编程语言编写。虽然 Docker把容器技术推向了巅峰&#xff0c;但其实&#xff0c;还有其他容…

蓝牙智能升降桌解决方案介绍

传统桌子在办公和学习中具有很大的普及度&#xff0c;但是长时间久坐却会对人体造成可怕的危害。由于不合理的坐姿、长时间久坐等习惯&#xff0c;不仅影响血液循环,让人体感到不适,还会出现视力、颈椎、腰椎、心脏等一系列健康问题。此外&#xff0c;传统桌子通常是固定高度且…

【C++进阶2--多态】面向对象三大特性之一,多种形态像魔法?

今天&#xff0c;带来C多态的讲解。 多态和继承并用&#xff0c;能产生“魔法般的效果”。 *文中不足错漏之处望请斧正&#xff01; 见见多态 是什么 使得父类指针或引用有多种形态。 怎么使它有多种形态呢&#xff1f;咱们先见见猪跑。 见见猪跑 class Base { public:v…

第05章_排序与分页

第05章_排序与分页 1. 排序数据 1.1 排序规则 使用 ORDER BY 子句排序 ASC&#xff08;ascend&#xff09;: 升序DESC&#xff08;descend&#xff09;:降序 ORDER BY 子句在SELECT语句的结尾。 1.2 单列排序 SELECT last_name, job_id, department_id, hire_date FROM …

Java基础学习(15)

Java基础学习 一、IO流进阶1.1 缓冲流1.1.1字节缓冲流1.1.2 字符缓冲流 1.2 转换流1.3 序列流1.4 反序列化流 /对象操作输入流1.4.1 序列化流/反序列化流的细节汇总 1.5 打印流1.5.1 字节打印流1.5.2 字符打印流 1.6 解压流、压缩流1.7 Commons-io1.8 hutool工具包 一、IO流进阶…

【C#】RemoveAt索引越界问题

系列文章 【C#】单号生成器&#xff08;编号规则、固定字符、流水号、产生业务单号&#xff09; 本文链接&#xff1a;https://blog.csdn.net/youcheng_ge/article/details/129129787 【C#】日期范围生成器&#xff08;开始日期、结束日期&#xff09; 本文链接&#xff1a;h…

使用FFMPEG和SDL2实现音视频同步的简易视频播放器

程序框架 由于之前都是针对FFMPEG某一个功能做的测试和学习。这里我简单做了一个视频播放器&#xff0c;并简单做了音视频同步。在此记录大致过程。 大致框架如下&#xff1a; 主线程 1.加载视频文件&#xff0c;查找音视频流信息 2.初始化音视频解码器 3.初始化SDL并设置…

题解校验码—CRC循环校验码与海明校验码

码距 一个编码系统的码距是任意两个码字的最小距离。 例如个编码系统采用三位长度的二进制编码&#xff0c;若该系统有四种编码分别为&#xff1a;000&#xff0c;011&#xff0c;100&#xff0c;111&#xff0c;此编码系统中000与111的码距为3&#xff1b;011与000的码距为2…