<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://so.v2.cs.unibo.it/wiki/index.php?action=history&amp;feed=atom&amp;title=Belady</id>
	<title>Belady - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://so.v2.cs.unibo.it/wiki/index.php?action=history&amp;feed=atom&amp;title=Belady"/>
	<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Belady&amp;action=history"/>
	<updated>2026-05-14T18:25:21Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.35.5</generator>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Belady&amp;diff=1762&amp;oldid=prev</id>
		<title>Renzo: Created page with &quot;&lt;syntaxhighlight lang=python&gt; #!/usr/bin/env python3 import sys  class fifomem: 	def __init__(self,size): 		self.mem = [None for _ in range(size)] 		self.pf = 0 	 	def __str__...&quot;</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Belady&amp;diff=1762&amp;oldid=prev"/>
		<updated>2017-03-28T12:12:59Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;&amp;lt;syntaxhighlight lang=python&amp;gt; #!/usr/bin/env python3 import sys  class fifomem: 	def __init__(self,size): 		self.mem = [None for _ in range(size)] 		self.pf = 0 	 	def __str__...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=python&amp;gt;&lt;br /&gt;
#!/usr/bin/env python3&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
class fifomem:&lt;br /&gt;
	def __init__(self,size):&lt;br /&gt;
		self.mem = [None for _ in range(size)]&lt;br /&gt;
		self.pf = 0&lt;br /&gt;
	&lt;br /&gt;
	def __str__(self):&lt;br /&gt;
		return &amp;quot;|&amp;quot;.join([&amp;quot;__&amp;quot; if x == None else &amp;quot;{:2}&amp;quot;.format(x) for x in self.mem])&lt;br /&gt;
&lt;br /&gt;
	def ref(self, x):&lt;br /&gt;
		if x not in self.mem:&lt;br /&gt;
			self.mem.pop(0)&lt;br /&gt;
			self.mem.append(x)&lt;br /&gt;
			self.pf += 1&lt;br /&gt;
			return True&lt;br /&gt;
		else:&lt;br /&gt;
			return False&lt;br /&gt;
&lt;br /&gt;
class fifomem_ref(fifomem):&lt;br /&gt;
	def __init__(self,size):&lt;br /&gt;
		fifomem.__init__(self,size)&lt;br /&gt;
		self.refstring = []&lt;br /&gt;
&lt;br /&gt;
	def append(self,n):&lt;br /&gt;
		self.refstring.append(n)&lt;br /&gt;
		self.ref(n)&lt;br /&gt;
	&lt;br /&gt;
def anomaly(m,M,q): &lt;br /&gt;
	def min_not_in(s):&lt;br /&gt;
		for i in range(M+1):&lt;br /&gt;
			if i not in s:&lt;br /&gt;
				return i&lt;br /&gt;
	S = fifomem_ref(m)&lt;br /&gt;
	for k in range(M):&lt;br /&gt;
		S.append(k)&lt;br /&gt;
	for i in range(len(q)):&lt;br /&gt;
		if q[i] in S.mem:&lt;br /&gt;
			while q[i] in S.mem:&lt;br /&gt;
				S.append(min_not_in(S.mem))&lt;br /&gt;
			while q[0] in S.mem:&lt;br /&gt;
				S.append(min_not_in(S.mem + [q[i]]))&lt;br /&gt;
			for x in q[:i]:&lt;br /&gt;
				S.append(x)&lt;br /&gt;
		S.append(q[i])&lt;br /&gt;
	return S.refstring&lt;br /&gt;
&lt;br /&gt;
def mstring(M):&lt;br /&gt;
	return [((M*M) - (i*(M+1)//2)) % M for i in range(2,M)]&lt;br /&gt;
&lt;br /&gt;
def runref(ref, size, verbose = False):&lt;br /&gt;
	mem = fifomem(size)&lt;br /&gt;
	for x in ref:&lt;br /&gt;
		pf = mem.ref(x)&lt;br /&gt;
		if verbose:&lt;br /&gt;
			print(&amp;quot;{:2}-&amp;gt;&amp;quot;.format(x),mem,&amp;quot; **&amp;quot; if pf else &amp;quot;&amp;quot;)&lt;br /&gt;
	print(&amp;quot;PF: &amp;quot;,size,&amp;quot;-&amp;gt;&amp;quot;,mem.pf)&lt;br /&gt;
	return mem.pf&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
	if len(sys.argv) &amp;lt; 2:&lt;br /&gt;
		sys.exit(1)&lt;br /&gt;
	M = int(sys.argv[1])&lt;br /&gt;
	if M % 2 == 0:&lt;br /&gt;
		sys.exit(1)&lt;br /&gt;
	if M &amp;lt; 5:&lt;br /&gt;
		sys.exit(1)&lt;br /&gt;
	ref = anomaly(M-2, M-1, mstring(M))&lt;br /&gt;
	if len(sys.argv) &amp;lt; 4:&lt;br /&gt;
		print(M,mstring(M),ref)&lt;br /&gt;
		print()&lt;br /&gt;
	if len(sys.argv) &amp;gt; 2:&lt;br /&gt;
		count = int(sys.argv[2])&lt;br /&gt;
		ref += list(range(M)) * count&lt;br /&gt;
	smallpf = runref(ref, M-2, len(sys.argv) &amp;lt; 4)&lt;br /&gt;
	print()&lt;br /&gt;
	largepf = runref(ref, M-1, len(sys.argv) &amp;lt; 4)&lt;br /&gt;
	print(&amp;quot;Ratio: &amp;quot;, largepf/smallpf)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Renzo</name></author>
	</entry>
</feed>