Programming Abstractions in C阅读笔记:p293-p302
《Programming Abstractions in C》学习第73天,p293-p302总结,总计10页。
一、技术总结
1.时间复杂度
(1)quadratic time(二次时间)
p293, Algorithms like selection sort that exhibit O(N^2) performance are said to run in quadratic time。
2.线性查找(linear search)
p293, Because the for loop in the implementation executes n time, you expect the performance of LinearSearch——as its name implies——to be O(N)。时间复杂度为O(N)的查找称为线性查找。
3.归并排序(merge sort)
书中并为对归并排序做严格的定义。p298, The merge operation, combined with recursive decomposition, gives rise to a new sorting algorithm called merge sort, which you can implement in straightforward way. The basic idea of the algorithm can be outlined as follows:
- Check to see if the array is empty or has only one element. If so, it must alread be sorted, and the function can return without doing any work. This condition defines the simple case for the recursion.
- Divide the array into two new subarrays, each of which is half the size of the original.
- Sort each of the subarrasy recursively.
- Merge the two subarrays back into the original one.
/*
* 伪代码
*/
static void Merge(int array[], int arr1[], int n1, int arr2[], int n2);
static int *CopySubArray(int array[], int start, int n);
void SortIntegerArray(int array[], int n);
/*
* Function: SortIntegerArray
* Usage: SortIntegerArray(array, n);
* ----------------------------------
* This function sorts the first n elements of array into
* increasing numerical order using the merge sort algorithm,
* which requires (1) dividing the array into two halves,
* (2) sorting each half, and (3) merging the halves together.
*/
void SortIntegerArray(int array[], int n) {
int n1, n2, *arr1, *arr2;
if (n <= 1) {
return;
}
n1 = n / 2;
n2 = n - n1;
arr1 = CopySubArray(array, 0, n1);
arr2 = CopySubArray(array, 0, n2);
SortIntegerArray(arr1, n1);
SortIntegerArray(arr1, n2);
Merge(array, arr1, n1, arr2, n2);
FreeBlock(arr1);
FreeBlock(arr2);
}
/*
* Function: Merge
* Usage: Merge(array, arr1, n1, arr2, n2);
* ----------------------------------------
* This function merges two sorted arrays (arr1 and arr2) into a
* single output array. Because the input arrays are sorted, the
* implementation can always select the first unused element in
* one of the input arrays to fill the next position in array.
*/
static void Merge(int array[], int arr1[], int n1, int arr2[], int n2) {
int p, p1, p2;
p = p1 = p2 = 0;
while (p1 < n1 && p2 < n2) {
if (arr1[p1] < arr2[p2]) {
array[p++] = arr1[p1++];
} else {
array[p++] = arr2[p2++];
}
}
while (p1 < n1) {
array[p++] = arr1[p1++];
}
while (p2 < n2) {
array[p++] = arr2[p2++];
}
}
/*
* Function: CopySubArray
* Usage: CopySubArray(array, arr1, n1, arr2, n2);
* -----------------------------------------------
* This function makes a copy of a subset of an integer array
* and returns a pointer to a new dynamic array containing the
* new elements. The array begins at the indicated start
* position in the original array and continues for n elemnts.
*/
static int *CopySubArray(int array[], int start, int n) {
int i, *result;
result = NewArray(n, int);
for (i = 0; i < n; i++) {
result[i] = array[start + i];
}
return result;
}
二、英语总结
1.quadratic是什么意思?
答:In mathematics by 1660s;the algebraic quadratic euqation(二次方程, 1680s) are so called because they involve the square(x^2) and no higher power of x。这里要注意quarter是四分之一,但是quadratic是二次(x^2)的意思。
2.sophistication是什么意思?
答:
(1)sophist > sophiticate > sophistication。
(2)sophist: one who makes use of fallacious arguments(诡辩者)。
(3)sophistication: u. the quality of being sophisticated(老练, 复杂度)。
p293, The problem, howerver is that average-case analysis is much more difficult to carry out and typically requires considerable mathematical sophistication。这里比较重要的一点是虽然这里用的是名词sophistication,但是因为翻译的时候需要转一下,mathematical sophistication(复杂的数学知识)。
3.average用法总结
答:
(1)vt. to reach a particular amount as an average。主语可以是物也可以是人。翻译的时候需要灵活转变。
主语是物:Inquires to our office average 1000 calls a month.
主语是人:p294, From a practical point of view, it is often useful to consider how well an algorithm performs if you average its behavior over all possible sets of input data
三、其它
本书中作者讲解归并排序(merge sort)和其它书还是有些不同的,从选择排序算法展开,从而引出归并排序算法,可以和其它书进行对比阅读。
四、参考资料
1. 编程
(1)Eric S.Roberts,《Programming Abstractions in C》:https://book.douban.com/subject/2003414
2. 英语
(1)Etymology Dictionary:https://www.etymonline.com
(2) Cambridage Dictionary:https://dictionary.cambridge.org

