首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >比较不需要时间时进行排序

比较不需要时间时进行排序
EN

Stack Overflow用户
提问于 2017-10-21 16:51:27
回答 2查看 237关注 0票数 1

我想在这个成本模型下对数组A进行排序:

  1. 对于任何值x,形式Ai =x的赋值成本为1。此外,Ai = Aj的成本为1。
  2. 其他操作(如for x= A的比较和赋值)的成本为0。

问题:

  1. 给出排序数组A所需的最坏情况时间的下限。你的答案应该是n的精确表达式,而不是使用渐近表示法。
  2. 描述一个使用O(n)空间的排序算法。运行时应该与1中给出的下限完全匹配(准确,而不是渐近)。
  3. 描述一种对此成本模型最优的就地排序算法。运行时应该与1中给出的边界完全匹配(准确,而不是渐近)。

我的尝试:

  1. 这是因为,在最坏的情况下,数组中的n个元素位于它们不应该存在的索引中。因此,需要n个赋值才能按排序顺序得到数组。
  2. 我在psudo代码中的算法: def weird_sort(A):B=数组相同大小的an = bools数组(默认为True)相同大小的A对于i在范围内(0,A.size):min =c中的第一个索引,对于j在范围内为真(0,A.size):if (Aj < Amin)和(Cj):min =j Bi = Amin Ci = False A=B

我相信这完全需要n个时间来运行,因为我们将任何东西分配到A中的唯一时间是在最后一行,其中我们将B的内容复制到A中。

  1. 不知道从哪里开始。在我看来,为了保持一切就绪,我们必须在数组A中交换东西,但我不知道如何使用n/2交换来排序数组。有人能让我朝着正确的方向前进吗?你也能仔细检查一下我的答案吗?
EN

回答 2

Stack Overflow用户

发布于 2017-10-21 17:59:39

我考虑内部允许O(1)附加变量,因为否则我认为这是不可能的

首先让我们解决子问题:给定i,找到i-th位置上的数字。使用蛮力是可能的,因为比较是免费的。

现在复制第一个元素(到附加变量),找到最小的元素并把它放在位置1。现在这个元素位于i位置。让我们找到应该在位置i上的元素,然后在这里复制它(假设它在j位置上),现在查找属于位置j的元素,等等。最后我们找到了我们最初复制的元素,并把它放回去。因此,我们使用k分配(在循环结构中)将k变量设置到它们的位置。现在,对所有其他元素也这样做。您不能记住每个变量是否放在它的位置上,但是您可以检查它是否是免费的。

如果A中有相同的元素,则应该更仔细地进行,但仍应起作用

票数 0
EN

Stack Overflow用户

发布于 2017-10-23 00:21:44

虽然在讨论高效排序算法时,我们通常倾向于讨论快速排序,但这类算法是对比较次数进行优化的。

然而,其他算法则尝试优化内存访问的数量(如您的情况)。其中一些算法被称为缓存遗忘算法(不要对特定的内存层次结构参数进行假设)和缓存感知算法(它们是针对特定的内存层次结构进行调优的)。您可以找到这种类型的多个算法,因此您可能会对它们感兴趣。

例如,的PhD论文讨论了缓存遗忘算法,并提出了分布排序,它将数据部分地按子组排序,这些子组可能适合内存层次结构的较低分区。

