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:

  1. 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.
  2. Divide the array into two new subarrays, each of which is half the size of the original.
  3. Sort each of the subarrasy recursively.
  4. 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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/492198.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

新鲜出炉 | 2024年六西格玛学习路线

一、入门篇&#xff1a;了解六西格玛的基本概念与核心原理 六西格玛的起源与发展&#xff1a;了解六西格玛的历史背景和发展过程&#xff0c;有助于我们更好地认识这一管理方法的优势和特点。 六西格玛的核心概念&#xff1a;学习六西格玛中的DMAIC&#xff08;定义、测量、分…

基于YOLOv5+PySide6的火灾火情火焰检测系统设计深度学习

wx供重浩&#xff1a;创享日记 对话框发送&#xff1a;225火灾 获取完整源码源文件已标注的数据集&#xff08;1553张&#xff09;配置跑起来说明 可有偿49yuan一对一远程操作&#xff0c;在你电脑跑起来 效果展示&#xff1a; ​数据集在下载的文件夹&#xff1a;yolov5-5.0\…

在独立Unity工程中集成Vortex Studio

本文首发于&#xff1a;Unity3D入门教程09.01&#xff1a;在独立Unity工程中集成Vortex Studio 目的 在Unity中使用Vortex Studio引擎模拟Unity场景中的任何资源。 工程 打开桌面Unity Hub快捷方式 点击Open选择需要打开的工程&#xff0c;这里选择官方提供的默认工程C:\CM…

AIGC实战——扩散模型(Diffusion Model)

AIGC实战——扩散模型 0. 前言1. 去噪扩散概率模型1.1 Flowers 数据集1.2 正向扩散过程1.3 重参数化技巧1.4 扩散规划1.5 逆向扩散过程 2. U-Net 去噪模型2.1 U-Net 架构2.2 正弦嵌入2.3 ResidualBlock2.4 DownBlocks 和 UpBlocks 3. 训练扩散模型4. 去噪扩散概率模型的采样5. …

linux卸载mysql8重装5

目录 背景操作卸载重装配置启动 背景 在linux&#xff08;阿里云ECS&#xff09;安装部署Hive时初始化Hive元数据库&#xff0c;遇到报错前一天两三小时没解决&#xff0c;问题定位为mysql&#xff0c;次日打算重装 操作 卸载 停止 MySQL 服务 systemctl stop mysql yum卸载…

【办公类-22-08】周计划系列(4)“育儿知识(家园小报)“ (2024年调整版本)

作品展示 背景需求&#xff1a; 制作“育儿知识&#xff08;家园小报&#xff09;”&#xff0c;查询发现去年就没有做 因为“家园小报”基本没有段落文字&#xff0c;都是“文本框文字、艺术字“&#xff0c;很难用python提取文字。 由于只有6篇&#xff0c;因此去年采用的就…

03-Linux权限

root用户 root用户&#xff08;超级管理员&#xff09; 无论是Windows、MacOS、Linux均采用多用的管理模式进行权限管理 在Linux系统中&#xff0c;拥有最大权限的账户名为&#xff1a;root&#xff08;超级管理员&#xff09;刚开始学习的时候&#xff0c;大多时间都是用的…

借CPU主频,谈谈什么是性能

03 通过你的CPU主频&#xff0c;我们来谈谈“性能”究竟是什么&#xff1f; “性能”这个词&#xff0c;不管是在日常生活还是写程序的时候&#xff0c;都经常被提到。比方说&#xff0c;买新电脑的时候&#xff0c;我们会说“原来的电脑性能跟不上了”&#xff1b;写程序的时候…

智慧农业—农业资源数据中心

综述 农业资源数据中心建设的目标是将大量的农业生产信息通过采集、清洗、核准后实现统一存储、统一管理,实现数据的共享和集中管理,保障数据的安全,也为数据的挖掘分析提供决策分析创造条件。 农业资源数据中心的数据架构如下图所示: (1)农业专家数据库。主要收录国内、…

CleanMyMac4苹果Mac电脑全面、高效的系统清理工具

CleanMyMac 4 for Mac是一款专为Mac用户设计的系统清理和优化工具。它具备多种功能&#xff0c;旨在帮助用户轻松管理和释放Mac上的磁盘空间&#xff0c;同时提升系统性能。 系统垃圾清理&#xff1a;CleanMyMac 4能够深入扫描Mac的每一个角落&#xff0c;智能识别并清除不需要…

[Docker 教学] 常用的Docker 命令

Docker是一种流行的容器化技术。使用Docker可以将数据科学应用程序连同代码和所需的依赖关系打包成一个名为镜像的便携式工件。因此&#xff0c;Docker可以简化开发环境的复制&#xff0c;并使本地开发变得轻松。 以下是一些必备的Docker命令列表&#xff0c;这些命令将在你下一…

管理十大定律:探索管理的秘密

管理不仅是企业成功的关键&#xff0c;也是各个领域追求卓越的核心。然而&#xff0c;管理并非一门简单的学问&#xff0c;它涉及到许多复杂的原理和定律。在众多的管理理论中&#xff0c;管理十大定律被广泛认可和应用&#xff0c;成为指导组织发展和团队建设的基石。 1、彼…