微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 实现简单的字符串实习

问题

我有一大堆字符串在一些对象之间重复.需要的是字符串实习.这些对象使用protobuf-net进行序列化和反序列化.我知道它应该处理.NET字符串intering,但我的测试表明我自己获取所有这些字符串并创建一个Dictionary< string,int> (值与其唯一标识符之间的映射),用int替换原始字符串值,可以得到更好的结果.

但问题在于映射.它只能单向搜索(我的意思是O(1) – 可搜索).但我想按键或按O(1)中的值搜索.不只是按键.

途径

字符串集是固定的.这听起来像一个数组.按值搜索是O(1),快速致盲.甚至没有在字典中分摊 – 只是不变,由索引.

数组的问题是按键搜索.这听起来像哈希.但是,嘿,n个哈希值并不是均匀分布在n元素阵列的n个单元中.使用模数,这可能会导致碰撞.那很糟.

我可以创建一个n * 1.1长度的数组,并尝试随机散列函数,直到我没有碰撞,但……那……只是……感觉……错了.

如何通过键(字符串)和值(整数)来解决问题并实现O(1)查找时间?

两个词典不是一个选项;)

解决方法

两个词典就是答案.我知道你说它不是一个选项,但是没有理由,很难看出两个词典如何完美地回答你的场景,易于理解,快速,内存效率高的代码.

从这里开始,您似乎希望执行两项基本操作;

myStore.getString(int); // O(1)
myStore.getIndexOf(string); // O(1)

你很高兴一个人被实现为字典,而不是另一个.是什么让你停下来?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