Diseño de algoritmo de Python: máquina de estado finito de suma binaria

Código fuente del diseño del algoritmo de Python: https://github.com/MakerChen66/Python3Algorithm

Declaración de derechos de autor: la originalidad no es fácil, este artículo prohíbe el plagio, la reimpresión y la infracción debe investigarse.

1. Adición binaria | máquina de estados finitos

La suma de números binarios se puede hacer como se enseña en la escuela, solo recuerda 1 + 1 = 10 y sigue ciertas reglas. Hay mucho que decir sobre esta aritmética aparentemente simple, por ejemplo, puede ver la implementación de un sumador paralelo, hay muchas cosas interesantes en él.

Decidí usar una implementación en serie a través de una máquina de estados finitos, con 4 estados basados ​​en combinaciones de salida 0/1 y acarreo 0/1 y grupos de transiciones basados ​​en bits de entrada.

La pregunta es ¿realmente necesitas cuatro estados? De hecho, solo se pueden usar tres estados, ¿qué puedes encontrar?

Implementación del algoritmo de Python:

import itertools

p0c0 = 0, {
    
    }
p1c0 = 1, {
    
    }
p0c1 = 0, {
    
    }
p1c1 = 1, {
    
    }

# 各进程状态之间的转换
p0c0[1].update({
    
    (0, 0): p0c0, (1, 0): p1c0, 
                (0, 1): p1c0, (1, 1): p0c1})
p1c0[1].update({
    
    (0, 0): p0c0, (1, 0): p1c0, 
                (0, 1): p1c0, (1, 1): p0c1})
p0c1[1].update({
    
    (0, 0): p1c0, (1, 0): p0c1, 
                (0, 1): p0c1, (1, 1): p1c1})
p1c1[1].update({
    
    (0, 0): p1c0, (1, 0): p0c1, 
                (0, 1): p0c1, (1, 1): p1c1})

def add(x, y):
    x = map(int, reversed(x))
    y = map(int, reversed(y))
    z = []
    # 模拟自动机
    value, transition = p0c0
    for r, s in itertools.zip_longest(x, y, fillvalue=0):
        value, transition = transition[r, s]
        z.append(value)

    z.append(transition[0, 0][0])

    return ''.join(map(str, reversed(z)))

print(add('1100100100100', '100100011000'))

Aviso:

  • itertools
    es el módulo iterador de python, que proporciona funciones muy útiles para manipular objetos iterativos, como la función zip_longest() Las herramientas proporcionadas por itertools son bastante eficientes y ahorran memoria. Con estas herramientas, podrá crear sus propios iteradores personalizados para un bucle eficiente.
  • zip_longest(it_obj1, …, it_objN,
    fillvalue=None), las funciones implementadas por su función son más o menos las mismas que la función zip integrada (realiza una correspondencia uno a uno), pero la función zip integrada se basa en el objeto con la menor cantidad de elementos, mientras que la función zip_longest se basa en el elemento La mayoría de los objetos se utilizan como punto de referencia, y los lugares vacíos se llenan con el valor de fillvalue
  • map(function,iterable,…) mapeará la secuencia especificada de acuerdo con la función proporcionada. La primera función de parámetro
    llama a la función de función con cada elemento en la secuencia de parámetros y devuelve una nueva lista que contiene el valor de retorno de cada función de función.
  • La suma binaria comienza desde el extremo derecho, por lo que el número binario de entrada debe invertirse con la función invertida () y luego invertirse después de la operación

Resultado de salida:
inserte la descripción de la imagen aquí
como se muestra en la figura, el resultado de la operación de suma binaria es 10001000111100, el resultado es correcto

2. Descarga del código fuente

Descarga del código fuente del diseño del algoritmo de Python:

3. Información del autor

Autor: Xiaohong's Fishing Daily, Objetivo: ¡Hacer la programación más interesante!

Cuenta pública original de WeChat: " Tecnología Xiaohong Xingkong ", centrada en el reclutamiento escolar (introducción/bijing/cara a cara), algoritmo, rastreador, sitio web, desarrollo de juegos, análisis de datos, procesamiento de lenguaje natural, IA, etc., esperando a su atención, ¡crezcamos y codifiquemos juntos!

Nota de derechos de autor: ¡Este artículo prohíbe el plagio y la reimpresión, y la infracción debe investigarse!

Supongo que te gusta

Origin blog.csdn.net/qq_44000141/article/details/123167771
Recomendado
Clasificación