Está en la página 1de 11

UNIVERSIDAD AUTONOMA DE NUEVO LEON

FACULTAD DE INGENIERIA MECANICA Y ELECTRICA

NOMBRE: JOSE FERNANDO MARIN CARBAJAL

CARRERA: IAS

MATRICULA: 1598509 GRUPO: 003

MATERIA: ALGORITMOS COMPUTACIONALES

MAESTRA: JESSICA NATALIA MARTINEZ BALDERAS

18/SEPTIEMBRE/2021
REPORTE 2: FUNDAMENTOS DE COMPLEJIDAD COMPUTACIONAL

INTRODUCCION:
Un problema computacional se puede catalogar como inertemente difícil si la
solución se requiere de una cantidad significativa de los recursos
computacionales, sin importar el algoritmo utilizando. Una de las metas de la
complejidad computacional es saber determinar los limites prácticos de lo que se
puede hacer en una computadora y que no.

Una de las diferencias significativas entre el análisis de los algoritmos y la teoría


de la complejidad computacional el primero se dedica a determinar la cantidad de
los recursos requeridos por los algoritmos en particular para así poder resolver
algún problema, mientras que la segunda puede analizar todas las diferentes
posibilidades del algoritmo que pudieran ser usados para resolver el mismo
problema.

Las complejidades computacionales: Existen diversas formas de medir la


complejidad de un algoritmo. La complejidad se mide en función del tamaño de la
entrada. La complejidad temporal se refiere al tiempo que se demora en
ejecutarse un algoritmo, la complejidad espacial se refiere a la cantidad de
memoria que ocupa un algoritmo.

La complejidad computacional tiene varias características importantes, las


cuales son:

• Mide en función del tamaño de la entrada.

• Los principales elementos sobre los que se basa son el tiempo y el espacio.

• Prácticamente desarrollo de algoritmos.

• Un algoritmo es eficiente si utiliza la menor cantidad de tiempo posible.


• Determina los
límites prácticos de qué es lo que se puede hacer en una computadora
y qué no.

• Clasifica los problemas que pueden, o no pueden ser resueltos con una
cantidad determinada de recursos.

TECNICAS DE ANALISIS DE DISEÑO:

Ahora bien, no todos los problemas planteados por los humanos se pueden
informatizar. Para determinar si esto es posible, lo primero que hay que hacer es
analizar el problema en cuestión. En el caso de que sí se considere viable, se
debe realizar un análisis muy exhaustivo del problema, fruto del cual se obtendrá
una documentación, en donde se especificará, claramente, cuáles son los
requisitos que el programa deberá tener, entendidos estos como características
que el programa poseerá Por otro lado, en este caso mencionaremos a los
Algoritmos Voraces que nos servirán para comprender del que estamos hablando
Por consiguiente, los Algoritmos voraces son aquellos que se caracterizan por
tomar decisiones basadas en la información que se tiene a primera mano, sin
considerar lo que sucederá más adelante.

TECNICAS DE ANALISIS DE ALGORITMOS:

El término análisis de algoritmos fue acuñado por Donald Knuth1 y se refiere al


proceso de encontrar la complejidad computacional de un algoritmo que resuelva
un problema computacional dado, con el objetivo de proveer estimaciones teóricas
de los recursos que necesita. Usualmente, los recursos a los cuales se hace
referencia son el tiempo y el almacenamiento.

Distintos algoritmos pueden utilizarse para resolver un mismo problema y a su vez


los algoritmos pueden estudiarse de forma independiente del lenguaje de
programación a utilizar y de la máquina donde se ejecutará2. Esto significa que se
necesitan técnicas que permitan comparar la eficiencia de los algoritmos antes de
su implementación.

A la hora de realizar un análisis teórico de algoritmos es común calcular su


complejidad en un sentido asintótico, es decir, para un tamaño de entrada
suficientemente grande. La cota superior asintótica, y las notaciones omega (cota
inferior) y theta (caso promedio) se usan con esa finalidad.

Normalmente, las estimaciones asintóticas se utilizan porque


diferentes implementaciones del mismo algoritmo no tienen por qué tener la
misma eficiencia. No obstante, la eficiencia de dos implementaciones "razonables"
cualesquiera de un algoritmo dado están relacionadas por una constante
multiplicativa llamada constante oculta.

TÉCNICAS PARA CONSIDERAR:

Dividir y conquistar: es una técnica que permite encontrar la solución a un


problema descomponiéndolo en subproblemas más pequeños.

Dinámica: en ella se utilizan estructuras como vectores, tablas, arreglos, archivos,


con el fin de almacenar resultados parciales que contribuyen a la solución final.
Además de que evita calcular dos veces esta misma información.

