Saltar al contenido

Algoritmos y Programación

AP Principios de Ciencias de la Computación · Tema 3

Entrenar
Lección de video para este tema Abrir la página de video
9:17

Algoritmos y programación

Imagina una guía telefónica con un millón de nombres, y debes encontrar uno. Revisarlos uno por uno, y podrías estar todo el día. Hay una forma de encontrarlo en aproximadamente…

Narración en inglés · Subtítulos en inglés + 中文 quemados en pantalla

El código de abajo utiliza la pseudocódigo AP CSP – la referencia neutra al idioma del examen. La asignación se escribe como a ← expression, y los índices de las listas comienzan en 1.

3.1

Variables y Asignaciones

Syllabus

Comprensión duradera (AAP-1): Para encontrar soluciones específicas a problemas generalizables, los programadores representan y organizan datos de múltiples maneras.

Objetivo de aprendizaje AAP-1.A: Representar un valor con una variable. [Habilidad 3.A]

  • AAP-1.A.1 Una variable es una abstracción dentro de un programa que puede contener un valor. Cada variable tiene almacenamiento de datos asociado que representa un valor a la vez, pero ese valor puede ser una lista u otra colección que a su vez contiene múltiples valores.
  • AAP-1.A.2 El uso de nombres de variables significativos ayuda con la legibilidad del código del programa y la comprensión de qué valores están representados por las variables.
  • AAP-1.A.3 Algunos lenguajes de programación proporcionan tipos para representar datos, los cuales se referencian mediante variables. Estos tipos incluyen números, booleanos, listas y cadenas.
  • AAP-1.A.4 Algunos valores son más adecuados para su representación utilizando un tipo de dato en lugar de otro.

Objetivo de aprendizaje AAP-1.B: Determinar el valor de una variable como resultado de una asignación. [Habilidad 4.B]

  • AAP-1.B.1 El operador de asignación permite a un programa cambiar el valor representado por una variable.

  • AAP-1.B.2 La hoja de referencia del examen proporciona el operador "$\leftarrow$" para usarlo en la asignación. Por ejemplo,

    Texto:

    a ← expression

    Bloque:

    a ← expression

    evalúa expression y luego asigna una copia del resultado a la variable a.

  • AAP-1.B.3 El valor almacenado en una variable será el valor asignado más recientemente. Por ejemplo:

    a ← 1 b ← a a ← 2 display(b)

    aún muestra 1.

Fuente: College Board AP Course and Exam Description

Una variable es un lugar con nombre que almacena un valor. El operador de asignación guarda el valor del lado derecho en la variable del lado izquierdo:

Una variable es un almacenamiento con nombre cuyo valor puede cambiar
Una variable es un almacenamiento con nombre cuyo valor puede cambiar
a ← 5
b ← a + 3      // b is now 8

Una variable mantiene un solo valor a la vez; asignar nuevamente lo reemplaza. Las variables permiten a un programa almacenar entradas, recordar resultados y reutilizarlos.

Explorar

Observar cómo una variable retiene y cambia su valor

Una variable es una caja nombrada que almacena un valor a la vez. Una asignación copia un valor dentro de la caja; asignar nuevamente sobrescribe lo que había antes.

Vocabulario Entrenar
Inglés Chino Pinyin
variable/ˈveərɪəbl/ 变量 biàn liàng
assignment/əˈsaɪnmənt/ 赋值 fù zhí
Data abstraction/ˈdeɪtə əbˈstrækʃn/ 数据抽象 shù jù chōu xiàng
remainder/rɪˈmeɪndə/ 余数 yú shù
string/strɪŋ/ 字符串 zì fú chuàn
concatenation/kənˌkætəˈneɪʃn/ 拼接 pīn jiē
Boolean expression/ˈbuːlɪən ekˈspreʃn/ 布尔表达式 bù ěr biǎo dá shì
conditional (selection)/kənˈdɪʃənl/ 条件语句 tiáo jiàn yǔ jù
nested conditional/ˈnestɪd kənˈdɪʃənl/ 嵌套条件 qiàn tào tiáo jiàn
Iteration (a loop)/ˌɪtəˈreɪʃn/ 迭代 dié dài
infinite loop/ˈɪnfɪnət luːp/ 无限循环 wú xiàn xún huán
algorithm/ˈælɡərɪθəm/ 算法 suàn fǎ
3.2

Abstracción de Datos

Syllabus

Comprensión duradera (AAP-1): Para encontrar soluciones específicas a problemas generalizables, los programadores representan y organizan datos de múltiples maneras.

Objetivo de aprendizaje AAP-1.C: Representar una lista o cadena mediante una variable. [Habilidad 3.A]

  • AAP-1.C.1 Una lista es una secuencia ordenada de elementos. Por ejemplo,

    [value1, value2, value3, ...]

    describe una lista donde value1 es el primer elemento, value2 es el segundo elemento, value3 es el tercer elemento, y así sucesivamente.

  • AAP-1.C.2 Un elemento es un valor individual en una lista que tiene asignado un índice único.

  • AAP-1.C.3 Un índice es un método común para hacer referencia a los elementos en una lista o cadena utilizando números naturales.

  • AAP-1.C.4 Una cadena es una secuencia ordenada de caracteres.

Objetivo de aprendizaje AAP-1.D: Para la abstracción de datos: a. Desarrollar la abstracción de datos utilizando listas para almacenar múltiples elementos. [Habilidad 3.B] b. Explicar cómo el uso de la abstracción de datos gestiona la complejidad en el código del programa. [Habilidad 3.C]

  • AAP-1.D.1 La abstracción de datos proporciona una separación entre las propiedades abstractas de un tipo de dato y los detalles concretos de su representación.

  • AAP-1.D.2 Las abstracciones de datos gestionan la complejidad en los programas al dar un nombre a una colección de datos sin hacer referencia a los detalles específicos de la representación.

  • AAP-1.D.3 Las abstracciones de datos pueden crearse utilizando listas.

  • AAP-1.D.4 Desarrollar una abstracción de datos para implementar en un programa puede resultar en un programa más fácil de desarrollar y mantener.

  • AAP-1.D.5 Las abstracciones de datos a menudo contienen diferentes tipos de elementos.

  • AAP-1.D.6 El uso de listas permite tratar varios elementos relacionados como un solo valor. Las listas se denominan de diferentes maneras, como array, dependiendo del lenguaje de programación.

    • Declaración de exclusión (EK AAP-1.D.6): El uso de listas vinculadas está fuera del alcance de este curso y del Examen AP.
  • AAP-1.D.7 La hoja de referencia del examen proporciona la notación

    [value1, value2, value3, ...]

    para crear una lista con esos valores como el primer, segundo, tercer elemento, y así sucesivamente. Por ejemplo,

    • Texto:

      aList ← [value1, value2, value3, ...]

    Bloque:

    aList ← value1, value2, value3

    crea una nueva lista que contiene los valores value1, value2, value3 y ... en los índices 1, 2, 3 y ... respectivamente, y la asigna a aList.

    • Texto:

      aList ← []

    Bloque:

    aList ← (vacío)

    crea una nueva lista vacía y la asigna a aList.

    • Texto:

      aList ← bList

    Bloque:

    aList ← bList

    asigna una copia de la lista bList a la lista aList. Por ejemplo, si bList contiene [20, 40, 60], entonces aList también contendrá [20, 40, 60] después de la asignación.

  • AAP-1.D.8 La hoja de referencia del examen describe una estructura de lista cuyos valores de índice van desde 1 hasta el número de elementos en la lista, inclusive. Para todas las operaciones de lista, si un índice de lista es menor que 1 o mayor que la longitud de la lista, se produce un mensaje de error y el programa terminará.

