关于map处理String的复杂度问题

map复杂度

关于map平时一般用得比较多,毕竟自己写一个平衡二叉树或者Treap还是较麻烦的,map一般复杂度为logn,但是有时候发现用map竟然也超时,比如统计不同单词个数(字符总个数不超过1000w),用map时就超时了,原因是C++中的map根据重载运算符计算的,所以并不会将字符串映射成一个整数存进去,这样导致复杂度为lenlog(len),总复杂度大概为nlog(maxlen),所以将导致超时,至于java中的hashMap可能有改进。

map处理字符串解决方法

一种处理办法是直接将一个字符串映射成一个hash值,不过这样对hash公式有点要求,mod值不应该太小,太小冲突的概率会增大,所以映射成一个较大整数后(尽量保证冲突较少的hash公式),使用hash表存储(再mod值存入,一般用数组模拟链表存储,图算法中有使用到),是否相等就查找hash表就行。
另外一种就不会出现误差问题,就是用Trie存储,每次查找直接在Trie(字符串分类中)中查找是否存在,但是Trie有一个缺点就是空间耗费太大,就算用动态存储也是一样,出现的字符个数就要有n*字符个数的空间大小。
### 回答1: Map<String, Integer> map是一个Java中的数据结构,它代表键值对的集合,其中,每个键都是唯一的,并且与一个值相关联。在这个例子中,这个Map的键是String类型,值是Integer类型。这个Map可以用来存储和查找字符串和整数之间的映射关系。 ### 回答2: Map<String, Integer> map是指一种数据结构,它是一种键值对的集合。在其中,键(Key)和值(Value)都是通过泛型参数指定的,这里的键是字符串类型(String),值是整数类型(Integer)。 Map是一种非常常用的数据结构,它提供了一种通过键来访问值的方法,类似于字典。每个键都是唯一的,而值可以是重复的。通过使用键来查找值,我们可以很方便地检索、增加、删除和更新数据。 使用Map,我们可以实现很多有用的功能。例如,我们可以使用键和值来存储和管理学生的成绩信息、电话号码簿中的联系人信息等等。对于需要进行键值对相关处理的任务,Map提供了一种高效的解决方案。 需要注意的是,Map中的键是唯一的,因此如果我们尝试将具有相同键的多个值放入Map中,后面的值会覆盖前面的值。而对于值来说,它们是可以重复的,我们可以将多个键指向相同的值。 综上所述,Map<String, Integer> map是一种存储键值对的集合,键的类型是字符串,值的类型是整数。通过使用这种数据结构,我们可以方便地进行数据的存储、检索和管理。 ### 回答3: Map<String, Integer> map是一种数据结构,它是Java中的一种容器类。它将一组键值对映射到一个值上,其中键和值都可以是任意类型的对象,但在这个例子中,键是String类型,值是Integer类型。 Map是一种非线性数据结构,它不是按照元素在集合中的顺序进行存储,而是通过键来定位元素。每个键在Map中是唯一的,这就意味着键是用来对值进行唯一标识和索引的。通过键,我们可以快速查找到对应的值,这使得Map非常适合用于存储大量数据,并且以常数时间复杂度来检索数据。 在这个例子中,Map<String, Integer>是一个具体的Map实例的声明。它使用了String作为键的类型,Integer作为值的类型。通过这个声明,我们可以创建一个Map对象,并在其中存储一组键值对。例如,我们可以使用put方法往map中添加键值对,使用get方法来根据键来获取对应的值。 总的来说,Map<String, Integer> map表示了一个以String类型为键、Integer类型为值的Map对象,可以方便地存储和检索由这种键值对构成的数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值