Volver atrás: por otro lado, son aquellos que analizan todo el espacio de
búsqueda que garantiza que se pueda encontrar una solución óptima.

Por último, Realizar una búsqueda exhaustiva, sistemática y organizada sobre el


espacio de búsqueda del problema. En caso de no encontrar una solución a una
subtarea se retrocede a la subtarea anterior y se prueba otro camino diferente.
NATURALEZA DE PROBLEMAS:

La teoría de la complejidad computacional analiza todos los posibles algoritmos


que pudieran ser usados para resolver un problema; un problema es un conjunto
de frases de longitud finita que tienen asociadas frases resultantes también de
longitud finita.

Los problemas se agrupan en dos grupos principales: los problemas de decisión y


los problemas de optimización. Un problema de decisión es un tipo especial de
problema computacional cuya respuesta es “sí” o “no” (o de manera más formal,
“1” o “0”)

• PROBLEMAS DE DECISIÓN: Un problema de decisión pudiera verse como un


lenguaje formal, donde los elementos que pertenecen al lenguaje son las
instancias del problema cuya respuesta es “sí”, los que no pertenecen al lenguaje
son aquellas instancias cuya respuesta es “no”.

• PROBLEMAS DE OPTIMIZACIÓN: Para problemas de optimización, la


instancia está compuesta por un conjunto de configuraciones, un conjunto de
restricciones, y además una función objetivo que asigna un valor a cada instancia.

EFICIENCIA DE ALGORITMOS COMPUTACIONALES:

En Ciencias de la Computación, el término eficiencia algorítmica es usado para


describir aquellas propiedades de los algoritmos que están relacionadas con la
cantidad de recursos utilizados por el algoritmo. Un algoritmo debe ser analizado
para determinar el uso de los recursos que realiza. La eficiencia algorítmica puede
ser vista como análogo a la ingeniería de productividad de un proceso repetitivo o
continuo.

Con el objetivo de lograr una eficiencia máxima se quiere minimizar el uso de


recursos. Sin embargo, varias medidas (e.g. complejidad temporal, complejidad
espacial) no pueden ser comparadas directamente, luego, cuál de dos algoritmos
es considerado más eficiente, depende de cuál medida de eficiencia se está
considerando como prioridad, e.g. la prioridad podría ser obtener la salida del
algoritmo lo más rápido posible, o que minimice el uso de la memoria, o alguna
otra medida particular.

IMPLEMENTACION:
Una implementación es la ejecución o puesta en marcha de una idea
programada, ya sea, de una aplicación informática, un plan, modelo científico,
diseño específico, estándar, algoritmo o política.

IMPLEMENTACIÓN DE UN ALGORITMO EN SOFTWARE: El software siempre


se tiene que ejecutar en el hardware de la máquina donde esté. Normalmente,
siempre disponemos de un procesador de propósito general, llamado así porque
está pensado para poder ejecutar cualquier algoritmo. Para ello utiliza un conjunto
de instrucciones generales, como, por ejemplo, "suma dos números", "guarda este
dato en esta posición de memoria" o "recupera lo que hay en esta posición de
memoria".

IMPLEMENTACIÓN DE UN ALGORITMO EN HARDWARE: Especifico un


algoritmo implementado directamente en el hardware puede ejecutarse más
rápido, porque la única instrucción que tiene que cumplir es "ejecuta el algoritmo".
La principal razón de que sea más rápido es que no está ligado a un conjunto de
instrucciones generales y hay más libertad para decidir la forma de resolver el
problema.

EJEMPLOS DE IMPLEMENTACIÓN: Podemos encontrar algoritmos en una red


neuronal biológica, en circuitos eléctricos, en instalaciones industriales o
maquinarias pesadas. HARDWARE Y SOFTWARE.
HARDWARE: Es la parte física de un ordenador o sistema informático Está
formado por los componentes eléctricos, electrónicos, electromecánicos y
mecánicos, tales como circuitos de cables y luz, placas, memorias, discos duros,
dispositivos periféricos y cualquier otro material en estado físico que sea necesario
para hacer que el equipo funcione.

HARDWARE:
Existen cinco tipos de hardware que los identifican individualmente en base a su
utilidad y objetivo:

1. De procesamiento: Es el centro de la unidad física, más conocida como


‘CPU’.
2. De almacenamiento: Se trata de las unidades que se encargan de
almacenar datos.
3. De entrada: Consistiría en periféricos cuyo único objetivo es enviar datos.
4. De salida: En este caso se trata de un periférico que recibe datos.
5. Periféricos de mixtos: Este tipo de periféricos posee la característica de
enviar y recibir datos.

SOFTWARE:
En palabras sencillas el software es lo que permite que el hardware funcione.
Es decir, son las rutinas lógicas, digitales e intangibles (que no puedes tocar) de tu
equipo informático o móvil.