Fuente: College Board AP Course and Exam Description

La abstracción de datos le permite gestionar la complejidad al dar un solo nombre a una colección de datos — por ejemplo, una lista en lugar de docenas de variables separadas. Oculta detalles: usted usa la colección nombrada sin preocuparse por cómo está almacenada. Las listas (más abajo) son la principal abstracción de datos del curso.

Vocabulario Entrenar
Inglés Chino Pinyin
list/lɪst/ 列表 liè biǎo
3.3

Expresiones Matemáticas

Syllabus

Comprensión duradera (AAP-2): La forma en que se secuestran y combinan las declaraciones en un programa determina el resultado calculado. Los programas incorporan constructos de iteración y selección para representar repeticiones y tomar decisiones con el fin de manejar valores de entrada variados.

Objetivo de aprendizaje AAP-2.A: Expresar un algoritmo que utilice secuenciación sin usar un lenguaje de programación. [Habilidad 2.A]

  • AAP-2.A.1 Un algoritmo es un conjunto finito de instrucciones que cumplen una tarea específica.
  • AAP-2.A.2 Más allá de los lenguajes de programación visuales y textuales, los algoritmos pueden expresarse de diversas formas, como lenguaje natural, diagramas y pseudocódigo.
  • AAP-2.A.3 Los algoritmos ejecutados por programas se implementan mediante lenguajes de programación.
  • AAP-2.A.4 Todo algoritmo puede construirse utilizando combinaciones de secuenciación, selección e iteración.

Objetivo de aprendizaje AAP-2.B: Representar un proceso algorítmico paso a paso utilizando sentencias de código secuenciales. [Habilidad 2.B]

  • AAP-2.B.1 La secuenciación es la aplicación de cada paso de un algoritmo en el orden en que aparecen las sentencias de código.
  • AAP-2.B.2 Una sentencia de código es una parte del código de un programa que expresa una acción que debe llevarse a cabo.
  • AAP-2.B.3 Una expresión puede constar de un valor, una variable, un operador o una llamada a procedimiento que devuelve un valor.
  • AAP-2.B.4 Las expresiones se evalúan para producir un único valor.
  • AAP-2.B.5 La evaluación de expresiones sigue un orden de operaciones definido por el lenguaje de programación.
  • AAP-2.B.6 Las sentencias secuenciales se ejecutan en el orden en que aparecen en el segmento de código.
  • AAP-2.B.7 La claridad y la legibilidad son consideraciones importantes al expresar un algoritmo en un lenguaje de programación.

Objetivo de aprendizaje AAP-2.C: Evaluar expresiones que utilizan operadores aritméticos. [Habilidad 4.B]

  • AAP-2.C.1 Los operadores aritméticos forman parte de la mayoría de los lenguajes de programación e incluyen los operadores de suma, resta, multiplicación, división y módulo.

  • AAP-2.C.2 La hoja de referencia del examen proporciona a MOD b, que se evalúa como el residuo cuando a se divide por b. Asumir que a es un entero mayor o igual a 0 y b es un entero mayor que 0. Por ejemplo, 17 MOD 5 se evalúa como 2.

  • AAP-2.C.3 La hoja de referencia del examen proporciona los operadores aritméticos +, -, *, / y MOD.

    Texto y Bloque:

    • a + b
    • a - b
    • a * b
    • a / b
    • a MOD b

    Estos se utilizan para realizar operaciones aritméticas sobre a y b. Por ejemplo, 17 / 5 se evalúa como 3.4.

  • AAP-2.C.4 El orden de operaciones utilizado en matemáticas se aplica al evaluar expresiones. El operador MOD tiene la misma precedencia que los operadores * y /.

Fuente: College Board AP Course and Exam Description

Los programas calculan con los operadores +, -, *, / y MOD (el resto de una división, p. ej., 17 MOD 5 es 2). Las expresiones siguen el orden de operaciones habitual. MOD es especialmente útil para probar divisibilidad (n MOD 2 = 0 significa que n es par) y para envolver valores alrededor de un rango.

Explorar

Evaluar una expresión paso a paso

Una expresión se evalúa siguiendo la jerarquía de operaciones: la multiplicación y la división ocurren antes que la suma y la resta, de izquierda a derecha.

3.4

Cadenas de texto

Syllabus

Comprensión Duradera (AAP-2): La forma en que las sentencias se secuencian y combinan en un programa determina el resultado calculado. Los programas incorporan construcciones de iteración y selección para representar la repetición y tomar decisiones con el fin de manejar valores de entrada variados.

Objetivo de Aprendizaje AAP-2.D: Evaluar expresiones que manipulan cadenas. [Habilidad 4.B]

  • AAP-2.D.1 La concatenación de cadenas une dos o más cadenas extremo con extremo para formar una nueva cadena.
  • AAP-2.D.2 Una subcadena es parte de una cadena existente.

Fuente: College Board AP Course and Exam Description

Una cadena es una secuencia ordenada de caracteres, como "hello". Los programas unen cadenas (concatenación) y encuentran su longitud. Las cadenas representan texto — nombres, mensajes, secuencias — y son una entrada y salida comunes de programas.

3.5

Expresiones Booleanas

Syllabus

Comprensión Duradera (AAP-2): La forma en que se secuencian y combinan las instrucciones en un programa determina el resultado calculado. Los programas incorporan constructos de iteración y selección para representar repeticiones y tomar decisiones para manejar valores de entrada variados.

Objetivo de Aprendizaje AAP-2.E: Para relaciones entre dos variables, expresiones o valores: a. Escribir expresiones utilizando operadores relacionales. [Habilidad 2.B] b. Evaluar expresiones que utilizan operadores relacionales. [Habilidad 4.B]

  • AAP-2.E.1 Un valor booleano es verdadero o falso.

  • AAP-2.E.2 La hoja de referencia del examen proporciona los siguientes operadores relacionales: =, ≠, >, <, ≥ y ≤.

    Texto y Bloque:

    • a = b
    • a ≠ b
    • a > b
    • a < b
    • a ≥ b
    • a ≤ b

    Estos se utilizan para probar la relación entre dos variables, expresiones o valores. Una comparación que utiliza un operador relacional evalúa a un valor booleano. Por ejemplo, a = b evalúa a true si a y b son iguales; de lo contrario, evalúa a false.

