Young氏矩阵查找

Young氏矩阵查找

一、问题描述

    给定一个二维数组,如果这个二维数组满足下面两个条件则称为Young氏矩阵:

    1、在这个二维数组的每一行都按照从左到右的顺序递增。

    2、在这个二维数组的每一列都按照从上到下的顺序递增。

    现在需要完成的功能描述如下:输入Young氏矩阵,并且给定一个要查找的数,判断该数是否在这个Young氏矩阵中。

二、问题分析

    这里不讲述遍历这个二维数组来查找该数(时间复杂度为O(row*column))。既然是在Young氏矩阵中查找一个数find_number,那么就一定要用上Young氏矩阵的性质。假设查找到Young氏矩阵数组numbers的第i行第j列,即numbers[i][j],那么来判断一下find_number是否和numbers[i][j]相等。如果相等就找到了。如果find_number>numbers[i][j],根据Young氏矩阵的性质,它需要往下面走或者右面走。如果find_number<numbers[i][j],根据Young氏矩阵的性质,它需要往上面走或者左面走。但是这样就需要考虑两个方向的移动。

    那么能不能在查找的过程中只朝着某一个方向移动呢?答案是可以的。这就需要选好第一个查找位置,由于想要只能沿着一个方向移动,那么最开始的位置也只能是二维数组的四个角。那么选择哪一个角呢?假设选择numbers[0][0]这个角的话,如果find_number>numbers[0][0]的话,还是有两个方向可以移动(下和右)。选择numbers[row-1][column-1]这个角的话(row代表二维数组有多少行,column代表二维数组有多少列),如果find_number<numbers[row-1][column-1],也还是有两个方向可以移动(左和上)。

    那么,如果我们把初始的查找位置选择成numbers[0][column-1],查找时将只有一个方向可以选择,如果find_number>numbers[i][j],那么查找路径需要向下查找,如果find_number<numbers[i][j],那么查找路径需要向左查找。初始路径选择numbers[row-1][0]时可以做类似的分析。这么一来时间复杂度为O(row+column)。在下面的程序实现时,只给出了初始位置选择numbers[0][column-1]的情形。另一种情况类似。

三、程序实现

//Judge whether a number in a Young Matrix.
#include <iostream>
//#define MAX_BUF 1024

using namespace std;

int main()
{
    int row,column;
    long find_number = 0;
//    int numbers[MAX_BUF][MAX_BUF];
    int numbers[100][100];
    int i,j;
    while(cin>>row>>column)
    {
        cin>>find_number;
        for(i=0;i<row;i++)
            for(j=0;j<column;j++)
                cin>>numbers[i][j];

        int flag = 0;
        i = 0;
        j = column-1;

        while(i<row && j>=0)
        {
            if(find_number == numbers[i][j])
            {
                flag=1;
                break;
            }
            else if(find_number < numbers[i][j])
            {
                j--;
                continue;
            }
            else
            {
                i++;
                continue;
            }
        }
        if(flag==1)
        {
            cout<<"find"<<find_number<<",the row index:"<<i+1<<",the column index:"<<j+1<<endl;
        }
        else
        {
            cout<<"not find "<<find_number<<endl;
        }
    }
    return 0;
}


分析总结:刚开始想当然的开了一个1024*1024的int数组,用sizeof测试int为4byte,那么这个数组需要开辟的内存为4GB,而本机内存为4GB,所以出错了。


四、测试结果












  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。在编写C程序时,需要注意变量的声明和定义、指针的使用、内存的分配与释放等问题。C语言中常用的数据结构包括: 1. 数组:一种存储同类型数据的结构,可以进行索引访问和修改。 2. 链表:一种存储不同类型数据的结构,每个节点包含数据和指向下一个节点的指针。 3. 栈:一种后进先出(LIFO)的数据结构,可以通过压入(push)和弹出(pop)操作进行数据的存储和取出。 4. 队列:一种先进先出(FIFO)的数据结构,可以通过入队(enqueue)和出队(dequeue)操作进行数据的存储和取出。 5. 树:一种存储具有父子关系的数据结构,可以通过中序遍历、前序遍历和后序遍历等方式进行数据的访问和修改。 6. 图:一种存储具有节点和边关系的数据结构,可以通过广度优先搜索、深度优先搜索等方式进行数据的访问和修改。 这些数据结构在C语言中都有相应的实现方式,可以应用于各种不同的场景。C语言中的各种数据结构都有其优缺点,下面列举一些常见的数据结构的优缺点: 数组: 优点:访问和修改元素的速度非常快,适用于需要频繁读取和修改数据的场合。 缺点:数组的长度是固定的,不适合存储大小不固定的动态数据,另外数组在内存中是连续分配的,当数组较大时可能会导致内存碎片化。 链表: 优点:可以方便地插入和删除元素,适用于需要频繁插入和删除数据的场合。 缺点:访问和修改元素的速度相对较慢,因为需要遍历链表找到指定的节点。 栈: 优点:后进先出(LIFO)的特性使得栈在处理递归和括号匹配等问题时非常方便。 缺点:栈的空间有限,当数据量较大时可能会导致栈溢出。 队列: 优点:先进先出(FIFO)的特性使得
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。
Koh Young AOI(自动光学检测)参数是指Koh Young公司推出的自动光学检测设备的一些特定参数和功能。Koh Young AOI被广泛应用于电子制造业,用于检测PCB(Printed Circuit Board,印刷电路板)上的焊接问题和缺陷。 首先,Koh Young AOI参数中的一个重要指标是分辨率。这一参数表示Koh Young AOI设备能够检测到的最小细节或缺陷的大小。较高的分辨率通常意味着设备可以更准确地检测到更小的问题,提高产品的质量。 其次,Koh Young AOI还可以根据需要调整焦距。焦距的调整可以使设备适应不同尺寸和形状的PCB,以及不同焊接工艺的要求。这种灵活性使得Koh Young AOI可以在不同的生产环境中被广泛应用。 此外,Koh Young AOI还提供了先进的光源技术,如多角度照明和调焦照明。这些技术可以从不同的角度和方向对PCB进行照明,以提高检测的准确性和可靠性。通过使用多角度照明和调焦照明,Koh Young AOI可以更好地检测到锡球、焊接缺陷和其他细微问题,从而避免可能的后续故障。 最后,Koh Young AOI还具备先进的算法和图像处理技术。这些技术可以实时分析和处理从PCB上获取的图像数据,将其与预先定义的标准进行比较,并自动检测和分类不合格的零部件或缺陷。这样,Koh Young AOI可以提高生产效率,减少人工错误的发生,并减少产品的不良率。 总结而言,Koh Young AOI参数包括分辨率、焦距调整、先进的光源技术和图像处理技术。它们共同构成了Koh Young AOI设备的强大功能,可以在电子制造业中有效检测和预防PCB上的焊接问题和缺陷,提高产品质量和生产效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值