热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

是否有可能在SetinConstant时间内找到一个随机元素?

如何解决《是否有可能在SetinConstant时间内找到一个随机元素?》经验,为你挑选了1个好方法。

因此,我遇到了使用getRandomElement()函数构建集合的问题.乍一看很容易.但是我想的越多,我认为在O(1)时间复杂度中做到这一点的可能性越小.没有给出恒定时间的要求,但所有一组主要功能都是在恒定的时间内,所以我觉得它暗示这也应该在恒定时间内完成.

集合的目标是使用散列函数来减少冲突.问题现在变成,如果你只是生成随机整数并尝试使用这个随机整数选择索引,你很可能会遇到你的集合中的"空"插槽....在这种情况下你必须生成一个新的随机数然后再试一次.基本上你的散列函数越好,你的getRandomElement将使用这种方法执行的最差.

那么我想......好吧,为什么不在每次插入后存储索引?然后,生成一个随机数并从该索引集合中选择一个索引.我认为这是一个好主意,但后来出现了删除元素的问题.我们还必须从索引列表中删除相应的索引,以及从我们的Set中删除元素本身.我们怎样才能找到正确的索引来删除比线性时间更快的???

无论如何,从一组FEELS中获取一个随机元素就可以比线性时间更好.顺便说一下,我正在通过链接来处理碰撞.我不想浪费时间去做数学上不可能的事情,但我也不是数学家,我不想放弃实际可行的事情.



1> n. 'pronouns..:

是的,可以构建一个支持O(1)getRandomElement操作的类似集合的数据结构.您是否正确地将元素存储在数组中.去除元素的问题并不太难.

秘密是一旦孔的数量太大(例如,超过阵列大小的一半)就压缩阵列.这样,摊销的删除时间仍为O(1).

执行时getRandomElement(),只需重复操作直到遇到实际元素.平均重复次数不超过2,因为数组总是至少半满,所以你的平均时间仍为O(1)getRandomElement().

编辑:或许删除元素的简单方法是将最后一个元素移动到空出的位置.


推荐阅读
  • JDK源码学习之HashTable(附带面试题)的学习笔记
    本文介绍了JDK源码学习之HashTable(附带面试题)的学习笔记,包括HashTable的定义、数据类型、与HashMap的关系和区别。文章提供了干货,并附带了其他相关主题的学习笔记。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 简述在某个项目中需要分析PHP代码,分离出对应的函数调用(以及源代码对应的位置)。虽然这使用正则也可以实现,但无论从效率还是代码复杂度方面考虑ÿ ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 本文介绍了一个题目的解法,通过二分答案来解决问题,但困难在于如何进行检查。文章提供了一种逃逸方式,通过移动最慢的宿管来锁门时跑到更居中的位置,从而使所有合格的寝室都居中。文章还提到可以分开判断两边的情况,并使用前缀和的方式来求出在任意时刻能够到达宿管即将锁门的寝室的人数。最后,文章提到可以改成O(n)的直接枚举来解决问题。 ... [详细]
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
  • Ihaveaworkfolderdirectory.我有一个工作文件夹目录。holderDir.glob(*)>holder[ProjectOne, ... [详细]
  • 从相邻元素对还原数组的解题思路和代码
    本文介绍了从相邻元素对还原数组的解题思路和代码。思路是使用HashMap存放邻接关系,并找出起始点,然后依次取。代码使用了HashMap来存放起始点所在的adjacentPairs中的位置,并对重复的起始点进行处理。 ... [详细]
  • OpenMap教程4 – 图层概述
    本文介绍了OpenMap教程4中关于地图图层的内容,包括将ShapeLayer添加到MapBean中的方法,OpenMap支持的图层类型以及使用BufferedLayer创建图像的MapBean。此外,还介绍了Layer背景标志的作用和OMGraphicHandlerLayer的基础层类。 ... [详细]
  • #define_CRT_SECURE_NO_WARNINGS#includelist.h#includevoidSListInit(PNode*pHead ... [详细]
author-avatar
凡秘能
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有