历史记录队列和链式缓存处理

import datetime

class Array:
def __init__(self, size=256):
"""

:param size: the size of container
"""
self._size = size
self._items = [None]*size
self.length=0

def __getitem__(self, index):
return self._items[index]

def __setitem__(self, key, value):
self._items[key] = value
self.length+=1

def __len__(self):
return self.length

def clear(self, value=None):
for index in self._items:
self._items[index] = value
self.length=0

def __iter__(self):
for i in self._items:
yield i


class Node:
def __init__(self, value=None, next=None, prev=None, create_time=None):
"""

:param value:value
:param next: next node
:param prev: prev node
:param create_time: create time
"""
self.value, self.next, self.prev, self.create_time = value, next, prev, create_time


class Bag:
def __init__(self, maxsize=None,array_atribut_size=256,del_time=60):
"""

:param maxsize: the size of container
:param array_atribut_size:the history message is array_atribut*2
:param del_time: if now time - create time >del_time(s) del node
"""
self.del_time=del_time
self.array_atribut_size=array_atribut_size
self.array=[Array(array_atribut_size),Array(array_atribut_size),Array(array_atribut_size)]
self._root = Node()
self._root.next = self._root
self._root.prev = self._root
self._maxsize = maxsize
self._tailnode = self._root
self._headnode = self._root
self._length = 0
self.array_tail=0
self.array_tail_tail=0

def __len__(self):
"""

:return: the length of Bag()
"""
self.remove_by_time()
return self._length

def remove_by_time(self):
curnode = self._root
lis = []
while True:
curnode = curnode.next
if curnode == self._root:
break
if datetime.datetime.now() - curnode.create_time > datetime.timedelta(seconds=self.del_time):
lis.append(curnode.value)
for i in lis:
self.remove(i)

def append(self, value):
if self._maxsize is not None and self._length >= self._maxsize:
raise Exception("Full")

node=Node(value=value, create_time=datetime.datetime.now())

if self._tailnode == self._root:
self._root.next = node
node.prev = self._root
self._headnode = node
else:
node.prev = self._tailnode
self._tailnode.next = node

self._tailnode = node
self._root.prev = node
node.next = self._root

if self.array_tail_tail == self.array[self.array_tail]._size:
if self.array_tail==0:
self.array_tail=1
if self.array[2][0] is not None:
self.array[0], self.array[1], self.array[2] = Array(self.array_atribut_size), self.array[0],self.array[1]
self.array_tail=0
elif self.array_tail==1:
self.array_tail=0
self.array[0],self.array[1],self.array[2]=Array(self.array_atribut_size),self.array[0],self.array[1]
self.array_tail_tail = 0
self.array[self.array_tail][self.array_tail_tail] = value
self.array_tail_tail += 1


self._length += 1

def appendleft(self, value):
"""

:param value: value
:return: None
"""
if self._maxsize is not None and self._length >= self._maxsize:
raise Exception("Full")

node = Node(value=value, create_time=datetime.datetime.now())

if self._tailnode == self._root:
self._root.prev = node
node.next = self._root
self._tailnode = node
else:
node.next = self._headnode
self._headnode.prev = node

self._headnode = node
self._root.next = node
node.prev = self._root

if self.array_tail_tail == self.array[self.array_tail]._size:
if self.array_tail==0:
self.array_tail=1
if self.array[2][0] is not None:
self.array[0], self.array[1], self.array[2] = Array(self.array_atribut_size), self.array[0],self.array[1]
self.array_tail=0
elif self.array_tail==1:
self.array_tail=0
self.array[0],self.array[1],self.array[2]=Array(self.array_atribut_size),self.array[0],self.array[1]
self.array_tail_tail = 0
self.array[self.array_tail][self.array_tail_tail] = value
self.array_tail_tail += 1

self._length += 1

def iter_node(self):
curnode = self._root
while True:
curnode = curnode.next
if curnode == self._root:
break
yield curnode

def __iter__(self):
self.remove_by_time()
for i in self.iter_node():
yield i.value

def show_history(self):
"""
show the history message (2*self.array_atribut_size)
:return:
"""
if self.array[2][0] is None:
for a in self.array[0]:
if a == None:
continue
yield a

for b in self.array[1]:
if b == None:
continue
yield b


else:
num2=0
for b in self.array[1]:
if b == None:
continue
num2+=1
if num2<=len(self.array[0]):
continue
yield b

for c in self.array[2]:
if c == None:
continue
yield c

for a in self.array[0]:
if a == None:
continue
yield a

def remove(self, value):
"""

:param value: the value of any node(first_create)
:return: if value is True:value else:-1
"""
for i in self.iter_node():
if i.value == value:
if i == self._headnode:
self._headnode = i.next
if i == self._tailnode:
self._tailnode = i.prev
i.next.prev, i.prev.next = i.prev, i.next
self._length -= 1
return i
return -1

转载于:https://www.cnblogs.com/xuxingping/p/10946319.html

内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化并行计算等改进策略。; 适合人群:具备一定Python编程基础优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值