计算机程序的构造和解释(SICP) 第2章 习题解析 Part2
这次回顾第二章第二部分习题。
学习资料:
https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-001-structure-and-interpretation-of-computer-programs-spring-2005/index.htm
https://github.com/DeathKing/Learning-SICP
https://mitpress.mit.edu/sites/default/files/sicp/index.html
https://www.bilibili.com/video/BV1Xx41117tr?from=search&seid=14983483066585274454
参考资料:
https://sicp.readthedocs.io/en/latest
2.17(p69)(define (last-pair arr)
(if (null? (cdr arr))
(car arr)
(last-pai ...
计算机程序的构造和解释(SICP) 第2章 习题解析 Part1
这次回顾第二章第一部分习题。
学习资料:
https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-001-structure-and-interpretation-of-computer-programs-spring-2005/index.htm
https://github.com/DeathKing/Learning-SICP
https://mitpress.mit.edu/sites/default/files/sicp/index.html
https://www.bilibili.com/video/BV1Xx41117tr?from=search&seid=14983483066585274454
参考资料:
https://sicp.readthedocs.io/en/latest
https://stackoverflow.com/questions/14130878/sicp-2-16-interval-arithmetic-scheme
http://wiki.d ...
MIT 6.172 L4 Assembly Language and Computer Architecture Part 2
课程主页:
https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-172-performance-engineering-of-software-systems-fall-2018/index.htm
课程视频:
https://www.bilibili.com/video/BV1wA411h7N7
这次回顾第四讲第二部分,主要回顾计算机体系结构。
计算机体系结构概述本讲主要内容:
超标量处理
乱序执行
分支预测
一个简单的5级处理器
5级处理器的框图
每条指令通过5个阶段执行:
指令提取(IF):从内存中读取指令。
指令解码(ID):确定用于执行指令的单元,并提取寄存器参数。
执行(EX):执行ALU操作。
内存(MA):读/写数据存储器。
回写(WB):将结果存储到寄存器中。
体系结构改进从历史上看,计算机架构师旨在通过两种方式来提高处理器性能:
通过同时执行多个指令来利用并行性。
示例:指令级并行性(ILP),向量化,多核。
利用局部性以最大程度地减少数据移动。
示例:缓 ...
计算机程序的构造和解释(SICP) 第1章 习题解析 Part3
这次回顾第一章剩余全部习题。
学习资料:
https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-001-structure-and-interpretation-of-computer-programs-spring-2005/index.htm
https://github.com/DeathKing/Learning-SICP
https://mitpress.mit.edu/sites/default/files/sicp/index.html
https://www.bilibili.com/video/BV1Xx41117tr?from=search&seid=14983483066585274454
参考资料:
https://sicp.readthedocs.io/en/latest
参考资料:
https://sicp.readthedocs.io/en/latest
1.29(p39)记
x_{2k}=y_{2k} + 4y_{2k+1} + y_{2k+2}那么 ...
MIT 6.172 L4 Assembly Language and Computer Architecture Part 1
课程主页:
https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-172-performance-engineering-of-software-systems-fall-2018/index.htm
课程视频:
https://www.bilibili.com/video/BV1wA411h7N7
这次回顾第四讲,这一讲介绍了汇编语言以及计算机体系结构。
备注:由于这次内容比较多,所以分为两次回顾,这次先回顾X86-64 ISA PRIMER以及FLOATING-POINT AND VECTOR HARDWARE。
源代码到执行从源代码到执行一共分为四个阶段:
预处理(Preprocessing)
编译(Compiling)
汇编(Assembling)
链接(Linking)
步骤1,2如下图所示:
汇编语言提供了方便的机器代码符号表示。
反汇编对于二进制文件,可以利用反汇编指令得到汇编代码:
objdump -S fib
得到如下结果:
学习汇编的意义为什么要看程序的汇编代 ...
计算机程序的构造和解释(SICP) 第1章 习题解析 Part2
这次回顾第一章的部分习题。
学习资料:
https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-001-structure-and-interpretation-of-computer-programs-spring-2005/index.htm
https://github.com/DeathKing/Learning-SICP
https://mitpress.mit.edu/sites/default/files/sicp/index.html
https://www.bilibili.com/video/BV1Xx41117tr?from=search&seid=14983483066585274454
参考资料:
https://sicp.readthedocs.io/en/latest
1.16(p30)利用如下事实即可:
b^n = (b^{2})^{n/2}= (b^{n/2})^2, n=2k代码如下:
(define (expt-iter b counter pr ...
Stanford Compiler PA1
课程主页:
https://www.edx.org/course/compilers
课程视频:
https://www.bilibili.com/video/BV1NE411376V?p=20&t=6
这次回顾编译原理作业一,这次的作业使用cool语言编写一个stack machine。
作业一不是很难,主要时间是cool的语言特性学习上,注意cool本身不包含数组,需要参考list的写法实现类似数组的功能,完整代码如下:
(*
* CS164 Fall 94
*
* Programming Assignment 1
* Implementation of a simple stack machine.
*
* Skeleton file
*)
class Main inherits IO {
-- 对象需要初始化
stack : Stack <- (new Stack);
char : String;
flag : Bool <- true;
basicCommand : StackComma ...
Stanford Compiler 实验环境配置
课程主页:
https://www.edx.org/course/compilers
课程视频:
https://www.bilibili.com/video/BV1NE411376V?p=20&t=6
参考资料:
http://pashabd.com/how-to-install-classroom-object-oriented-language-cool-programming-in-your-windows-computer/
https://courses.edx.org/courses/course-v1:StanfordOnline+SOE.YCSCS1+2T2020/7b74698308574f3c89d2ed498f26a019/
https://www.jianshu.com/p/12fbfa8c7489
这次介绍如何在ubuntu下配置Stanford Compiler的实验环境。
实验环境配置将课程资料下载到ubuntu内:
https://courses.edx.org/asset-v1:StanfordOnline+SOE.YCSCS1+1T202 ...
计算机程序的构造和解释(SICP) 第1章 习题解析 Part1
这次回顾第一章的部分习题。
学习资料:
https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-001-structure-and-interpretation-of-computer-programs-spring-2005/index.htm
https://github.com/DeathKing/Learning-SICP
https://mitpress.mit.edu/sites/default/files/sicp/index.html
https://www.bilibili.com/video/BV1Xx41117tr?from=search&seid=14983483066585274454
参考资料:
https://blog.csdn.net/sk__________________/article/details/12848597
https://sicp.readthedocs.io/en/latest
第1章https://blog.csdn.net/sk ...
计算机程序的构造和解释(SICP)环境配置
无意间找到了SICP的学习资料,看了一下感觉还是挺有意思的,决定开始学习这本书籍,这次介绍环境配置。
学习资料:
https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-001-structure-and-interpretation-of-computer-programs-spring-2005/index.htm
https://github.com/DeathKing/Learning-SICP
https://mitpress.mit.edu/sites/default/files/sicp/index.html
https://www.bilibili.com/video/BV1Xx41117tr?from=search&seid=14983483066585274454
参考资料:
https://www.cnblogs.com/unixart/p/9182847.html
这一篇博客比较水,主要是做个简单的记录。
配置参考如下资料:
https://www.cnblog ...
国防科技大学 编译原理 第13讲 语法分析——自下而上分析4
课程主页:
https://www.icourse163.org/course/NUDT-1003101005?tid=1460976445
这次回顾第13讲:语法分析——自下而上分析4。
第13讲 更强的$LR$分析一个非$LR(0)$文法考虑文法$G(S’)$:
\begin{aligned}
(0)& \mathrm S′→\mathrm E\\
(1)& \mathrm{E} \rightarrow \mathrm{E}+\mathrm{T}\\
(2)& \mathrm{E} \rightarrow \mathrm{T}\\
(3)& \mathrm{T} \rightarrow \mathrm{T}^{*} \mathrm{F}\\
(4)& \mathrm{T} \rightarrow \mathrm{F}\\
(5)& \mathrm{F} \rightarrow(\mathrm{E})\\
(6)& \mathrm{F} \rightarrow \mathrm i
\end{aligned}该文法的识别活前缀的DFA以及$LR(0)$项目集规范族如下:
$I_ ...
树状数组
之前找到一个数据结构与算法的课程,虽然是培训机构出的,不过听了下感觉还是不错的,主要详细介绍了一些高级数据结构与算法,视频还包含习题解析,后续会利用业余时间完成相应的内容,整理一些笔记。
本次回顾树状数组。
学习资料:
https://ke.qq.com/course/480225
https://www.bilibili.com/video/BV1rJ411Q7K8?from=search&seid=380339915135149037
参考资料:
《算法笔记》——胡凡
知识回顾lowbit函数假设
x= 2^k \times (2m+1), k, m\in \mathbb N那么lowBit函数返回
2^k实现如下:
int lowBit(int x){
return x & (-x);
}
备注:将$x$表示为二进制,那么$\mathrm{lowBit}(x)$返回$x$二进制最靠右边的$1$,以及其右边的$0$,所以
x - \mathrm{lowBit}(x)消去了$x$最靠右侧的$1$。
基本介绍假设原数组为$A[1],\ldo ...