Objetivo de Aprendizaje AAP-2.F: Para relaciones entre valores booleanos: a. Escribir expresiones utilizando operadores lógicos. [Habilidad 2.B] b. Evaluar expresiones que utilizan operadores lógicos. [Habilidad 4.B]

  • AAP-2.F.1 La hoja de referencia del examen proporciona los operadores lógicos NOT, AND y OR, los cuales evalúan a un valor booleano.

  • AAP-2.F.2 La hoja de referencia del examen proporciona

    Texto:

    NOT condition

    Bloque:

    NOT condition

    que evalúa a true si condition es false; de lo contrario evalúa a false.

  • AAP-2.F.3 La hoja de referencia del examen proporciona

    Texto:

    condition1 AND condition2

    Bloque:

    condition1 AND condition2

    que evalúa a true si tanto condition1 como condition2 son true; de lo contrario evalúa a false.

  • AAP-2.F.4 La hoja de referencia del examen proporciona

    Texto:

    condition1 OR condition2

    Bloque:

    condition1 OR condition2

    que evalúa a true si condition1 es true o si condition2 es true o si tanto condition1 como condition2 son true; de lo contrario evalúa a false.

  • AAP-2.F.5 El operando para un operador lógico es ya sea una expresión booleana o un único valor booleano.

Fuente: College Board AP Course and Exam Description

Una expresión booleana se evalúa como true (verdadero) o false (falso). Utiliza operadores relacionales (=, ≠, <, >, ≤, ≥) y operadores lógicos NOT (NO), AND (Y), OR (O):

Las tres familias de operadores: aritméticos, relacionales y lógicos
Las tres familias de operadores: aritméticos, relacionales y lógicos
  • NOT invierte un valor,
  • AND es verdadero solo cuando ambos lados son verdaderos,
  • OR es verdadero cuando al menos uno de los lados es verdadero.

Estas condiciones guían cada decisión y bucle.

Explorar

Probar la tabla de verdad OR

Una expresión Booleana es verdadera (1) o falsa (0). OR es verdadera cuando al menos una entrada es verdadera; invierte las entradas para ver todos los casos.

3.6

Condicionales

Syllabus

Comprensión Duradera (AAP-2): La forma en que se secuencian y combinan las instrucciones en un programa determina el resultado calculado. Los programas incorporan constructos de iteración y selección para representar la repetición y tomar decisiones para manejar valores de entrada variados.

Objetivo de Aprendizaje AAP-2.G: Expresar un algoritmo que utilice selección sin usar un lenguaje de programación. [Habilidad 2.A]

  • AAP-2.G.1 La selección determina qué partes de un algoritmo se ejecutan basándose en si una condición es true o false.

Objetivo de Aprendizaje AAP-2.H: Para la selección: a. Escribir instrucciones condicionales. [Habilidad 2.B] b. Determinar el resultado de las instrucciones condicionales. [Habilidad 4.B]

  • AAP-2.H.1 Las instrucciones condicionales, o "instrucciones if", afectan el flujo secuencial del control ejecutando diferentes instrucciones basándose en el valor de una expresión booleana.

  • AAP-2.H.2 La hoja de referencia del examen proporciona

    Texto:

    IF(condition) { <block of statements> }

    Bloque:

    IF condition block of statements

    en el cual el código en block of statements se ejecuta si la expresión booleana condition se evalúa como true; no se realiza ninguna acción si condition se evalúa como false.

  • AAP-2.H.3 La hoja de referencia del examen proporciona

    Texto:

    IF(condition) { <first block of statements> } ELSE { <second block of statements> }

    Bloque:

    IF condition first block of statements ELSE second block of statements

    en el cual el código en first block of statements se ejecuta si la expresión booleana condition se evalúa como true; de lo contrario, se ejecuta el código en second block of statements.

Fuente: College Board AP Course and Exam Description

Un condicional (selección) elige qué código ejecutar. IF ejecuta un bloque solo cuando su condición es verdadera; ELSE ofrece una alternativa:

Selection chooses between paths based on a condition
La selección elige entre rutas basándose en una condición
IF (score ≥ 60)
{
    DISPLAY("Pass")
}
ELSE
{
    DISPLAY("Fail")
}
Explorar

Seguir una decisión if / else

Una condicional ejecuta una rama u otra dependiendo de si su condición es verdadera. Desliza el valor a través del umbral y observa qué rama se toma.

3.7

Condicionales Anidados

Syllabus

Comprensión duradera (AAP-2): La forma en que se secencian y combinan las instrucciones en un programa determina el resultado calculado. Los programas incorporan constructos de iteración y selección para representar repeticiones y tomar decisiones para manejar valores de entrada variados.

Objetivo de aprendizaje AAP-2.I: Para la selección anidada: a. Escribir sentencias condicionales anidadas. [Habilidad 2.B] b. Determinar el resultado de las sentencias condicionales anidadas. [Habilidad 4.B]

  • AAP-2.I.1 Las sentencias condicionales anidadas consisten en sentencias condicionales dentro de otras sentencias condicionales.

Fuente: College Board AP Course and Exam Description

Un condicional anidado coloca un IF dentro de otro (o encadena ELSE IF) para elegir entre más de dos rutas. Solo se ejecuta la primera rama coincidente:

IF (g ≥ 90)      { grade ← "A" }
ELSE IF (g ≥ 80) { grade ← "B" }
ELSE             { grade ← "C" }
3.8

Iteración

Syllabus

Comprensión Duradera (AAP-2): La forma en que se secuencian y combinan las instrucciones en un programa determina el resultado calculado. Los programas incorporan estructuras de iteración y selección para representar repeticiones y tomar decisiones para manejar valores de entrada variados.

Objetivo de Aprendizaje AAP-2.J: Expresar un algoritmo que utilice iteración sin emplear un lenguaje de programación. [Habilidad 2.A]

  • AAP-2.J.1 La iteración es una parte repetitiva de un algoritmo. La iteración se repite un número especificado de veces o hasta que se cumple una condición dada.

