Un rompecabezas de bucle anidado

¿Cuál de los siguientes dos segmentos de código es más rápido? Suponga que el compilador no realiza optimizaciones. 
 

C++

/* FIRST */
for(i = 0; i < 10; i++)
  for(j = 0; j < 100; j++)
    //do something
 
// This code is contributed by Shubham Singh

C

/* FIRST */
for(i=0;i<10;i++)
  for(j=0;j<100;j++)
    //do something

Java

/* First */
 
for(i = 0; i < 10; i++)
  for(j = 0; j < 100; j++)
    //do something
 
// This code is contributed by sarajadhav12052009

Python3

# FIRST
for i in range(10):
    for j in range(100):
        #do something
 
# This code is contributed by shivani

C++

/* SECOND */
for(i=0;i<100;i++)
  for(j=0;j<10;j++)
    //do something
 
//This code is contributed by Shubham Singh

C

/* SECOND */
for(i=0;i<100;i++)
  for(j=0;j<10;j++)
    //do something

Java

/* Second */
 
for(i = 0; i < 100; i++)
  for(j = 0; j < 10; j++)
    //do something
 
// This code is contributed by sarajadhav12052009

Python3

# SECOND
for i in range(100):
    for j in range(10):
       
      # Do something
 
# This code is contributed by shivani

Ambos segmentos de código proporcionan la misma funcionalidad, y el código dentro de los dos bucles for se ejecutaría la misma cantidad de veces en ambos segmentos de código. 
Si miramos más de cerca, podemos ver que el SEGUNDO hace más operaciones que el PRIMERO. Ejecuta las tres partes (asignación, comparación e incremento) del bucle for más veces que las partes correspondientes de FIRST: 

  1. El SEGUNDO ejecuta operaciones de asignación (j = 0 o i = 0) 101 veces mientras que el PRIMERO ejecuta solo 11 veces.
  2. El SEGUNDO hace 101 + 1100 comparaciones (i < 100 o j < 10) mientras que el PRIMERO hace 11 + 1010 comparaciones (i < 10 o j < 100).
  3. El SEGUNDO ejecuta operaciones con incrementos de 1100 (i++ o j++) mientras que el PRIMERO ejecuta operaciones con incrementos de 1010.

El siguiente código cuenta el número de operaciones de incremento ejecutadas en PRIMERO y SEGUNDO, e imprime los conteos.

C++

// C++ program to count number of increment
// operations in FIRST and SECOND
#include<iostream>
 
using namespace std;
 
int main()
{
  int c1 = 0, c2 = 0;
    
  /* FIRST */
  for(int i=0;i<10;i++,c1++)
    for(int j=0;j<100;j++, c1++);
      
    
  /* SECOND */
  for(int i=0; i<100; i++, c2++)
      for(int j=0; j<10; j++, c2++);
         
 
  cout << " Count in FIRST = " <<c1 << endl;
  cout << " Count in SECOND  = " <<c2 << endl;
 
  getchar();
  return 0;
}

Java

// Java program to count number of increment
// operations in FIRST and SECOND
 
import java.io.*;
 
class GFG {
    public static void main (String[] args) {
       int c1 = 0, c2 = 0;
 
        for(int i=0; i<10;i++, c1++){
          for(int j=0;j<100;j++, c1++){}
        }
         
     
        for(int i=0;i<100;i++, c2++){
              for(int j=0;j<10;j++, c2++){}
        }
                 
        System.out.println( "Count in First = "+c1);       
        System.out.println( "Count in SECOND = "+c2);
    }
}

Python3

# Python program to count number of increment
# operations in FIRST and SECOND
c1 = 0
c2 = 0
 
# FIRST
for i in range (10):
    for j in range (100):
        c1 += 1
    c1 += 1
 
# SECOND
for i in range (100):
    for j in range (10):
        c2 += 1
    c2 += 1
   
print("Count in FIRST = " ,c1)
print("Count in SECOND  = " ,c2)
 
# This code is contributed by shivanisinghss2110

C#

// C# program to count number of increment
// operations in FIRST and SECOND
using System;
 
class GFG{
     
public static void Main (String[] args)
{
   int c1 = 0, c2 = 0;
 
    for(int i = 0; i < 10; i++, c1++)
    {
        for(int j = 0; j < 100;j++, c1++){}
    }
     
    for(int i = 0; i < 100; i++, c2++)
    {
        for(int j = 0; j < 10; j++, c2++){}
    }
             
    Console.WriteLine("Count in First = " + c1);       
    Console.WriteLine("Count in SECOND = " + c2);
}
}
 
