C# 字典查找与数组查找;数组分配与字典分配

C# 字典查找与数组查找;数组分配与字典分配,c#,c++,arrays,dictionary,C#,C++,Arrays,Dictionary,你们中有谁能告诉我字典结构的查找方法的背后是什么吗 . 我是说它是如何实现的?给定一个键,我们可以在字典中找到值 1) 我们知道and数组查找是O(1)操作。那么字典呢 2) 如果我存储的键值对都是整数,如果有大量这样的数据和空间,我关心的是哪一个更好?数组还是字典? 例如,我可以分配一个固定大小的数组。但是键值对可能不会占据整个数组。它的大小可能是数组的一半。但是数组分配应该是最大的,因为我不知道某个键是否会出现。 让我澄清一下,让我们有键,值对(10,1),(20,2),(30,3)。因此,

你们中有谁能告诉我字典结构的查找方法的背后是什么吗 . 我是说它是如何实现的?给定一个键,我们可以在字典中找到值

1) 我们知道and数组查找是O(1)操作。那么字典呢

2) 如果我存储的键值对都是整数,如果有大量这样的数据和空间,我关心的是哪一个更好?数组还是字典? 例如,我可以分配一个固定大小的数组。但是键值对可能不会占据整个数组。它的大小可能是数组的一半。但是数组分配应该是最大的,因为我不知道某个键是否会出现。
让我澄清一下,让我们有键,值对(10,1),(20,2),(30,3)。因此,如果我使用数组,那么我必须声明它的大小为[30][2],尽管它只占用3个条目。所以,在这种情况下,is字典会更好。不是说30万就可以了。所以其他条目将占用数组中的内存,对吗?

字典通常以两种方式实现,哈希映射或二叉树

1:如果字典是一个二叉树,那么搜索时间是一个二叉搜索,因此是O(logn)

如果字典是哈希映射,则搜索时间为O(1)。(对于具有相同散列的键,可能会增加到O(m)

2:你说得对,在这种稀疏数据集的情况下,字典会更好地利用空间。字典搜索的额外时间成本相对较低


使用字典搜索可以通过类似bloom过滤器的方式进一步改进(如果平均大小写是哈希映射中不存在的对象)。

字典通常通过两种方式实现,哈希映射或二叉树

1:如果字典是一个二叉树,那么搜索时间是一个二叉搜索,因此是O(logn)

如果字典是哈希映射,则搜索时间为O(1)。(对于具有相同散列的键,可能会增加到O(m)

2:你说得对,在这种稀疏数据集的情况下,字典会更好地利用空间。字典搜索的额外时间成本相对较低


使用字典进行搜索可以通过类似bloom过滤器的方式进一步改进(如果平均大小写是哈希映射中不存在的对象)。

术语
字典
非常通用,可以指代任何类型的数据结构。你也没有说它是有序的还是无序的。有各种各样的二进制搜索树以各种方式平衡,如n元树、哈希表、SkipList等

就阵列而言,直板阵列在人口稀少时确实会浪费空间。但是,您可以实现多级阵列。前几个级别是目录,只有叶级别有小数组

虚拟内存页表通常是这样实现的

因此,像(hex)[0x123456]这样的数组索引可能会被位屏蔽操作分解为[0x12][0x34][0x56]。选择顶部目录,它是指向中间目录的指针数组,中间目录有指向小表的指针数组。(当然,在现实中,代码必须遍历各个级别,注意丢失的目录和表,而不是直接索引!这就是关键:不要实例化整个树。)

不久前,我以这种方式在正则表达式引擎中实现了Unicode字符集,在不同的情况下使用几种不同深度的结构


当然,这与你的常规<代码>新INT[fO] < /Cord>C++数组无关!但是当然可以隐藏在看起来像数组的类后面。

术语
dictionary
非常通用,可以指任何类型的数据结构。你也没有说它是有序的还是无序的。有各种各样的二进制搜索树以各种方式平衡,如n元树、哈希表、SkipList等

就阵列而言,直板阵列在人口稀少时确实会浪费空间。但是,您可以实现多级阵列。前几个级别是目录,只有叶级别有小数组

虚拟内存页表通常是这样实现的

因此,像(hex)[0x123456]这样的数组索引可能会被位屏蔽操作分解为[0x12][0x34][0x56]。选择顶部目录,它是指向中间目录的指针数组,中间目录有指向小表的指针数组。(当然,在现实中,代码必须遍历各个级别,注意丢失的目录和表,而不是直接索引!这就是关键:不要实例化整个树。)

不久前,我以这种方式在正则表达式引擎中实现了Unicode字符集,在不同的情况下使用几种不同深度的结构


当然,这与你的常规<代码>新INT[fO] < /Cord>C++数组无关!但是当然可以隐藏在看起来像数组的类后面。

一定要使用字典(或列表)。是的,我决定使用字典。一定要使用字典(或列表)。是的,我决定使用字典。请注意,.Net字典是作为hashmap实现的,所以O(1)查找。哦,太好了。我在C#中使用它。请注意,.Net字典是作为hashmap-so(1)查找实现的。哦,那太好了。我在C#中使用这个。我的字典没有订购。“你的”字典?这是怎么一回事?如果它是你的字典,为什么你不知道它内部是如何工作的呢?拼图我的字典没有订购。“你的”字典?这是怎么一回事?如果它是你的字典,为什么你不知道它内部是如何工作的呢?困惑的