Objetivo de Aprendizaje AAP-2.K: Para la iteración: a. Escribir instrucciones de iteración. [Habilidad 2.B] b. Determinar el resultado o efecto secundario de las instrucciones de iteración. [Habilidad 4.B]

  • AAP-2.K.1 Las instrucciones de iteración modifican el flujo secuencial de control repitiendo un conjunto de instrucciones cero o más veces, hasta que se cumple una condición de parada.

  • AAP-2.K.2 La hoja de referencia del examen proporciona

    Texto:

    REPEAT n TIMES { <block of statements> }

    Bloque:

    REPEAT n TIMES block of statements

    en el cual se ejecuta block of statements n veces.

  • AAP-2.K.3 La hoja de referencia del examen proporciona

    Texto:

    REPEAT UNTIL(condition) { <block of statements> }

    Bloque:

    REPEAT UNTIL condition block of statements

    en el cual el código en block of statements se repite hasta que la expresión booleana condition se evalúa como true.

  • AAP-2.K.4 En la iteración REPEAT UNTIL(condition), se produce un bucle infinito cuando la condición final nunca se evaluará como true.

  • AAP-2.K.5 En la iteración REPEAT UNTIL(condition), si la condición se evalúa inicialmente como true, el cuerpo del bucle no se ejecuta en absoluto, debido a que la condición se verifica antes del bucle.

Fuente: College Board AP Course and Exam Description

Iteración (un bucle) repite instrucciones. La pseudocódigo AP tiene dos formas:

Un bucle pre-condición (WHILE) prueba antes del cuerpo, por lo que puede ejecutarse cero veces
Un bucle de pre-condición (WHILE) verifica antes del cuerpo, por lo que puede ejecutarse cero veces
REPEAT 5 TIMES        // a fixed count
{
    DISPLAY("hi")
}

REPEAT UNTIL (found)  // until a condition becomes true
{
    ...
}

Un bucle que nunca cumple su condición de parada es un bucle infinito.

Explorar

Rastrear un bucle una pasada a la vez

Un bucle repite un bloque mientras su contador recorre un rango. Avanza paso a paso para ver cómo el contador y el total acumulado se actualizan en cada pasada.

3.9

Desarrollo de Algoritmos

Syllabus

Comprensión Duradera (AAP-2): La forma en que se secuencian y combinan las sentencias en un programa determina el resultado calculado. Los programas incorporan constructos de iteración y selección para representar repeticiones y tomar decisiones que manejen valores de entrada variados.

Objetivo de Aprendizaje AAP-2.L: Comparar múltiples algoritmos para determinar si producen el mismo efecto secundario o resultado. [Habilidad 1.D]

  • AAP-2.L.1 Los algoritmos pueden escribirse de diferentes formas y aún así lograr las mismas tareas.
  • AAP-2.L.2 Los algoritmos que parecen similares pueden producir efectos secundarios o resultados diferentes.
  • AAP-2.L.3 Algunas sentencias condicionales pueden escribirse como expresiones booleanas equivalentes.
  • AAP-2.L.4 Algunas expresiones booleanas pueden escribirse como sentencias condicionales equivalentes.
  • AAP-2.L.5 Se pueden desarrollar o utilizar diferentes algoritmos para resolver el mismo problema.

Objetivo de Aprendizaje AAP-2.M: Para los algoritmos: a. Crear algoritmos. [Habilidad 2.A] b. Combinar y modificar algoritmos existentes. [Habilidad 2.B]

  • AAP-2.M.1 Los algoritmos pueden crearse a partir de una idea, mediante la combinación de algoritmos existentes o modificando algoritmos existentes.
  • AAP-2.M.2 El conocimiento de algoritmos existentes puede ayudar a construir nuevos. Algunos algoritmos existentes incluyen:
    • Determinar el valor máximo o mínimo de dos o más números
    • Calcular la suma o el promedio de dos o más números
    • Identificar si un número entero es o no divisible exactamente por otro número entero
    • Determinar la trayectoria de un robot a través de un laberinto
  • AAP-2.M.3 Utilizar algoritmos correctos existentes como bloques de construcción para crear otro algoritmo tiene beneficios como reducir el tiempo de desarrollo, reducir las pruebas y simplificar la identificación de errores.

Fuente: College Board AP Course and Exam Description

Código fuente de Python en una pantalla — los algoritmos son instrucciones precisas y ordenadas
Código fuente de Python en una pantalla — los algoritmos son instrucciones precisas y ordenadas

Un algoritmo no es lo mismo que código. Más allá de los lenguajes de programación visuales y textuales, un algoritmo puede expresarse de una variedad de formas: en lenguaje natural (oraciones ordinarias), como un diagrama tal como un diagrama de flujo, o en pseudocódigo. Esas formas son para personas — le permiten verificar la lógica y estar de acuerdo en ella antes de elegir cualquier lenguaje, y luego el mismo algoritmo puede escribirse en cualquier lenguaje.

Cuando lo escribe en un lenguaje de programación, la claridad y legibilidad son consideraciones importantes, no adornos: nombres de variables significativos, sangría consistente y comentarios que expliquen el porqué en lugar del qué. El programa debe ser leído y modificado después por alguien — a menudo usted — y un algoritmo que nadie puede seguir no se puede mantener ni depurar.

Un algoritmo es una secuencia finita de pasos que resuelve un problema, construida a partir de secuenciación, selección e iteración. Diferentes algoritmos pueden resolver el mismo problema, y debería poder combinar y modificar algoritmos existentes (por ejemplo, contar los valores en una lista que cumplen una condición, o encontrar el mayor). Rastree un algoritmo a mano para verificar que sea correcto.

Un diagrama de flujo presenta un algoritmo usando los símbolos estándar
Un diagrama de flujo presenta un algoritmo usando los símbolos estándar
3.10

Listas

Syllabus

Comprensión duradera (AAP-2): La forma en que las sentencias se secuencian y combinan en un programa determina el resultado calculado. Los programas incorporan constructos de iteración y selección para representar repeticiones y tomar decisiones con el fin de manejar valores de entrada variados.

Objetivo de aprendizaje AAP-2.N: Para operaciones sobre listas: a. Escribir expresiones que utilicen indexación de listas y procedimientos de lista. [Habilidad 2.B] b. Evaluar expresiones que utilicen indexación de listas y procedimientos de lista. [Habilidad 4.B]

  • AAP-2.N.1 La hoja de referencia del examen proporciona operaciones básicas sobre listas, incluyendo:
    • acceder a un elemento por índice

      Texto:

      aList[i]

      Bloque:

      aList i

      accede al elemento de aList en el índice i. El primer elemento de aList está en el índice 1 y se accede mediante la notación aList[1].

    • asignar el valor de un elemento de una lista a una variable

      Texto:

      x ← aList[i]

      Bloque:

      x ← aList i

      asigna el valor de aList[i] a la variable x.

    • asignar un valor a un elemento de una lista

      Texto:

      aList[i] ← x

      Bloque:

      aList i ← x

      asigna el valor de x a aList[i].

      Texto:

      aList[i] ← aList[j]

      Bloque:

      aList i ← aList j

      asigna el valor de aList[j] a aList[i].

    • insertar elementos en un índice dado

      Texto:

      INSERT(aList, i, value)

      Bloque:

      INSERT aList, i, value

      desplaza hacia la derecha cualquier valor en aList en índices mayores o iguales a i. La longitud de la lista aumenta en 1, y value se coloca en el índice i en aList.

    • añadir elementos al final de la lista

      Texto:

      APPEND(aList, value)

      Bloque:

      APPEND aList, value

      aumenta la longitud de aList en 1, y value se coloca al final de aList.

    • eliminar elementos

      Texto:

      REMOVE(aList, i)

      Bloque:

      REMOVE aList, i

      elimina el ítem en el índice i en aList y desplaza hacia la izquierda cualquier valor en índices mayores que i. La longitud de aList disminuye en 1.

    • determinar la longitud de una lista

      Texto:

      LENGTH(aList)

      Bloque:

      LENGTH aList

      evalúa al número de elementos actualmente en aList.

  • AAP-2.N.2 Los procedimientos de lista se implementan de acuerdo con las reglas de sintaxis del lenguaje de programación.

