Interview:算法岗位面试—上海某公司算法岗位(偏机器学习,互联网金融行业)技术面试考点之数据结构相关考察点—斐波那契数列、八皇后问题、两种LCS问题


B3
B3 2022-09-19 13:57:01 48651
分类专栏: 资讯

ML岗位面试:上海某公司算法岗位(偏机器学习,互联网金融行业)技术面试考点之数据结构相关考察点—斐波那契数列、八皇后问题、两种LCS问题

Interview:算法岗位面试—上海某公司算法岗位(偏机器学习,互联网金融行业)技术面试考点之数据结构相关考察点—斐波那契数列、八皇后问题、两种LCS问题

导读:其实,考察的知识点,博主都做过,但是,emmm,这些知识点,在我写代码中,几乎不会用到,so,会遗忘。所以,还需要下功夫,去多回忆回忆啦。
         整个过程很nice。

目录

数据结构相关问题

1、生成斐波那契数列—yield的应用

2、八皇后问题

3、两种LCS问题——最长公共子序列和最长公共字符串


​​​​​​​

数据结构相关问题

1、生成斐波那契数列—yield的应用

考察点yield

1、yield的特点
(1)、带有 yield 的函数是生成器:带有 yield 的函数在 Python 中被称之为 generator生成器,当使用一个yield的时候,对应的函数就是一个生成器了。成器对象可以被for循环迭代,也可以手动执行next或者send方法精准控制这个生成器的内部执行,
(2)、yield是一个类似 return 的关键字:迭代一次遇到yield时,就返回yield后面(右边)的值。yield就是 return 返回一个值,并且记住这个返回的位置下次迭代就从这个位置后(下一行)开始

2、yield的两大函数
next:next方法就相当于“下一步”生成哪个数,这一次的next开始的地方是接着上一次的next停止的地方执行的。next方法第一次调用a.next()无法输出参数,以后每次a.next(赋值)都等于函数体里面yield表达式的值。
send:send方法会首先把上一次挂起的yield语句的返回值通过参数设定,从而实现与生成器方法的交互。
注意
(1)、当send方法的参数为None时,它与next方法完全等价。但是注意,虽然这样的代码可以接受,但是不规范。所以,在调用send方法之前,还是先调用一次next方法为好。
(2)、其实next和send在一定意义上作用是相似的,区别是send可以传递yield表达式的值进去,而next不能传递特定的值,只能传递None进去。因此,我们可以看做c.next 和 c.send(None) 作用是一样的。

3、yield的应用:需要节约内存不需要一把全部返回,每次使用的时候再去算,我们就会用到生成器。
       在 for 循环执行时,每次循环都会执行 fab 函数内部的代码,执行到 yield b 时,fab 函数就返回一个迭代值,下次迭代时,代码从 yield b 的下一条语句继续执行。而函数的本地变量看起来和上次中断执行前是完全一样的,于是函数继续执行,直到再次遇到 yield。

  1. def fab(max):
  2. n, a, b = 0, 0, 1
  3. while n < max:
  4. yield b 使用 yield
  5. a, b = b, a + b
  6. n = n + 1
  7. for n in fab(5):
  8. print(n)

2、八皇后问题

     八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后不能处于同一行同一列同一斜线上,问有多少种摆法。 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。计算机发明后,有多种计算机语言可以解决此问题。
考察点:考察结构性编程的能力
理解:在8行8列的棋盘上摆放8个皇后,使之不能互相攻击——任意两个不在同一行、同一列或同一斜线上。典型的回溯算法。
首先,我们要想到某种方法来解决冲突检测问题,即不能令棋子处于能相互吃掉的位置——相邻、左右、对角线。
其次,运用回溯的方法,求得问题的解。此处具体为函数的递归调用,当调用到棋盘的最后一行,便跳出,求得解。|
最后,将解打印出来。难点在于对递归调用函数的理解。

1、python八行代码简单实现的八皇后问题

  1. def queen(lists, current=0): current当前状态
  2. if current == len(lists):
  3. print(lists)
  4. return 0
  5. for col in range(len(lists)): 外for循环
  6. lists[current], flag = col, True 列表内赋值,初始化标记
  7. for row in range(current): 内for循环取出每一行,if判断,同列或者对角线,标记为false,且跳出当前层的for循环
  8. if lists[row] == col or abs(col - lists[row]) == current - row:
  9. flag = False
  10. break
  11. if flag: if判断,合法位置才进行递归调用
  12. queen(lists, current+1)
  13. res=queen([None]*8)

2、利用yield函数实现的八皇后问题

 Algorithm:【Algorithm算法进阶之路】之利用yield函数解决八皇后问题

3、两种LCS问题——最长公共子序列和最长公共字符串

Algorithm:C++/python语言实现之求旋转数组最小值、求零子数组、求最长公共子序列和最长公共子串、求LCS与字符串编辑距离

网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。

本文链接:https://www.xckfsq.com/news/show.html?id=2811
赞同 0
评论 0 条
B3L0
粉丝 0 发表 2 + 关注 私信
上周热门
如何使用 StarRocks 管理和优化数据湖中的数据?  2672
【软件正版化】软件正版化工作要点  2637
统信UOS试玩黑神话:悟空  2532
信刻光盘安全隔离与信息交换系统  2216
镜舟科技与中启乘数科技达成战略合作,共筑数据服务新生态  1092
grub引导程序无法找到指定设备和分区  743
WPS City Talk · 校招西安站来了!  15
金山办公2024算法挑战赛 | 报名截止日期更新  15
看到某国的寻呼机炸了,就问你用某水果手机发抖不?  14
有在找工作的IT人吗?  13
本周热议
我的信创开放社区兼职赚钱历程 40
今天你签到了吗? 27
信创开放社区邀请他人注册的具体步骤如下 15
如何玩转信创开放社区—从小白进阶到专家 15
方德桌面操作系统 14
我有15积分有什么用? 13
用抖音玩法闯信创开放社区——用平台宣传企业产品服务 13
如何让你先人一步获得悬赏问题信息?(创作者必看) 12
2024中国信创产业发展大会暨中国信息科技创新与应用博览会 9
中央国家机关政府采购中心:应当将CPU、操作系统符合安全可靠测评要求纳入采购需求 8

加入交流群

请使用微信扫一扫!