《算法导论》学习笔记第一章
2017-04-21 00:52
267 查看
这本书已经买了将近两个个月了,可惜我没看过。今天开始看了,毕竟不积跬步无以至千里,我也是有理想、抱负的少年郎。闲话少叙,切入正题。晚上临睡前看书及打代码共两小时,以后每天坚持。
今天看到第12页,把第一章看完了,并且看完2.1 插入排序 了。第一章没啥好看的,从2.1说起,把这一节的练习题都做了出来,其中,2.1-4 没有明白什么意思,后来百度之后明白题目是什么意思,然后就做出来了,不过做这几道题包括跟着书上讲的代码思路打的,发现我还是有些思想的局限性,并且思维不是很流畅,其次,在自己定义方法的过程中,经常需要调试代码,不能很顺畅地进行编码操作,这证明我的思维就算不混乱,也至少是不清晰的,以后加强此类锻炼,加油。
另外,附上一点代码,大家欢迎大家讨论,并且指出更有效率的算法。
第一个算法没啥好说的,第二个算法我里面有个ksort()方法,它是php内置的一个算法,是将数组根据下标进行排序的,通过传的参数不同达到不同的效果,因为我是从数组的最高位(二进制的最低位)计算的,所以数组的创建顺序也是反着的,var_dump时候,是从数组的最大下标的值往数组下标为0的顺序显示的,当然了,也可以这样写,这样更简单,当然也更快,这也是我写到这里,突然意识到的
/*习题2.1-4 方法二
两个n位二进制数组,相加,返回和
*/
function addVal($arr1,$arr2){
$up = 0;
for($m=count($arr1)-1;$m>=0;$m--)
{
if(($sum = ($arr1[$m]+$arr2[$m]+$up))<=1){
$num = $sum;
$up = 0;
}else{
$num = $sum-2;
$up = 1;
}
$arr3[] = $num;
//var_dump($arr3);die;
if($m==0){
$arr3[0] = $up;
}
}
//ksort($arr3);
return $arr3;
}
$arr1 = array(1,0,1,0,1,1,0);
$arr2 = array(0,0,1,0,1,1,1);
var_dump(addVal($arr1,$arr2));
今天看到第12页,把第一章看完了,并且看完2.1 插入排序 了。第一章没啥好看的,从2.1说起,把这一节的练习题都做了出来,其中,2.1-4 没有明白什么意思,后来百度之后明白题目是什么意思,然后就做出来了,不过做这几道题包括跟着书上讲的代码思路打的,发现我还是有些思想的局限性,并且思维不是很流畅,其次,在自己定义方法的过程中,经常需要调试代码,不能很顺畅地进行编码操作,这证明我的思维就算不混乱,也至少是不清晰的,以后加强此类锻炼,加油。
另外,附上一点代码,大家欢迎大家讨论,并且指出更有效率的算法。
/*习题2.1-3 输入一个数组和一个值 输出:若值存在于数组,返回下标,若值不存在于数组,返回null (不考虑数组存在元素相同的情况) */ function ReValue($arr,$val) { foreach ($arr as $key => $value) { if($val == $value){ return $key; } } return null; } var_dump(ReValue($arr,12)); /*习题2.1-4 两个n位二进制数组,相加,返回和 */ function addVal($arr1,$arr2){ $up = 0; for($m=count($arr1)-1;$m>=0;$m--) { if(($sum = ($arr1[$m]+$arr2[$m]+$up))<=1){ $num = $sum; $up = 0; }else{ $num = $sum-2; $up = 1; } $arr3[$m+1] = $num; //var_dump($arr3);die; if($m==0){ $arr3[0] = $up; } } ksort($arr3); return $arr3; } $arr1 = array(1,0,1,0,1,1,0); $arr2 = array(0,0,1,0,1,1,1); var_dump(addVal($arr1,$arr2));
第一个算法没啥好说的,第二个算法我里面有个ksort()方法,它是php内置的一个算法,是将数组根据下标进行排序的,通过传的参数不同达到不同的效果,因为我是从数组的最高位(二进制的最低位)计算的,所以数组的创建顺序也是反着的,var_dump时候,是从数组的最大下标的值往数组下标为0的顺序显示的,当然了,也可以这样写,这样更简单,当然也更快,这也是我写到这里,突然意识到的
/*习题2.1-4 方法二
两个n位二进制数组,相加,返回和
*/
function addVal($arr1,$arr2){
$up = 0;
for($m=count($arr1)-1;$m>=0;$m--)
{
if(($sum = ($arr1[$m]+$arr2[$m]+$up))<=1){
$num = $sum;
$up = 0;
}else{
$num = $sum-2;
$up = 1;
}
$arr3[] = $num;
//var_dump($arr3);die;
if($m==0){
$arr3[0] = $up;
}
}
//ksort($arr3);
return $arr3;
}
$arr1 = array(1,0,1,0,1,1,0);
$arr2 = array(0,0,1,0,1,1,1);
var_dump(addVal($arr1,$arr2));
相关文章推荐
- 《算法导论》学习笔记 第一章&&第二章&&第三章
- 《算法导论》学习笔记之Chapter10---数据结构之链表
- 算法导论:第一章 1.2 算法分析
- 《算法导论》学习笔记(4)——红黑树(c++语言实现)
- 算法导论第三版 第一章
- 《STL源码剖析》学习笔记系列-----第一章:STL概论和版本简介
- 学习笔记《实战Linux Socket编程》第一章
- 查找数组第i小的数-《算法导论》学习笔记十
- 算法导论第一章
- 算法导论笔记第一章
- 《算法导论》学习笔记之Chapter 2-2.1,2.2,2.3插入排序,选择排序,归并排序
- 《算法导论》学习笔记之Chapter3函数的增长 Chapter4.1分治策略
- 《算法导论》学习笔记之Chapter9中位数和顺序统计量
- 《C++ Primer》学习笔记1-第一章快速入门
- 《Python基础教程第二版》学习笔记(一)第一章 基础知识
- VC++第一章学习笔记
- 《VC++深入详解》学习笔记 第一章 Windows程序内部运行机制
- 《软件工程导论》学习笔记 —— 第一章 软件工程学概述
- 《算法导论》(第一部分)(第一章)
- 《Swift by Tutorials》学习笔记(第一章)