怎么学算法比较好? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
krazy
V2EX    程序员

怎么学算法比较好?

  •  
  •   krazy
    krazyLee 2011-08-29 23:06:25 +08:00 11956 次点击
    这是一个创建于 5222 天前的主题,其中的信息可能已经有所发展或是发生改变。
    突然觉得还是要巩固一下算法的学习。

    之前只是了解一些简单的数据结构和几个典型的查找和排序算法。

    正准备看严蔚敏的《数据结构》(C语言版)

    我在想要不要学一下ruby来实现这些算法,而不是用C语言。
    是不是这样对算法的理解应该会更方便一点?

    不知道这么做靠不靠谱?
    还有关于算法的学习,各位有什么可以指导的。
    特别是在痛苦的思维纠结时候,您当时是怎么克服的?

    谢谢各位啦~~~
    24 条回复    1970-01-01 08:00:00 +08:00
    Just1n
        1
    Just1n  
       2011-08-30 00:00:11 +08:00
    继续搭车,我最近也在看严蔚敏的那本书。
    不过我是属于半路出家,大学里没看过。
    zhouhua97
        2
    zhouhua97  
       2011-08-30 00:05:01 +08:00 via Android
    严的书不错,当年就是看这本。
    cabinw
        3
    cabinw  
       2011-08-30 00:39:05 +08:00
    用其他语言实现会了解更多,但是要了解本质的话建议还是用C,然后再用其他的
    fsw90628
        4
    fsw90628  
       2011-08-30 00:40:45 +08:00
    MIT - Introduction to Algorithms
    &playnext=1&list=PL8B24C31197EC371C
    simy
        5
    simy  
       2011-08-30 07:47:32 +08:00
    支持四楼,算法导论,算法界的神书~
    daqing
        6
    daqing  
       2011-08-30 08:53:52 +08:00
    慢慢学。
    kojp
        7
    kojp  
       2011-08-30 09:08:54 +08:00
    没学过高数的人看数据结构会不会很吃力?
    frittle
        8
    frittle  
       2011-08-30 09:26:01 +08:00
    4L的算法导论必须看
    fcicq
        9
    fcicq  
       2011-08-30 11:51:56 +08:00   1
    你需要定个目标, 学到哪一层. 可以用这个做参考
    http://www.indiangeek.net/wp-content/uploads/Programmer%20competency%20matrix.htm

    初级: 买简单的算法书, 比如大话数据结构 (但偶具体没有看过)
    中级: 直接到 Online Judge 上(推荐 POJ/ZOJ)刷简单题, 然后逐渐增加难度. 严xx 那本书没什么好看的. 参考书: 程序设计导引及在线实践(但书上用了另一个 OJ, 不影响做题, 这书也是面向新手的). 偶本人看过日文的蚁书, 有银子就可以找人代购繁体版.
    中高级: TopCoder SRM
    高级: 偶是中级水平... :D 上面的别问偶... :D
    krazy
        10
    krazy  
    OP
       2011-08-30 13:56:50 +08:00
    @fsw90628 嗯 这个好。 手机装一个网易公开课APP,就可以睡前看一看~
    krazy
        11
    krazy  
    OP
       2011-08-30 13:57:15 +08:00
    @kojp 听说严蔚敏曾经发帖说她的数学学得就不太好
    krazy
        12
    krazy  
    OP
       2011-08-30 14:02:28 +08:00
    @fcicq 本来是准备严那本书配合《数据结构习题集》的。现在看来你这个组合更好诶。
    我先努力学到中级就好了,哈哈~
    args
        13
    args  
       2011-08-30 17:51:50 +08:00
    @fcicq 话说你的博客根本就看不懂啊,意识流么。。。
    Sun
        14
    Sun  
    &nsp;  2011-08-31 19:06:43 +08:00
    算法导论
    kasuganosora
        15
    kasuganosora  
       2011-09-04 17:07:37 +08:00
    算法导论
    pursuit
        16
    pursuit  
       2011-09-08 16:42:33 +08:00
    刘汝佳的《算法竞赛入门经典》不错
    http://book.douban.com/subject/4138920/
    oldman
        17
    oldman  
       2011-09-11 15:50:57 +08:00
    推荐用fp的语言(比如lisp haskell)学习算法,比较能接近算法的数学意义。也可以用c++的元编程写,就是比较累。ruby没学过,给不了什么意见了。
    10201501
        18
    10201501  
       2011-09-11 16:09:05 +08:00
    最近对于C语言也很是发愁啊 同求意见啊
    krazy
        19
    krazy  
    OP
       2011-09-11 16:33:31 +08:00
    @oldman 这个也太高端了吧....弱弱的问,能用js的函数式凑合不?.....
    keakon
        20
    keakon  
       2011-09-11 16:49:09 +08:00
    @krazy 算法很有必要用C来写,因为在表达底层数据结构时更有优势,而且测试性能时也不会因为语言的因素受到影响。
    oldman
        21
    oldman  
       2011-09-11 17:14:02 +08:00
    @krazy 也是可以的。纯用fp语言的好处就是逼迫你自己不要一下子就去想命令式的实现,而是重点关注算法本身的逻辑。给两个例子,haskell的(手边没环境,例子都不是我自己写的)

    fibonacci 数列
    fib :: Integer -> Integer
    fib 0 = 0
    fib 1 = 1
    fib n = fib (n-1) + fib (n-2)

    快排
    quicksort :: [Char] -> [Char]
    quicksort [] = []
    quicksort (x:xs) = quicksort [y | y <- xs, y <= x] ++ [x] ++ quicksort [y | y <- xs, y > x]

    =============
    你看,基本就是把步骤用haskell描述一下就好了。当然这些用命令式语言也是可以写出来的(无论是用递归还是迭代的方式),用fp的意义就是更清楚的将“实现算法的步骤”和“为了这些步骤而去实现的步骤”区分开。

    比如:快排中,“将数列按x分割成两部分,左边小于它,右边大于它”是一个“实现算法的步骤”,而“用两个指示ij去从头开始迭代,如果发现j指向的比x小,那么就交换下i与j指向的元素,等等等等”,这是“为了这些步骤而去实现的步骤”,先专注于“实现算法的步骤”,再去专注怎么去实现,要比一上来就去想实现,要好得多。呵呵,不知道我说明白了没有。
    ================

    还有一点,如果想学习算法,一定要多思考多练,举个例子,关于搜索树:为啥搜索树要建成二叉的?为啥每种搜索树都有一个maintain操作,它们存在的意义是啥?因为这个maintain操作,不同的树分别引入了什么概念(比如红黑树、AVL),它们又是如何运作的,它们为啥是正确且高效的?等等。

    希望对你有帮助。
    krazy
        22
    krazy  
    OP
       2011-09-14 15:38:15 +08:00
    @oldman 啊 非常感谢,还举这么详细的例子 ^_^
    我想我明白你的意思了,就是区分好算法逻辑和算法实现部分。
    "先专注于'实现算法的步骤',再去专注怎么去实现"....

    不过还是感觉现在学haskell,成本太高了
    还是按@keakon 的建议用C吧,应该会对数据结构理解更深一点....
    orzzzzz
        23
    orzzzzz  
       2011-09-14 19:52:20 +08:00
    印象中网易公开课有算法导论的字幕版......
    有一阵曾想用python一个一个的去做习题......没hold住...泪奔.
    oldman
        24
    oldman  
       2011-09-14 22:58:32 +08:00
    @krazy 恩,关键是理解其中的思想,别掉入实现的泥沼中。祝坚持到底!
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5167 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 07:37 PVG 15:37 LAX 23:37 JFK 02:37
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86