posts - 183,  comments - 10,  trackbacks - 0

:: 和同学聊了起来
=======================
信息论的角度去讨论算法
一个算法的高效不高效
看它产生的信息量有多大
如果有冗余的信息量,效率就有提高的空间

举个例子
你统计一个集合中重复出现的元素
那么久没有必要对元素计数
直观的方法是对元素计数
然后检测
但是这个计数是冗余的
只需要找到重复的,不需要知道具体出现的次数
针对这个问题

我是觉得最高效的算法应该是恰恰能解决现有问题的算法,不生成多余的冗余信息
生成任何信息都是需要代价的
信息论。。。
算法的高效不高效,一是时间二是空间
上面那个问题,既然不需要计数
只需要给每个元素一个位,节省空间
位图
海量数据的时候
如果 几十亿个 int 数
看里面是否存在重复的
重复出现的时候,检测到对应为为 1 ,说明之前存在了
所以就是重复出现的数
遍历这个集合
可以将结果存起来
我的意思是,这个问题就是找到重复出现的,没有必要对每个数计数
这样,就可以节省空间

还有时间的
还有就是充分挖掘问题中的信息
充分利用问题中的信息,提高获取的信息量,充分利用了隐藏的信息量就会涉及出高效的算法
基于比较的算法,不会是 O(N) 的,最优就是 O(NlogN)。
基数排序、桶排序,这样的就是有限制性的算法,这个限制就是元素有个范围,限制是给了隐含的信息,利用这个可以就有了 O(N) 的排序
尽可能从问题中挖掘潜在的信息,获得的信息越多越有利于解决问题,也就越有可能获得高效的解法。

控制论、系统论、信息论
信息论是香农创建的,也属于数学,算法就是解决问题的,解决问题的就是想得到结果,结果就是一种信息,算法的设计可以用信息论的角度解释
反正总结起来是两点吧,一是充分挖掘已有的信息,二是尽可能不要产生冗余信息。这样设计的算法,既可以利用以存在的信息,也不会产生多余的信息,效率自然会高。

======================

FOO 21:57:39
信息论的角度去讨论算法
FOO 21:57:57
一个算法的高效不高效
FOO 21:58:09
看它产生的信息量有多大
FOO 21:58:36
如果有冗余的信息量,效率就有提高的空间
BAR 22:00:18

FOO 22:00:53
呵呵
FOO 22:01:05
后面的几句是我最近感受的
BAR 22:01:11
呵呵
BAR 22:01:14
我不懂
FOO 22:01:17

BAR 22:01:20
我还是码农级别的
FOO 22:01:23

FOO 22:01:27
举个例子
FOO 22:01:57
你统计一个集合中重复出现的元素
FOO 22:02:10
那么久没有必要对元素计数
FOO 22:02:16
直观的方法是对元素计数
FOO 22:02:27
然后检测
FOO 22:02:38
但是这个计数是冗余的
FOO 22:02:51
只需要找到重复的,不需要知道具体出现的次数
FOO 22:02:55
针对这个问题
BAR 22:03:28

BAR 22:04:14
你继续
BAR 22:04:11
 
FOO 22:04:24
我是觉得最高效的算法应该是恰恰能解决现有问题的算法,不生成多余的冗余信息
FOO 22:04:33
生成任何信息都是需要代价的
FOO 22:04:36
信息论。。。
BAR 22:04:41
你先说上面那个问题
FOO 22:06:05
算法的高效不搞笑,一是时间二是空间
FOO 22:06:14
上面那个问题,既然不需要计数
BAR 22:06:20
上面那个问题什么方法好?
FOO 22:06:29
只需要给每个元素一个位,节省空间
FOO 22:06:43
位图吧
FOO 22:06:44
呵呵
BAR 22:06:50
那你怎么做
FOO 22:06:51
海量数据的时候
FOO 22:07:00
如果 几十亿个 int 数
BAR 22:07:08
把位置1
BAR 22:07:14
第二次出现呢
FOO 22:07:15
看里面是否存在重复的
BAR 22:07:20
也就是重复的时候出现呢
BAR 22:07:00
一个元素出现了一次
FOO 22:07:53
重复出现的时候,检测到对应为为 1 ,说明之前存在了
BAR 22:08:00
是撒
FOO 22:08:03
所以就是重复出现的数
BAR 22:08:05
你只找一个么
FOO 22:08:11
所有
BAR 22:08:17
还是说你有另一个输出结果的地方
FOO 22:08:22
遍历这个集合
FOO 22:08:36
可以将结果存起来
BAR 22:08:41
就是出现重复的时候把这个重复的放到另外一个地方或者输出
FOO 22:09:07

BAR 22:09:22
恩,我先洗澡去了
FOO 22:09:31
我的意思是,这个问题就是找到重复出现的,没有必要对每个数计数
FOO 22:09:36
这样,就可以节省空间
FOO 22:09:51
还是时间的
FOO 22:14:58
还有就是充分挖掘问题中的信息
FOO 22:15:38
充分利用问题中的信息,提高获取的信息量,充分利用了隐藏的信息量就会涉及出高效的算法
FOO 22:16:11
基于比较的算法,不会是 O(N) 的,最优就是 O(NlogN)。
FOO 22:17:09
基数排序、桶排序,这样的就是有限制性的算法,这个限制就是元素有个范围,限制是给了隐含的信息,利用这个可以就有了 O(N) 的排序
FOO 22:17:37
尽可能从问题中挖掘潜在的信息,获得的信息越多越有利于解决问题,也就越有可能获得高效的解法。

FOO 22:18:04
呵呵
FOO 22:18:23
控制论、系统论、信息论
FOO 22:19:47
信息论是香农创建的,也属于数学,算法就是解决问题的,解决问题的就是想得到结果,结果就是一种信息,算法的设计可以用信息论的角度解释,呃。。
FOO 22:21:24
反正总结起来是两点吧,一是充分挖掘已有的信息,二是尽可能不要产生冗余信息。这样设计的算法,既可以利用以存在的信息,也不会产生多余的信息,效率自然会高。

 

posted on 2011-07-11 23:18 unixfy 阅读(193) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理