看到这个可以聊一下big O notation,很多人在面试的时候可能会回答/或听到面试官说“big O notation是一个评估算法效能的方式”
…..其实并不是的哦~
big O notation在数学上是用来描述一个函数的参数在趋近于特定值或无限时的行为表达方式。在computer science领域则是在看“当input size趋于无限时,函数行为为何”的“分类方式”,和效能没有直接关系。
举个例子,例如今天有解同一个问题的两个算法,一个分析出来其时间复杂度为10^100*x,另一个分析出来时间复杂度是10^(-100)*x^1.1。则前者的big O notation为O(x),后者为O(x^1.1),明显前者更加,但在实务上,当然大家应该会选择后者的算法。因此big O notation基本上是一个在分析层面的工具更多一些,在效能评比上可以当作理论分析用,但不是全部,实际开发时还是要透过benchmark才能得到最正确的结论。
因此,不管你是面试官或面试者,只要你听到有人说big O notation是能拿评估算法效能的,勇敢呛回去吧XDDDD
※ 引述《LinuxKernel (Linus Torvalds)》之铭言:
: 刚看到这个 YT 影片,不喜勿点
: https://www.youtube.com/watch?v=BkszA-MvjXA
: 在地上滚的工程师 aka Nic aka 工程技术总监
: 合拍了一个 coding interview 影片
: 一开始还想说应该是反串吧
: 但看到最后怎么好像又不是??
: 软件业的工程技术总监有可能分不清楚 BFS vs. DFS 或是 stack vs. queue 吗??