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!")
相关推荐
用户277844910499311 小时前
借助DeepSeek智能生成测试用例:从提示词到Excel表格的全流程实践
人工智能·python
JavaEdge在掘金13 小时前
ssl.SSLCertVerificationError报错解决方案
python
我不会编程55514 小时前
Python Cookbook-5.1 对字典排序
开发语言·数据结构·python
老歌老听老掉牙14 小时前
平面旋转与交线投影夹角计算
python·线性代数·平面·sympy
满怀101514 小时前
Python入门(7):模块
python
无名之逆14 小时前
Rust 开发提效神器:lombok-macros 宏库
服务器·开发语言·前端·数据库·后端·python·rust
你觉得20514 小时前
哈尔滨工业大学DeepSeek公开课:探索大模型原理、技术与应用从GPT到DeepSeek|附视频与讲义下载方法
大数据·人工智能·python·gpt·学习·机器学习·aigc
啊喜拔牙14 小时前
1. hadoop 集群的常用命令
java·大数据·开发语言·python·scala
__lost16 小时前
Pysides6 Python3.10 Qt 画一个时钟
python·qt