Objetivo de aprendizaje AAP-2.O: Para algoritmos que involucran elementos de una lista: a. Escribir sentencias de iteración para recorrer una lista. [Habilidad 2.B] b. Determinar el resultado de un algoritmo que incluye recorridos de lista. [Habilidad 4.B]

  • AAP-2.O.1 Recorrer una lista puede ser un recorrido completo, donde se accede a todos los elementos de la lista, o un recorrido parcial, donde solo se accede a una parte de los elementos.

    • Exclusión (EK AAP-2.O.1): Recorrer múltiples listas al mismo tiempo utilizando el mismo índice para ambas (recorridos paralelos) está fuera del alcance de este curso y del Examen AP.
  • AAP-2.O.2 Las sentencias de iteración pueden utilizarse para recorrer una lista.

  • AAP-2.O.3 La hoja de referencia del examen proporciona

    Texto:

    FOR EACH item IN aList { <block of statements> }

    Bloque:

    FOR EACH item IN aList block of statements

    La variable item se asigna el valor de cada elemento de aList secuencialmente, en orden, desde el primer elemento hasta el último elemento. El código en block of statements se ejecuta una vez por cada asignación de item.

  • AAP-2.O.4 El conocimiento de algoritmos existentes que usan iteración puede ayudar a construir nuevos algoritmos. Algunos ejemplos de algoritmos existentes que a menudo se utilizan con listas incluyen:

    • determinar un valor mínimo o máximo en una lista
    • calcular una suma o promedio de una lista de números
  • AAP-2.O.5 Los algoritmos de búsqueda lineal o búsqueda secuencial revisan cada elemento de una lista, en orden, hasta que se encuentra el valor deseado o se han revisado todos los elementos de la lista.

Fuente: College Board AP Course and Exam Description

Una lista es una colección ordenada de valores bajo un solo nombre, la abstracción de datos clave del curso. La pseudocódigo AP indexa desde 1:

Una lista contiene muchos valores en una variable, cada uno encontrado por su índice
Una lista contiene muchos valores en una sola variable, cada uno encontrado por su índice
scores ← [88, 74, 95]
DISPLAY(scores[1])          // 88
scores[2] ← 80              // replace the 2nd value
APPEND(scores, 60)          // add to the end
INSERT(scores, 1, 100)      // insert at index 1
REMOVE(scores, 3)           // delete the 3rd element
LENGTH(scores)              // how many elements

Recorra una lista con un bucle para sumar, contar, buscar o encontrar un máximo:

FOR EACH x IN scores
{
    total ← total + x
}
3.11

Búsqueda Binaria

Syllabus

Comprensión duradera (AAP-2): La forma en que se secuncian y combinan las instrucciones en un programa determina el resultado calculado. Los programas incorporan constructos de iteración y selección para representar repeticiones y tomar decisiones para manejar valores de entrada variados.

Objetivo de aprendizaje AAP-2.P: Para los algoritmos de búsqueda binaria: a. Determinar el número de iteraciones necesarias para encontrar un valor en un conjunto de datos. [Habilidad 1.D] b. Explicar los requisitos necesarios para completar una búsqueda binaria. [Habilidad 1.A]

  • AAP-2.P.1 El algoritmo de búsqueda binaria comienza en el medio de un conjunto de datos numéricos ordenados y elimina la mitad de los datos; este proceso se repite hasta que se encuentra el valor deseado o se han eliminado todos los elementos.
    • Afirmación de exclusión (EK AAP-2.P.1): Las implementaciones específicas del algoritmo de búsqueda binaria están fuera del alcance del curso y del examen AP.
  • AAP-2.P.2 Los datos deben estar en orden para utilizar el algoritmo de búsqueda binaria.
  • AAP-2.P.3 La búsqueda binaria suele ser más eficiente que la búsqueda secuencial/lineal cuando se aplica a datos ordenados.

Fuente: College Board AP Course and Exam Description

Una guía telefónica: la búsqueda binaria reduce a la mitad las páginas restantes en cada paso
Una guía telefónica: la búsqueda binaria reduce a la mitad las páginas restantes en cada paso

La búsqueda binaria encuentra un valor en una lista ordenada mucho más rápido que revisar cada elemento. Mira el elemento del medio, luego descarta la mitad que no puede contener el objetivo, repitiendo hasta encontrarlo. Cada paso reduce a la mitad el espacio de búsqueda, por lo que una lista de $n$ elementos toma aproximadamente $\log_2 n$ pasos. Requiere que los datos estén ordenados primero.

La búsqueda binaria reduce el rango a la mitad en cada paso (la lista debe estar ordenada)
La búsqueda binaria reduce a la mitad el rango en cada paso (la lista debe estar ordenada)

Ejemplo resuelto. Al buscar en una lista ordenada de $8$ elementos, la búsqueda binaria reduce el rango a la mitad en cada paso: $8\rightarrow4\rightarrow2\rightarrow1$, como máximo $3$ comparaciones ($\log_2 8=3$), mientras que una búsqueda lineal podría tomar hasta $8$. La ventaja crece exponencialmente: unos $1{,}000$ elementos necesitan solo $\approx10$ pasos de búsqueda binaria (pero hasta $1{,}000$ lineales), y $1{,}000{,}000$ elementos necesitan solo $\approx20$. Reducir a la mitad es lo que lo convierte en un algoritmo de tiempo razonable.

Vocabulario Entrenar
Inglés Chino Pinyin
Binary search/ˈbaɪnəri sɜːtʃ/ 二分搜索 èr fēn sōu suǒ
3.12

Llamadas a Procedimientos

Syllabus

Comprensión duradera (AAP-3): Los programadores dividen los problemas en piezas más pequeñas y manejables. Al crear procedimientos y aprovechar los parámetros, los programadores generalizan procesos que pueden reutilizarse. Los procedimientos permiten a los programadores recurrir a código existente que ya ha sido probado, lo que les permite escribir programas más rápidamente y con mayor confianza.

