Algoritmos de búsqueda para arreglos 2D (array)

Búsqueda lineal en array 2D:

La búsqueda lineal es un algoritmo de búsqueda simple y secuencial. Se utiliza para encontrar si un elemento en particular está presente en la array o no al recorrer cada elemento de la array. Mientras que la búsqueda en la array 2D es exactamente igual, pero aquí se deben recorrer todas las celdas. De esta manera, se busca cualquier elemento en una array 2D. 

A continuación se muestra la implementación de la búsqueda lineal en arrays 2D

C++

// C++ code for the above approach
#include <bits/stdc++.h>
using namespace std;
vector<int> linearSearch(vector<vector<int>> arr, int target)
{
  for (int i = 0; i < arr.size(); i++) {
    for (int j = 0; j < arr[i].size(); j++) {
      if (arr[i][j] == target) {
        return {i, j};
      }
    }
  }
  return {-1, -1};
}
 
// Driver code
int main()
{
 
  vector<vector<int>> arr = { { 3, 12, 9 },
                             { 5, 2, 89 },
                             { 90, 45, 22 } };
  int target = 89;
  vector<int> ans = linearSearch(arr, target);
  cout << "Element found at index: [" << ans[0] << " " <<ans[1] <<"]";
 
  return 0;
}
 
// This code is contributed by Potta Lokesh

Java

// Linear Search in 2D arrays
import java.util.Arrays;
 
public class GFG {
    public static void main(String[] args)
    {
        int arr[][] = { { 3, 12, 9 },
                        { 5, 2, 89 },
                        { 90, 45, 22 } };
        int target = 89;
        int ans[] = linearSearch(arr, target);
        System.out.println("Element found at index: "
                           + Arrays.toString(ans));
    }
 
    static int[] linearSearch(int[][] arr, int target)
    {
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                if (arr[i][j] == target) {
                    return new int[] { i, j };
                }
            }
        }
        return new int[] { -1, -1 };
    }
}

Python3

# Python code for the above approach
def linearSearch (arr, target):
    for i in range(len(arr)):
        for j in range(len(arr[i])):
            if (arr[i][j] == target):
                return [i, j]
    return [-1, -1]
 
# Driver code
arr = [[3, 12, 9], [5, 2, 89], [90, 45, 22]]
target = 89
ans = linearSearch(arr, target)
print(f"Element found at index: [{ans[0]} {ans[1]}]")
 
# This code is contributed by Saurabh Jaiswal

C#

// Linear Search in 2D arrays
using System;
 
public class GFG {
    public static void Main(string[] args)
    {
        int[, ] arr = { { 3, 12, 9 },
                        { 5, 2, 89 },
                        { 90, 45, 22 } };
        int target = 89;
        int[] ans = linearSearch(arr, target);
        Console.WriteLine("Element found at index: ["
                          + ans[0] + "," + ans[1]+"]");
    }
 
    static int[] linearSearch(int[, ] arr, int target)
    {
        for (int i = 0; i < arr.GetLength(0); i++) {
            for (int j = 0; j < arr.GetLength(1); j++) {
                if (arr[i, j] == target) {
                    return new int[] { i, j };
                }
            }
        }
        return new int[] { -1, -1 };
    }
}
 
// This code is contributed by ukasp.

Javascript

<script>
    // JavaScript code for the above approach
    const linearSearch = (arr, target) => {
        for (let i = 0; i < arr.length; i++) {
            for (let j = 0; j < arr[i].length; j++) {
                if (arr[i][j] == target) {
                    return [i, j];
                }
            }
        }
        return [-1, -1];
    }
 
    // Driver code
    let arr = [[3, 12, 9],
    [5, 2, 89],
    [90, 45, 22]];
    let target = 89;
    let ans = linearSearch(arr, target);
    document.write(`Element found at index: [${ans[0]} ${ans[1]}]`);
 
    // This code is contributed by rakeshsahni
 
</script>
Producción

Element found at index: [1 2]

Complejidad temporal: O (N * M), donde N es el número de filas y M es el número de columnas.
Espacio Auxiliar: O(1)

Búsqueda binaria en una array 2D: 

La búsqueda binaria es un método eficiente de buscar en una array. La búsqueda binaria funciona en una array ordenada. En cada iteración el espacio de búsqueda se divide por la mitad, esta es la razón por la cual la búsqueda binaria es más eficiente que la búsqueda lineal. 

¿Por qué la búsqueda binaria no es útil para buscar en arrays desordenadas?

La condición básica para aplicar la búsqueda binaria en cualquier lugar de cualquier algoritmo es que el espacio de búsqueda esté ordenado. Para realizar una búsqueda binaria en la array 2D, la array debe ordenarse. Aquí se proporciona una array 2D no ordenada, por lo que no es posible aplicar la búsqueda binaria en una array no ordenada. Para aplicar la búsqueda binaria primero, la array 2D debe ordenarse en cualquier orden que tome (M*N)log(M*N) tiempo. Entonces, la complejidad de tiempo total para buscar cualquier elemento aquí es O ((M * N) log (M * N)) + O (N + M), que es muy pobre cuando se compara con la complejidad de tiempo de Búsqueda lineal que es solo O (N*M) . Por lo tanto, la búsqueda lineal se usa para buscar en una array no ordenada, no la búsqueda binaria.