欢迎搜索及关注:编程人(a_codists)
Programming Abstractions in C阅读笔记:p293-p302的更多相关文章
- Mongodb Manual阅读笔记:CH3 数据模型(Data Models)
3数据模型(Data Models) Mongodb Manual阅读笔记:CH2 Mongodb CRUD 操作Mongodb Manual阅读笔记:CH3 数据模型(Data Models)Mon ...
- Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十三章:角色动画
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十三章:角色动画 学习目标 熟悉蒙皮动画的术语: 学习网格层级变换 ...
- Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十一章:模板测试
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十一章:模板测试 代码工程地址: https://github.co ...
- Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第六章:在Direct3D中绘制
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第六章:在Direct3D中绘制 代码工程地址: https://gi ...
- Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第四章:Direct 3D初始化
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第四章:Direct 3D初始化 学习目标 对Direct 3D编程在 ...
- Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二章:矩阵代数
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二章:矩阵代数 学习目标: 理解矩阵和与它相关的运算: 理解矩阵的乘 ...
- Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第一章:向量代数
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第一章:向量代数 学习目标: 学习如何使用几何学和数字描述 Vecto ...
- 阅读笔记 1 火球 UML大战需求分析
伴随着七天国庆的结束,紧张的学习生活也开始了,首先声明,阅读笔记随着我不断地阅读进度会慢慢更新,而不是一次性的写完,所以会重复的编辑.对于我选的这本 <火球 UML大战需求分析>,首先 ...
- [阅读笔记]Software optimization resources
http://www.agner.org/optimize/#manuals 阅读笔记Optimizing software in C++ 7. The efficiency of differe ...
- 《uml大战需求分析》阅读笔记05
<uml大战需求分析>阅读笔记05 这次我主要阅读了这本书的第九十章,通过看这章的知识了解了不少的知识开发某系统的重要前提是:这个系统有谁在用?这些人通过这个系统能做什么事? 一般搞清楚这 ...
随机推荐
- [转帖]Shell if 条件判断
Shell 语言中的if条件 一.if的基本语法: if [ command ];then 符合该条件执行的语句 elif [ command ];then 符合该条件执行的语句 e ...
- [转帖]PG Exporter
http://v0.pigsty.cc/zh/docs/reference/kernel-optimize/ Exporter https://github.com/Vonng/pg_exporter ...
- 【转帖】linux 内核分析工具 Dtrace、SystemTap、火焰图、crash等
<< System语言详解 >> 关于 SystemTap 的书. 我们在分析各种系统异常和故障的时候,通常会用到 pstack(jstack) /pldd/ lsof/ tc ...
- [转帖]字节跳动开源 Shmipc:基于共享内存的高性能 IPC
https://maimai.cn/article/detail?fid=1780832041&efid=WeW8ji-LiPaXA8QER_Q1YQ 简介 CloudWeGo - Shmip ...
- [粘贴]【CPU】关于x86、x86_64/x64、amd64和arm64/aarch64
[CPU]关于x86.x86_64/x64.amd64和arm64/aarch64 https://www.jianshu.com/p/2753c45af9bf 为什么叫x86和x86_64和AMD6 ...
- canvas实现添加水印
canvas添加水印思路 1.在画布上写上水印的名称(时间加上用户名) 2.canvas转化为base64,作为body的背景色 3.优化倾斜度和透明度 4.如果用户去除body的style水印消失 ...
- vue3父组件方法之间方法的互相调用
场景描述 在项目开发中.我们可能会使用父组件调用子组件中的方法 也有可能子组件中调用父组件中的方法 下面我们来看一看组件之间方法的调用 父组件页面 <template> <div&g ...
- 【JS 逆向百例】网洛者反爬练习平台第一题:JS 混淆加密,反 Hook 操作
关注微信公众号:K哥爬虫,持续分享爬虫进阶.JS/安卓逆向等技术干货! 声明 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后 ...
- U盘制作linux启动盘
1.前期准备 使用 U 盘安装 Linux 系统,需要准备以下工具: ·大容量的U盘(安装 CentOS 6.x 系统,U 盘容量至少 8 G): ·UltraISO 工具,用来制作 U 盘启动 ...
- 收藏-即时通讯(IM)开源项目OpenIM-功能手册
OpenIM简介 OpenIM是由IM技术专家打造的开源即时通讯组件,也是目前最受欢迎的开源IM项目之一,目前github star近万.开发者通过集成OpenIM组件,并私有化部署服务端,可以将即时 ...