📣 独立日限时特惠: VIP通行证立减$68
楼主: Smilenceyu
跳转到指定楼层
上一主题 下一主题
收起左侧

[高频题] 讨论两个面经题

🔗
Augustus 2021-2-3 14:08:23 | 只看该作者
全局:
第二题只能用高斯消元法吧,递归是解不出来的
回复

使用道具 举报

🔗
Augustus 2021-2-3 14:55:50 | 只看该作者
全局:
参考https://www.1point3acres.com/bbs/thread-689100-1-1.html 的话,那应该是用高斯消元法?   难道是考数学能力?
回复

使用道具 举报

🔗
tchhh 2021-3-24 14:56:55 | 只看该作者
全局:
请问一下楼主像“T3 = T4 + T5”这样的string具体要如何parse建图啊?
回复

使用道具 举报

🔗
tchhh 2021-3-25 11:25:13 | 只看该作者
全局:
请问第一题的input是什么样?target和text都是string吗?还是需要从text file里面读取string input?
回复

使用道具 举报

🔗
 楼主| Smilenceyu 2021-3-25 13:27:02 来自APP | 只看该作者
全局:
tchhh 发表于 2021-3-24 14:56
请问一下楼主像“T3 = T4 + T5”这样的string具体要如何parse建图啊?

不需要建图,也不需要高斯。我当时后来自己写了下ruby代码,就是字符串parse然后每次把只一个变量放到左边。
  1. # 第二题: 给一个target 比如T3, 还有 T1 = 2, T2 = 3, T3 = T4 + T5, T4 = T1 - T2, T5 = T4 + T1, 计算出 T3 = 0, 我的解法是build mappings from T3 -> T4 + T5, T4 -> T1 - T2, T5 = T4 + T1, 然后用recursion计算。

  2. # Q: is it possible it's given 'T5 = T3 -T4' but target is T3
  3. def variables_from(expression)
  4.   output = []
  5.   window = ''
  6.   expression.each_char do |char|
  7.     next if char == ' '

  8.     if '+-'.include?(char)
  9.       output << window if !window.empty?
  10.       window = ''
  11.     end
  12.     window << char
  13.   end
  14.   output << window if !window.empty?
  15.   return output
  16. end

  17. # 默认不会有相同左值的表达式
  18. def evaluate(target, expressions)
  19.   @var_values_map = Hash.new {|h,k| h[k] = []}
  20.   is_number = Proc.new do |str|
  21.     str.to_i != 0 || str == '0'
  22.   end

  23.   expressions.each do |expression|
  24.     left, right = expression.split('=')
  25.     @var_values_map[left.strip] = variables_from(right)
  26.   end

  27.   @var_values_map.each do |key, values|
  28.     values.map! do |value|
  29.       if is_number.call(value)
  30.         value.to_i
  31.       elsif '+-'.include?(value[0])
  32.         value
  33.       else
  34.         '+' + value
  35.       end
  36.     end
  37.   end

  38.   @visiting = Set.new  # T1 = T2 , T2 = T3, T3 = T1
  39.   return evaluate_from('+' + target)
  40. end

  41. def evaluate_from(variable)
  42.   return variable if variable.is_a?(Numeric)
  43.   sign, variable = variable[0], variable[1..-1]
  44.   raise 'there is cycle' if @visiting.include?(variable)

  45.   @visiting.add(variable)

  46.   output = @var_values_map[variable].sum do |next_var|
  47.     evaluate_from(next_var)
  48.   end
  49.   @var_values_map[variable] = [output]
  50.   output = output * (sign == '+' ? 1 : -1)

  51.   @visiting.delete(variable)
  52.   return output
  53. end

  54. target = 'T3'
  55. expressions = ['T1 = 4', 'T2 = 3', 'T3 = T4 + T5', 'T4=T1-T2+2', 'T5 = T4 + T1']
  56. p evaluate(target, expressions) # 10

  57. expressions = ['T1 =-3', 'T2 = 8', 'T3 = +T4 +T5', 'T4 = T1- T2', 'T5 = T4 + T1']
  58. p evaluate(target, expressions) # -25

  59. expressions = ['T1 =T2', 'T2 =T3', 'T3 =T1']
  60. p evaluate(target, expressions) # exception
复制代码


不过这题估计愿意肯定不是这样,否则有点复杂了。



补充内容 (2021-03-25 14:00 +08:00):
应该说要建图 但是不是高斯

评分

参与人数 2大米 +2 收起 理由
gavin5566 + 1 thank you!
tchhh + 1 很有用的信息!

查看全部评分

回复

使用道具 举报

🔗
tchhh 2021-3-25 13:52:05 | 只看该作者
全局:
Smilenceyu 发表于 2021-3-25 13:27
不需要建图,也不需要高斯。我当时后来自己写了下ruby代码,就是字符串parse然后每次把只一个变量放到左 ...

请问一下parse具体如何处理吗?不好意思不会Ruby
回复

使用道具 举报

🔗
 楼主| Smilenceyu 2021-3-25 14:05:23 来自APP | 只看该作者
全局:
tchhh 发表于 2021-03-24 22:52:05
请问一下parse具体如何处理吗?不好意思不会Ruby
就是把等号左右两边分开 然后把每个变量换到左边取负, 并且把其他变量都换到右边 这样每个变量都有会有几个表达式 每个表达式就是一个child node

评分

参与人数 1大米 +2 收起 理由
tchhh + 2 很有用的信息!

查看全部评分

回复

使用道具 举报

🔗
wisdompeak2 2021-3-25 14:37:38 | 只看该作者
全局:
不知道小帅 发表于 2021-1-26 12:09
第一个我觉得greedy是更好的解法啊。第二个的话,感觉常规是高斯消元。

你所说的贪心本质应该就是暴力搜索,o(MN)的复杂度,不算很好。
当然,DP也是o(MN)的复杂度。
我怀疑wildcard matching并没有线性解。
回复

使用道具 举报

🔗
 楼主| Smilenceyu 2021-3-25 22:54:11 来自APP | 只看该作者
全局:
wisdompeak2 发表于 2021-03-24 23:37:38
你所说的贪心本质应该就是暴力搜索,o(MN)的复杂度,不算很好。
当然,DP也是o(MN)的复杂度。
我怀疑wildcard matching并没有线性解。
看一下原帖 greedy就是线性 我发现你们都是看了第一句话就开始解题了 lol
回复

使用道具 举报

🔗
wisdompeak2 2021-3-26 03:08:58 | 只看该作者
全局:
本帖最后由 wisdompeak2 于 2021-3-26 03:15 编辑
Smilenceyu 发表于 2021-3-25 22:54
看一下原帖 greedy就是线性 我发现你们都是看了第一句话就开始解题了 lol

你说的原贴是哪一个?有代码吗,我来看看。如果你说的是楼主发的那一层,那么看一下这个例子:
s = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaad"
p = "*aaaaaaaaaaaaaaad"

对于s的每一个位置,你都会把p遍历到底,然后发现失败;再移动s的下一个位置。所以这是o(MN)
回复

使用道具 举报

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

本版积分规则

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