递归火山软件开发平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 火山 源码 类库
查看: 431|回复: 14
打印 上一主题 下一主题

[其它] 想了好几天了。我认为数组的访问速度绝对优于哈希表

[复制链接]

311

主题

1420

帖子

5523

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
5523
QQ
跳转到指定楼层
楼主
发表于 6 天前 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
我才疏学浅,没什么知识储备。
我想不到有什么对象可以代替数组来完成。

通常我们使用哈希表都是:键/值。
那么如果表大到不可思议的时候,
哈希表还会快吗?

数组就不一样了,不管你有多大,只要你知道索引
他的访问速度就是无限接近0(1)的时间复杂度。
那么,如果我们创建一个多维数组来储存这个键(键值转字节)对应成员 值的指针
这样就算你的表大到难受,他的访问速度始终可以保持在0(1)时间复杂度。

但问题是普通数组定义时必须填充成员。即使这个成员不用,为了用到的索引存在,就必须定义。

故:有没有一种类似数组的对象可以满足这个要求呢?

就是支持定义  索引-成员
专业承接18-98岁xx的心理及生理教育辅导。
回复

使用道具 举报

311

主题

1420

帖子

5523

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
5523
QQ
15#
 楼主| 发表于 5 天前 | 只看该作者
cloud261 发表于 2024-6-25 17:56
为什么需要想好几天? 功能都不一样,没啥好比的
哈希表内部也是数组, 存放的是桶, 桶也是个数组,  读取的时 ...

只能说你真的了解哈希表。
我非常认同你。

我的假想 只是建立在 数组的高速访问。
专业承接18-98岁xx的心理及生理教育辅导。
回复

使用道具 举报

17

主题

319

帖子

2712

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
2712
14#
发表于 6 天前 来自手机 | 只看该作者
数组肯定快,这不用想也是数组快
回复

使用道具 举报

5

主题

101

帖子

1134

积分

金牌会员

Rank: 6Rank: 6

积分
1134
13#
发表于 6 天前 | 只看该作者
urenai 发表于 2024-6-25 14:43
举例: 键为  abcd;十进制 字节:97,98,99,100
以多维数组的方式 取值:

问题来了,你怎么维护呢,固定算法你这样没问题,但实际上没法用的
就拿BT种子文件的B编码和json类型来说,你试试用结构体把数据装起来,再取出来,试试看吧
回复

使用道具 举报

2

主题

37

帖子

194

积分

注册会员

Rank: 2

积分
194
12#
发表于 6 天前 | 只看该作者
为什么需要想好几天? 功能都不一样,没啥好比的
哈希表内部也是数组, 存放的是桶, 桶也是个数组,  读取的时候还要先给key算hash值求余数才去读取桶数组, 桶里可能还有多个k-v数组, 还得遍历判断是哪个值

而数组是连续内存,读取就一个指令, 没有额外的计算
回复

使用道具 举报

311

主题

1420

帖子

5523

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
5523
QQ
11#
 楼主| 发表于 6 天前 | 只看该作者
uuyyhhjj 发表于 2024-6-25 14:26
无序哈希表 unordered_map
优点,cha询快跟数组基本一样,缺点占用内存大

举例: 键为  abcd;十进制 字节:97,98,99,100
以多维数组的方式 取值:

对象[97][98][99][100] = 值 指针

这个想法强吗?
专业承接18-98岁xx的心理及生理教育辅导。
回复

使用道具 举报

5

主题

101

帖子

1134

积分

金牌会员

Rank: 6Rank: 6

积分
1134
10#
发表于 6 天前 | 只看该作者
无序哈希表 unordered_map
优点,cha询快跟数组基本一样,缺点占用内存大

数组的缺点很明显,如果要检索其中一个成员,你必须遍历数组,数组只适合固定算法,不适合复杂cha询,比如数据库,用数组的效率等于每次cha询都要枚举数组全部成员,其实我看了半天都没看懂你想干什么
回复

使用道具 举报

12

主题

441

帖子

1310

积分

金牌会员

Rank: 6Rank: 6

积分
1310
9#
发表于 6 天前 | 只看该作者
本帖最后由 hmyroot 于 2024-6-25 12:55 编辑

在知道索引的情况下用数组最快,在不知道索引的情况下用表最快,Hash表其实就是计算每组数据的MD5值保存到表中,cha询的时候做匹配,这样比二进制数据比较快很多
火山中文C++编程拳打Java、脚踢Python、手撕C#,引领世界潮流!
回复

使用道具 举报

74

主题

431

帖子

3151

积分

论坛元老

Rank: 8Rank: 8

积分
3151
8#
发表于 6 天前 | 只看该作者
这个的前提条件是,你得知道数组索引,
如果不知道索引且数据量很大的时候,那可不一定了!!!
回复

使用道具 举报

63

主题

883

帖子

3890

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
3890
7#
发表于 6 天前 | 只看该作者
本帖最后由 hcwanz 于 2024-6-25 07:48 编辑

无序哈希表就行了, 无所谓大小.
他是把键计算出一个独一无二的索引, 然后根据这个索引取数据, 无论哈希表多大, 他都只是进行这个计算

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|递归火山软件开发平台 ( 鄂ICP备18029190号 )

GMT+8, 2024-7-1 06:52 , Processed in 0.097146 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表