12
返回列表 发新帖
楼主: xiaozhuxiaozhu
跳转到指定楼层
上一主题 下一主题
收起左侧

一道graph面经题讨论

🔗
 楼主| xiaozhuxiaozhu 2021-10-6 14:58:41 | 只看该作者
全局:
Macy204 发表于 2021-10-3 00:10
请问楼主这是什么岗位?NG吗?

在职跳槽 zszszszszs
senior or lead 根据表现定。
回复

使用道具 举报

🔗
pdcreator 2021-10-8 08:23:13 | 只看该作者
全局:
我的方法是:连接所有边权小于thredhold的,然后计算出最大连通块的个数。

评分

参与人数 1大米 +2 收起 理由
xiaozhuxiaozhu + 2 欢迎分享你知道的情况,会给更多积分奖励!

查看全部评分

回复

使用道具 举报

🔗
ItJustTakeABite 2021-10-11 08:06:20 | 只看该作者
全局:
我寫的solution,但是不保證城市都會連再一起
  1. """
  2. Takes list of correlation pairs as input, pair: ['city1', 'city2', correlation]
  3. Return two graph, one representing the valid cities to put together,
  4. the other one is the cities that cannot be put together.
  5. """
  6. def buildGraph(correlationPairs, threshold):
  7.         validCities = set()
  8.         invalidPairs = {}

  9.         for pair in correlationPairs:
  10.                 city1, city2, correlation = pair[0], pair[1], pair[2]
  11.                 if correlation > threshold:
  12.                         if city1 not in invalidPairs:
  13.                                 invalidPairs[city1] = set()
  14.                         if city2 not in invalidPairs:
  15.                                 invalidPairs[city2] = set()
  16.                         invalidPairs[city1].add(city2)
  17.                         invalidPairs[city2].add(city1)

  18.         for pair in correlationPairs:
  19.                 city1, city2, correlation = pair[0], pair[1], pair[2]
  20.                 if city1 not in invalidPairs:
  21.                         validCities.add(city1)
  22.                 if city2 not in invalidPairs:
  23.                         validCities.add(city2)

  24.         return validCities, invalidPairs

  25. def dfs(combination, invalidPairs, invalidCities, addedCities, start):
  26.         if start == len(invalidCities):
  27.                 if len(addedCities) > len(combination):
  28.                         for value in combination:
  29.                                 combination.remove(value)
  30.                         for value in addedCities:
  31.                                 combination.add(value)
  32.                         print("combination: ", combination)
  33.                 return

  34.         for i in range(start, len(invalidCities)):
  35.                 addable = True
  36.                 for neighbor in invalidPairs[invalidCities[i]]:
  37.                         if neighbor in addedCities:
  38.                                 addable = False
  39.                                 break
  40.                 if addable:
  41.                         addedCities.add(invalidCities[i])
  42.                         dfs(combination, invalidPairs, invalidCities, addedCities, i+1)
  43.                         addedCities.remove(invalidCities[i])

  44. def getMostCities(correlationPairs, threshold):
  45.         validCities, invalidPairs = buildGraph(correlationPairs, threshold)
  46.         invalidCities = list(invalidPairs)
  47.         invalidCities.sort()
  48.         print("invalidCities: ", invalidCities)
  49.         combination = set()
  50.         dfs(combination, invalidPairs, invalidCities, set(), 0)
  51.         return validCities.union(combination)

  52. if __name__ == "__main__":
  53.         correlations = [['a', 'b', 1], ['a', 'c', 1], ['b', 'c', 1], ['b', 'd', 2], ['c', 'e', 2]]
  54.         cities = getMostCities(correlations, 1.5)
  55.         print("cities: ", cities)
复制代码

评分

参与人数 2大米 +3 收起 理由
rellik + 1 欢迎分享你知道的情况,会给更多积分奖励!
xiaozhuxiaozhu + 2 欢迎分享你知道的情况,会给更多积分奖励!

查看全部评分

回复

使用道具 举报

🔗
rellik 2021-10-12 10:28:35 | 只看该作者
全局:
本帖最后由 rellik 于 2021-10-11 19:56 编辑

看要求,全联通的几个city才可以是一个城市组合,比如,(a, b, 1), (c, d, 1), (b, c, 1,), (a, d, 1), (a, c, 2), (b, d, 1) threadhold=1.5有几个组合方式
  1. [a], [b], [c], [d]
  2. [a], [c], [b, d]
  3. [a], [b], [c, d]
  4. [a], [d], [b, c]
  5. [b], [c], [a, d]
  6. [c], [d], [a, b]
  7. [a, b], [c, d]
  8. [b, c], [a, d]
  9. [a, b, d], [c]
  10. [a], [b, c, d]
复制代码
因为有(a, c, 2)和threshold=1.5,a和c不能在一个group,确定不是一个permutation的问题?
逆向考虑的话,所有的不连通的edge和above threshold的edge都是排除某一个组合的条件所以是比较重要的信息。

“找出最多的城市组合”这个题意需要clarify一下,可以是最大化城市群,也可以是找到所有组合。但是最大化的话,输出结果不唯一。 看我的例子
[a, b, d], [c]
[a], [b, c, d]


评分

参与人数 1大米 +2 收起 理由
xiaozhuxiaozhu + 2 欢迎分享你知道的情况,会给更多积分奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表