Algoritmo
Algoritmo
Algoritmo
Logaritmo
A lo largo de la historia varios autores han tratado de definir formalmente a los algoritmos
utilizando modelos matemáticos. Esto fue realizado por Alonzo Church en 1936 con el
concepto de "calculabilidad efectiva" basada en su cálculo lambda y por Alan
Turing basándose en la máquina de Turing. Los dos enfoques son equivalentes, en el
sentido en que se pueden resolver exactamente los mismos problemas con ambos
enfoques.89 Sin embargo, estos modelos están sujetos a un tipo particular de datos como
son números, símbolos o gráficas mientras que, en general, los algoritmos funcionan
sobre una vasta cantidad de estructuras de datos. En general, la parte común en todas las
definiciones se puede resumir en las siguientes tres propiedades siempre y cuando no
consideremos algoritmos paralelos:
Diagrama de flujo:
Los diagramas de flujo son descripciones gráficas de algoritmos; usan símbolos conectados
con flechas para indicar la secuencia de instrucciones y están regidos por ISO.
Los diagramas de flujo son usados para representar algoritmos pequeños, ya que abarcan
mucho espacio y su construcción es laboriosa. Por su facilidad de lectura son usados como
introducción a los algoritmos, descripción de un lenguaje y descripción de procesos a
personas ajenas a la computación.
ejemplo:
Pseudocódigo:
Sistemas formales:
Implementación:
Muchos algoritmos son ideados para implementarse en un programa. Sin embargo, los
algoritmos pueden ser implementados en otros medios, como una red neuronal, un
circuito eléctrico o un aparato mecánico y eléctrico. Algunos algoritmos inclusive se
diseñan especialmente para implementarse usando lápiz y papel. El algoritmo de
multiplicación tradicional, el algoritmo de Euclides, la criba de Eratóstenes y
muchas formas de resolver la raíz cuadrada son solo algunos ejemplos.
Variables:
Son elementos que toman valores específicos de un tipo de datos concreto. La declaración
de una variable puede realizarse comenzando con var. Principalmente, existen dos
maneras de otorgar valores iniciales a variables:
Mediante una sentencia de asignación.
Ejemplo:
...
i:=1;
read(n);
while i < n do begin
(* cuerpo del bucle *)
i := i + 1
end;
...
Estructuras secuenciales:
La estructura secuencial es aquella en la que una acción sigue a otra en secuencia. Las
operaciones se suceden de tal modo que la salida de una es la entrada de la siguiente y
así sucesivamente hasta el fin del proceso. La asignación de esto consiste, en el paso de
valores o resultados a una zona de la memoria. Dicha zona será reconocida con el
nombre de la variable que recibe el valor. La asignación se puede clasificar de la
siguiente forma:
Contador: Consiste en usarla como un verificador del número de veces que se realiza un
proceso (a ← a + 1)
Inicio
...
float b, h, a;
printf("Diga la base");
scanf("%f", &b);
printf("Diga la altura");
scanf("%f", &h);
a = (b*h)/2;
printf("El área del triángulo es %f", a)
...
Fin
Un algoritmo se puede concebir como una función que transforma los datos de
un problema(entrada) en los datos de una solución (salida). Mas aún, los datos se pueden
representar a su vez como secuencias de bits, y en general, de símbolos cualesquiera.1911
Como cada secuencia de bits representa a un número natural (véase Sistema binario),
entonces los algoritmos son en esencia funciones de los números naturales en los números
naturales que sí se pueden calcular.
Es decir que todo algoritmo calcula una función f: N N donde cada número natural
es la codificación de un problema o de una solución.
En ocasiones los algoritmos son susceptibles de nunca terminar, por ejemplo, cuando
entran a un bucle infinito. Cuando esto ocurre, el algoritmo nunca devuelve ningún valor
de salida, y podemos decir que la función queda indefinida para ese valor de entrada. Por
esta razón se considera que los algoritmos son funciones parciales, es decir, no
necesariamente definidas en todo su dominio de definición.
Cuando una función puede ser calculada por medios algorítmicos, sin importar la cantidad
de memoria que ocupe o el tiempo que se tarde, se dice que dicha función es computable.
No todas las funciones entre secuencias datos son computables. El problema de la
parada es un ejemplo.
Analisis de un algoritmo:
una señal positiva (en el caso de que el número de ceros sea mayor que el de unos) y una
negativa en caso contrario. Finalmente, la salida de este algoritmo se define como la
devolución de valores exclusivamente positivos si hay más ceros que unos en la secuencia
y, en cualquier otro caso, devolverá una mezcla de señales positivas y negativas.
Ejemplos de algoritmos:
Es decir, dado un conjunto C= {C0,C1,...,Cn} se pide encontrar m tal que x menor igual
que m para todo elemento x que pertenece al conjunto C.
Para encontrar el elemento máximo, se asume que el primer elemento (C0) es el máximo;
luego, se recorre el conjunto y se compara cada valor con el valor del máximo número
encontrado hasta ese momento. En el caso que un elemento sea mayor que el máximo, se
asigna su valor al máximo. Cuando se termina de recorrer la lista, el máximo número que
se ha encontrado es el máximo de todo el conjunto.
Descripción formal
El algoritmo puede ser escrito de una manera más formal en el siguiente pseudocódigo:
Algoritmo encontrar el maximo de un conjunto:
Funcion mx (C)
//C es un conjunto no vacio de numeros//
n ← |C|//|C| es el numero de elementos de C//
m ← C0
para i ← 1 hasta n hacer
si Ci > m entonces
m ←Ci
devolver m
Sobre la notación:
Implementación:
En lenguaje C++:
Busqueda secuencial:
Variables
pos: posición actual en el vector
pos = 0
while pos < tam:
if vec[pos] == dato:
Retorne verdadero y/o pos,
else:
pos = pos + 1
Fin (while)
Retorne falso,
C
int i;
return -1;
}
Búsqueda dicotómica (binaria)
Datos de entrada:
vec: vector en el que se desea buscar el dato
tam: tamaño del vector. Los subíndices válidos van desde 0 hasta
tam-1 inclusive.
dato: elemento que se quiere buscar.
Variables
centro: subíndice central del intervalo
inf: límite inferior del intervalo
sup: límite superior del intervalo
inf = 0
sup = tam-1
C++
#include <vector>
Python
Python
def bin(a,x,low,hi):
ans = -1
if low==hi: ans = -1
else:
mid = (low+((hi-low)//2))
if x < a[mid]: ans = bin(a,x,low,mid)
elif x > a[mid]: ans = bin(a,x,mid+1,hi)
else: ans = mid
return ans
Python
Algoritmo de ordenamiento:
En computación y matemáticas un algoritmo de ordenamiento es un algoritmo que pone
elementos de una lista o un vector en una secuencia dada por una relación de orden, es
decir, el resultado de salida ha de ser una permutación o reordenamiento de la entrada que
satisfaga la relación de orden dada. Las relaciones de orden más usadas son el orden
numérico y el orden lexicográfico. Ordenamientos eficientes son importantes para
optimizar el uso de otros algoritmos (como los de búsqueda y fusión) que requieren listas
ordenadas para una ejecución rápida. También es útil para poner datos en forma canónica
y para generar resultados legibles por humanos.
Después de este trabajo pudimos conocer las múltiples ayudas que proporcionan los
logaritmos a carreras súper importantes en nuestra sociedad. Además que no pudimos
dejar de notar la facilidad en que pudimos manejar el contenido ya que estábamos en
nuestro territorio es decir con la Internet de nuestro lado.
Notamos que los logaritmos no es nada de otro mundo y que con practica y el
conocimiento de sus propiedades y haciendo memoria de un poquito de materia pasada
se hace muy facil.
Es muy bueno que nuestros profesores integren esta nueva metodología de trabajos ya
que los contenidos se vuelven más amenos y más fáciles de llevar.
Bibliografia
http://correo.uan.edu.mx/~iavalos/FP/FP1.html
https://conceptodefinicion.de/algoritmo/
https://es.wikipedia.org/wiki/Algoritmo#Definici%C3%B3n
https://es.wikipedia.org/wiki/Algoritmo_de_ordenamiento