summarize

数据结构

  • 排序:堆排序(利用IndexMinPQ),快排,合并排序.O(nlgn)

  • 符号表:无序链表的顺序查找,有序数组的二分查找,二叉查找书,红黑树,散列表,并查集

  • 有向图:深度优先搜索,广度优先搜索,最短路径:dijkstra(边的权重为正),利用拓扑排序(无环),bell-ford ( 不能存在负权重环).

    判断图是否有环,强连通分量(反向图的逆后序),  拓扑排序(逆后序)

    编译器中的算法   编译器优化的图算法

算法

  • 贪心:最短路径(dijkstra)

  • 动态回归:最短路径(bellman-ford)。

  • 回溯:(深度优先)

  • 网络流:静态单赋值

贪心和动态回归的区别:

同:(1)递推算法。(2)由局部最优推导全局最优。

异:贪心算法每一步都不会再修改,当前最优同时保证上一步最优,即无后效性。动态规划:有后效性,但上一步的最优可能在下一步就会找到更优的解,如最短路径中:if(dist[t]>dist[s]+weight(s,v))dist[t] = dist[t]+weight(s,v)

(递归分治,分支限界(广度有限或者优先队列))   常用五算法

SQL

  • 关系模式的范式.

设计数据库结构的时候,满足范式的要求,可以避免数据冗余和操作异常.当发现一张表存在局部依赖,传递依赖,可以拆分表的结构.

           第一范式:原子性:字段不能再分割了.

           第二范式:局部依赖.如果一张表同时存在((A,B)->C),(A->C)两种函数依赖,则称((A,B)->C)存在局部依赖.

           第三范式:传递依赖.A->B,B->C那么A->C就存在传递依赖.

  • 查询优化

关系代数表达式可以转化为SQL语句,对代数表达式的优化可以得到一颗语法树.投影即select操作,选择即where的谓词过滤语句.

          尽量使where语句谓词过滤操作选择操作靠近叶子节点,可以得到较小的中间结果.

          同时计算一连串的选择操作或者一连串的投影操作,避免来来回回多次扫描文件.

          如果一个表达式或者一次操作多次出现,可以使用存储过程来存储数据或者操作,将重复值作为存储过程的参数(类似函数编程的curry化).

hive sql编译器对sql生成的operatorTree编译优化中对树的剪枝或者并行处理可以理解为reduce的一个任务.   Hive Sql编译过程

  •       DDL,DCL.DML

  • 存储过程,函数.

mysql:函数delimiter $$;create function fn() returns type begin return data end $$. 存储过程create proceducer name(INOUT @param)

hive sql: 同上.其他函数:UDF, GenericUDF,UDAF,UDTF. 


编译原理



待续~

参考:

你可能感兴趣的:(summarize)