杨氏矩阵查找

在一个m行n列二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维
数组和一个整数,判断数组中是否含有该整数。
使用Step-wise线性搜索。
```python
def get_value(l, r, c):
return l[r][c]
def find(l, x):
m = len(l) - 1
n = len(l[0]) - 1
r = 0
c = n
while c >= 0 and r <= m:
value = get_value(l, r, c)
if value == x:
return True
elif value > x:
c = c - 1
elif value < x:
r = r + 1
return False
```
例如:

pds=pd.DataFrame([[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15],[16,17,18,19,20],[21,22,23,24,25],[26,27,28,29,30],[31,32,33,34,35]])
print(pds)
# print(len(pds.index))
# print(len(pds.columns))
#找24
def get_value(pds,c,i):
    return pds[c][i]

# def find(n,pds):
#     c=len(pds.columns)-1
#     i=len(pds.index)-1
#     cc=0
#     ii=i
#     while ii>=0 and cc<=c:
#         if n==get_value(pds,cc,ii):
#             return True
#         if n<get_value(pds,cc,ii):
#             ii-=1
#         if n>get_value(pds,cc,ii):
#             cc+=1

def find(n,pds):
    c=len(pds.columns)-1
    i=len(pds.index)-1
    cc=c
    ii=0
    while ii<=i and cc>=0:
        if n==get_value(pds,cc,ii):
            return True
        if n<get_value(pds,cc,ii):
            cc-=1
        if n>get_value(pds,cc,ii):
            ii+=1

print(find(24,pds))
时间: 2024-10-08 18:04:11

杨氏矩阵查找的相关文章

杨氏矩阵查找实现

杨氏矩阵查找 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二位数组和一个整数,判断数组中是否含有该整数. C#语言实现: public static bool yangShiFind(int[,] array, int num)         {             if (array == null)                 return false;             int m = array.

杨氏矩阵C++实现

何为杨氏矩阵?这个网上的介绍很多,下面给出杨氏矩阵搜索算法: #include <iostream> using namespace std; // 杨氏矩阵查找算法 bool Yang_search(int arr[][4], int N, int k) { if (k<arr[0][0] || k>arr[N - 1][N- 1]) { cout << "此值必不在此数组内" << endl; return false; } // 从

杨氏矩阵中查找元素

在杨氏矩阵中查找一个元素是否存在 杨氏矩阵即每一行均以递增顺序排列,每列从上到下也为递增顺序 方法一:数组 #include<stdio.h> #include<stdlib.h> #define COLS 3 #define ROWS 3 //要查找只要在找到右上角的元素和输入元素进行比较.如果右上角元素大,即可排除其他行,若小 //,则可排除本行,继续循环,用输入元素和右上角的元素进行比较 int find(int arr[][COLS], int rows, int cols

杨氏矩阵定义及其查找的实现C++

先介绍一下这个数据结构的定义,Young Tableau有一个m*n的矩阵,然后有一数组 a[k], 其中 k<=m*n ,然后把a[k]中的数填入 m*n 的矩阵中,填充规则为: 1.  每一行每一列都严格单调递增(有其他的版本是递减,其原理相同). 2.  如果将a[k]中的数填完后,矩阵中仍有空间,则填入 ∞. 举例: 这里主要给出杨氏矩阵的定义和查找 方法:理由每一列,没一行都是递增的,我们从左上角开始查找,不断的缩小矩阵的大小,最后只剩一1*1的矩阵. C++代码: 1 #pragma

【c语言】二维数组中的查找,杨氏矩阵在一个二维数组中,每行都依照从左到右的递增的顺序排序,输入这种一个数组和一个数,推断数组中是否包括这个数

// 二维数组中的查找,杨氏矩阵在一个二维数组中.每行都依照从左到右的递增的顺序排序. // 每列都依照从上到下递增的顺序排序.请完毕一个函数,输入这种一个数组和一个数.推断数组中是否包括这个数 #include <stdio.h> #define col 4 #define rol 4 int yang(int(*p)[col], int num) { int i = 0; int j = col - 1; while (j+1) { int *q = &(p[i][j]); if

二维数组中的查找,杨氏矩阵

题目: 在一个二维数组中,每行都按照从左到右的递增的顺序排序.每列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个数组和一个数,判断数组中是否包含这个数. 例如: 二维数组 1 2 3 4 5 6 7 8 9 查找数字7. 题目分析: 算法一: 杨氏矩阵中的查找,可以看做是在二维数组中查找,定义一个二维数组,根据数组的基本特点,可以从数组中第一个元素逐行进行遍历,若数组的某个元素与所要找的数字相等,则能够找到这个数字.如果遍历完整个数组,都没有与之相等的元素,则找不到这个数字. 下面

二位数组中的查找——杨氏矩阵

------------------------------------------------------------------------------------------------- "杨氏矩阵":即数组元素从左向右依次递增,从上到下依次递增.要想在该数组中查找数,首 先该数组得满足"杨氏矩阵"的特点.为了方便理解我们可以将一个二位数组看作是一个矩阵,假设i 为行,j为列,数组为str,那么只要满足(str[i][j]<str[i][j+1] &a

【C语言】二维数组中的查找,杨氏矩阵

//二维数组中的查找,杨氏矩阵 //在一个二维数组中,每行都按照从左到右的递增的顺序排序.每列都按照从上到下递增的顺序排序. //请完成一个函数,输入这样的一个数组和一个数,判断数组中是否包含这个数. #include <stdio.h> #define Col 4 int Yang(int arr[][Col], int val) { int i=0; int j = Col - 1; int tmp = arr[i][j]; //找到左上角的数 while (1) { if (tmp ==

杨氏矩阵中的查找

杨氏矩阵 杨氏矩阵中,每行元素是递增的,每列元素也是递增的.即a[i][j]<a[i+1][j]且a[i][j]<a[i][j+1].要在这样的矩阵中查找某个数值元素的位置,复杂度可以达到o(m+n),其中n为矩阵行长度,m为矩阵列长度. 开始我想的是每一行使用二分查找,时间复杂度为O(n * logm) 看到网上使用的定位法,时间复杂度为O(n + m) 首先定位到第一行最后一个元素,如果要查找的数等于这个元素,直接返回true.如果array[i][j]>num,向前寻找,如果arr