随机快速排序学习记录

Randomized Quicksort
·running time is independent of input ordering
·no assumptions about the input distribution
·np specific input elict the worst-case behavior
·the worst-case is determined only by a random-number generator

pivot on random element

Analysis:
T(n) = r.v for running time assuming rand #‘s independent
For k = 0,1,2,..., n-1 ,let
X_k =[ 1 ,if partition genrates a k : n-k-1 split
[ 0 otherwise
X_k is an indicator random variable(指示器随机变量) only 1 or 0

E[X_k]= 0*Pr{X_k=0}+1*Pr{X_k=1}
= Pr{X_k=1}
= 1/n
each element has 1/n chance to be pivot

T(n)=[T(0)+T(n-1)+Θ(n) if 0:(n-1) split
=[T(1)+T(n-2)+Θ(n) if 1:(n-2) split
=[....
=[T(n-1)+T(0)+Θ(n) if n-1:0 split

n-1
=∑X_k(T(k)+T(n-k-1)+Θ(n))
  k=0

E[T(n)]=E[∑...]
  n-1
=∑X_k(T(k)+T(n-k-1)+Θ(n))
  k=0
  n-1
=∑E(x_k)*E[X_k(T(k)+T(n-k-1)+Θ(n))]
  k=0
          n-1                n-1                      n-1
=1/n *∑E[T(k)] + 1/n*∑E[T(n-k-1)] + 1/n*∑Θ(n)
          k=0               k=0                     k=0
          n-1
=2/n *∑E[T(k)] + Θ(n)
          k=0
Absorb k=0,1 terms into Θ(n) for technical convenience
                       n-1
E[T(n))] = 2/n *∑E[T(k)] + Θ(n)
                       k=0

Prove E[T(n)] <= an lg(n) for const a>0
chosose a big enough so that
an lg(n) >= E[T(n)] for small n

n-1
use fact: ∑klg(k)<= 1/2* n^2 `lg(n) -1/8 * n^2
              k=2

Substitution:
                       n-1
E[T(n)]<= 2/n* ∑ak lg(k) + Θ(n)
                       k=2
          <= 2a/n *(1/2 * n^2 lg(n) - 1/8 * n^2) + Θ(n)
          = an lg(n)-(an/4 - Θ(n))
             desired - residual
          <= an lg(n) if a big enough so that an/4 > Θ(n)

时间: 2024-08-09 02:05:24

随机快速排序学习记录的相关文章

17 | 如何正确地显示随机消息? 学习记录

<MySQL实战45讲>17 | 如何正确地显示随机消息? 学习记录http://naotu.baidu.com/file/ee69cc1cd0aefb09e02efbaf9a3b2909?token=ba56dcf185ed4e27 原文地址:https://www.cnblogs.com/jtfr/p/11368240.html

ios学习记录 day41 UI17 多线程

CPU(工厂) 进程(车间) 线程(工人) 一个进程代表一个应用程序 CPU总是运行一个进程,其它进程处于非运行状态.一个进程可以包含多个线程.线程与线程之间可以共享进程的内存区域. 打开一个应用程序,系统会给我们创建一个线程,称为主线程 管理主界面的UI与内部循环机制(与界面相关的东西必须放在主线程中!!!) 压力比较大且会造成线程阻塞(界面卡),因此我们通过创建子线程来对主线程进行分压. 什么时候用多线程 1.网络请求(同步的) 2.文件读写(少) 3.大数据计算(冒泡) 4.数据库sele

Python学习记录-2016-12-22

今日学习记录: info = {     "stu1": "Tenglan wu",     "sut2": "luola longze",     "sut3": "maliya xiaoze" }#定义一个字典,字典是无序的 print(info)#打印这个字典 print(info["stu1"])#通过 key 打印这个字典里的值 info["stu

Python学习记录day3

Python学习记录 day3 今天是银角大王武sir讲课.先回顾了上节课所学,然后讲到了面向对象思想. set set是一个无序且不重复,可嵌套的元素集合 class set(object):     """     set() -> new empty set object     set(iterable) -> new set object     Build an unordered collection of unique elements.     

Linux学习记录--文件IO操作相关系统编程

文件IO操作相关系统编程 这里主要说两套IO操作接口,分别是: POSIX标准 read|write接口,函数定义在#include<unistd.h> ISO C标准 fread|fwrite接口,函数定义在#include<stdio.h> 有书上说POSIX标准与ISO C标准的区别在于文件读写是否带缓冲区,我则不是很认同,因此POSIX标准下的IO操作也是带缓冲区的,至于这两个标准下的IO性能谁更加好则不一定,因为这和缓冲区的大小,以及用户逻辑有很大关系. POSIX标准

Python学习记录day5

title: Python学习记录day5 tags: python author: Chinge Yang date: 2016-11-26 1.多层装饰器 多层装饰器的原理是装饰器装饰函数后其实也是一个函数这样又可以被装饰器装饰. 编译是从下至上进行的执行时是从上至下进行. #!/usr/bin/env python # _*_coding:utf-8_*_ ''' * Created on 2016/11/29 20:38. * @author: Chinge_Yang. ''' USER

【 论文学习记录】A flexible and scalable slam system with full 3d motion estimation 一种灵活可扩展带有3D运动估计的slam系统

A flexible and scalable slam system with full 3d motion estimation   论文学习记录 这篇论文系统框架,栅格多阈值,更新同步与伪数据,扫描匹配起始点,协方差交叉融合的思想还是值得借鉴的. 摘要 关注于搜救机器人建图定位与导航的框架性文章. 低计算资源的在线快速获取栅格地图: 结合鲁棒的激光扫描匹配方法和惯性传感器姿态估计系统. 快速地图梯度近似与多分辨率(类似图像金字塔)栅格地图,精确而不需要闭环检测. 介绍 2D slam 子系

JavaScript学习记录day7-高阶函数

JavaScript学习记录day7-高阶函数 [TOC] 1. 什么是高阶函数 高阶函数英文叫Higher-order function.那么什么是高阶函数? JavaScript的函数其实都指向某个变量.既然变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数. 一个最简单的高阶函数: function add(x, y, f) { return f(x) + f(y); } 当我们调用add(-5, 6, Math.abs)时,参数x,

caffe学习记录

在深度学习零率,caffe是一个非常高效的的图像处理框架,结合了nvidia的cuda,cudnn加速技术,非常适合进行AI CNN方向的图像分类,回归,分割等. 但是由于caffe的教程较少,而且配置比较复杂,可能用的人没有tf那么广泛. 昨天在Ubantu14.04上配置了caffe, CUDA8.0, Cudnn5.1等,从今天开始进行caffe的学习记录总结. 跑完make all runtest后,如果运行成功,表示caffe环境配置好了. 首先测试一下minist60000+1000