I collect and make up this pseudocode from the book:

<<Introduction to the Design and Analysis of Algorithms_Second Edition>> _ Anany Levitin
Note that throughout the paper, we assume that inputs to algorithms fall within their specified ranges and hence require no verfication. When implementing algorithms as programs to be used in actual applications, you should provide such verfications.
About pseudocode: For the sake of simplicity, we omit declarations of variables and use indentation to show the scope of such statements as for, if and while. As you saw later, we use an arrow <- for the assignment operation and two slashes // for comments. 

Algorithm SelectionSort(A[..n-])
// Sorts a given array by selection sort
// Input: An array A[0..n-1] of orderable elements
// Output: Array A[0..n-1] sorted in ascending order
for i <- to n- do
min <- i
for j <- i+ to n- do
if A[j] < A[min]
min <- j
swap A[i] and A[min]
Algorithm BubbleSort(A[..n-])
// Sorts a given array by bubble sort
// Input: An array A[0..n-1] of orderable elements
// Output: Array A[0..n-1] sorted in ascending order
for i <- to n- do
for j <- to n--i do
if A[j+] < A[j]
swap A[j] and A[j+]
Here is a pseudocode for the improved version of bubble sort:
Algorithm BetterBubbleSort(A[..n-])
// The algorithm sorts array A[0..n-1] by improved bubble sort
// Input: An array A[0..n-1] of orderable elements
// Output: Array A[0..n-1] sorted in ascending order
count <- n- // number of adjacent pairs to be compared
sflag <- true // swap flag
while sflage do
sflage <- false
for j <- to count- do
if A[j+] < A[j]
swap A[j] and A[j+]
sflag <- true
count <- count-


