范浩强谈数据结构.pdfVIP

  • 60
  • 0
  • 约8.32千字
  • 约 41页
  • 2017-05-27 发布于河南
  • 举报
范浩强谈数据结构

最后开始说数据结构。 嗯,要开始说数据结构了! ● 啥叫数据结构呢? ● 下定义是一个痛苦的事情。 ● ● 我们生活在数据结构的世界里。 ● 随机存取线性表(数组,vector ) ● 优先队列(priority_queue ) ● 有序集合(各种平衡树,set ) ● 映射(map ,hashmap ) 矛盾。 ● 信息学中充满了矛盾。 ● 语言:C++——Pascal ● 算法:Dijkstra——BellmanFord ● Dinic——SAP ● 数据结构:Treap——Splay ● 自顶向下线段树——自底向上线段树 ● 甲:我写的比你短!乙:我写的比你更短!甲:我 写的比你还短!乙:我常数小!甲:我常数更小… …我们已经厌烦这种争吵了。 数据结构啊。 ● 有没有新鲜玩意呢?。 你听说过函数式编程吗?。 ● Haskell 、 Erlang…… ● ● 函数式编程的思想: ● 所谓程序,是把输入映射成输出的函数。 ● 所谓函数,就是定义域+ 对应法则。 ● 一个函数可以由其他函数拼起来。 举个例子。 ● 如何实现:读入若干行,输出长度不超过10 的 行? ● ● main = interact $ unlines . filter ((10) . length) . lines 举个容易懂的例子。。。 ● fac 0=1 ● fac x=x*fac (x-1) ● 嗯,这就是阶乘的写法。 ● 如果用命令式呢? ● s=1 ● for i in range(1,n+1): ● s*=i ● 你注意到一个区别没有? ● 函数式编程从不修改任何东西。它只做一件事:定义。 从不“修改”任何东西?。 ● 从不“修改”东西?你不修改任何修改任何东西能 写出一个快排出来吗? ● quicksort [] = [] ● quicksort (x:xs) =quicksort (filter xs (x)) ++ [x] ++ quicksort (filter xs (=x)) ● 神奇吧? 数据结构呢? ● 你能不“修改”任何东西写出一个线段树出来吗? ● 当然可以啦。 ● 介于你对Haskell 的语法了解比较少。。。我 就写伪代码吧。 ● 支持:修改一个元素,查询一段和。 “ 伪”代码。 ● buildtree(l,r)= 递归构建一个从l 到r 的树。 ● ask(a,b,e)= 递归地询问a 节点对应的子树中从 b 到e 的和 ● change(a,b,y)= 返回一棵新的树的根,表示a 节点对应的子树把位置b 修改成y 之后形成的 树。 ● 慢点,慢点:你怎么能每次返回一棵新的树! (空间+ 时间会爆的!) “ 伪”代码。 ● buildtree(l,r)= 递归构建一个从l 到r 的树。 ● ask(a,b,e)= 递归地询问a 节点

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档