(一)算法基础知识

                                     衡量 算法效率的常用标准是速度!

算法入门

               插入排序思想:从第二个开始,将每个作为关键字,与前面一个做对比,若前面比key大,互换,通过循环,保持之前的顺序是排好的。

               伪代码:insertion-sort(A)

                                                w-s
for j =2 to leng[A]                             n-1
  i = j -1;                                     n-1
  while i>0 and A[i] > key                      (n-1)!=(n^2-n)/2
    do A[i+1] <- A[i]
       i <- i-1
  A[i+1] = key                                  n-1                                                         

               T(n) = O(n^2)

              循环不变式正确性的证明:初始化,保持,终止(可以判断一般的递归式使用循环的正确性)              

              最坏情况(w-s)和平均情况(a-w),一般情况下算最坏情况。

              增长的量级,即增长率。最坏情况表示Ө记号。

算法设计

           分治法:分解,解决,合并。

         合并排序思想:将n个元素分解成个含n/2个元素的子序列

                                    用合并排序法对两个子序列递归地排序

                                    合并两个已排序的两个子序列

      

Merge -sort(A,p,r)                                         a-s
  if p < r                                               
     then p = (p+r)/2                分解                 lg(n)
      Merge -sort(A,p,q)             解决                 T(n/2)
      Merge -sort(A,p+1,r)
      Merge -sort(A,p,q,r)           合并                 O(n)
     运行时间              o(1)                       n = 1

                     T(n) =   2T(n/2) + o(n)      n >1

       当n > 1 时,T(n) = o(nlg(n)),可采用主定理来证明,也可以用“递归树”来证明。

       每一层的代价是cn,而树的高是lg(n),故其总代价是O(cnlg(n))


              练习:冒泡排序:重复交换相邻的两个反序元素

          

Bubblesort(A)                                     w-s
  for i = i to leng(A)                                n                            
      do for j = leng(A) to i+1                       n-1
          if A[j] < A[j-1]                              
            then exchange A[j] <-> A[j-1]              n!
                  1          n =1      

            T(n) = O(n^2)  n >1

函数的增长

   表示: Ө记号      E   c1, c2,  n0, 使任意n>= n0,有0<= c1g(n) <=f(n)<= c2g(n)

            O记号     渐进上界的时候用O(g(n))来表示: cg(n) >= f(n) >= 0

             Ω记号   渐进下界的时候用Ω(g(n))来表示:f(n) >= cg(n)>= 0

                  o记号    非渐进紧确的上界:cg(n) >= f(n) >= 0 例:2n = o(n^2),2n^2  != o(n^2)  

    标准记号和常用函数:下取整和上取整

                                            取摸运算:若(a mod n) = (b mod n) 则可以写   a≡b(mod n) 

                                            对数:lg(n) =log 2(n)(2为底)

                                                       ln(n) = log e(n)

                                                        lg^k(n) = (lg(n))^k

                                             阶乘

                                            函数迭代

                                             多重对数函数:lg*(n) lg*(16) =3  定义:lg*(n) = min (i>= 0:lg^i(n) <= 1)

递归式       

                      三种递归式的方法:

                              代换法:假设某界存在,用数学归纳法证明

                             递归树方法:将递归式转换成树形结构,再利用对合式限界来解出递归式

                            主方法:T(n) = aT(n/b) +f(n)

主方法三种情况:若对于某常数ε>0,有f(n) = O(n^(log_b(a)-ε)),则T(n)=Ө(n^(log_b(a)));

                        若f(n)=Ө(n^(log_b(a))),则T(n) = Ө(n^(log_b(a)) * lgn);

                        若对某常数ε>0,有f(n)=Ω(n^(log_b(a) + ε)),且对常数c<1与足够大的n,有a*f(n/b) ≤ c*f(n),则T(n) = Ө(f(n))。

概率分析和随机算法

                     雇佣问题

                     随机算法

                  指示器随机变量:给定一个样本空间S和事件A,那么事件A对应的指示器变量I{A}的定义为:

                                           I{A} = 1 如果A发生的话

                                          or   = 0 如果A不发生的话

                                           变量X_H来对应正面朝上的情况,则:

                                          X_H = I{H} = 1 如果H发生,即正面朝上

                                          or               = 0 如果T发生,即背面朝上

                        指示器随机变量的期望值等于对应事件发生的概率

              

你可能感兴趣的:((一)算法基础知识)