分发排序使用O(n ln(n))工作,并导致O(1+ (L/n)*(1+logz(n))缓存丢失对n个元素进行排序。

其中L是缓存库的大小,z是缓存本身的大小。性能模型仅假设只有一个缓存级别,尽管由于不经意属性,它适应了所有缓存级别。

基本概念是,分配成本取决于元素放置在内存层次结构中的位置。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46869506

复制
相关文章
Spring框架中不同类型的事件
Spring框架是一个功能强大的Java开发框架,它提供了许多便利的功能和组件来简化企业级Java开发。其中,事件驱动是Spring框架的一个重要特性,它允许开发者在应用程序中实现松耦合的组件间通信。本文将介绍Spring框架中不同类型的事件以及如何使用它们。
疯狂的KK
2023/07/24
3220
Spring框架中不同类型的事件
实现点击图片不同区域响应不同的事件
开始考虑以纵轴为0度, 计算点击坐标跟中心点连线并计算跟纵轴的角度来判断, 不过代码写好后发现在不同的设备上有误差
周希
2019/10/15
1.4K0
MySQL中相关数据文件说明
无论何种存储引擎(InnoDB、MyISAM、MEMORY...),只要创建了表结构就会在磁盘上创建一个frm文件,文件名为:表名.frm
俗可耐
2020/06/19
1.5K0
如果正确读取SQL Server中的扩展事件?
微软官方或者一些SQL Server论坛提供了使用SQL XML解析扩展事件的脚本,如代码清单1所示。
全栈程序员站长
2022/07/11
3.3K0
java中==、equals的不同AND在js中==、===的不同
       1.==操作符:首先,对于非基本数据类型的对象比较,相同内存中存储的变量的值是否相等,注意是相同内存地址的才可,并且数值相同(当然地址相同,值也一定相同)才会返回true.     但是,对于基本数据类型的比较(比如:int flot double等),值相同,"=="比较便会返回true.(这是编译的规则,当进行基本数据类型的比较时,会编译生成if_icmpne指令不会进行比较地址。而进行对象比较时,会生成if_icmpne指令,会比较地址。生成的指令都是不同的)。
洋仔聊编程
2019/01/15
4K0
如果正确读取SQL Server中的扩展事件?
    SQL Server中使用扩展事件捕捉所需的信息后,可以选择存放的位置。比如说内存或文件中,但无论存在哪里,其本质都是一个大XML。因此在SQL Server中读取该XML就是解析扩展事件结果的方式。     微软官方或者一些SQL Server论坛提供了使用SQL XML解析扩展事件的脚本,如代码清单1所示。 1: WITH events_cte 2: AS ( SELECT DATEADD(mi, 3:
用户1217611
2018/01/30
1.4K0
不同物种的的10x单细胞转录组参考数据文件构建
10x单细胞转录组数据分析所需要的参考数据文件主要是基因组的fasta文件和基因注释gtf文件,其官网有详细的例子:https://support.10xgenomics.com/single-cell-gene-expression/software/pipelines/latest/using/tutorial_mr
生信技能树
2022/03/03
1.2K0
不同物种的的10x单细胞转录组参考数据文件构建
[打造自己的监控系统之执行Oracle命令]获取Oracle数据文件创建的时间
上节讲到如何建立一个Oracle命令的界面,这节讲述如何利用Django获取Oracle数据文件的建立时间并显示出来
bsbforever
2020/08/19
1.1K0
Spring框架中有哪些不同类型的事件
如果一个bean实现了ApplicationListener接口,当一个ApplicationEvent 被发布以后,bean会自动被通知。 
红目香薰
2022/11/29
3500
MFC树点击事件中CTreeCtrl::HitTest用法以及uFlag参数的不同值的含义
CTreeCtrl::HitTest的语法结构: ​​​​​​​ HTREEITEM HitTest( CPoint pt, UINT* pFlags = NULL ) const; HTREEITEM HitTest( TVHITTESTINFO* pHitTestInfo ) const;  参数的取值及含义: Value 含义 TVHT_ABOVE 在客户端区域。 TVHT_BELOW 在工作区中。 TVHT_NOWHERE 在工作区,但是,在最后一项下。 TVHT
acoolgiser
2019/01/17
2K0
selec/poll中的读写事件和epoll中的读写事件
在Linux网络编程中,常常使用select和poll来做事件触发,监听socket的读写状态,然后进行读写操作。现在新的linux内核中,增加了epoll事件触发机制,具有更高的性能和更好的设计理念,可以用它来完全代替select和poll。相比于select,epoll最大的好处在于它不会随监听fd数目的增长而降低效率。因为在内核总的select实现中,它是采用轮询来处理的,轮询的fd数目越多,自然耗时越多。并且,在linux/posix_types.h头文件中有这样的声明: [cpp] view pl
李海彬
2018/03/22
3.2K0
ol中不同区域加载不同底图
牛老师讲GIS
2023/06/10
3300
ol中不同区域加载不同底图
Spring中的事件
文章目录 1. 简介 2. 事件 2.1. Spring中内置的事件 2.2. 自定义事件 3. 监听器 3.1. 实现ApplicationListener接口 3.2. 使用@EventListener注解 4. 事件发布 4.1. Spring的事件发布类 4.2. 直接注入 4.3. 使用ApplicationEventPublisherAware注入 5. 事件多播器 6. 异步事件 6.1. 使用@Async实现异步 6.2. 自定义事件多播器 7. 源码解析 简介 学过编程语言的肯定知道事
爱撒谎的男孩
2019/12/31
1.3K0
isa 指针中不同的位代表不同的含义
对象.isa -> 类.super -> 父类.super -> 根类.super -> nil
艳艳代码杂货店
2021/09/26
9480
linux环境中,两个不同网段的机器互通
host2 双网卡 eth0 172.24.100.14/16   eth1 192.168.122.214/24
用户1685462
2021/07/27
2.9K0
video标签在不同平台上的事件表现差异分析
本文作者:IMWeb 张颖 原文出处:IMWeb社区 未经同意,禁止转载 video标签属性和事件介绍 为了文章的完整性,首先还是列举一下video标签的属性: src :视频的属性 pos
IMWeb前端团队
2018/01/08
2.5K0
video标签在不同平台上的事件表现差异分析
然后列出可以用于视频状态监控的Media 事件(由媒介(比如视频、图像和音频)触发的事件,适用于所有html元素,但常用于 audio、embed、img、object 以及 video中):
IMWeb前端团队
2019/12/04
1.2K0
Sentry 监控 - Environments 区分不同部署环境的事件数据
Environment 是 Sentry 支持的 tag,您可以(并且应该)添加到您的 SDK 中。通常,tag 接受任何值,但它旨在指代代码部署的命名约定,例如开发(development)、测试(testing)、预发布(staging)或生产(production)。
为少
2021/10/12
2.1K0
jQuery中不同元素的作用
removeClass() - 从被选元素删除一个或多个类 toggleClass() - 对被选元素进行添加/删除类的切换操作 css() - 设置或返回样式属性
用户7718188
2021/10/07
1.7K0
点击加载更多

相似问题

允许我为字体系列设置默认字体的应用程序。

10

Windows字体编辑器

30

一个好的源代码编辑器

40

一个文本编辑器,它允许您对文本执行Python代码段。

20

允许我将NTP设置为“关于:空白”的Chrome扩展

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文