1. Software de aplicación:

Contiene todos y cada uno de esos programas y utilidades que derivan de una
programación de software y, que cumplen una tarea específica, en casi cualquier
área de la vida diaria, que se usan a través de dispositivos móviles y
computadores.

Las aplicaciones son el producto final que se ofrece al consumidor. pero quisimos
empezar por esta, porque así entenderás mejor las siguientes.
2. Software de programación:

A través de conocimiento lógico y de lenguaje de programación orientada a


objetos, es posible diseñar utilidades digitales para que ejerzan diversas
funciones, lo que hablamos en el punto anterior.

Estos programas son la base donde se escribe el código para desarrollar nuevos
sistemas dentro de un sistema operativo.

3. Software de sistema:

Llegamos a la base donde se construyen los dos anteriores. Dentro de los tipos de
software, el de sistema es el más importante. Es quién le permite al usuario usar la
interfaz del sistema operativo que viene incorporado al dispositivo.

Este está compuesto por un conjunto de programas u aplicaciones nativas que


tienen dos propósitos:

• gestionar recursos físicos del aparato para coordinar tareas y administrar la


memoria para el uso del mismo;
• y, ofrecer una experiencia de uso para que se pueda controlar e interactuar
con el sistema.

NOTACION DE COMPLEJIDAD ASINTONICA:

En computación, la notación asintótica nos permite representar la complejidad, y


por ende la eficiencia, de un algoritmo, de tal manera que podemos proyectar el
aumento de operaciones requeridas al aumentar el tamaño de la entrada (input).

Desde este punto de vista, el algoritmo más eficiente posible sería aquel en el que
el número de operaciones llevadas a cabo no varíe según crezca la entrada. Esto
es lo que sería una función constante.
CARACTERÍSTICAS DE LA COMPLEJIDAD ASINTÓTICA:

• Un algoritmo puede estar compuesto de dos o más operaciones, por lo que


determinar la complejidad depende de identificar la operación más costosa en el
algoritmo

• La notación asintótica nos permite rápidamente entender las diferencias de


escalabilidad con respecto al tamaño de la entrada.

• Para determinar la complejidad de un algoritmo, se siguen los siguientes pasos:

Se analiza el algoritmo para determinar una función que represente el número de


operaciones a realizar por el mismo

• Se define en términos de funciones matemáticas, el orden de la función.

• Se clasifica de acuerdo con su complejidad. • Se usa para representar


consumo a través del tiempo (recursos, memoria, etc.)

• Permite cuantificar rendimientos de funciones con base a su estructura.

• Define la correlación del crecimiento del tiempo de ejecución de un


algoritmo en función de las operaciones a ejecutar.
CONCLUSION:

El tema visto de la complejidad computacional tiene como una finalidad de


dar respuestas a cualquier duda que podríamos tener mediante una creación
de herramientas que permiten describir algún problema que pueda ser muy
complejo mediante la definición de un posible o posibles algoritmos para
solucionar un problema.

Pueden encontrar algunas técnicas que podemos analizar las posibles


preguntas y obtener las soluciones que deseas.

Este reporte me permitió explorar mas a fondo sobre la problemática de la


computación de alto rendimiento mediante etapas de aprendizaje e
investigación de tecnologías.

Podemos decir que en nuestra vida es un ejemplo de algoritmo, pues al


desarrollar nuestros que haceres diarios desarrollamos una serie de pasos
ordenados, así podremos quedar satisfactoriamente con los resultados.
Referencias
Alvarez, F. C. (25 de 05 de 2012). SCRIBD. Obtenido de SCRIBD:
https://es.scribd.com/document/94827081/Complejidad-computacional

Green, C. (19 de 05 de 2013). Wikipedia. Obtenido de Wikipedia :


https://es.wikipedia.org/wiki/Eficiencia_algor%C3%ADtmica

Llamas, J. (8 de 09 de 2020). economipedia. Obtenido de economipedia:


https://economipedia.com/definiciones/tipos-de-hardware.html

Medina, B. A. (23 de 08 de 2018). academia.edu. Obtenido de academia.edu:


https://www.academia.edu/28582143/FUNDAMENTOS_DE_COMPLEJIDAD_CO
MPUTACIONAL_TECNICAS_DE_ANALISIS_Y_DISE%C3%91O_DE_ALGORITM
OS

Montero, L. (14 de 2 de 2017). Laboratoria Devs. Obtenido de Laboratoria Devs:


https://medium.com/laboratoria-developers/algoritmos-y-notaci%C3%B3n-
asint%C3%B3tica-817a666ca444

Rockcontent. (30 de 4 de 2019). Rockcontent. Obtenido de Rockcontent:


https://rockcontent.com/es/blog/tipos-de-software/

También podría gustarte