c2java select algorithm

对于很多应用来说,随机算法是最简单的或者最快的。既简单又快的有没有呢?

那需要深刻的洞察力或者革命性的突破。

什么是随机算法

随机算法与确定算法区别是:它还接收输入随机比特流来做随机决策。

对于同一个输入,每次运行所用的算法行为都不同,虽然结果都是一样的。

Foiling an adversary

可以构造一个输入使得一个确定性算法运行时间最长。

随机算法可以看作是从一族算法中随机选出来的一个算法。

快速排序O(NlgN)的精髓在于随机化划分。

快速的意思是常数因子是1.38。

标准库里面采用小规模插入排序,非递归化,三分能进一步提高20%的速度。

理想情况是均分两个子问题。如果每次都分为9:1,

T(n) = T(9n/10) + T(n/10) + cn,

则递归树高度是log_{10/9} n = ? lgn。

如果输入是已经排好顺序的,则随机化

则打破这种顺序。有没有可能反而随机成一个升序或者降序呢?

概率是1/N!, 这么小的概率我们认为不可能发生的(当然,严格实时系统除外)。

因此我们高概率的认为运行时间是期望的。

线性时间的选择算法用在动态/在线输入情景时才有意义。

如果是静态输入,我们可以对整个输入做随机排列。

动态输入因为在某一个时刻只看到部分,就不能这样干了。

划分

int randomPartition(int[] a, int p, int r) 实现上是很精妙的。

是维持这个不变量:[p..i] <= x < [i+1, j)

我也是原样抄过来,对最先写出这段代码的程序员致敬。

[] http://www.ece.northwestern.edu/~nickle/randAlg/Karp91.pdf

c2java select algorithm,布布扣,bubuko.com

时间: 2024-12-18 14:39:17

c2java select algorithm的相关文章

Randomize select algorithm 随机选择算法

从一个序列里面选择第k大的数在没有学习算法导论之前我想最通用的想法是给这个数组排序,然后按照排序结果返回第k大的数值.如果使用排序方法来做的话时间复杂度肯定至少为O(nlgn). 问题是从序列中选择第k大的数完全没有必要来排序,可以采用分治法的思想解决这个问题.Randomize select 算法的期望时间复杂度可以达到O(n),这正是这个算法的迷人之处.具体的算法分析可以在<算法导论>这本书里查看. 贴出伪代码: RANDOMIZED-SELECT(A, p, r, i) 1 if p =

Intel 寻找热点

Lab 1: Finding Hotspots ___________________________________________________________________ Developer Product Division 寻找热点 Disclaimer The information contained in this document is provided for informational purposes only and represents the current v

Intel 并行性分析

Lab 2: Analyzing Parallelism ___________________________________________________________________ Developer Product Division Disclaimer The information contained in this document is provided for informational purposes only and represents the current v

快速选择算法

利用快速排序的思想,选择第k大(或小)的数. 具体地,利用快速排序的划分思想,每次将数组划分为两部分,确定该第k大(或小)的元素在哪一个部分,然后对该部分递归进行划分,直到找到第k大(或小)的元素.快速排序期望时间复杂度为O(n log n),快速选择算法期望时间复杂度为O(n). 关于枢纽元的选择: 选取第一个或最后一个元素,一般做法. 三数取中值法.取首.中.尾3个位置的元素的中间值,并将该中间值交换至第一个或最后一个元素,继续同1进行排序. 中位数的中位数法. 将所有元素进行组分,如每5个

ntp的基础知识

关于穆阿浩提到的ntp基础知识,我今天来做一个针对性的回答. ntp配置中的tinker参数? ntp的同步方式slew step的区别? restrict含义?restrict -6 default ignore含义? fudge 127.127.1.0 stratum 10 含义? minpoll maxpoll 含义?minpoll 4 maxpoll 6 中4 6分别为甚么意思? ntpq -np输出解读? ntpq -np输出中INIT 是何意? offset多少就算不合理?我们一般o

ieee80211 phy1: Failed to select rate control algorithm

/************************************************************************ * ieee80211 phy1: Failed to select rate control algorithm * 说明: * MT7601u驱动rate control algorithm. * * 2017-9-15 深圳 龙华樟坑村 曾剑锋 **************************************************

用于 SELECT 和 WHERE 子句的函数

1 一个 SQL 语句中的 select_expression 或 where_definition 可由任何使用了下面所描述函数的表达式组成. 2 3 包含 NULL 的表达式总是得出一个 NULL 值结果,除非表达式中的操作和函数在文档中有另外的说明. 4 5 注意:在一个函数名和跟随它的括号之间必须不存在空格.这有助于 MySQL 语法分析程序区分函数调用和对恰巧与函数同名表或列的引用.然而,参数左右两边的空格却是允许的. 6 7 你可以强制 MySQL 接受函数名后存在空格的形式,这需要

hdu 5101 Select(树状数组)

题目链接:hdu5101 Select 题目大意:N和K,给定若干组数,要从从不同组中选出连个数和大于K,问说有多少种组成方案. 解题思路:树状数组维护,将所有的数离散化掉对应成树状数组的下标,每次先计算一组,然后再将该组的元素插入到 树状数组中. #include <cstdio> #include <cstring> #include <algorithm> using namespace std; typedef long long ll; const int m

大连廿四2016暑假集训day1-T3(quick select&amp;linear select)

3 kth3.1 Description给定 n 个不超过 10^9 的正整数,请线性时间选择算法 (linear select)求其中的第 k 大值.3.2 Input第一行两个整数 n,k. 第二行 n 个整数,表示题目中的那 n 个正整数.3.3 Output一行,表示答案.3.4 Sample Input10 3 2 4 7 3 5 6 9 6 1 83.5 Sample Output73.6 Constraints一共 10 个测试点,每个测试点 10 分,只有当你的答案与标准答案完全