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!")
相关推荐
qq_225891746629 分钟前
基于Python的外卖订单数据分析可视化系统
python·信息可视化·django
MC皮蛋侠客33 分钟前
SQLAlchemy 系列(三):声明式映射与 Schema——让类型、默认值和约束一致
数据库·python
会博通·代码搬运工39 分钟前
会博通API对接实战:工程企业文档分布式采集系统的技术实现与Python SDK详解
开发语言·分布式·python·线性代数·矩阵·架构·电子档案合规
空堂与归1 小时前
大模型再火,也得先过 class 这一关
python
Muselit1 小时前
Python 泛型:把 list[User] 讲明白
python·fastapi
2501_916007471 小时前
Python实现HTTPS爬虫的完整指南:使用requests、BeautifulSoup、Selenium和Scrapy
爬虫·python·ios·小程序·https·uni-app·iphone
gptAI_plus1 小时前
别把整个仓库塞给 AI:用 Python 生成安全的代码上下文清单
python·chatgpt
吃饱了得干活1 小时前
Agent 记忆系统:从短期记忆到长期记忆
python·langchain·agent
大鱼>1 小时前
DSPy:LLM程序自动编译与提示词优化
开发语言·人工智能·python·深度学习
2401_843253701 小时前
金融智能:AI如何重构银行业未来
人工智能·python·金融