A continuación se muestra la implementación de la búsqueda binaria en arrays 2D:

C++

// Binary Search on sorted 2D array
#include <bits/stdc++.h>
using namespace std;
 
vector<int> findAns(vector<vector<int> > arr, int target)
{
    int row = 0;
    int col = arr[row].size() - 1;
    while (row < arr.size() && col >= 0) {
        if (arr[row][col] == target) {
            return { row, col };
        }
 
        // Target lies in further row
        if (arr[row][col] < target) {
            row++;
        }
        // Target lies in previous column
        else {
            col--;
        }
    }
    return { -1, -1 };
}
 
// Driver Code
int main()
{
 
    // Binary search in sorted matrix
    vector<vector<int> > arr = { { 1, 2, 3, 4 },
                                 { 5, 6, 7, 8 },
                                 { 9, 10, 11, 12 } };
 
    vector<int> ans = findAns(arr, 12);
 
    cout << "Element found at index: [";
    for (int i = 0; i < ans.size(); i++) {
        if (i == ans.size() - 1)
            cout << ans[i];
        else
            cout << ans[i] << ", ";
    }
    cout << "]";
}
 
// This code is contributed by Samim Hossain Mondal.

Java

// Binary Search on sorted 2D array
import java.util.Arrays;
 
class GFG {
 
    static int[] findAns(int[][] arr, int target)
    {
        int row = 0;
        int col = arr[row].length - 1;
        while (row < arr.length && col >= 0) {
            if (arr[row][col] == target) {
                return new int[] { row, col };
            }
 
            // Target lies in further row
            if (arr[row][col] < target) {
                row++;
            }
            // Target lies in previous column
            else {
                col--;
            }
        }
        return new int[] { -1, -1 };
    }
 
    // Driver Code
    public static void main(String[] args)
    {
 
        // Binary search in sorted matrix
        int arr[][] = { { 1, 2, 3, 4 },
                        { 5, 6, 7, 8 },
                        { 9, 10, 11, 12 } };
        int[] ans = findAns(arr, 12);
        System.out.println("Element found at index: "
                           + Arrays.toString(ans));
    }
}

Python3

# Binary Search on sorted 2D array
def findAns(arr, target):
    row = 0
    col = len(arr[row]) - 1
    while (row < len(arr) and col >= 0):
        if (arr[row][col] == target):
            return [row, col]
 
        # Target lies in further row
        if (arr[row][col] < target):
            row += 1
 
        # Target lies in previous column
        else:
            col -= 1
 
    return [-1, -1]
 
 
# Driver Code
if __name__ == '__main__':
    # Binary search in sorted matrix
    arr = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
    ans = findAns(arr, 12)
    print("Element found at index: ", ans)
 
    # This code contributed by shikhasingrajput

C#

// Binary Search on sorted 2D array
using System;
class GFG {
 
    static int[] findAns(int[, ] arr, int target)
    {
        int row = 0;
        int col = arr.GetLength(1) - 1;
        while (row < arr.GetLength(0) && col >= 0) {
            if (arr[row, col] == target) {
                return new int[] { row, col };
            }
 
            // Target lies in further row
            if (arr[row, col] < target) {
                row++;
            }
 
            // Target lies in previous column
            else {
                col--;
            }
        }
        return new int[] { -1, -1 };
    }
 
    // Driver Code
    public static void Main(string[] args)
    {
 
        // Binary search in sorted matrix
        int[, ] arr = { { 1, 2, 3, 4 },
                        { 5, 6, 7, 8 },
                        { 9, 10, 11, 12 } };
        int[] ans = findAns(arr, 12);
        Console.Write("Element found at index: [");
        int i = 0;
        for (i = 0; i < ans.Length - 1; i++)
            Console.Write(ans[i] + " ,");
        Console.Write(ans[i] + "]");
    }
}
 
// This code is contributed by ukasp.

Javascript

<script>
// Binary Search on sorted 2D array
   function findAns(arr , target)
    {
        var row = 0;
        var col = arr[row].length - 1;
        while (row < arr.length && col >= 0) {
            if (arr[row][col] == target) {
                return [ row, col ];
            }
 
            // Target lies in further row
            if (arr[row][col] < target) {
                row++;
            }
             
            // Target lies in previous column
            else {
                col--;
            }
        }
        return [ -1, -1 ];
    }
 
    // Driver Code
    // Binary search in sorted matrix
        var arr = [ [ 1, 2, 3, 4 ],
                        [ 5, 6, 7, 8 ],
                        [ 9, 10, 11, 12 ] ];
        var ans = findAns(arr, 12);
        document.write("Element found at index: "
                           + (ans));
                            
// This code is contributed by shikhasingrajput
</script>
Producción

Element found at index: [2, 3]

Complejidad temporal: O(N + M), donde N es el número de filas y M es el número de columnas.
Espacio Auxiliar: O(1)

Publicación traducida automáticamente

Artículo escrito por samughodake1808 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *