实习同事问的问题

实习下班,在地铁上,一起实习的同事问了我一个他自己随便想到的问题:

有n个人m种语言,每个人都会这m种语言中的若干语言(可能为零也可能是所有),所谓会,也即能听懂也能说。现在某个人掌握了一条信息,如果他用他会的某一种语言说出这条信息,则所有会这种语言的人都能领悟,并且他们各自将用自己所会的所有语言再复述这条信息,不断下去。试问,指定的那个人至少用多少种语言说出那条信息,可以使得最终所有人都能得到信息,或者判断这是不可能做到的。

我乍一想,应该可以用网络流解决本问题。但是当我仔细思考建模后,发现我并不能建出一个图来。再往经典图论算法上思考,可以对做语言传播的一个传递闭包,能够计算出每个语言能与哪些语言联通。但原问题最终目的是要让所有人接收到信息,还是要将人作为图中的信息。那么语言应当作为中间信息作为辅助,建立人之间信息传递闭包。即得出某一个人如果得到信息,则有多少人也会因此最终得到信息。那么,第一个人的每一种语言对应于一个除去他之外的人的集合,也即如果他用这种语言说出了信息,最终得到信息的人的集合,这时我发现这个问题最终居然形式上基本类同于集合覆盖SCP(https://en.wikipedia.org/wiki/Set_cover_problem)只不过集合的并集未必是全集,也即存在第一个人用所有他会的语言说出,也不能使得最终所有人得到信息。

这个问题按照我上述的思路应当确实最终规约到了SCP,目前我也并没有想到多项式复杂度的算法。

时间: 2024-10-17 22:30:07

实习同事问的问题的相关文章

之前同事问到的一道python题目

Python面试题 之前同事问了一道Python题目如下,暂时归类为面试题 题目:把类似'123.456'的字符串转换成浮点型数据 方法一: >>> print '{:.3f}'.format(float('123.456')) >>> 123.456 方法二:指定map.reduce高阶函数 思路:先处理小数点,然后在整数位.小数位相加.步骤如下 s = '123.456' 处理小数:使用字符串切片方式. s.split('.') 这样就得到长度为2的数组['123'

同事问的一个问题

今天同事问了一个问题,感觉比较有意思,保存一下. 问题是这样的.比如一个字符串,"123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",从中取任意个数的字符组成新的字符串,比如“2M”,然后+1,这是要得到结果是“2N”,如果是“ZZ”的话,得到的结果应该是“111”. 实现代码如下: import java.util.*; /** * @Author: bob * @Description: TODO * @Date: 2019/8/27 17:33 */ pub

程序员同事问shell脚本刷流量,不讨巧帮他填了一个巨坑

程序员同事闲来无事问我可以用shell脚本写个刷微博访问量的没.于是脑海里想起了病毒营销或者fork×××这些词.依稀操刀稀松吧啦的写了起来.并测试了下,脚本内容是下面这样的:脚本跑起来的样子当然仅仅是为了展示shell脚本威力.当然还是希望大家靠实际的阅读量.拿微信公众号来说,刷量增粉的很多.同样笔者手里也有些软件.但一次都没有使用过.以来防止被中马,二来做人如果都急功近利.光追求虚妄的东西而没有实质内容.没有实际转化率和留存,本质上就是自欺欺人.不闲扯我们继续看 思路来源:Linux世界里著

再谈闭包

闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现.今天有个实习同事问我闭包的概念,同事这种勤学好问的精神值得表扬啊!那我今天就对闭包单独的再说一下,本人拙见,不妥之处,希望指出交流. 一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变量的作用域无非就是两种:全局变量和局部变量. Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量. var n=888; function f1(){ ale

如何更好地给同事讲代码?

我们技术团队有两个习惯:一是程序员写好一个新的比较重要的系统,或是引入了一个第三方框架或库后,主程会要求程序员做一个ppt,在会议室里给所有程序与QC做一次团队分享:二是程序员写好一个新系统,或做了比较大的或比较重要的修改后,要知会相关QC,并把QC叫到电脑前,一对一把相关代码给QC讲一遍. 我认为做ppt团队分享可以起到两个重要作用:一是让团队成员之间时常互通有无,避免各人只了解自己手头负责的一小块内容:长期保持这种习惯,可以很好地增进技术团队的凝聚力,也可以帮助技术团队保持敏捷.二是分享用的

OSChina 周三乱弹 —— 别问我为什么,没钱,任性!!!

周三啦,每天小小编都是饿着肚子发乱弹的,不知道现在的你吃早餐了没? 小小编特别喜欢吃早餐,因为啊,跟@大菲  一样,觉着吃肉包子是非常幸福滴,嘻嘻 当然,吃饱之后总会有点小后悔,唉,何时才能恢复我的魔鬼身材,but,听说,现在流行任性?说我胖的人都听着了哈 @小编辑:我胖怎么了,挡你 WIFI 了? 别问我为什么这么傲娇,有肉,任性!!!      最近@红薯  特别任性,简直已经发挥了 18 岁所有的任性细胞:  @红薯  : 从现在开始使用 OSC Team 和 Git 的,每人送内裤一条,

js数组冒泡排序,快速排序的原理以及实现

实习了好久,大概用了半年ng2了吧,突然被同事问到js排序问题,一时竟有些懵逼,回来就温故一下,希望自己不忘初心,加油加油! 冒泡排序: 随便从数组中拿一位数和后一位比较,如果是想从小到大排序,那么就把小的那一位放到前面,大的放在后面,简单来说就是交换它们的位置,如此反复的交换位置就可以得到排序的效果. function sortA(arr){ for(var i=0;i<arr.length-1;i++){ for(var j=i+1;j<arr.length;j++){ //获取第一个值和

重新认识数据

误入数据分析行业已有5年多,由于并非"科班"专业毕业,自己从编程到统计理论基础,从简单线性回归到SVM.GBDT.LSTM等复杂算法一路跌跌撞撞学习过来,蓦然回首,才发现做了这么久的数据分析.数据挖掘.大数据等,却没有系统地思考过"数据"这一最基础的要素的确切含义和特性.而所有行业中,基础要素的概念和特性,无疑都是武侠中的"气宗"之本,决定了最终修为的境界高低.回忆所学,似乎也没有哪本书专门讲过"数据"本身,大概大家都对这个词

糗事百科笑话

<div class="content"> 看到吃的一瞬间,眼睛都在发光…… </div><div class="content"> 办公室一大龄剩女,经常说让别人给她介绍男朋友,刚一逗比男同事说“我去哪里给你找,你自己去网上找找吧”<br/>大龄剩女说“真爱网吗?”<br/>“不,淘宝网” </div><div class="content"> 当你们还在寻找停