python-算法
Trophy_D
just say yes
展开
-
Python实现模拟DFA算法
算法:模拟DFA 输入: DFA D和输入字符串x,D的初态为s0, 终态集为F。 输出: 若D接受x,回答‘yes’,否则回答‘no’# 构造DFAclass DFA: # 初始化DFA def __init__(self, S, s0, F, move): self.S = S # 状态集(list) self.s0 = s0 ...原创 2018-08-29 10:39:49 · 4457 阅读 · 0 评论 -
Python实现从NFA构造DFA(子集法)
算法:从NFA构造DFA(子集法) 输入: 一个NFA N 输出 : 一个接受同一正规集的DFA D# 构造NFAclass NFA: # 初始化NFA def __init__(self, S, s0, F, move): self.S = S # 状态集(list) self.s0 = s0 # 初态(int) s...原创 2018-08-29 10:41:23 · 3531 阅读 · 1 评论 -
Python实现非递归的预测分析
算法:非递归的预测分析 输入: 输入序列w和文法G的预测分析表M 输出 :若w属于L(G) , 得到w的一个最左推到,否则指出一个错误 注:使用n代替ε 使用小写字母r代替’ 即 使用rT 代替 T’import copy#输入输入序列w 和预测分析表M ,非终结符的集合N ,终结符的集合T 开始进行预测分析def prediction_analyze(w, M ...原创 2018-08-29 10:42:59 · 876 阅读 · 0 评论 -
Python实现LR分析
算法:LR分析 输入:输入序列w和文法G的LR分析表action和goto 输出:若w属于L(G),得到w的规范规约,否则指出一个错误 方法:初始格局为(#0, w#, 驱动器的第一个动作),其中0是初始状态。令ip指向w#中的第一个终结符,top指向栈顶初始状态import copy#输入输入序列w 和预测分析表M ,非终结符的集合N ,开始进行预测分析def LR_analyz...原创 2018-08-29 10:44:33 · 5930 阅读 · 0 评论 -
Python实现银行家算法
银行家算法就不用再介绍了,直接上代码:import copy#初始化函数def bank_init(): Process = [0]#安全性算法函数def bank_safe(Available,Need,Allocation,Pn): #创建Work数组 初始值为Avaliable Work = copy.deepcopy(Available) ...原创 2018-08-29 10:46:49 · 7874 阅读 · 3 评论 -
Python实现冒泡排序
算法介绍冒泡排序(Bubble Sort)是最容易理解的排序算法之一,但是运行效率有点低。冒泡过程:对待排序部分(假设有M个元素)从头开始进行两两比较,如果第一个比第二个大(升序),就交换他们两个。这样本轮排序结束后就可以保证值最大的元素数在最右边,那么下次只需要对前面(M-1)个数进行冒泡。完整的冒泡排序就是进行N-1(N为数列长度)次的冒泡。代码实现def bubbleSo...原创 2018-09-13 16:24:55 · 171 阅读 · 0 评论 -
Python实现选择排序
算法介绍选择排序(Selection Sort)是一种简单直观的排序算法。冒泡排序每比较一次就可能交换一次,但是选择排序是将一轮比较完后,再把最小的放到最前的位置(或者把最大的放到最后)。选择排序的流程为:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。选择排序...原创 2018-09-13 17:16:54 · 157 阅读 · 0 评论 -
Python实现插入排序
算法介绍插入排序(Insertion Sort)是一种比较简单直观的排序算法。插入排序的步骤:从第一个元素开始,该元素可以认为已经被排序取出下一个元素作为待插入对象,在已排序序列中从后向前扫描 如果该元素小于前一个元素,则将两者调换,再与前一个元素比较重复第三步,直到前一个元素不大于待插元素 将新元素插入到该位置中 重复第二步代码实现# 插入排序def inse...原创 2018-09-13 20:18:52 · 180 阅读 · 0 评论