首页 > 分享 > [数据结构][Python][经典题目]明星问题

[数据结构][Python][经典题目]明星问题

最新推荐文章于 2020-12-05 15:36:59 发布

Twish 于 2019-05-26 23:38:03 发布

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

在人群中找出以为明星人士。该明星不认识其他人群中的其他人,但是人人都认识这位明星。
暴力求解方案:

def naive_celeb(G): n = len(G) for u in range(n): for v in range(n): if u ==v:continue if G[u][v]: break if not G[v][u]:break else: return u return None 12345678910

为了将问题规模将n简化到n-1,我们就必须先找一位非明星人士,也就是说,要么这个人认识某人,要么谁也不认识。
1.也就是如果我们检查u、v中任何一个节点的G[u][v],就可以排除一个节点
2.如果G[u][v]为True,我们就排除u否则排除v。
接下来我们能确保其中存在一位明星人士就足够了。否则,我们仍需要继续排除那位候选者以外的所有人,但是我们需要通过检查他们是否是明星来完成这件事。
解决方案:

def celeb(G): n = len(G) u,v = 0,1 for c in range(2,n+1): if G[u][v]:u=c else:v=c if u==n:c=v else:c=u for v in range(n): if c==v:continue if G[c][v]:break if not G[v][c]:break else: return c return None from random import randrange n =100 G = [[randrange(2) for i in range(n)] for i in range(n)] c = randrange(n) for i in range(n): G[i][c] = True G[c][i] = False print(naive_celeb(G)) --54 print(celeb(G)) ---54

123456789101112131415161718192021222324

随机的,结果不一定是54

相关知识

浅谈Python数据结构(三)
数据结构
Python试题
Python在中小学教学中的应用(一)
计算机经典书籍电子书合集(适合计算机学生学习以及程序员笔试、面试)
Python机器学习基础教程
基于机器学习的花卉识别系统
破解菜鸟算法题:新手必看的高效解题技巧与实战案例
python按笔顺写字
残奥会期间花坛

网址: [数据结构][Python][经典题目]明星问题 https://m.huajiangbk.com/newsview854470.html

所属分类:花卉
上一篇: 数据=明星价值??快来给杰伦哥哥
下一篇: 比大小