什么是“熵”?信息论中的“熵”用来描述信息量,信息量越高,熵就越低,反之越高。在自然语言处理中,我们常用最大熵模型,顾名思义,最大熵指的是信息量最小,也就是在原有的信息本身基础之上,不去假设新的信息量,使整个系统的熵达到最大。最大熵模型在自然语言处理中之所以能达到不错的效果,其内在牵扯到自然界的规律。自然界造就的系统在没有外来能量补充的情况下总是熵增的,而且趋向于最大。看到一盒火柴洒在地上,如果结果很混乱,那才是自然的,如果还是很整齐的摆放着,我们就会怀疑是不是别人故意给摆好的。
当然,今天我们不讨论最大熵模型,我们讨论“最大熵”原则在程序接口设计中的指导作用。
考虑一个简单的冒泡排序程序,我编写了如下函数:
这个函数有什么问题?确实没有问题,因为它能正确给int类型的数组排序。但是如果我们的数组不是int类型的呢?这样,我们的函数就没法使用了。之所以设计出以上的代码,就是因为我没有考虑的“最大熵”原则,即我假设了我的函数只用来为int类型的数组排序,“int类型”是我在原有信息之上添加的信息,无形中我让熵减小了,限制了程序的使用范围。所以,经过一番改进,得到了下面的程序:
在这里,我使用了C++的模板技术,将熵增加了,这样,就能接受任意支持比较操作符和赋值操作符的类型的数组了。满意了吗?不,其实熵还是挺小的,因为我们还只能接受数组输入,这里的数组又是我们假设的信息量。如果不是数组我们的函数就没法解决这个排序问题了。其实我们可以发现,这个函数的排序过程其实并不要求输入一定是数组,只要输入类型支持下标操作符,就可以用冒泡法进行排序,于是,得到了下面的程序:
这样的话,即使我们传入一个vector类型,sort函数不用修改就可以直接可用。
用模板来增加信息熵,使得程序的适用范围迅速扩大,由此可见C++模板功能之强大,C++语言中STL标准模板库的设计原理也是基于此。
到此这篇libsvm源码(libuv源码分析)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/bcyy/44050.html