MathJax.Hub.Config({
tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']]}
});
动态规划方法通常是用来求解最优化问题(optimization problem)。比起分治方法,动态规划对于子问题只求解一次,算是用空间换时间。
书中提到了设计动态规划算法的4个步骤:
刻画一个最优解的结构特此
递归地定义最优解的值
计算最优解的值,通常采用自底向上的方法
利用计算出的信息构造一个最优解
Continue Reading
Malloc Lab,据说是最难的一个lab。在看完第九章之后,因为要旅游,没有直接做lab,而是继续看书,结果回来了,书还剩1章,又顺势看完了剩余的部分。在整本书都读完了以后,才回过头来做Malloc Lab。
介绍需要完成mm.c里的内容,材料中需要完成的是
int mm_init(void)
void *mm_malloc(size_t size)
void mm_free(void *ptr)
其他的mm_realloc源码中已经填写好了。
这里,我是用书中的隐式空闲链表方法,先完成实验。
Continue Reading
这个实验是要实现一个简易的shell程序,主要考虑的是异常和信号的处理。
前期工作解压缩shlab-handout.tar,执行make clean | make,就可以得到编译好的文件。
文件夹中的tshref是正确的结果,可以用来验证。与其用
1./sdriver.pl -t trace01.txt -s ./tsh -a "-p"
来测试,我觉得实验手册里提到的另一种方法更好用,
1make test01
这是对自己写的tsh进行测试,要想对tshref进行测试,只需要在后面的test前面添加一个r即可,也就是make rtest01。
Continue Reading
MathJax.Hub.Config({
tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']]}
});
Lab4 的Cache Lab 的说明资料太少了,csim.c 里面空空的,惊了。身为弱渣的我只好先拿别人的代码来参考参考。这里选取的代码csim.c。
Part A: Writing a Cache Simulator需要些一个Cache模拟器,将 valgrind 内存访问记录作为参数,模拟是否命中缓存。输出命中,不命中,移除。
lab里提供了一个写好的程序 csim-ref ,使用LRU(least-recently used)替换原则,模拟缓存命中情况。
实验指导上给出了命令行参数
Usage: ./csim-ref [-hv] -s <s> -E <E> -b <b> -t <tracefile>
-h: Optional help flag that prints usage info
-v: Optional verbose flag that displays trace info
-s <s>: Number of set index bits ($ S = 2^{s} $ is the number of sets)
-E <E>: Associativity (number of lines per set)
-b <b>: Number of block bits ($ B = 2^{b} $ is the block size)
-t <tracefile>: Name of the valgrind trace to replay
所以在 csim.c 里也可以写个打印帮助的函数
1234567void printUsage(){ printf("Usage: ./csim [-h] [-v] -s <s> -E <E> -b <b> -t <tracefile>\n"); printf("-s: number of set index(2^s sets)\n"); printf("-E: number of lines per set\n"); printf("-b: number of block offset bits\n"); printf("-t: trace file name\n");}
Continue Reading
MathJax.Hub.Config({
tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']]}
});
Coursera 上的Machine Learning 算得上是经典的机器学习入门课程,是由Andrew Ng大牛上的课。出于对机器学习的好奇,打算用Python来完成这门课的学习。
Supervised learning 监督学习这里存在两种问题 regression 和 classification。前者是预测相关的问题,后者是分类相关的问题。
首先介绍的是监督学习,notes1中用房屋价格预测来介绍Linear Regression线性回归。这里因为没有数据集,所以我选择用ex1中的ex1data1.txt来做演示。
1234567891011import matplotlib.pyplot as pltimport numpy as npdata = np.loadtxt('ex1data1.txt', delimiter=',')m = data.shape[0]X = data[:,0]y = data[:, 1]plt.scatter(X, y, c='r', marker='x', linewidths=1)plt.xlim([3, max(X)+3])plt.ylabel('Profit in $10,000s')plt.xlabel('Population of City in 10,000s')plt.show()
可以画出数据分布散点图。
Continue Reading
Python2.7中有两个常用的多线程库Multiprocessing,Threading。在Python中,线程和进程的区别在于线程模块使用线程,进程模块使用进程233,不开玩笑,这是StackOverFlow上的解释。说重点,线程使用相同的内存空间,而进程使用不同的。这也就让进程之间传对象稍有点困难。当然,由于线程共享内存空间,那么必须要考虑线程安全。
threadthread算是轻量级的线程模块,它提供较为底层的多线程实现方案。使用start_new_thread(function, args[, kwargs])实现线程。使用allocate_lock()可以得到一个锁对象,用acquire()和release()来加锁和释放锁,用locked()来判断释放有锁。一把锁只能被一个线程得到,所以利用锁可以避免多个线程对同一资源的同时操作。
Continue Reading