闲鱼python_python生成最小树
这篇文章和大家分享下最小树的生成。
假设一些随机放置的节点,我们希望以最少的线将其连接到一起。节点可能代表许多不同的东西,比如:是我们希望连接在一起的互联网设备。
现在一个平面上有15个随机分散的节点。每个节点都用字母a – z标记,它们是不同的颜色。
算法:
其实过程也不难,比较容易理解。
1.找到最接近的两个未连接的节点。
2.用线连接它们,只要保证不会造成形成循环。
3.重复以上两个步骤,知道无法不形成循环时停止。
显然,第二个条件有点麻烦。简单的方法是将每个节点分配给一个组。从彼此可到达的所有节点都属于同一组。
下面开始代码的编写。
新建一个类代表节点:
class MinimumNnode :
def __init__ (self, position, label, group) :
self.label = label
self.group = group
self.position = position
def __str__ (self) :
return "<%s loc %s in group %d>" % (self.label, self.position, self.group)
__repr__ = __str__
它有三个属性:位置、标签、组。通过__str__和__repr__方法,可以生成用于打印的节点的更好描述。
然后是:
class Minspan :
def __init__ (self, pgcon, pix, xNodes) :
self.pgcon = pgcon
letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
self.nodes = [MinimumNnode(randpos(20,pix-20), letters[i], i+1)
for i in range(xNodes)]
self.plinks = []
self.pix = pix
for m in range(xNodes) :
for n in range(m+1,xNodes) :
x = self.nodes[m]
y = self.nodes[n]
dist = euclDist2(x.position,y.position)
self.plinks.append((dist,x,y))
self.plinks.sort()
self.links = []
属性包括到pgcon模块的连接、以像素为单位的正方形窗口大小、生成的节点数量。使用第21行中的列表理解来生成节点,在窗口中随机分配x和y位置,并将标签分配给大写的A、B、C…。
在双循环中构建了一个潜在链接(plinks)列表。每个潜在链接都是一个Tuple,其中包含对两个节点的引用以及它们之间的距离(就是距离的平方)。当使用plinks进行排序时,我们的列表是按照最短到最长的链接排列的。
因为每个节点都可以链接到其他节点我们就有N*(N-1)个潜在的链接。但是,A和B之间的链接与B和A之间的链接是一样的,所以我们需要阻止这种情况的发生,同时也要阻止尝试将节点链接到自身。
列表初始化的时候是空,使用刚才说明的规则开始填充,当第n-1个连接从n*(n-1)/2的plinks中找到时,就有连线产生。
下面是连线的定义:
def linkNodes (self) :
nLinks = 0
while self.plinks :
plink = self.plinks.pop(0)
dst, nodA, nodB = plink
if nodA.group != nodB.group :
self.links.append((nodA,nodB))
mainGroup = nodA.group
slaveGroup = nodB.group
self.display("Will link %s->%s" % (nodA.label, nodB.label))
self.links[-1] = (nodA,nodB)
for node in self.nodes :
if node.group == slaveGroup :
node.group = mainGroup
self.display("Group %s with %s" % (slaveGroup,mainGroup))
nLinks += 1
return nLinks
最后一个方法创建显示的方法:
def display (self, banner) :
pgcon = self.pgcon
pgcon.newScreen()
for a,b in self.links :
if a.group != b.group:
color = WHITE
else:
color = colors[a.group%7]
pgcon.lineDraw(color, a.position, b.position, 1)
for node in self.nodes :
color = colors[node.group%7]
pgcon.textDraw(color, node.position, node.label)
pgcon.camera.armed = 1
pgcon.textDraw(WHITE, (self.pix/2,10), banner)
pgcon.writeScreen(.1000)
对display方法的每次调用都会在动画中创建一个帧。首先,连接是用他们组的颜色绘制的,如果还没有分配的话用白色。然后将节点的标签作为文本绘制在顶部,帧与帧之间有1秒等待。
最后,2个小函数在屏幕上产生随机的x/y位置来放置节点,计算欧氏距离来比较链路长度。实际上,由于这些距离只用于比较,我们不需要取平方根来计算实际的距离。
算法部分编写完毕后,就可以使用主函数来运行测试了:
def main() :
from pgcon import Pgcon
start = sarg.Int("start", 0)
if start :
random.start(start)
else :
start = random.randint(101,758)
print "Start is", start
random.start(start)
pgcon = Pgcon()
pix = sarg.Int("pix",546)
xNodes = sarg.Int("nodes", 20)
ms = Minspan(pgcon, pix, xNodes)
nLinks = ms.linkNodes()
print "links No.", nLinks
pgcon.close()
主要就是从命令行获取参数或提供默认值。创建Minspan实例ms,创建节点,生成图形显示链接。
版权所属,如需转载,请注明出处:搜闲鱼
闲鱼python_python生成最小树相关推荐
- 转转闲鱼后台生成链接源码
带一款非常简洁好看的后台. 搭建教程:修改数据库账号密码直接使用. 源码下载 网盘下载地址:https://pan.baidu.com/s/19iOsoyK-J-Rhi2dZYqzMMg?pwd=iu ...
- 为什么闲鱼不能搜索python_Python 分析后告诉你闲鱼上哪些商品抢手?
前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:[Airpython] PS:如有需要Python学习资料的小伙伴可以 ...
- 闲鱼代码Java_面向未来的黑科技——UI2CODE闲鱼基于图片生成跨端代码
作者:闲鱼技术-青页 一直以来, 如何从'视觉稿'精确的还原出 对应的UI侧代码 一直是端侧开发同学工作里消耗比较大的部分,一方面这部分的工作 比较确定缺少技术深度,另一方面视觉设计师也需要投入大量的 ...
- 闲鱼同城第三方对接架构设计
背景 闲鱼同城作为闲鱼本地生活的主战场,维护闲鱼基本盘闲置物品的同时,还针对闲置时间和闲置空间场景进行相关的孵化. 于买家而言:淘到经济实惠的闲置物品(二手数码),打发闲置时间(兼职,服务)去挣钱.于 ...
- Python爬虫实战,pyecharts模块,Python数据分析告诉你闲鱼上哪些商品抢手~
前言 利用利用Python 自动化来获取某类商品中最好卖的商品以供参考.废话不多说. 让我们愉快地开始吧~ 开发工具 Python版本: 3.6.4 相关模块: pyecharts模块: 以及一些Py ...
- CIKM最佳应用论文:11亿节点的大型图,看闲鱼如何用图卷积过滤垃圾评论
训练并推断 11 亿节点的图,闲鱼垃圾评论过滤系统也用上了最前沿的图卷积神经网络.阿里巴巴的这项研究获得了 ACM CIKM 2019 最佳应用论文奖,这足以说明图卷积在传统任务中的强大潜力. 机器之 ...
- 闲鱼把各种玩法做成了一个平台:哆啦A梦
简介:哆啦A梦的口袋里,都有哪些好玩的? 作者:闲鱼技术-齐悟 玩法平台背景 在闲鱼内我们把供给用户的闲鱼红包.支付宝红包.包邮券.宝卡等统称为用户权益.是闲鱼用户运营的重要策略,在拉新.留存.促活. ...
- 从“等等”到“秒开”再到“直开”,是什么让闲鱼社区相见恨晚?
简介:快让我叉会儿腰- 作者:闲鱼技术-颂晨 背景 闲鱼前端页面的性能常常被人念叨,凡跳转.必跳鱼 的印象深入人心,部分页面甚至需要跳四五下才能打开,最近我们对闲鱼前端页面系统性的做了些优化,由于闲鱼 ...
- 闲鱼研发框架应用和探索
简介:Flutter是开源的UI工具包,其能够帮助开发者通过一套代码库高效构建多平台精美应用,支持移动.Web.桌面和嵌入式平台.在AliFlutter 系列第二场直播中,阿里巴巴闲鱼无线技术专家梁治 ...
最新文章
- win10如何查看NVIDIA驱动的版本
- 讲解 Zookeeper 的五个核心知识点
- R语言ggplot2可视化绘制多条基本线图(Basic line plot)、使用gghighlight包突出高亮其中的某一条线图(highlight line plot)
- 2021年10个激动人心的工程里程碑
- 【深入浅出Node.js系列十一】Node.js开发框架Express4.x
- python pip 错误 ModuleNotFoundError: No module named pip._internal 解决办法
- Sum All Numbers in a Range
- Mysql 锁的机制
- SpringBoot 上传限制
- UVa202Repeating Decimals (循环小数)
- Hexo框架+Github Page搭建博客(附下载主题、导出CSDN博客至Hexo博客)
- BZOJ2693:JZPTAP——题解
- chstr php,PHPWind与Discuz截取字符函数substrs与cutstr性能比较
- d1800芯片_基于D1800的收音/对讲机设计制作
- VS2012 产品密钥
- Js获取屏幕宽度、高度 移动端H5适配
- PHP实现图片转字符画
- FastReport.Net 常用功能总汇
- 开口式霍尔电流传感器如何助力直流配电改造?
- 【考试记录】Apsara Clouder基础技能认证:阿里巴巴编码规范(Java)
热门文章
- 美国地名索引(在美国的英文名市、中国)
- html圆形头像带阴影,iOS-圆形头像+阴影
- 关于转发信息系统工程监理资质(南京)
- Angular ngModule简介
- thinkphp5.1接入paypal支付
- 【MM32F5270开发板试用】快速移植STM32应用到MM32F5270(以OLED为例)
- 苹果手机信号是哪个服务器,苹果12系列手机基带是哪个?信号怎么样?
- 阿贝云”“免费虚拟主机““免费云服务器”“免备案服务“他来了!!!
- 《疯狂Java讲义》第2章——理解面向对象
- 机器学习数据不均衡处理教程