c#实现哈夫曼树算法

作者:天方 时间:2022-11-24 08:25:02 

今天看了一下数据结构,一个练习就是构建哈夫曼树,就顺手用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行实现的时候的人心情是截然不同的吧。

来源:https://www.cnblogs.com/TianFang/archive/2009/08/16/1547050.html

标签:c#,哈夫曼树
0
投稿

猜你喜欢

  • Java基本语法之内部类示例详解

    2023-02-06 14:05:32
  • Android屏幕适配工具类 Android自动生成不同分辨率的值

    2022-03-07 13:45:39
  • SpringBoot中JPA实现Sort排序的三种方式小结

    2022-02-12 23:35:12
  • C#实现的文件压缩和解压缩类

    2022-11-30 16:08:08
  • 基于RxJava实现酷炫启动页

    2023-09-26 21:50:47
  • Android实现双击返回键退出应用实现方法详解

    2023-03-23 21:33:29
  • Java Arrays.asList使用方法解析

    2023-11-26 06:27:09
  • 深入学习C语言中的函数指针和左右法则

    2022-07-22 03:44:41
  • Android开发之获取LayoutInflater对象的方法总结

    2023-05-29 21:50:28
  • Java 数据结构与算法系列精讲之队列

    2023-09-26 21:10:31
  • Android实现在一个activity中添加多个listview的方法

    2023-10-13 14:41:22
  • 十分钟速懂java知识点 System类

    2022-11-25 04:19:26
  • Automapper实现自动映射的实例代码

    2023-08-14 16:37:10
  • java内部类的定义与分类示例详解

    2022-07-01 20:16:47
  • 浅谈Maven的安装及修改为阿里云下载依赖

    2023-08-05 08:30:37
  • JavaCV实现照片马赛克效果

    2023-04-27 15:55:14
  • springboot docker jenkins 自动化部署并上传镜像的步骤详解

    2023-07-28 01:54:38
  • javaweb中Http协议详解

    2022-03-21 05:12:41
  • Android使用多线程进行网络聊天室通信

    2022-05-11 18:56:36
  • Java日期时间字符串和毫秒相互转换的方法

    2022-03-11 18:15:57
  • asp之家 软件编程 m.aspxhome.com