Python实现简单的马尔科夫链

之前为了应对数学建模 ,就学了一些数学模型,就比如马尔科夫链。

以下就是我写的简单的马尔科夫链:

python 复制代码
from typing import Any ,NoReturn
from pprint import pprint


class MarkovChain(object):

    CACHE: dict[str : int] = {}

    #实现简单的缓存
    @classmethod
    def cache(cls ,target: Any) -> int|None:
        return cls.CACHE[target] if target in list(cls.CACHE) else None
        

    def __init__(self ,string: str) -> NoReturn:
        if not isinstance(string ,str) or not string:
            return

        self.__main_string: str = string

        
    #返回组合
    @property
    def permutations(self) -> iter:
        data_set: set = set(self.__main_string)
        return {(e1 ,e2) for e1 in data_set for e2 in data_set}


    #计算子字符串的个数
    def count_substring(self ,sub_string: str ,count:int = 0b0) -> int:
        if sub_string not in self.__main_string:
            return 0b0

        for index ,each in enumerate(range(len(self.__main_string)) ,start=0):
            if self.__main_string[index:index+0b10] == sub_string:
                count += 0b1
        else:
            return count


    #返回计算结果
    @property
    def data(self ,*args: tuple ,**kwargs: dict) -> dict:
        data: dict[str : int] = {}
        for index ,each in enumerate(self.permutations ,start=0):
            sub_name: str = ''.join(each)
            data[sub_name]: dict[str : int] = self.count_substring(sub_name)
        else:
            return data


    #计算分母
    def denominator(self ,substring: str) -> int:
        if (SUM := MarkovChain.cache(substring[0])) is not None:
            return SUM
        SUM: int = sum([item for index ,(key ,item) in enumerate(self.data.items()) if substring[0]==key[0]])
        MarkovChain.CACHE[substring[0]]: dict[str:int] = SUM
        return SUM


    #返回计算的比例
    @property
    def percentage(self) -> dict:
        return {key:each/self.denominator(key) for index ,(key ,each) in enumerate(self.data.items() ,start=0)}


def main(*args: tuple ,**kwargs: dict) -> NoReturn:
    for index ,each in enumerate(args ,start=1):
        print(f"{index}:")
        chain: MarkovChain = MarkovChain(string_data)
        pprint(chain.data)
        print()
        pprint(chain.percentage)
    else:
        print("OK!")
相关推荐
实名上网宋凯宣6 小时前
Django
后端·python·django
如若1237 小时前
【论文复现】CoFailMed:从零复现医学图像分割的共享失败审计,含完整代码流程与科研绘图
人工智能·python
砚底藏山河9 小时前
python量化自定义周期 K 线合成
java·开发语言·数据库·python·金融
视觉小萌新9 小时前
AI Class 3 · Chapter 1:变量、字符串、list/dict、if/for(python学习-小白版-有经验可跳过)
python·学习·list
薛定谔的猫-菜鸟程序员9 小时前
软件架构设计师开发资料大全(从入门到精通)
后端·python·系统架构·flask·架构设计师
Ramble_Naylor11 小时前
Rust深度解读:Send 与 Sync 的本质与线程安全边界
python·算法·rust
Allen_LVyingbo12 小时前
NVIDIA CUDA Tile 在医疗计算中的算子形式化、算法重构与内核实现
大数据·python·算法·重构·知识图谱·健康医疗·数据库架构
云和数据.ChenGuang12 小时前
Python 闭包详解:从原理到实战
linux·开发语言·人工智能·python·kubernetes
我命由我1234513 小时前
Python 实用操作 - 文件操作(打开与关闭文件、读取文件、文件写入)
java·开发语言·前端·javascript·数据库·python·java-ee
青少儿编程课堂13 小时前
蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级:倍增法求最近公共祖先LCA解析
c++·python·算法·bfs·信息学竞赛