static void Main(string[] args) { const int repeatTime = 50; const int multiplyBy10 = 6; var arraySize = 10; for (var i = 0; i < multiplyBy10; i++) { Console.Write("n=10^" + (i + 1) + "\t"); var distinctSum = 0; for (var j = 0; j < repeatTime; j++) { var st = new ST <int, int>(); var data = RandomArray(arraySize); distinctSum += FrequencyCounter.CountDistinct(data, st); } Console.WriteLine(distinctSum / repeatTime); arraySize *= 10; } }
static void Main(string[] args) { var bst = new BST <string, int>(); var tale = BinarySearchTree.Properties.Resources.tale.Split(' ', StringSplitOptions.RemoveEmptyEntries); var distinctCount = FrequencyCounter.CountDistinct(tale, bst); Console.WriteLine("distinctCount: " + distinctCount); // 二叉查找树的内存开销 = 对象开销 + 根结点引用 + N个结点 // = 对象开销 + 根结点引用 + N×(对象开销 + 父类型引用 + 左 / 右子树引用 + 键 / 值引用 + 结点数) // = 16 + 8 + N×(16 + 8 + 16 + 16 + 4 + 4) = 24 + 64N 字节 // BinarySearchST:对象开销 + 键 / 值数组引用 + 键 / 值数组 + 计数器(一个 int)。 // = 16 + 16 + (16 + 4 + 4 + 8N)×2 + 4 + 4 = 88 + 16N 字节。 // SequentialSearchST:对象开销 + 头结点引用 + N个结点 + 计数器 // = 对象开销 + 头结点引用 + N×(对象开销 + 父类型引用 + next引用 + 键 / 值引用) + 计数器 // = 16 + 8 + N×(16 + 8 + 8 + 16) + 4 + 4 = 32 + 48N 字节 // 《双城记》中不重复的单词有 26436 个(不包括最后的版权声明),全部是原文的子字符串,每个占 40 字节。 // 一个 Integer 占 24 字节,于是估计的内存消耗为:24 + (64 + 40 + 24)×26436 = 3383832 字节。 }