范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

月光宝盒get用时间置换空间,聊聊稀疏数组的那些事儿

  背景
  数据结构是指带有结构特性的数据元素的集合。在数据结构中,数据之间通过一定的组织结构关联在一起,便于计算机存储和使用。从大类划分,数据结构可以分为线性结构和非线性结构,适用于不同的应用场景。
  线性结构:
  线性结构作为最常用的数据结构,它的特点是单个数据之间存在一对一的线性关系。包含两种不同的存储结构:顺序存储结构和链式存储结构。顺序存储的线性表称为顺序表,顺序表中的存储元素是连续的。
  (线性结构)
  链式存储的线性表被叫做链表,链表中的存储元素不一定是连续的,元素节点中存放数据元素以及相邻元素的地址信息
  线性结构常见的有:数组、队列、链表和栈。
  非线性结构:
  除了线性结构,其他的数据结构均为非线性结构,特点是单个数据之间存在多个对应关系,常见的有:二维数组,多维数组,广义表,树结构,图结构
  (常见的非线性结构)稀疏数组(Sparse Array)
  在各种各样的数据结构中,最基础、最常用的是数组。数组可以非常直观的表示数据在一维或多维空间中的关系,与现实中的情形更接近,所以被大多数程序员当做"首选"的数据结构,然而,在部分应用场景中使用数组存储数据时会出现各种各样的情况,这是就需要在数组的基础上,对数据结构进行优化,衍生出稀疏数组等新的数据结构。
  以五子棋局为例,我们应该如何存储棋盘上的落子情况呢?
  (使用二位数组存储五子棋盘)
  如果使用一个二维数组对棋盘落子进行存储,当我们拿到一个棋盘类数据内容时,大部分内容都是没有意义的0,有意义数据并不相邻,很多空间被浪费。对于五子棋来说,这个问题可能不是很明显,但如果"棋盘"足够大,被浪费的空间就会影响到软件的功能实现,此时引入稀疏数组( SparseArray)就具有了重要的意义。
  稀疏数组将数组中的内容进行压缩,存储在一个更为精练的二维数组中,稀疏数组的本质其实就是用时间置换空间。
  具体的处理的方法是:
  1. 该数组之中一共有几行几列进行记录
  2. 把相同元素内容忽略后,只记录具有不同内容单元的位置稀疏数组的实现
  节约存储空间显然是稀疏数组的一个优势,但是读取性能是否可以会比二维数组差很多?
  为了讲清这个问题,我们可以先看一下Android中SparseArray的实现逻辑。SparseArray内部是通过两个数组来进行数据存储的。一个存储key,另外一个存储value。我们从源代码中能够看到key和value各自是用数组表示:private int[] mKeys; private Object[] mValues;
  同时,SparseArray在存储和读取数据时候,使用的是二分查找法:public void put(int key, E value) { int i = ContainerHelpers.binarySearch(mKeys, mSize, key); ... } public E get(int key, E valueIfKeyNotFound) { int i = ContainerHelpers.binarySearch(mKeys, mSize, key); ... }
  在put添加数据的时候,会使用二分查找法和之前的key比较当前我们添加的元素的key的大小,然后按照从小到大的顺序排列好。所以,SparseArray存储的元素都是按元素的key值从小到大排列好的。 而在获取数据的时候,也是使用二分查找法判断元素的位置,这样可以使数据的获取变得更加高效。所以,在key的数据量(可以理解为棋盘上去掉空白后的棋子数量)不大时,稀疏数组读取性能是有保障的。典型应用场景
  做开发的都知道,想让系统变快有个最简单的办法就是加内存。对于程序可以做大量的缓存来加速,即所谓"空间换时间"。但是在特定环境,程序可使用的内存是有限的。
  在移动设备上,内存是个稀缺资源,例如iPhone 7的内存为2G,而最新款的iPhone 13也仅为4G。所以,稀疏数组这种"时间换空间"的技术最早被广泛应用在移动开发领域。
  除了移动端,另一个内存紧缺的运行环境是浏览器。虽然没有明文规定,但在业界的共同认知里,浏览器会对单一线程进行内存限制,例如64位的chrome,每个tab页的内存消耗不允许超过4G。这个限制,在单页面应用还不成熟的十几年前,不会成为问题。因为,那时大家所关注的,还是如何提升后端的处理性能,前端只是一种静态的网页表达方式。
  随着前端工程化的高速发展,各种前端工程脚手架日渐成熟,WebComponent标准被提上日程,企业开始由C/S向B/S应用转型。这就要求前端开发者,需要面对单页面处理复杂业务数据的挑战。前端程序从最开始设计以及整个开发过程中都需要考虑内存的使用情况,尽可能的降低内存占用,防止网页崩溃。以前端电子表格为例,我们通常需要为用户提供上百万个单元格(100列 x 1万行),但其中有数据的单元格可能只有几百个。为了减少数据模型占用的内存,我们最终的解决方式是将表格的数据存储方式由常规数组改成稀疏数组,内存占用可以降低到几十分之一,以确保浏览器内存不会被"撑爆"。
  (稀疏矩阵存储策略)不只是"时间换空间"
  相较于传统的链式存储或是数组存储,稀疏矩阵存储构建了基于索引Key的数据字典。在松散布局的表格数据中,稀疏矩阵只会对非空数据进行存储,而不需要对空数据开辟额外的内存空间。
  使用这种特殊的存储策略,除了可以降低内存占用,还使得数据片段化变得容易,可以随时框取整个数据层中的一片数据,进行序列化或反序列化,而无需处理同一数据结构内的其他数据。
  借用这样的特性,我们可以随时替换或恢复整个存储结构中的任何一个级别的节点,以改变引用的方式高效解决了表格数据回滚和恢复,而这一点也是电子表格支持在线协同的技术基础。
  总结
  本节为大家介绍了稀疏数组的基础知识,技术实现和应用场景,以前端电子表格为例,展示了这个技术在节约内存空间,实现回滚恢复等领域的优势…
  在后续我们还会继续为大家介绍更多严肃和有趣的内容~
  觉得不错点个关注再走吧~葡萄城微信号:"葡萄城社区"。

