En este test se demuestra que un array dinámico que se inicializa y se asignan su elementos es más rápido:
- Que añadir elementos a un array dinámico uno a uno.
- Que un array estático.
' gambas module file
Const NUMELEMTOS As Integer = 20000
Const NVECES As Integer = 50
'No puedo añadir la constante como número de elementos del array. Provoca error de sintaxis por el tipo admitido
'Public ematriz[NUMELEMTOS] As Integer
'Este tipo de array debe ser público
Private ematriz[20000] As Integer
'Array de array sin necesidad de inicializar cada uno de los nuevos arrays internos.
Private valoresbucles As Float[][] = [[], [], []]
Public Sub Main()
Repeticiones(NVECES)
Comparar(valoresbucles)
End
Public Sub Comparar(valores As Float[][])
Dim cuentavalores As Integer[] = [0, 0, 0]
Dim j As Integer
Dim vencedor As Integer
Dim losparticipantes As String[] = ["Array dinámico con inicialzacion y asignación", "Añadiendo elementos al array uno a uno", "Array estático"]
Dim cparticipantes As New Collection
Dim valor As String
For j = 0 To valores[0].Max 'Miden todos igual
If valores[0][j] < valores[1][j] And valores[1][j] < valores[2][j] Then
cuentavalores[0] += 1
Else If valores[1][j] < valores[0][j] And valores[1][j] < valores[2][j] Then
cuentavalores[1] += 1
Else
cuentavalores[2] += 1
Endif
Next
'
If cuentavalores[0] > cuentavalores[1] And cuentavalores[0] > cuentavalores[2] Then
vencedor = 1
Else If cuentavalores[1] > cuentavalores[0] And cuentavalores[1] > cuentavalores[2] Then
vencedor = 2
Else
vencedor = 3
Endif
Print "Bucle " & vencedor & " es el más rápido!.\n"
Print "Despues de ejecutar: "; NVECES; " veces cada uno de los búcles. Se demuestra que:"
Print "Dimensionar un array dinámico y asignar valores es más rapido que añadir uno a uno elementos"
Print "a un array dinámico y es más rápido que un array estático.\n"
For j = 0 To valoresbucles.Max
cparticipantes.Add(valoresbucles[j].Sort()[j], losparticipantes[j])
Next
For Each valor In cparticipantes
Print "El tiempo mínimo del bucle " & cparticipantes.Key & " fue de "; valor; " uS"
Next
End
Public Sub Repeticiones(n As Integer)
Dim i As Integer
Dim comienzo As Float
Dim diferenciadetiempo As Float
' Tiempo en microsegundos
For i = 1 To n
comienzo = Timer
Bucle1(NUMELEMTOS)
diferenciadetiempo = Timer - comienzo
valoresbucles[0].Add(diferenciadetiempo * 1000000)
comienzo = Timer
Bucle2(NUMELEMTOS)
diferenciadetiempo = Timer - comienzo
valoresbucles[1].Add(diferenciadetiempo * 1000000)
comienzo = Timer
Bucle3
diferenciadetiempo = Timer - comienzo
valoresbucles[2].Add(diferenciadetiempo * 1000000)
Next
End
Public Sub Bucle1(ielementos As Integer)
Dim matriz As New Integer[ielementos]
Dim i As Integer
For i = 0 To matriz.Max
matriz[i] = Rand(0, 65000)
Next
End
Public Sub Bucle2(ielementos As Integer)
Dim matriz As New Integer[]
Dim i As Integer
For i = 0 To ielementos
matriz.Add(Rand(0, 65000))
Next
End
Public Sub Bucle3()
Dim i As Integer
For i = 0 To ematriz.Max
ematriz[i] = Rand(0, 65000)
Next
End
Const NUMELEMTOS As Integer = 20000
Const NVECES As Integer = 50
'No puedo añadir la constante como número de elementos del array. Provoca error de sintaxis por el tipo admitido
'Public ematriz[NUMELEMTOS] As Integer
'Este tipo de array debe ser público
Private ematriz[20000] As Integer
'Array de array sin necesidad de inicializar cada uno de los nuevos arrays internos.
Private valoresbucles As Float[][] = [[], [], []]
Public Sub Main()
Repeticiones(NVECES)
Comparar(valoresbucles)
End
Public Sub Comparar(valores As Float[][])
Dim cuentavalores As Integer[] = [0, 0, 0]
Dim j As Integer
Dim vencedor As Integer
Dim losparticipantes As String[] = ["Array dinámico con inicialzacion y asignación", "Añadiendo elementos al array uno a uno", "Array estático"]
Dim cparticipantes As New Collection
Dim valor As String
For j = 0 To valores[0].Max 'Miden todos igual
If valores[0][j] < valores[1][j] And valores[1][j] < valores[2][j] Then
cuentavalores[0] += 1
Else If valores[1][j] < valores[0][j] And valores[1][j] < valores[2][j] Then
cuentavalores[1] += 1
Else
cuentavalores[2] += 1
Endif
Next
'
If cuentavalores[0] > cuentavalores[1] And cuentavalores[0] > cuentavalores[2] Then
vencedor = 1
Else If cuentavalores[1] > cuentavalores[0] And cuentavalores[1] > cuentavalores[2] Then
vencedor = 2
Else
vencedor = 3
Endif
Print "Bucle " & vencedor & " es el más rápido!.\n"
Print "Despues de ejecutar: "; NVECES; " veces cada uno de los búcles. Se demuestra que:"
Print "Dimensionar un array dinámico y asignar valores es más rapido que añadir uno a uno elementos"
Print "a un array dinámico y es más rápido que un array estático.\n"
For j = 0 To valoresbucles.Max
cparticipantes.Add(valoresbucles[j].Sort()[j], losparticipantes[j])
Next
For Each valor In cparticipantes
Print "El tiempo mínimo del bucle " & cparticipantes.Key & " fue de "; valor; " uS"
Next
End
Public Sub Repeticiones(n As Integer)
Dim i As Integer
Dim comienzo As Float
Dim diferenciadetiempo As Float
' Tiempo en microsegundos
For i = 1 To n
comienzo = Timer
Bucle1(NUMELEMTOS)
diferenciadetiempo = Timer - comienzo
valoresbucles[0].Add(diferenciadetiempo * 1000000)
comienzo = Timer
Bucle2(NUMELEMTOS)
diferenciadetiempo = Timer - comienzo
valoresbucles[1].Add(diferenciadetiempo * 1000000)
comienzo = Timer
Bucle3
diferenciadetiempo = Timer - comienzo
valoresbucles[2].Add(diferenciadetiempo * 1000000)
Next
End
Public Sub Bucle1(ielementos As Integer)
Dim matriz As New Integer[ielementos]
Dim i As Integer
For i = 0 To matriz.Max
matriz[i] = Rand(0, 65000)
Next
End
Public Sub Bucle2(ielementos As Integer)
Dim matriz As New Integer[]
Dim i As Integer
For i = 0 To ielementos
matriz.Add(Rand(0, 65000))
Next
End
Public Sub Bucle3()
Dim i As Integer
For i = 0 To ematriz.Max
ematriz[i] = Rand(0, 65000)
Next
End
Respuesta:
Citar:
A los que bajéis el código, compilarlo y fijaros que gambas advierte de el array estático no se ha inicializado.
Subo el ejemplo:
Bien. Si sabemos de antemano cuantos valores va a contener nuestro array dinámico podemos acelerar un poco.
Si no lo sabemos y vamos añadiendo uno a uno ( de ahí dinámico ) la respuesta será algo más lenta.
Saludos
CompararVelocidadRespuestaDeArrays-0.0.1.tar.gz | ||
Descripción: | Comparación de velocidad de acceso de los arrays. | Descargar |
Nombre del archivo: | CompararVelocidadRespuestaDeArrays-0.0.1.tar.gz | |
Tamaño: | 12.36 KB | |
Descargado: | 68 veces |