Here is a pseudocode of teh most straightforward version:
Algorithm BruteForcePolynomialEvaluation(P[..n], x)
// The algorithm computes the value of polynomial P at a given point x by the
//     "highest-to-lowest" brute-force algorithm
// Input: Array P[0..n] of the coefficients of a polynomial of degree n, stored from the lowest
//     to the highest and a number x
// Output: The value of the polynomial at the point x
p <- 0.0
for i <- n downto do
power <-
for j <- to i do
power <- power*x
p <- p + P[i]*power
return p
We can count just the number of multiplications in the algorithm's inner-most loop to find the algorithm's efficiency class: M(n) = n(n+1)/2 = O(n^2)
The above algorithm is very inefficient: we recompute powers of x again and again as if there were no relationship among them. Thus, the obvious improvement is based on computing consecutive powers more efficiently:
Algorithm BetterBruteForcePolynomialEvaluation(P[..n-], x)
// The algorithm computes the value of polynomial P at a given point x by the
//     "lowest-to-highest term" algorithm
// Input: Array P[0..n] of the coefficients of a polynomial of degree n, from the
//     lowest to the highest, and a number x
// Output: The value of the polynomial at the point x
p <- P[]; power <-
for i <- to n do
power <- power*x
p <- p + P[i]*power
return p
The number of multiplications here is M(n) = 2n, in another word, we have a linear algorithm
Algorithm SequentialSearch2(A[..n], K)
// Implements sequential search with a search key as a sentinel
// Input: An array A of n elements and a search key K
// Output: The index of the first element in A[0..n-1] whose value is equal
// to K or -1 if no such element if found
A[n] <- K
i <-
while A[i] ≠ K do
i <- i +
if i < n return i
else return - Algorithm BruteForceStringMatch(T[..n-], P[..m-])
// Implements brute-force string matching
// Input: An array T[0..n-1] of n characters representing a text and
// an array P[0..m-1] of m characters representing a pattern
// Output: The index of the first character in the text that starts a
// matching substring or -1 if the search is unsuccessful
for i <- to n-m do
j <-
while j < m and P[j] = T[i+j] do
j <- j+
if j = m return i
return -
Algorithm BruteForceClosestPoints(P)
// Finds two closest points in the plane by burte force
// Input: A list P of n(n ≥ 2) points P1 = (x1, x2),...,Pn = (xn, yn)
// Output: Indices index1 and index2 of the closest pair of points
dmin <- ∞
for i <- to n- do
for j <- i+ to n do
d <- sqrt((xi-xj) + (yi-yj)) // sqrt is the square root function. In fact, computing square roots can be avoided, the trick is to realize that we can simply ignore the square root function
if d < dmin
dmin <- d; index1 <- i; index2 <- j
return index1, index2
Let x1 < x2 < ... < xn be real numbers representing coordinates of n villages located along a straight road. A post office needs tobe built in one of these villages. Design an efficent algorithm to find the post offfice location minimizing  the maximum distance from a village to the post office.
Assuming that the points x1, x2, ... xn are given in increasing order, the answer is the point xi that is the closest to m = (x1 + xn) / 2, the middle point between x1 and xn. (The middle point woule be the obvious solution if the post-post office didn't have tobe at one of the given locations.) Indeed, if we put the post office at any location xi to the left of m, the longest distance froma village to the post office would be xn - xi; this distance is minimal for the rightmost among such points. If we put the post office at any location xi to the right of m, the longest distance from a village to the post office would be xi - x1; this distance isminimal for the leftmost among such points.
Algorithm PostOffice(P)
// Input: List P of n(n ≥ 2) point s x1, x2,..., xn in increasing order
// Output: Point xi that minimizes max(1≤j≤n)|xj - xi| among all x1,x2,...,xn
m <- (x1+xn) /
i <-
while xi < m do
i <- i+
if xi - x1 < xn - xi-
return xi
else return xi-
new words:
polynomial: 多项式 coefficient: 系数 inefficient: 低效的
sentinel: 哨兵 plane: 平面 coordinate: 坐标
village: 村庄 straight: 直; 直线 (END_XPJIANG)

Design and Analysis of Algorithms_Brute Froce的更多相关文章

  1. Design and Analysis of Algorithms_Decrease-and-Conquer

    I collect and make up this pseudocode from the book: <<Introduction to the Design and Analysis ...

  2. Design and Analysis of Algorithms_Divide-and-Conquer

    I collect and make up this pseudocode from the book: <<Introduction to the Design and Analysis ...

  3. Design and Analysis of Algorithms_Fundamentals of the Analysis of Algorithm Efficiency

    I collect and make up this pseudocode from the book: <<Introduction to the Design and Analysis ...

  4. Design and Analysis of Algorithms_Introduction

    I collect and make up this pseudocode from the book: <<Introduction to the Design and Analysis ...

  5. 6.046 Design and Analysis of Algorithms

    课程信息 6.046 Design and Analysis of Algorithms

  6. 斯坦福大学公开课机器学习: machine learning system design | error analysis(误差分析:检验算法是否有高偏差和高方差)

    误差分析可以更系统地做出决定.如果你准备研究机器学习的东西或者构造机器学习应用程序,最好的实践方法不是建立一个非常复杂的系统.拥有多么复杂的变量,而是构建一个简单的算法.这样你可以很快地实现它.研究机 ...

  7. Algorithms: Design and Analysis, Part 1 - Programming Assignment #1

    自我总结: 1.编程的思维不够,虽然分析有哪些需要的函数,但是不能比较好的汇总整合 2.写代码能力,容易挫败感,经常有bug,很烦心,耐心不够好 题目: In this programming ass ...

  8. Algorithms: Design and Analysis, Part 1 - Problem Set 1 - Question 5

    最后一个图像,用画图软件绘制了一下,自己的直接主观判断还是有些小问题的 注意:最后的灰色的线条会超过橙色的线条

  9. EE就业最好的方向是转CS,其次是VLSI/ASIC DESIGN & VERIFICATION

    Warald在2012年写过一篇文章<EE现在最好就业的方向是VLSI/ASIC DESIGN VERIFICATION>,三年过去了,很多学电子工程的同学想知道现在形势如何. 首先,按照 ...

随机推荐

  1. 函数图象(N=x+y*i)

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  2. Android想服务器传图片,透过流的方式。还有读取服务器图片(文件),也通过流的方式。

    /** * Created by Administrator on 2016/7/19. */ import android.util.Log; import com.gtercn.asPolice. ...

  3. 模板函数(template function)出现编译链接错误(link error)之解析

    总的结论:    将template function 或者 template class的完整定义直接放在.h文件中,然后加到要使用这些template function的.cpp文件中. 1. 现 ...

  4. WPF基础知识、界面布局及控件Binding(转)

    WPF是和WinForm对应的,而其核心是数据驱动事件,在开发中显示的是UI界面和逻辑关系相分离的一种开放语言.UI界面是在XAML语言环境下开发人员可以进行一些自主设计的前台界面,逻辑关系还是基于c ...

  5. BestCoder 2nd Anniversary

    A题 Oracle http://bestcoder.hdu.edu.cn/contests/contest_chineseproblem.php?cid=703&pid=1001 大数相加: ...

  6. HLG1116-选美大赛

    Description 一年一度的哈理工选美大赛开始了.来自各个院系的N个美女们都在一起排成一排,然后从左到右给他们标号(1-N),评委叫兽开始观摩,由于身高高低都不同, 叫兽想从中选出尽可能多的人使 ...

  7. pointers on c (day 1,chapter3)

    第3章 数据 c中,仅有4中基本数据类型——整型.浮点型.指针和聚合类型(如数组和结构等). 整型:字符.短整型和长整型,它们都分为有符号(signed)和无符号(unsigned). short i ...

  8. 转:【译】CSS3:clip-path详解

    我的一个学生,Heather Banks,想要实现他在Squarespace看到的一个效果: 根据她的以往经验,这个网站的HTML和CSS是完全在她的能力范围以内,于是我帮助她完成了这个效果.显示na ...

  9. 我的jQuery源码读后感-jquery1.11.x 集成了 AMD

    jquery1.11.x 集成了 AMD AMD 加入到了 jQuery, jQuery 把源码切分成各个逻辑模块. ready 整合成依赖 Deferred 的模块. 有些模块被切分成一些更加利于维 ...

  10. C#生成二维码的方法

    本文实例讲述了C#生成二维码的方法.分享给大家供大家参考.具体实现方法如下: 首先引用ThoughtWorks.QRCode.dll 具体代码如下: 复制代码 代码如下: using System; ...