c#实现哈夫曼树算法

c#实现哈夫曼树算法

今天看了一下数据结构,一个练习就是构建哈夫曼树,就顺手用C#写了一个。

static void Main(string[] args) { var numbers = new int[] { 1, 3, 3, 3, 5, 5, 5, 5, 5, 7, 7, 7, 7, 7, 7, 7 }; var treeList = new List<HuffmanTree>(); treeList.AddRange(from n in numbers group n by n into g select new HuffmanTree { Value = g.Key, Degree = g.Count() }); while (treeList.Count>1) { var sel = from i in treeList orderby i.Degree ascending select i; var min = sel.Take(2).ToArray(); treeList.Add(new HuffmanTree { Left = min[0], Right = min[1], Degree = min[0].Degree + min[1].Degree }); treeList.Remove(min[0]); treeList.Remove(min[1]); } } class HuffmanTree { public HuffmanTree Left { get; set; } public HuffmanTree Right { get; set; } public int Value { get; set; } public int Degree { get; set; } public override string ToString() { return Value + " " + Degree; } }

我用LINQ很直接的写出了这段代码,写完后我都觉得有点吃惊:基本上每一步都只用了一句话完成了,并且都是自注释的,写得让人感觉十分流畅。

虽然这个实现运行效率不高,还有一些可以优化的地方,但我却非常喜欢这种简洁、高效(开发效率)的代码,看着十分舒服。这也是C#的一个十分让我入迷的地方->优雅:可以将心中的想法快速用代码表现出来,高屋建瓴,一气呵成,不必于在拘泥于细节。很多时候,在细节实现苦苦琢磨的时往往会忘记最开始突发的灵感和编程的乐趣。

同时我想起了前几天发的一个算法练习的帖子,虽然用C#可以在20行之内实现,但一大片经验丰富的程序员在4个小时之内用C语言(不能使用任何库)却无法完成。我想,对那同一个题目,用20行和用200行实现的时候的人心情是截然不同的吧。

到此这篇关于c#实现哈夫曼树的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持易知道(ezd.cc)。

推荐阅读

    电脑十进制算法|十进制的算法教程

    电脑十进制算法|十进制的算法教程,,十进制的算法教程0x10就是十六进制数10,转换为十进制数是16,即10(十六进制) = 16(十进制)。十六进制转换

    foreach的用法c语言和c#

    foreach的用法c语言和c#,数组,遍历,本文目录foreach的用法c语言和c#详细讲解foreach循环的用法C#中的foreach 怎么用啊foreach用法C#中的f

    伪代码描述算法

    伪代码描述算法,算法,描述,伪代码,自然语言,语言,编程语言,  伪代码是自然语言和类编程语言组成的混合结构。它比自然语言更精确,描述算法很简

    params 是什么意思,c#里

    params 是什么意思,c#里,参数,数组,本文目录params 是什么意思,c#里params.add跟params.put有区别吗C#中ref,out和params有什么区别发送请

    看到电脑头痛|看了一下午电脑头疼

    看到电脑头痛|看了一下午电脑头疼,,看了一下午电脑头疼长时间看电脑脑袋疼主要是由随着电脑辐射到人体,时间越长,辐射量越大,导致头痛症状;视

    C# 基于StackExchange.Redis.dll利用Redis实现分布式Session

    C# 基于StackExchange.Redis.dll利用Redis实现分布式Session,令牌,客户端,最近在研发一款O2O产品,考虑到分布式架构的需要,以前那一套.NET的

    计算机的数据结构是什么

    计算机的数据结构是什么,数据,元素,数据结构,结构,结点,集合,数据结构是计算机存储、组织数据的方式,是指相互之间存在一种或多种特定关系的数据

    java常用数据结构有哪些

    java常用数据结构有哪些,节点,元素,链表,数据,数组,数据结构,java数据结构有:1、数组;2、链表,一种递归的数据结构;3、栈,按照“后进先出”、“先进

    c#中 (ToolStrip

    c#中 (ToolStrip,窗体,控件,本文目录c#中 (ToolStrip)控件是做什么用的winform窗体问题 toolstrip怎么重用,每个窗体都要用到同样的工具栏窗体