Objetivo de aprendizaje AAP-3.A: Para las llamadas a procedimientos: a. Escribir sentencias para llamar a procedimientos. [Habilidad 3.B] b. Determinar el resultado o efecto de una llamada a procedimiento. [Habilidad 4.B]

  • AAP-3.A.1 Un procedimiento es un grupo nombrado de instrucciones de programación que puede tener parámetros y valores devueltos.

  • AAP-3.A.2 Los procedimientos se denominan de manera diferente, como método o función, dependiendo del lenguaje de programación.

  • AAP-3.A.3 Los parámetros son variables de entrada de un procedimiento. Los argumentos especifican los valores de los parámetros cuando se llama a un procedimiento.

  • AAP-3.A.4 Una llamada a procedimiento interrumpe la ejecución secuencial de las sentencias, haciendo que el programa ejecute las sentencias dentro del procedimiento antes de continuar. Una vez que se ejecuta la última sentencia del procedimiento (o una sentencia return), el flujo de control se devuelve al punto inmediatamente posterior a donde se llamó al procedimiento.

  • AAP-3.A.5 La hoja de referencia del examen proporciona

    procName(arg1, arg2, ...)

    como una forma de llamar a

    Texto:

    PROCEDURE procName(parameter1, parameter2, ...) { <block of statements> }

    Bloque:

    PROCEDURE procName parameter1, parameter2,... block of statements

    que toma cero o más argumentos; arg1 se asigna a parameter1, arg2 se asigna a parameter2, y así sucesivamente.

  • AAP-3.A.6 La hoja de referencia del examen proporciona el procedimiento

    Texto:

    DISPLAY(expression)

    Bloque:

    DISPLAY expression

    para mostrar el valor de expression, seguido de un espacio.

  • AAP-3.A.7 La hoja de referencia del examen proporciona la

    Texto:

    RETURN(expression)

    Bloque:

    RETURN expression

    sentencia, que se utiliza para devolver el flujo de control al punto donde se llamó al procedimiento y para devolver el valor de expression.

  • AAP-3.A.8 La hoja de referencia del examen proporciona

    result ← procName(arg1, arg2, ...)

    para asignar a result el "valor del procedimiento" que está siendo devuelto por la llamada a

    Texto:

    PROCEDURE procName(parameter1, parameter2, ...) { <block of statements> RETURN(expression) }

    Bloque:

    PROCEDURE procName parameter1, parameter2,... block of statements RETURN expression

  • AAP-3.A.9 La hoja de referencia del examen proporciona el procedimiento

    Texto:

    INPUT()

    Bloque:

    INPUT

    que acepta un valor del usuario y devuelve el valor de entrada.

Fuente: College Board AP Course and Exam Description

Un procedimiento (función) es un bloque de código con nombre y reutilizable. Llamarlo ejecuta su código con los argumentos que usted proporcione, y puede devolver un valor:

sum ← Add(3, 4)      // call, passing 3 and 4

Los procedimientos le permiten usar código sin conocer sus mecanismos internos — abstracción procedural.

3.13

Desarrollo de Procedimientos

Syllabus

Comprensión duradera (AAP-3): Los programadores descomponen los problemas en piezas más pequeñas y manejables. Al crear procedimientos y aprovechar los parámetros, los programadores generalizan procesos que pueden reutilizarse. Los procedimientos permiten a los programadores utilizar código existente que ya ha sido probado, lo que les permite escribir programas más rápidamente y con mayor confianza.

Objetivo de aprendizaje AAP-3.B: Explicar cómo el uso de la abstracción procedural gestiona la complejidad en un programa. [Habilidad 3.C]

  • AAP-3.B.1 Un tipo común de abstracción es la abstracción procedural, la cual proporciona un nombre para un proceso y permite usar un procedimiento conociendo solo qué hace, no cómo lo hace.
  • AAP-3.B.2 La abstracción procedural permite basar la solución de un problema grande en las soluciones de subproblemas más pequeños. Esto se logra creando procedimientos para resolver cada uno de los subproblemas.
  • AAP-3.B.3 La subdivisión de un programa informático en subprogramas separados se denomina modularidad.
  • AAP-3.B.4 Una abstracción procedural puede extraer características compartidas para generalizar la funcionalidad en lugar de duplicar el código. Esto permite la reutilización del código del programa, lo que ayuda a gestionar la complejidad.
  • AAP-3.B.5 El uso de parámetros permite generalizar los procedimientos, posibilitando su reutilización con una variedad de valores o argumentos de entrada.
  • AAP-3.B.6 El uso de la abstracción procedural mejora la legibilidad del código.
  • AAP-3.B.7 El uso de la abstracción procedural en un programa permite a los programadores cambiar los aspectos internos del procedimiento (para hacerlo más rápido, más eficiente, utilizar menos almacenamiento, etc.) sin necesidad de notificar a los usuarios del cambio, siempre que se conserve lo que hace el procedimiento.

Objetivo de aprendizaje AAP-3.C: Desarrollar abstracciones procedurales para gestionar la complejidad en un programa mediante la escritura de procedimientos. [Habilidad 3.B]

  • AAP-3.C.1 La hoja de referencia del examen proporciona

    Texto:

    PROCEDURE procName(parameter1, parameter2, ...) { <block of statements> }

    Bloque:

    PROCEDURE procName parameter1, parameter2,... block of statements

    que se utiliza para definir un procedimiento que toma cero o más argumentos. El procedimiento contiene block of statements.

  • AAP-3.C.2 La hoja de referencia del examen proporciona

    Texto:

    PROCEDURE procName(parameter1, parameter2, ...) { <block of statements> RETURN(expression) }

    Bloque:

    PROCEDURE procName parameter1, parameter2,... block of statements RETURN expression

    que se utiliza para definir un procedimiento que toma cero o más argumentos. El procedimiento contiene block of statements y devuelve el valor de expression. La instrucción RETURN puede aparecer en cualquier punto dentro del procedimiento y provoca un retorno inmediato desde el procedimiento hasta la instrucción llamante.

Fuente: College Board AP Course and Exam Description

Usted define un procedimiento con un nombre, parámetros (entradas) y un cuerpo, y opcionalmente RETURN (devolver) un resultado:

Decomposing a program into procedures and sub-procedures
Descomponer un programa en procedimientos y subprocedimientos
PROCEDURE Add(a, b)
{
    RETURN(a + b)
}

Escribir sus propios procedimientos reduce la repetición, divide un problema grande en piezas nombradas, y hace que los programas sean legibles y más fáciles de probar — la esencia de la abstracción.

