loading ...
loading...

2007-08-16 | 多想想算法背后所代表的东西 让你在算法领域能够举一反三

分享

算法--来源于生活

    今天碰到一个很有意思的问题:用户在数据库中存有N张照片(照片是有顺序的),然后用户可以任意调整照片之间的顺序,照这样的话,每一次用户调整某一张照片的顺序后相应地要想多米诺骨牌一样要影响他后面照片的顺序,这样在数据库中有M张照片的顺序编号都需要去Update,这样的话对数据库的压力太大。比如第8张照片要移动到第二位,那么第7、6、5、4、3、2都要相应地改变,也就是在数据库中有7条记录需要去Update,代价太大。

    最后这个问题是这样巧妙解决的:照片在数据库的编号不是1,2,3……这样连续的自然数,而是使用1024、2*1024、3*1024……这样跳跃的数字来代表,当再有移动的时候,比如把8*1024移动到第二位也就是1024和2*1024之间的话,只需要在数据库中做一次Update,让8*1024变成(1024+2*1024)/2,后面的那些编号都可以维持不变。这样数据库的压力就小多了!

    当然时间久了后可能某一区段的数据编号太密集,甚至都无法插入了,嗯就像女人变老了后连上的皱纹都挤到一起去了,当然就需要去拉皮了,也就是当插入的时候发现没有位置了,这时候可以让前后两个位置向外围扩张一下,恩就像女士拉皮一样,呵呵,很形象吧。

    当然要说这种算法怎么想到的,那多看看我们平时的生活,比如我们排队的时候,如果站的非常稀疏插一个人进来的话对整个队伍影响不大,但是如果一个紧靠一个的话,差一个进来大家都要相应地挪动一下,呵呵,所以说很多算法都可以从生活中受到启发的!比如Google的PageRank算法(我的一篇关于PageRank的原理和实现的文章)就是由论文质量的衡量很大程度上是由该论文被其他论文所应用的次数来决定的。

    还有那个PK算法(也可以称作是多数派算法),比如一个字符串中一定有一个字符的数量超过了整个字符串长度的一半,怎么样找出这个字符?那么可以你可以在这个字符串中不断取两个字符不一样的话这两个字符同时删除,一样的话只留下一个,一直到最后,剩下的那个就是所要找的那个(当然有一些的特殊情况需要处理、优化),这种解决的思想就是非常形象的超女比赛的PK制度,哈哈,太有意思了吧。

 

    所以我很多时候碰到很优美的算法的时候老是在想这个算法人家是怎么想到的?这个算法背后所代表的原理或者思想又是什么?这种思想还能够用在哪里?我觉得这才是最关键,能够让你不断地在算法领域越来越有悟性。

    希望这些能对大家有一些启发,也希望大家可以谈谈自己感触很深的算法 :)

 

分享 分享 |  评论 (4) |  阅读 (?)  |  固定链接 |  类别 (算法) |  发表于 18:36  | 最后修改于 2007-08-17 23:51
搜狐博客温馨提示:警惕博客留言诈骗, 搜狐博客管理员的正确地址为http://admin.blog.sohu.com, 其他都是冒牌。搜狐博客官方不会要求参加活动的各位博友缴纳任何的手续费用。请勿轻信留言、评论中的中奖信息,更不要拨打陌生电话及向陌生帐户汇款,谨防受骗!识别更多网络骗术,请 点击查看详情
正在读取评论信息...
您还未登录,只能匿名发表评论。或者您可以 登录 后发表。
 
  一个单亲妈妈的心愿:治好7岁儿子的白血病
表  情:
加载中...
回复通知: 同时用小纸条通知对方该回复