- 博客(13)
- 收藏
- 关注
原创 《算法导论》第9章 顺序统计学 (2)随机选择
randomized_select使用划分方法randomized_partition(),返回主元位置q(第k小元素)。要查找的是第 i 小元素,若恰好等于k,那么直接返回。如果 i 如果 i > k,则继续在[q + 1, r]中搜索第 i - k 小元素。int randomized_select(int A[], int p, int r, int i){
2012-02-25 23:00:23 2049
原创 《算法导论》第9章 顺序统计学 (1)最小值和最大值
1. 查找最小值逻辑比较简单,用第一个元素来初始化最小值min,然后与数组中其余元素比较,找出最小值。时间复杂度是O(n),已经最优化了。int minimum(int A[], int len){ int min = A[0]; int i; for (i = 2; i < len; i++) if (A[i]
2012-02-25 22:58:47 3278
原创 《算法导论》第7章 快速排序 (四种变形)
这一章的正文及思考题部分讲到了快速排序及其几种变形,包括:Hoare快排,普通快排,随机快排,三数取中快排。这些快排的区别主要是划分方法PARTITION算法的不同:如何选取主元,划分出的两部分范围是什么。根据划分出的范围不同,各变形的QUICKSORT有微小的差别。1. Hoare快排Hoare划分是最初的版本,与《算法导论》中的划分版本相比,
2012-02-24 23:19:26 4371
原创 《算法导论》第6章 堆排序 (4)Young氏矩阵
1. 什么是Young氏矩阵?一个 m * n 的矩阵,其中每一行的数据都从左到右排序,每一列的数据都从上到下排序。其中用 ∞ 代表不存在的元素,一共可以存放 r ≤ mn 个有限的数。如下面程序实现中用来测试的Young氏矩阵:{ 1, 3, 5, 7, 8, 11 }{ 4, 6, 9, 14, 15, 19 }{
2012-02-22 22:08:03 3246
原创 《算法导论》第8章 线性时间排序 (1)计数排序
一种简单的实现是得到数组C,C[i]表示数组A中值为i的元素个数。C = { 2, 0, 2, 3, 0, 1 }就表示两个0,两个2,三个3,一个5。然后将这些数字依次存到数组B中。#include #include void printArray(int[], int);void counting_sort(int A[], int B[], int l
2012-02-19 15:32:18 2021
原创 《算法导论》第6章 堆排序 (2)优先级队列
6.5 优先级队列在实际中堆的一个很常见的应用:用来实现高效的优先级队列。优先级队列分为最大优先级队列和最小优先级队列。最大优先级队列的一个应用是在一台分时计算机上进行作业调度。需要在堆中的每个元素里存储对应对象的柄(handle)。#include #define PARENT(i) ((i) / 2)int heap_maximum(in
2012-02-17 22:25:59 2201
转载 关于程序员成长的一点思考
如果止步不前,多少年后,我们与新进入这个行业的新人们没多少区别。工作经验是廉价的,熬年头就能换来,我们没有多少竞争力。只有努力提高自己,让时间换来的不仅仅是工作经验的增加,而是内力的增强,才会让自己更有价值,不会轻易被淘汰。转载自:http://hp.dewen.org/?p=56程序员的我们,是否想过今后的路该怎么走、如何发展、技术怎样提高?其实这也是我一直在思考的问
2012-02-16 21:32:19 1651
原创 《算法导论》第6章 堆排序 (3)K路归并
问题描述:问题来自习题6.5-8 给出一个时间为O(nlgk),用来将k个已排序链表合并为一个排序链表的算法。此处n为所有输入链表中元素的总数。(提示:用一个最小堆来做k路合并)。在K路归并问题中,取出最小堆的根元素(最小元素)后,如果此元素没有后继元素(next为空),则有两种方案:一、从K路中的另一个链表取出一个元素放到根位置。二、将堆底部最后一个元素挪
2012-02-15 21:58:41 6868 4
原创 《算法导论》第6章 堆排序 (1)最大堆与堆排序
6.1 堆“堆”这个词最初是在堆排序中提出的,但后来就逐渐指“废料收集存储区”,像Lisp和Java中提供的那样。(二叉)堆是一种数组对象,可以被视为一棵完全二叉树。length[A]是数组中的元素个数,heap-size[A]是存放在A中堆的元素个数。树的根是A[1]。堆的重要函数:max_heapifybuild_max_heapheap
2012-02-14 22:40:03 2255
原创 《C和指针》第14章 预处理器
14.2.1 宏#define包括一个规定,允许把参数替换到文本中,这种实现通常称为宏(macro)。#define SQUARE(x) x * x则程序中的SQUARE(5)会被替换成:5 * 5警告:例1: a = 5; printf("%d\n", SQUARE(a + 1));会被替换成5 + 1 * 5 + 1,
2012-02-12 17:57:18 1803
原创 《Shell脚本学习指南》第四章 文本处理工具
4.1 排序文本4.1.1 行的排序未提供命令行选项时,整个记录会根据当前locale所定义的次序排序。在传统的C locale中,也就是ASCII顺序。4.1.2 以字段排序-k选项的后面接着的是一个字段编号,或者是一对数字。每个编号后面都可以接一个点号的字符位置,或修饰符字母。如果仅指定一个字段编号,则排序
2012-02-11 22:47:33 2387
原创 《Shell脚本学习指南》第三章 查找与替换
3.1 查找文本grep:使用POSIX定义的基本正则表达式(BRE)。egrep:使用扩展正则表达式(ERE)。fgrep:快速grep。使用优化的算法,匹配固定字符串而非正则表达式。1992 POSIX标准将这三个改版整合成一个grep程序。$ who | grep -F austen使用-F选项查找固定字符串。事实上,只要匹配的模式里未含有
2012-02-11 17:10:23 2804
原创 《C和指针》读书笔记
看过了经典的K&R C,又看了这本Pointers on C,温习了C语言的基本语法。在重温过程中,感觉需要重点把握的知识是指针、结构和动态内存分配。这对今后的算法和操作系统方面的研究学习很有帮助。3.2.3 声明指针int* b, c, d;本以为这条语句把三个变量声明为整型的指针,但事实并非如此。星号*只对b有用,其余两个变量只是普通的整
2012-02-04 16:21:23 1852
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人