Esta es una guía orientada al nuevo estudiante del doble grado, escrita con la intención
de ahorrarle el largo camino que el resto de alumnos hemos seguido hasta asentar
una manera de trabajar y estudiar eficiente. La escribimos pensando en el
artículo que nos hubiera gustado leer al empezar la carrera y la publicamos a
principios de septiembre, justo con ese propósito en mente.
Pero, ¿no me basta con lo que me enseñen en la universidad?
Sí, el temario de las asignaturas que vas a cursar es el necesario para
aprobarlas. Puedes pasar todo este texto por alto y seguir sacando buena nota.
Todo lo que te vamos a contar a continuación va dirigido a que
puedas organizar mejor tu trabajo, ahorrar mucho tiempo y evitarte pequeños
desastres. Probablemente, llegarías tú mismo a estas conclusiones después de un tiempo
en la carrera; sólo vamos a acelerar ese proceso. Además, la mayoría de las
herramientas que destacamos seguro que acabarás teniendo que usarlas en algún
momento, como estudiante o en tu carrera
profesional, así que mejor que cojas algo de práctica antes.
Esto probablemente no sea suficiente. Durante la carrera habrá
momentos en los que tendrás que buscarte la vida y encontrar más formas de
conseguir información, realizar alguna tarea, etc. Tendrás también que aprender a buscar
bibliografía y otras herramientas por tu propia cuenta.
The syntax of a programming language is one of the key points when it comes to
the difficulty in its learning process. Here we examine the traditional syntaxes
for iterating through a collection of any type, and place them face to face with a
newer, more semantic one based on objects called Enumerators.
Introduction
Let’s imagine we’ve got a collection of items, such as an array, a hash or a
set. We may want to be able to iterate through all its elements, either with
a determinate order or without it. To achieve this task in most programming
languages we usually resort to loop structures, for example a for loop.
In this case, we will need to use a special syntax in order to
describe the conditions in which the iterations will be made. For example, in
a C-like language:
En los cursos de estructuras de datos y algoritmos el número de estructuras de datos que se suelen estudiar es bastante reducido. Generalmente se introducen heaps, árboles binarios de búsqueda balanceados (AVL), tablas Hash y algunos algoritmos sobre grafos. Sin embargo, el mundo de las estructuras de datos es mucho más amplio 1 y probablemente requeriría una asignatura de estructuras de datos avanzadas como sucede en algunas universidades. El MIT, por ejemplo, proporciona vídeos con el contenido de esta asignatura. Por ello, intentaré escribir entradas en el blog que profundicen en esta temática.
En este caso trataremos los segment trees o árboles de segmentos. Introduciremos en primer lugar un problema importante de la teoría de algoritmos, range minimum query problem, que servirá como motivación para los segment trees. Posteriormente se explicará el funcionamiento de estos, proporcionando para cada operación su correspondiente código en Python. Por último, se proponen como ejercicio algunos problemas resolubles mediante segment trees.
En el Análisis Matemático es frecuente que la función solución a determinado problema sea desconocida o no la podamos expresar en términos de las funciones elementales que conocemos. Incluso en las funciones más simples, como la exponencial o el logaritmo, nos encontramos esta situación. Conocemos su existencia y propiedades características pero tenemos ciertas dificultades a la hora de evaluarlas en un punto. Es frecuente para ello utilizar los famosos polinomios de Taylor, en cuyo caso estamos aproximando la función por polinomios.
En más situaciones es habitual disponer de funciones que se aproximan cada vez más a la solucion del problema. Para formalizar este hecho surge el concepto de convergencia para sucesiones de funciones. Podemos distinguir dos tipos de convergencia: convergencia puntual y convergencia uniforme.
Definición 1
Sea y una sucesión de funciones con . Se dice que converge puntualmente en si la sucesión converge. Podemos considerar el conjunto de los elementos en los que hay convergencia puntual y definir la función límite:
En este post formularemos un álgebra para los tipos de los lenguajes de
programación. Veremos operaciones que se aplican sobre ellos para obtener nuevos
tipos y qué leyes siguen estas operaciones. Usaremos como base el sistema de
tipos de Haskell, pero estos mismos conceptos podrían aplicarse a cualquier
lenguaje con un sistema algebraico de tipos. Para iniciarse en el sistema de
tipos de Haskell sugiero leer antes la Introducción a Haskell.
Notando tipos en Haskell
En Haskell, los tipos se escriben como un conjunto de constructores, que
actúan como funciones teniendo como codominio el tipo definido. Por ejemplo,
data Colour = RGB Int Int Int
| HSV Int Int Int
este código define un tipo Colour con dos formas de construirlo, como RGB y
como HSV. Ambos constructores usan como argumento tres enteros. Con tres
enteros podremos construir un color de dos formas distintas.