课程学习报告
文章平均质量分 78
_Jason_ZHANG
Undergraduate & Computer Science & Beihang Univ.
github.com/jasonlovescoding
展开
-
24点 - DFS
Time Limit:1000ms Memory Limit: 65535KB在Jason生活的星球上,算术学期末总是考同样的题目:抽四张扑克牌,在1秒内通过四则运算让其结果为24。但是Jason的算术太拙了,总是没办法在1秒内得到正确答案。期末考试就快要到了,但正直的Jason不想靠命运力神抽4张6来通过考试。你能为Jason设计一个24点的算法,好让他不挂原创 2015-12-29 17:18:36 · 853 阅读 · 0 评论 -
一个带有Kruskal、Prim、Dijkstra算法的图类型 - C++ for C Programmers
C++ for C Programmers 这门课讲了图论中三个重要的算法: Kruskal's Minimum Spanning Tree, Prim's Minimum Spanning Tree, Dijkstra's Shortest Path.这里把三个算法实现后作为成员函数写在一个图的类里,图是用邻接矩阵存储的,支持随机生成。#include #include #inc原创 2016-05-20 11:03:26 · 756 阅读 · 0 评论 -
Huffman编码文件压缩 - Huffman树的建立与编码
【问题描述】编写一程序采用Huffman编码对一个正文文件进行压缩。具体压缩方法如下:1. 对正文文件中字符(换行字符'\'除外,不统计)按出现次数(即频率)进行统计2. 依据字符频率生成相应的Huffman树(未出现的字符不生成)3. 依据Huffman树生成相应字符的Huffman编码4. 依据字符Huffman编码压缩文件(即按照Huffman编码原创 2016-05-20 11:09:26 · 5385 阅读 · 1 评论 -
CSAPP3e - x86-64 assembly code analysis - Bomb Lab: phase 4
先看看phase_4做了什么:000000000040100c : 40100c: 48 83 ec 18 sub $0x18,%rsp 401010: 48 8d 4c 24 0c lea 0xc(%rsp),%rcx 401015: 48 8d 54 24 08 lea 0x8原创 2016-06-04 23:07:28 · 3049 阅读 · 0 评论 -
CSAPP3e - x86-64 assembly code analysis - Attack Lab: Level I
这个lab的目的在于进一步分析汇编码。由于冯氏体系下数据和程序代码都以二进制存储,而且某些不安全的代码可能会在扫描缓冲区时跨越边界,改变一些不应当改变的值,这就给了著名的buffer overflow attack机会。先期知识:最好搞清楚函数调用的机制,弄明白rsp的值和其指向的值到底是什么PART 1要求我使用经典的buffer overflow attack插入我自己的exploit c原创 2016-06-10 21:30:47 · 4662 阅读 · 0 评论 -
CSAPP3e - x86-64 assembly code analysis - Attack Lab: Level II
这一部分要求我使用ROP的方法来攻击rtarget这个程序。rtarget增加了一些现代的保护手段,例如随机产生rsp的地址,这使得我无法预测每次run的时候栈帧的位置,从而不能像PART I level2中那样预测到rsp的位置注入exploit code。退一步说,就算我成功注入了,还有金丝雀保护机制(canary)来确定某些位置的值是否发生变化,以及直接规定某些存储区域是不可执行(inexe原创 2016-06-11 19:47:19 · 2344 阅读 · 2 评论 -
CSAPP3e - x86-64 assembly code analysis - Bomb Lab: phase 5
首先来看phase_5做了什么:0000000000401062 : 401062: 53 push %rbx 401063: 48 83 ec 20 sub $0x20,%rsp 401067: 48 89 fb mov %rdi,%rbx原创 2016-06-06 23:10:56 · 2285 阅读 · 0 评论 -
CSAPP3e - x86-64 assembly code analysis - Bomb Lab: phase 6
phase_6的代码很长,不过很有结构,按功能划分首先来看第一段:00000000004010f4 : 4010f4: 41 56 push %r14 4010f6: 41 55 push %r13 4010f8: 41 54 push %r12 4010fa: 55原创 2016-06-06 23:12:35 · 3402 阅读 · 0 评论 -
全排列数的生成
这学期好忙,整个人都变懒了。。coursera上的课程作业只来得及更新到github上,希望自己以后看着注释还能记得怎么做。。。得空把上学期的一些作业放这里。【问题描述】输入整数N( 1 【输入形式】输入整数N。【输出形式】输出有N!行,每行都是从1~N所有整数的一个全排列,各整数之间以空格分隔。各行上的全排列不重复。输出各行遵循“小数优先”原则, 在各全排列中,较小的数尽量靠原创 2016-09-20 13:21:42 · 5439 阅读 · 0 评论 -
银行排队模拟
【问题描述】一个系统模仿另一个系统行为的技术称为模拟,如飞行模拟器。模拟可以用来进行方案论证、人员培训和改进服务。计算机技术常用于模拟系统中。生产者-消费者(Server-Custom)是常见的应用模式,见于银行、食堂、打印机、医院、超等提供服务和使用服务的应用中。这类应用的主要问题是消费者如果等待(排队)时间过长,会引发用户抱怨,影响服务质量;如果提供服务者(服务窗口)过多,将提高运管商原创 2016-09-20 13:24:11 · 5761 阅读 · 2 评论 -
C程序括号匹配检查
【问题描述】编写一程序检查C源程序文件中{}、()等括号是否匹配,并输出第一个检测到的不匹配的括号及所对应括号所在的行号(程序中只有一个括号不匹配)。注意:1. 除了括号可能不匹配外,输入的C源程序无其它语法错误;2. 字符常量、字符串常量及注释中括号不应被处理,注释包括单行注释//和多行/* */注释3. 字符和字符串常量中不包含特殊的转义字符(\',\")原创 2016-09-20 13:25:09 · 8097 阅读 · 0 评论 -
独立路径计算
【问题描述】老张和老王酷爱爬山,每周必爬一次香山。有次两人为从东门到香炉峰共有多少条路径发生争执,于是约定一段时间内谁走过对方没有走过的路线多谁胜。给定一线路图(无向连通图,两顶点之间可能有多条边),编程计算从起始点至终点共有多少条独立路径,并输出相关路径信息。注:独立路径指的是从起点至终点的一条路径中至少有一条边是与别的路径中所不同的,同时路径中不存在环路。 【输入形原创 2016-09-20 13:28:37 · 14198 阅读 · 11 评论 -
北京地铁乘坐路线查询
【问题描述】编写一个程序实现北京地铁最短乘坐(站)线路查询,输入为起始站名和目的站名,输出为从起始站到目的站的最短乘坐站换乘线路。注:1. 要求采用Dijkstra算法实现;2)本题在实际测试时对数据文件进行了调整,使得输入的两站间只有一条最短路径。【输入形式】文件bgstations.txt为数据文件(可从课程网站中课程信息处下载),包含了北京地铁的线路及车站信息。其格式如下原创 2016-09-20 13:30:24 · 9644 阅读 · 2 评论 -
逆序数个数 (Inversion Counting) - Merge and Sort
普林斯顿的算法课质量很赞,这次作业中涉及到一个"逆序数"的知识,正好在之前学习mergesort时有一道课后提供的面试题与之相关,于是试着实现了。原题链接:http://www.practice.geeksforgeeks.org/problem-page.php?pid=558Given an array, find inversion count of array.原创 2016-09-22 00:07:21 · 3179 阅读 · 0 评论 -
求两个排好序的数组的中位数 - 二分法
There are two sorted arrays A and B of size m and nrespectively. Find the median of the two sorted arrays.Have you met this question in a real interview? YesExampleGiven A=[1,2原创 2016-09-22 00:14:06 · 2153 阅读 · 0 评论 -
主成分个数 - 快排中partition的深入理解
算法课课后习题对深化理解某一算法确实很有帮助.. 这一次课程学习了快速排序,每一次排序都涉及一个partition操作,也就是把数组分为比pivot大的部分,和比pivot小的部分。这个题目是在线性时间内找到某一长N的数组中出现次数超过某一比例,如N/3的全部元素。https://leetcode.com/problems/majority-element-ii/Given原创 2016-09-22 00:21:59 · 1768 阅读 · 0 评论 -
CSAPP3e - x86-64 assembly code analysis - Bomb Lab: phase 3
首先来看phase_3的代码0000000000400f43 : 400f43: 48 83 ec 18 sub $0x18,%rsp 400f47: 48 8d 4c 24 0c lea 0xc(%rsp),%rcx 400f4c: 48 8d 54 24 08 lea 0x8(%rsp),%rdx 400f5原创 2016-05-31 14:25:57 · 2526 阅读 · 0 评论 -
CSAPP3e - x86-64 assembly code analysis - Bomb Lab: phase 2
首先来看phase_2的代码:0000000000400efc : 400efc: 55 push %rbp 400efd: 53 push %rbx 400efe: 48 83 ec 28 sub $0x28,%rsp 400f02: 48 89 e6原创 2016-05-30 21:56:19 · 1775 阅读 · 0 评论 -
CSAPP3e - x86-64 assembly code analysis - Bomb Lab: phase 1
第二个lab,bomb lab,一个"legendary lab"(原话就是这样),通过看C的源码可以看出共有6个phase,每个phase其实就是一个拆弹的过程:每一个phase里要求输入一个字符串,如果正确,这个phase的bomb就会被解除,并进入下一个phase。很显然,phase的难度是逐步增加的,到后面单独一个phase的分析都快赶上lab1的工作量了... 分区写吧,一个一个原创 2016-05-27 18:25:10 · 3272 阅读 · 0 评论 -
(深度优先搜索第一课) 统计三角形 - DFS
今天开始选修了计蒜客上的“程序设计竞赛入门”课程,为自己弱渣的算法能力寻找一个提高空间 这是深度优先搜索的第一课,题目是这样描述: 给N根不同长度的木棍,求这些木棍一共能拼出多少个不同的不等边三角形。注意在拼三角形的时候一定要用上所有的N根木棍。不同的定义是至少有一条边的长度不相同;不等边的定义是三条边都不相等。输入格式:第一行为数据组数T,(1接下来每行数据占两行,第一行为木原创 2015-12-20 23:28:34 · 714 阅读 · 0 评论 -
基于Python 3.4 实现的12306查票器
学了一学期Python还是让我感受到这是一门强大的语言,如果能熟练使用许多库的话,它给人带来的方便是非常大的,很难想象一位Freelancer当初单枪匹马搞出来的语言,如今能发展壮大到这个程度!本着服务生活的态度为Python的期末大作业做了一个能够查询连续多日内某地到某地的票源情况的查票器,由于是脚本跳过了浏览器的限制,直接用URL(Universal Resource Locato原创 2015-12-20 23:57:22 · 1111 阅读 · 0 评论 -
(深度优先搜索第二课) 蒜头学算数 - DFS
题目描述:蒜头的数学实在是太差了,于是老师把他关到小黑屋让他闭门修炼。老师跟他一张纸,上面一排写着1, 2, 3...N这N个数,中间用空白分隔。老师让他在空白处填上加号或者减号。他让蒜头君求出一共有多少种加运算符的方法使得整个表达式的值为0,并输出所有的方案。比如N=7时,1 2 3 4 5 6 7排成一排,一种插入符号的方案为1+2-3+4-5-6+7=0。是不是很有趣,快来帮蒜头君解出这题吧原创 2015-12-20 23:52:20 · 588 阅读 · 0 评论 -
(并查集第一课) 冗余关系 - 树/森林
1000ms时间限制65536K内存限制蒜头最近在沉迷小说,尤其是人物关系复杂的言情小说。它看到的人物关系描述得很的麻烦的时候觉得非常蒜疼,尤其是人物关系里有冗余的时候。什么是冗余关系呢?这篇小说里有n句描述人物关系的句子,描述了n个人的关系。每条句子的定义是这样的: XY 它的意思是:X认识Y,Y也认识X我们认为小说中的人物原创 2015-12-25 16:07:38 · 677 阅读 · 0 评论 -
Dijkstra's Shortest Path - C++ for C Programmers 2.5
课程来自:https://class.coursera.org/cplusplus4c-002/lecture这节课讲述的是Dijkstra最短路径算法的具体实现。Dijkstra最短路径算法是贪心算法的一个实例,给定一个无向图,出发点s以及目的点t,要求s到t的最短路径。核心步骤是:每次都选取离s最近的且没有被关闭的点将其关闭。数组约定: dist[i]表示i号点到s点的最短距原创 2015-12-26 10:45:42 · 520 阅读 · 0 评论 -
三字符字典内的序号与字符串互查 - 进制转换
SIGMA={a,b,c} SIGMA* is based on SIGMA with these rules:1. SIGMA ⊆ SIGMA*2. if s1∈SIGMA*, s2∈ SIGMA*, then s1s2∈SIGMA*3. Any element of SIGMA* can be formed within finite application of r原创 2016-03-11 11:43:25 · 526 阅读 · 0 评论 -
(广度优先搜索第一课)迷宫的最短路径 - BFS
给定一个大小为N*M的迷宫,由通道('.')和墙壁('#')组成,其中通道S表示起点,通道G表示终点,每一步移动可以达到上下左右中不是墙壁的位置。试求出起点到终点的最小步数。(本题假定迷宫是有解的)(N,M样例输入:10 10#S######.#......#..#.原创 2016-02-29 22:10:01 · 12881 阅读 · 4 评论 -
Singly Linked List & Destructor - C++ for C Programmers 3.4
/* Update on Oct 7th Finally figured out the reason for the malfunction of str destructor. It is really about pass-by-reference, which means when I call "a.inputName_by_Seq(n2, 10);"(just a原创 2016-02-29 22:27:01 · 585 阅读 · 0 评论 -
五子棋危险判断 - 图与连线
这题其实不难,但是纪念一下头一次"信仰提交成功"2333【问题描述】已知两人分别执白棋和黑棋在一个围棋棋盘上下五子棋,若同一颜色的棋子在同一条横行、纵行或斜线上连成5个棋子,则执该颜色棋子的人获胜。编写程序读入某一时刻下棋的状态,并判断是否有人即将获胜,即:同一颜色的棋子在同一条横行、纵列或斜线上连成4个棋子,且该4个棋子的两端至少有一端为空位置。输入的棋盘大小是19×19,用原创 2016-04-26 14:54:14 · 5661 阅读 · 3 评论 -
大数乘法 - 大数作为字符串的C语言操作
【问题描述】编写程序实现两个超长整数(大于等于0,每个最长80位数字)的乘法运算。【输入形式】从键盘分行读入两个超长整数,要考虑输入高位可能为0的情况(如00083),每行的最后都有回车换行。【输出形式】输出只有一行,是两个长整数的乘法运算结果,从高到低依次输出各位数字,各位数字紧密输出。除非结果为0,否则最高位不能为0。【输入样例】1340原创 2016-04-26 14:51:18 · 4610 阅读 · 0 评论 -
一个简单的模式字符串查找(支持通配符‘*’)
模式字符串查找(支持通配符‘*’)原创 2016-04-26 14:49:22 · 5321 阅读 · 0 评论 -
猴子选大王 - 约瑟夫问题
【问题描述】要从n只猴子中选出一位大王。它们决定使用下面的方法:n只猴子围成一圈,从1到n顺序编号。从第q只猴子开始,从1到m报数,凡报到m的猴子退出竞选,下一次又从退出的那只猴子的下一只开始从1到m报数,直至剩下的最后一只为大王。请问最后哪只猴子被选为大王。【输入形式】控制台输入三个整数n,m,q。【输出形式】输出最后选为大王的猴子编号。【样例输入】7 4 3【样例输原创 2016-04-26 17:07:31 · 7060 阅读 · 3 评论 -
一元多项式相乘 - 链表的简单应用
【问题描述】编写一个程序实现两个一元多项式相乘。【输入形式】首先输入第一个多项式中系数不为0的项的系数和指数,以一个空格分隔。且该多项式中各项的系数均为0或正整数,系数和最高幂次不会超过int类型的表示范围。对于多项式 anxn +a n-1 x n-1 + … + a1x1 + a0x0 的输入方法如下: an n a n-1 n-1 … a1 1 a0原创 2016-04-26 17:08:47 · 7864 阅读 · 1 评论 -
计算器表达式计算 后缀表达式+树实现 - 逆波兰表示法+调度场算法
这题基本是靠翻维基百科把逆波兰表示法和Dijkstra的调度场算法生搬下来的.. 还要学习一个啊【问题描述】从标准输入中读入一个整数算术运算表达式,如5 - 1 * 2 * 3 + 12 / 2 / 2 = 。计算表达式结果,并输出。要求:1、表达式运算符只有+、-、*、/,表达式末尾的’=’字符表示表达式输入结束,表达式中可能会出现空格;2、表达式中不含圆括号,原创 2016-04-26 14:59:42 · 4387 阅读 · 0 评论 -
CSAPP3e - integer and floating point - Data Lab
CS:APP Data Lab 1原创 2016-04-25 21:44:41 · 2421 阅读 · 0 评论 -
8-puzzle 可解性的证明 & 最优解性的证明
问题来自Coursera上Princeton所开Algorithms Part I第四周的作业:http://coursera.cs.princeton.edu/algs4/assignments/8puzzle.html这一次作业要求用Priority Queue实现一个经典的A*搜索算法,来找到一个8-puzzle问题的解(或者在有限时间内发现它的无解性)。作业要求里对算法的描述很细致原创 2016-09-21 23:38:05 · 9878 阅读 · 0 评论