Vocabulario Entrenar
Inglés Chino Pinyin
procedure (function)/prəˈsiːdʒə/ 过程 guò chéng
procedural abstraction/prəˈsiːdʒərəl əbˈstrækʃn/ 过程抽象 guò chéng chōu xiàng
abstraction/əbˈstrækʃn/ 抽象 chōu xiàng
library/ˈlaɪbrəri/ 库 kù
simulation/ˌsɪmjʊˈleɪʃn/ 模拟 mó nǐ
Efficiency/ɪˈfɪʃənsi/ 效率 xiào lǜ
heuristic/hjuːˈrɪstɪk/ 启发式 qǐ fā shì
undecidable/ˌʌndɪˈsaɪdəbl/ 不可判定 bù kě pàn dìng
3.14

Bibliotecas

Syllabus

Comprensión duradera (AAP-3): Los programadores descomponen los problemas en partes más pequeñas y manejables. Al crear procedimientos y aprovechar parámetros, los programadores generalizan procesos que pueden reutilizarse. Los procedimientos permiten a los programadores utilizar código existente que ya ha sido probado, lo que les permite escribir programas de forma más rápida y con mayor confianza.

Objetivo de aprendizaje AAP-3.D: Seleccionar bibliotecas o segmentos de código existentes adecuados para usarlos en la creación de nuevos programas. [Habilidad 2.B]

  • AAP-3.D.1 Una biblioteca de software contiene procedimientos que pueden utilizarse en la creación de nuevos programas.
  • AAP-3.D.2 Los segmentos de código existentes pueden provenir de fuentes internas o externas, como bibliotecas o código escrito previamente.
  • AAP-3.D.3 El uso de bibliotecas simplifica la tarea de crear programas complejos.
  • AAP-3.D.4 Las interfaces de programación de aplicaciones (API) son especificaciones sobre cómo se comportan y pueden usarse los procedimientos de una biblioteca.
  • AAP-3.D.5 La documentación de una API/biblioteca es necesaria para comprender los comportamientos que ofrece la API/biblioteca y cómo utilizarlos.

Fuente: College Board AP Course and Exam Description

Una biblioteca es una colección de procedimientos hechos listos que otros pueden reutilizar. Una API (Interface de Programación de Aplicaciones) documenta qué hace cada procedimiento, sus parámetros y su resultado — para que pueda usarla sin ver su código. Las bibliotecas ahorran tiempo y le permiten construir sobre trabajo existente y probado.

La documentación es parte de la biblioteca. La documentación de una API o biblioteca es necesaria para comprender los comportamientos que proporciona y cómo usarlos — qué espera cada procedimiento como parámetro, qué devuelve y qué hace en los bordes. Sin ella, tendría que leer el código fuente, lo cual anula el propósito de la abstracción; con ella, puede usar un procedimiento correctamente sin saber cómo funciona internamente.

Vocabulario Entrenar
Inglés Chino Pinyin
Interface/ˈɪntəfeɪs/ 应用程序接口 yìng yòng chéng xù jiē kǒu
3.15

Valores Aleatorios

Syllabus

Comprensión duradera (AAP-3): Los programadores descomponen los problemas en piezas más pequeñas y manejables. Al crear procedimientos y aprovechar parámetros, los programadores generalizan procesos que pueden reutilizarse. Los procedimientos permiten a los programadores recurrir a código existente que ya ha sido probado, lo que les posibilita escribir programas de manera más rápida y con mayor seguridad.

Objetivo de aprendizaje AAP-3.E: Para la generación de valores aleatorios: a. Escribir expresiones para generar valores posibles. [Habilidad 2.B] b. Evaluar expresiones para determinar los resultados posibles. [Habilidad 4.B]

  • AAP-3.E.1 La hoja de referencia del examen proporciona

    Texto:

    RANDOM(a, b)

    Bloque:

    RANDOM a, b

    que genera y devuelve un número entero aleatorio desde a hasta b, inclusive. Cada resultado tiene la misma probabilidad de ocurrir. Por ejemplo, RANDOM(1, 3) podría devolver 1, 2 o 3.

  • AAP-3.E.2 El uso de la generación de números aleatorios en un programa significa que cada ejecución puede producir un resultado diferente.

Fuente: College Board AP Course and Exam Description

RANDOM(a, b) devuelve un entero aleatorio de a a b (inclusive), permitiendo que un programa produzca resultados impredecibles — para juegos, muestreo o simulaciones. Cada llamada puede dar un valor diferente, por lo que un programa que usa aleatoriedad se comporta de manera diferente en cada ejecución.

3.16

Simulaciones

Syllabus

Comprensión perdurable (AAP-3): Los programadores descomponen problemas en partes más pequeñas y manejables. Al crear procedimientos y aprovechar parámetros, los programadores generalizan procesos que pueden reutilizarse. Los procedimientos permiten a los programadores recurrir a código existente que ya ha sido probado, lo que les posibilita escribir programas de forma más rápida y con mayor seguridad.

Objetivo de aprendizaje AAP-3.F: Para las simulaciones: a. Explicar cómo las computadoras pueden utilizarse para representar fenómenos o resultados del mundo real. [Habilidad 1.A] b. Comparar simulaciones con contextos del mundo real. [Habilidad 1.D]

  • AAP-3.F.1 Las simulaciones son abstracciones de objetos o fenómenos más complejos con un propósito específico.
  • AAP-3.F.2 Una simulación es una representación que utiliza conjuntos variables de valores para reflejar el estado cambiante de un fenómeno.
  • AAP-3.F.3 Las simulaciones a menudo imitan eventos del mundo real con el fin de extraer inferencias, permitiendo la investigación de un fenómeno sin las limitaciones del mundo real.
  • AAP-3.F.4 El proceso de desarrollo de una simulación abstracta implica eliminar detalles específicos o simplificar la funcionalidad.
  • AAP-3.F.5 Las simulaciones pueden contener sesgos derivados de las elecciones de elementos del mundo real que fueron incluidos o excluidos.
  • AAP-3.F.6 Las simulaciones son más útiles cuando los eventos del mundo real son imprácticos para experimentos (p. ej., demasiado grandes, demasiado pequeños, demasiado rápidos, demasiado lentos, demasiado costosos o demasiado peligrosos).
  • AAP-3.F.7 Las simulaciones facilitan la formulación y refinamiento de hipótesis relacionadas con los objetos o fenómenos bajo consideración.
  • AAP-3.F.8 Los generadores de números aleatorios pueden utilizarse para simular la variabilidad que existe en el mundo real.

Fuente: College Board AP Course and Exam Description

Una simulación es un programa que modela un proceso del mundo real para estudiarlo de forma segura y económica. Las simulaciones simplifican la realidad (omitirán detalles) y a menudo usan aleatoriedad para imitar eventos fortuitos. Le permiten probar escenarios que serían demasiado costosos, lentos o peligrosos en la vida real — pero sus resultados son tan buenos como sus supuestos.