华为P50pro与P20pro摄影画质对比110倍变焦P20pro原图P50pro10倍变焦原图看不出来太大的差异。下面是10倍变焦的裁剪图,比较一下。P20pro2100倍变焦P50proP20pro没有100变焦,就拿为股价窒息!贾跃亭300台限量FF91已售罄,股价不到1月却腰斩虽然一直被网友调侃下周回国,但是贾跃亭贾老板,真在大洋彼岸融到钱了,不仅成功推进FF91量产,还把法拉第公司在美国纳斯达克市场敲钟上市。目前,全球限量300台的FF91未来主义者联1K到4K各价位手机目前最佳选择!熬夜整理,选哪部都不后悔1,RedmiNote10Pro(1K)我称之为目前千元系列性价比之王!搭载了天玑1100处理器,同级别的vivo手机都是3000!此外拥有120Hz高刷5000mAh电池67W有火链科技研究院联合机械工业出版社举办区块链导论新书推荐会近日,由火链科技研究院携手机械工业出版社共同举办的共建区块链数字新生态暨区块链导论新书推荐会以在线直播的方式顺利举办。北京大学信息科学技术学院教授北京大学软件与微电子学院创始院长陈中国发布丨我国国内市场APP数量为291万款游戏类占比24中国网9月3日讯据工业和信息化部消息,截止到7月底,我国国内市场上监测到的APP数量为291万款,比上月末净减少11万款。其中,本土第三方应用商店APP数量为155万款,苹果商店(给美国市场ampampquot上课ampampquot,威马沈晖成为首位登上TED演讲的中国汽车人记者李文博编辑比尔克林顿比尔盖茨弗兰克盖里理查德布兰森爵士在TED演讲星光熠熠的演讲嘉宾名单上,今天加上了来自中国的新生代汽车人威马汽车创始人董事长兼CEO沈晖。近日,威马汽车创始全球手机市场再次大洗牌!首个禁售苹果手机国家诞生还有巨额罚款9月3日讯导语,在全球智能手机市场上,苹果旗下的iPhone手机一直都垄断着高端旗舰手机市场,虽然三星华为能够和苹果掰一掰手腕,但从实际的单机销量来看,依旧会是难以和iPhone手我来谈谈新能源国家战略的重要意义和受益板块一直想写一篇文章,很多朋友问我关于新能源的股票,今天多拿出来点时间,就娓娓道来一新能源包含那些东西除了大家熟知的光伏风能,其实还包括核能氢能甲醇潮汐地热等等吧。除此之外水利发电属于2021。09。04数字货币快讯1。美国SEC正在调查UniswapLabs。2。佳士得将NFT加密艺术首次引进亚洲拍场。3。菲律宾联合银行UnionBank已与微软合作在Azure上进行区块链试验。4。巴西中央微信上线新规,一些用户已经中招,微信账号被封停声明原创不易,禁止搬运,违者必究!微信账号被封停?如果说有一天你的微信账号被封停了,那么必然会造成了很多的不便。并不是微信本身,而是因为微信里面已经有多年以来积攒下来的好友,微信的5G专网,剖析三大运营商的战略布局2021年7月24日,由江苏省未来网络创新研究院主办SDNLAB承办的2021中国5G网络创新论坛上,多位嘉宾提到5G专网的发展与应用。SDNLAB对此进行了整理,以飨读者。会上,
为何年轻人越来越喜欢安卓手机,而老年人最爱的手机却是iPhone?不知道大家发现一个现象没有,如果是往年的双十一各大手机厂商在双十一没有结束的时候,就会晒出各种成绩了,各种炫耀自己的榜单。然而今年这种现象少了许多,导致这种情况的发生,大概率是因为华为连发7大新品!5G手机回归,口红变耳机手表能保命作者HENG来源极果编辑部华为再发新手机?还是5G?2个月前,在MateBook13s14s的发布会上,华为正式推出了华为移动应用引擎,不用Windows11,也能在电脑上使用手机现在最好的拍照手机还是不是iPhone?p9摄影,没处理过,国产手机挺好的!,,,,假期拖家带口地出去玩儿,扶老携幼地要拿不少东西,所以很多人拍照都是用手机,但手机如何能拍出好照片呢?至少,这几个问题你得了解。(一)与其华为手机系统升级后不在支持快充怎么办原厂充电器可以?只要有新版本就升级,没发觉这个问题其实我的升级后也没有快充了,我也拿去客服问了一下,他开始先帮我换充电头,试了一下,确实也不行,后来他说叫我换主板,他和我说要1000多块钱,后来我手机的最佳替代品?双十一大黑马OPPOWatch2这几个能力真绝了毫无疑问,在今年各大电商网站降价满减买赠等各种优惠活动的诱惑下,我们正在变得越来越理性,我们不再为了买而买,而是合理安排双11购物计划,理性选择自己真正需要的产品,不给自己创造一些18GB1TB,中兴Axon30Ultra即将发布新版本,突破手机内存上限目前市面上主流安卓机的内存普遍在8GB到12GB,不过也有不少16GB内存的机型,但这还并非安卓最大的内存。近日中兴正式官宣将发布中兴Axon30Ultra航天版,该机的一大亮点要中国联通号码哪个号段好?国内的手机号码,是由当时的信息产业部统一规划的。中国的手机号码目前是11位,是世界上最长的电话号码。联通的号码段是130131132155156186185145176。国内三家运欧界丨华为新品发布会来了!口红耳机专业跑表应有尽有欧界报道11月17日,华为的线上全场景智慧生活新品发布会召开了。手表二级笔记本等新产品逐一登场。此次负责新品发布的不是余承东而是总裁何刚,这也代表了此次发布会不会有手机新品发布。在一个不留,华为将两大系统全部捐赠国家,任正非又一次成了焦点近几年来,自研二字成为了热议的话题,与以往不同,以往消费者在购买手机等电子产品的时候,第一看重的是配置性价比,但如今很多人第一眼看重的却是内部芯片是否自研,有没有国产操作系统。因为当年的Yunos系统为什么没有广泛使用坚持到现在呢?前两年阿里搞了个YunOS,甚至还兼容了大部分的安卓应用,这里暂且不讨论YunOS和安卓系统究竟是什么关系,只说说YunOS为什么没有发展起来。首先阿里是一家软件公司,它没有自己的AMDZen5处理器或将用三星3nm工艺台积电被苹果包圆AMD已经公布了最新的CPU路线图,在该路线图中,未来AMD将会推出Zen5处理器,当然关于Zen5处理器的消息我们知之甚少,毕竟明年上半年才推出Zen3,而明年下半年则是Zen4