边界问题

原创 2016年08月31日 18:15:13

边界计算是这样吗?

现在假想有一个数组有十个元素,那么其下标允许的范围是多少呢?
在C中,其下标是0~9的数
所以我们知道在n个元素的数组中,没有下标为n的元素,其下标为0~(n-1)

边界的困惑

int a[10];
for(int i=1; i <= 10; i++)
    a[i]=0;

这样的验证的结果,细细想想,必然是下标越界了,可是
一切又看起来这么合理

这是优势?

C语言的这种设计,也许会让大家在这里懵上一阵子,可是,
这种设计,恰恰是其最大的优势所在。下面我们慢慢讲解。

在很多的的程序设计错误中,“栏杆错误”是最难察觉的一种,就像上面的Code中的一样,看似那么合理,可是就是有越界这样的致命错误。

听题!
100米的路每2米一根栏杆,问要多少根,“显而易见”100/2=50,
当然他是错误的,实际上是51根。

这样思考的方法,最简单的应该是这样,除了右边的2米,其余每一个2米的左边总有一根栏杆,补上这最右边的一根,刚刚好就是51根

所以,在边界的问题中千万不能凭直觉。

又一个问题

如果一个数x,x>=10,x<=19,那么其中的整数有多少个呢?
很显然19-10=18(不过很遗憾,很接近)
可是这样到底是多少呢?17?18?19?

这样我们继续从头开始思考这个问题了
若是有一个数x>=15,x<=15那么x的值有多少个呢?当然你应该自信的大声呐喊 就是15!只有一个!
所以我们要记得,当上下边界重合时只有一个元素

所以现在我们适当外推,从1,到第n个数
那么实际上就是(n-1+1)个元素了,于是乎,所有的重点就在这个+1的上面了,
那么说了这么多,要是一直问这个问题提心吊胆,那这以后还怎么Code啊。

不对称的美丽

当我们把前面的例子改成这个样子呢,x>=10,x<19,这样上边界就没有在我们的范围内了,
问题就得到了竟然的简化
19-10=9 你可以自信的喊出答案了,
这中并不对称的例子,也是如此美丽的

C中的不对称

在C的数组里,元素的下标是从0开始的,这样的优势就是分明显啦

int array[10];
for(int i=0; i<10; i++ )    //  1
    a[i]=0;
for(int i=0; i<=9; i++ )    //  2
    a[i]=0;

上面两个for都是遍历数组进行了初始化的,现在是不是明白优势所在了?
这样for的上界刚好就是10,就是array的元素个数了啊
所以C这样的设计,大大的减少了我们脑筋急转弯的机会,妙哉!

所以日后大家Coding的时候,一定要使用第一种的结构,多方便啊

结语

路漫漫其修远兮,吾将上下而求索
路漫漫其修远兮,吾将上下而求索
路漫漫其修远兮,吾将上下而求索

版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

关于图像处理中的核与卷积、以及卷积边界问题

所谓的核,其实就是一个矩阵。而需要处理的图片其实也是一个大的矩阵。形象点说,核就像一个可以滑动的小四方形,叠加于处理的图片矩阵之上——有点像用单词书(需要处理的图像)被单词时附带的红色遮挡塑料片(核)...

小谈边界问题

边界问题主要有两种,动态关系的,还有就是静态关系的. 第一类是有一定对称性的几何图形,比如说打印倒三角形或者菱形等.这种题目一般思路就是找出图形的特点(对称性等)与循环变量(行号,列号)之间...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

UIScrollView 边界问题处理

在写引导页 或者 教学页的时候 会有scrollview 上放上多张图片,滑动显示下一张的问题 ,当scrollview到最后一张继续往左滑动的时候右边会有白色部分。 这个就是UIScrollView...

leetcode 50. Pow(x, n)-细说边界问题

原题链接:50. Pow(x, n) 【思路-Java】递归实现 采用递归实现,那么本题的终止条件是 n == 0 和 n == 1。这里不采用下面的做法: public class Solution...

Mina、Netty、Twisted一起学(二):TCP消息边界问题及按行分割消息

在TCP连接开始到结束连接,之间可能会多次传输数据,也就是服务器和客户端之间可能会在连接过程中互相传输多条消息。理想状况是一方每发送一条消息,另一方就立即接收到一条,也就是一次write对应一次rea...

mysql使用between and处理时间区间不包括右边界问题

mysql使用between and处理时间区间不包括右边界问题最近自己写项目发现mysql使用between and处理时间区间不包括右边界。 SELECT * FROM timeline WHE...

POJ1008 Maya Calendar(模拟)&&整除和取余的边界问题

题意: 玛雅有两种计年方式,输入一种年月日,输出对应的另一种年月日 要点: 1.注意题目要求,第一种还有第19月,一开始没看见,然后输出是一起输出,不是一个一个输出 2.这题主要的一个难点是有...

MINA、Netty、Twisted一起学(二):TCP消息边界问题及按行分割消息

在TCP连接开始到结束连接,之间可能会多次传输数据,也就是服务器和客户端之间可能会在连接过程中互相传输多条消息。理想状况是一方每发送一条消息,另一方就立即接收到一条,也就是一次write对应一次rea...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)