Una simulación es una forma de hacer ciencia, no solo una imagen. Debido a que puede ejecutarse muchas veces, económicamente y cambiando una variable a la vez, una simulación facilita la formulación y refinamiento de hipótesis sobre el objeto o fenómeno bajo consideración: usted propone una explicación, ejecuta el modelo, compara el resultado con la realidad y ajusta ya sea la hipótesis o el modelo. Por eso importan las simplificaciones de una simulación — un resultado solo apoya una hipótesis sobre el mundo real en la medida en que lo que se omitió no importa.

3.17

Eficiencia Algorítmica

Syllabus

Comprensión Duradera (AAP-4): Existen problemas que las computadoras no pueden resolver, y aún cuando una computadora puede resolver un problema, es posible que no pueda hacerlo en un tiempo razonable.

Objetivo de Aprendizaje AAP-4.A: Para determinar la eficiencia de un algoritmo: a. Explicar la diferencia entre algoritmos que se ejecutan en un tiempo razonable y aquellos que no. [Habilidad 1.D] b. Identificar situaciones en las que una solución heurística puede ser más apropiada. [Habilidad 1.D]

  • AAP-4.A.1 Un problema es una descripción general de una tarea que puede (o no puede) resolverse algorítmicamente. Una instancia de un problema también incluye una entrada específica. Por ejemplo, ordenar es un problema; ordenar la lista (2,3,1,7) es una instancia del problema.
  • AAP-4.A.2 Un problema de decisión es un problema con una respuesta de sí/no (p. ej., ¿hay un camino de A a B?). Un problema de optimización es un problema cuyo objetivo es encontrar la solución "mejor" entre muchas (p. ej., ¿cuál es el camino más corto de A a B?).
  • AAP-4.A.3 La eficiencia es una estimación de la cantidad de recursos computacionales utilizados por un algoritmo. La eficiencia se expresa típicamente como una función del tamaño de la entrada.
    • Declaración de exclusión (EK AAP-4.A.3): El análisis formal de algoritmos (Big-O) y el razonamiento formal mediante fórmulas matemáticas están fuera del alcance de este curso y del examen AP.
  • AAP-4.A.4 La eficiencia de un algoritmo se determina mediante un razonamiento formal o matemático.
  • AAP-4.A.5 La eficiencia de un algoritmo puede medirse informalmente determinando el número de veces que se ejecuta una declaración o un grupo de declaraciones.
  • AAP-4.A.6 Diferentes algoritmos correctos para el mismo problema pueden tener diferentes eficiencias.
  • AAP-4.A.7 Los algoritmos con una eficiencia polinomial o más lenta (constante, lineal, cuadrática, cúbica, etc.) se dice que se ejecutan en un tiempo razonable. Los algoritmos con eficiencias exponenciales o factoriales son ejemplos de algoritmos que se ejecutan en un tiempo irrazonable.
  • AAP-4.A.8 Algunos problemas no pueden resolverse en un tiempo razonable porque no existe un algoritmo eficiente para resolverlos. En estos casos, se buscan soluciones aproximadas.
  • AAP-4.A.9 Una heurística es un enfoque para un problema que produce una solución que no está garantizada como óptima, pero que puede utilizarse cuando las técnicas que garantizan siempre encontrar una solución óptima son imprácticas.
    • Declaración de exclusión (AAP-4.A.9): Las soluciones heurísticas específicas están fuera del alcance de este curso y del examen AP.

Fuente: College Board AP Course and Exam Description

Eficiencia es cuánto tiempo (o memoria) necesita un algoritmo a medida que crece su entrada. Un algoritmo de tiempo razonable crece como un polinomio del tamaño de la entrada (p. ej., lineal o cuadrático); un algoritmo de tiempo irrazonable crece mucho más rápido (p. ej., duplicándose con cada elemento añadido), volviéndose impráctico para entradas grandes. Un algoritmo más rápido puede hacer solucionable un problema que antes era imposible. A veces una respuesta exacta tarda demasiado, por lo que se usa en su lugar una heurística — un enfoque que encuentra una respuesta lo suficientemente buena rápidamente.

Cómo crece el tiempo de ejecución de un algoritmo con el tamaño de entrada n
Cómo crece el tiempo de ejecución de un algoritmo con el tamaño de entrada n
3.18

Problemas Indecidibles

Syllabus

Comprensión Duradera (AAP-4): Existen problemas que las computadoras no pueden resolver, e incluso cuando una computadora puede resolver un problema, puede que no sea capaz de hacerlo en un tiempo razonable.

Objetivo de Aprendizaje AAP-4.B: Explicar la existencia de problemas indecisibles en la ciencia de la computación. [Habilidad 1.A]

  • AAP-4.B.1 Un problema decidible es un problema de decisión para el cual se puede escribir un algoritmo que produzca una salida correcta para todas las entradas (p. ej., "¿Es el número par?").
  • AAP-4.B.2 Un problema indecisible es aquel para el cual no se puede construir ningún algoritmo que esté siempre en condiciones de proporcionar una respuesta correcta de sí o no.
    • Enunciado de exclusión (EK AAP-4.B.2): Determinar si un problema dado es indecible está fuera del alcance de este curso y del Examen AP.
  • AAP-4.B.3 Un problema indecisible puede tener algunas instancias que tienen una solución algorítmica, pero no existe ninguna solución algorítmica que pueda resolver todas las instancias del problema.

Fuente: College Board AP Course and Exam Description

Algunos problemas son ind decidibles: ningún algoritmo puede resolver todos sus casos con una respuesta correcta de sí/no. Esta es una limitación fundamental de la computación — no un tema de necesitar una computadora más rápida, sino una prueba de que tal algoritmo no puede existir.

Habilidad de examen: poder determinar el resultado de un segmento de código rastreándolo, comparar la eficiencia de dos algoritmos (tiempo razonable vs irrazonable) y reconocer la abstracción procedural y de datos en un programa.

3.18

Consejos para el examen

  • Sepa que una variable es un almacenamiento con nombre para un valor y rastree cómo la asignación la actualiza paso a paso.
  • Lea la pseudocódigo AP cuidadosamente — a <- expression asigna, y las listas están indexadas desde 1 en la hoja de referencia del examen.
  • Distinga una variable de una lista (una colección accedida por índice) y use correctamente las operaciones de lista.
  • Evalúe expresiones con la precedencia correcta y la lógica booleana (AND, OR, NOT).
  • Elija nombres de variables claros y significativos — las tareas escritas recompensan el código legible.

Lecciones interactivas sobre este tema

Trátalo paso a paso, con ejercicios de verificación instantánea.

Exámenes Anteriores

Más temas en AP Principios de Ciencias de la Computación

Iniciar sesión o crear cuenta

IGCSE, A-Level & AP