《算法导论》学习笔记第一章

这本书已经买了将近两个个月了,可惜我没看过。今天开始看了,毕竟不积跬步无以至千里,我也是有理想、抱负的少年郎。闲话少叙,切入正题。晚上临睡前看书及打代码共两小时,以后每天坚持。

今天看到第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));


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值