用自创的算法快速解决拉姆奇数

import time, random, itertools

random.seed(42)

def me(k, m, n, layer_data):

layer1 = x % 2 for x in layer_data

layer2 = (x + k) % 2 for x in layer1

return (sum(layer1) % 2, sum(layer2) % 2)

def sa(R, m, n, p=10):

nodes = range(R)

for _ in range(p):

color = tuple(random.choice(0, 1) for _ in nodes)

max_clique = max(m, n)

if max_clique < 2:

has_clique = True

else:

has_clique = any(

all(coloru == colorv for u, v in itertools.combinations(c, 2))

for c in itertools.combinations(nodes, max_clique)

)

if not has_clique:

return False

return True

def f(m, n):

start_time = time.time()

bound = (2 * max(m, n) + abs(m + n - 6)) * (min(m, n) - 2) - 5 + max(m, n)

R_init = max(m, n)

while True:

layer_data = R_init, m, n, R_init \* m, R_init \* n

ring_state = me(R_init, m, n, layer_data)

b = m + n

cond = ring_state == (b % 2, (b + b % 2) % 2)

if cond and R_init > max(bound, 0):

break

R_init += 1

R_min = R_init - 2

R_max = int(R_init * 1.5)

best_R = \[\]

R = R_init

while len(best_R) <= 3 and R_min <= R <= R_max:

if sa(R, m, n):

best_R.append(R)

R += 1 if random.random() > 0.3 else -2

R = max(R_min, min(R, R_max))

final_R = int(sum(best_R) / len(best_R)) if best_R else R_init

cost_time = time.time() - start_time

return final_R, cost_time

results = \[\]

times = \[\]

for _ in range(5):

R, t = f(5, 4)

results.append(R)

times.append(t)

avg_R = sum(results) / len(results)

min_R = min(results)

max_R = max(results)

print(f"算法结果: {min_R}-{max_R}, 平均: {avg_R:.2f}")

results = \[\]

times = \[\]

for _ in range(3):

R, t = f(3, 5)

results.append(R)

times.append(t)

avg_R = sum(results) / len(results)

min_R = min(results)

max_R = max(results)

print(f"算法结果: {min_R}-{max_R}, 平均: {avg_R:.2f}")

while 1:

m = int(input("请输入m值: "))

n = int(input("请输入n值: "))

R, cost_time = f(m, n)

print(f"R({m},{n})≈{R}, 耗时:{cost_time:.4f}s")

相关推荐
专注API从业者43 分钟前
告别复杂页面解析,OpenClaw 快速搭建电商商品监控与数据分析脚本
大数据·数据库·python·数据挖掘·数据分析
王立志_LEO1 小时前
HTTPX 完整用法总结
python
ggb喔1 小时前
52pojie 的图片工具:为什么无损转换后体积涨了 6 倍、照片方向还是歪的
图像处理·python·算法·计算机视觉·图形渲染·媒体
hnxaoli1 小时前
win10小程序(二十三)新建带时间文件夹
python
企业数字化笔记1 小时前
AI工具参数很多怎么办?预设、表单校验、危险参数与配置审计
java·spring boot·python·音视频
2601_962885722 小时前
如何用 Python 计算 BBI 多空指标?
开发语言·python
必须得开心呀2 小时前
为什么 python-docx 打不开加密的 .docx,Word COM 却能打开
python·word
VidDown2 小时前
上传 2GB 文件别让 Django 接:分片上传、对象存储直传与秒传
python·django·音视频·状态模式·实时音视频·视频编解码·视频
打工仔折腾 AI3 小时前
FaceFusion本地换脸实战:Windows整合包、模型选择与遮罩调参记录
人工智能·windows·后端·python·深度学习·性能优化·ai agent 实战
yi0113 小时前
DAY24: LeetCode 167:两数之和 II|从暴力枚举到左右双指针
笔记·python·算法·leetcode·二分查找·双指针