// This code is contributed by shivanisinghss2110

Javascript

<script>
 
// JavaScript program to count number of increment
// operations in FIRST and SECOND
       let c1 = 0, c2 = 0;
 
        for(let i=0; i<10;i++, c1++){
          for(let j=0;j<100;j++, c1++){}
        }
         
     
        for(let i=0;i<100;i++, c2++){
              for(let j=0;j<10;j++, c2++){}
        }
                 
        document.write( "Count in First = "+c1 +"<br>");       
        document.write( "Count in SECOND = "+c2);
  // this code is contributed by shivanisinghss2110 
 
</script>
Producción

 Count in FIRST = 1010
 Count in SECOND  = 1100

El siguiente código cuenta el número de operaciones de comparación ejecutadas por PRIMERO y SEGUNDO

C++

//program to count the number of comparison
//operations executed by FIRST and SECOND */
#include<iostream>
 
using namespace std;
 
int main()
{
   int c1 = 0, c2 = 0;
     
   /* FIRST */
   for(int i=0; ++c1&&i<10; i++)
      for(int j=0; ++c1&&j<100;j++);
      
 
   /* SECOND */
   for(int i=0; ++c2&&i<100; i++)
      for(int j=0; ++c2&&j<10; j++);
       
 
   cout << " Count for FIRST  " <<c1 << endl;
   cout << " Count for SECOND  " <<c2 << endl;
   getchar();
   return 0;
}

Java

/*package whatever //do not write package name here */
 
import java.io.*;
 
class GFG {
    public static void main (String[] args) {
         int c1 = 0, c2 = 0;
 
        for(int i=0; i<++c1 && i<10;i++) {
              for(int j=0;j<++c1 &&j<100;j++) {                 
              }
        }
 
        for(int i=0;i<++c2 && i<100;i++) {
              for(int j=0;j<++c2 &&j<10;j++) {        
              }
        }
       
        System.out.println( "Count in FIRST = "+c1);       
        System.out.println( "Count in SECOND  = "+c2);   
 
    }
}

Python3

#program to count the number of comparison
#operations executed by FIRST and SECOND */
 
# FIRST
c1 = 1
c2 = 1
i = 0
while (i < c1 and i < 10):
    j = -1
    c1 += 1
    while (j < c1 and j < 100):
        c1 += 1
        j += 1
    i += 1
 
# SECOND
i = 0
while (i < c2 and i < 100):
    j = -1
    c2 += 1
    while (j < c2 and j < 10):
        c2 += 1
        j += 1
    i += 1
       
print(" Count fot FIRST  " , c1)
print(" Count fot SECOND  " , c2)
 
# This code is contributed by shivanisinghss2110
   

C#

/*package whatever //do not write package name here */
 
using System;
 
class GFG {
    public static void Main (String[] args) {
         int c1 = 0, c2 = 0;
 
        for(int i = 0; i < ++c1 && i < 10; i++)
        {
              for(int j = 0; j < ++c1 && j < 100; j++)
              {                 
              }
        }
 
        for(int i = 0; i < ++c2 && i < 100; i++) {
              for(int j = 0; j < ++c2 && j < 10; j++) {        
              }
        }
       
        Console.WriteLine( "Count in FIRST = "+c1);       
        Console.WriteLine( "Count in SECOND  = "+c2);   
 
    }
}
 
// This code is contributed by shivanisinghss2110

Javascript

<script>
 
/*package whatever //do not write package name here */
//program to count the number of comparison
//operations executed by FIRST and SECOND */
 
         let c1 = 0, c2 = 0;
 
        for(let i=0; i<++c1 && i<10;i++) {
              for(let j=0;j<++c1 &&j<100;j++) {                 
              }
        }
 
        for(let i=0;i<++c2 && i<100;i++) {
              for(let j=0;j<++c2 &&j<10;j++) {        
              }
        }
       
        document.write( "Count in FIRST = "+c1 +"<br>");       
        document.write( "Count in SECOND  = "+c2);   
 
// this code is contributed by shivanisinghss2110  
 
</script>
Producción

 Count for FIRST  1021
 Count for SECOND  1201

Gracias a Dheeraj por sugerir la solución.
Escriba comentarios si encuentra que alguna de las respuestas/códigos es incorrecta, o si desea compartir más información sobre los temas discutidos anteriormente.
 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 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 *