第14章 三十分?
“在座的都有一定基础,我就不绕弯子了。”
胡云程一到讲台上,就像变了个人似得,双手撑著桌面,鹰视狼顾,
“信息学竞赛,翻来覆去就考察两个东西——算法,和编程。前者是解决问题的思路,后者是把思路变成机器能执行的步骤。两个环节,少了哪个都不行。”
他抬起手,在键盘上敲了一下。
“现在,看你们面前的屏幕,思考这道题。”
李林的目光落在屏幕上,题目不长,但信息量不小:
“假设你是一位很棒的家长,想要给你的孩子们一些小饼乾。但是,每个孩子最多只能给一块饼乾。”
“对每个孩子i,都有一个胃口值g[i],这是能让孩子们满足胃口的饼乾的最小尺寸;並且每块饼乾j,都有一个尺寸s[j]。如果s[j]>=g[i],我们可以將这个饼乾j分配给孩子i,这个孩子会得到满足。你的目標是满足儘可能多的孩子,並输出这个最大数值。”
单看文字描述,脑子一时半会儿还有点绕。
但题目下面配了两组示例,李林扫了一眼,大概就懂了。
“示例:输入为g=[1,2,3],s=[1,1]时;输出应该为1。”
“解释:你有三个孩子和两块小饼乾,3个孩子的胃口值分別是:1,2,3。虽然你有两块小饼乾,由於他们的尺寸都是 1,你只能让胃口值是1的孩子满足。所以你应该输出1。”
道理不难懂。
但真要让他从头开始想,果然还是有点头痛。
算法的本质,说到底就是数学啊。
而他跟数学的关係,就算比作“美苏冷战”,都会得到“没那么铁”的评价。
“融合。”
李林在心中默念。
【高中数学+高中语文】→【获得效果“分析lv1”】
相性临时提升的李林,也终於开始思考。
然而,才过了不到一分钟,胡云程的声音就从讲台上传了下来。
“这道题该用什么算法?”
李林有些诧异地抬起头。
这么快?
他连思路都还没捋出来。
“贪心算法——”
前排已经有几个同学脱口而出。
胡云程见状,笑了起来,
“很好。一看就是刷过题的,看一眼就知道答案了。”
他隨手指了指刚才抢答的一个男生,
“你,解释一下为什么要用贪心算法。”
那男生颇有自信地起身,声音洪亮道,
“贪心算法的核心思想是,在每一阶段都选择当前看起来最优的解,通过堆积局部最优来达到全局最优。具体到这道题,我们应该先把给出的两个数组排序,然后——”
“停。”
然而,胡云程毫不留情地打断了他,
“我问的是,『为什么』要用贪心算法。”
“额——?”
男生被截断了话头,脸上的表情有些僵硬,
“因为……额,因为……”
“因为什么?因为答案上是这么写的?因为你刷过一模一样的题,所以直接把答案背出来了?”
胡云程一步步逼近,语速越来越快,
“你刚才还说贪心是通过堆积局部最优解达到全局最优,那么一定能达到全局最优吗?是所有问题都能用贪心算法吗?”
“不……不是。”
“那这道题凭什么就能用?”
“……”
一连串的快速提问,直接把那个男生给问傻了。
他张了张嘴,一个字都吐不出来。
机房也瞬间安静,似乎连呼吸声都被刻意屏住了。
可惜,胡云程却没有放过他们的意思。
他一个个地把刚才出声回答的人都点了起来,反覆问同一个问题——
“为什么用贪心算法?”
却没有一个人能给他满意的答覆。
胡云程嘆了口气。
“谁有思路?”
鸦雀无声。
“三十分——”他的目光落在角落里,“你有吗?”
被点到名字的李林缓缓站了起来。
“我不懂贪心算法。”
他的回答很正常,正常到周围的人连表情都懒得做。
也是,一个数学月考三十分的人,指望他懂这个?
现在站著的都是清北班和重点班的学生,难不成还能指望一个普通班的来救场?
要是那个谁……叫杨什么的来,估计还有点戏。
这是大部分人內心的想法。
在下一刻就被打破了。
“但我確实有一个思路。”
周围的目光忽然聚了过来。
“哦?”
胡云程的眉毛也微不可察地挑了一下,
“展开讲讲。”
在他阎王点卯这段时间,李林一直没有停止思考。
此刻李林站起来,脑子里那条原本模糊的思路已经逐渐凝聚成形。
他定了定神,开始说,
“我想的是,选择一个极值作为切入点,比如,尺寸最小的饼乾,应该给哪个孩子?”
“如果这块饼乾的尺寸,比所有孩子里最小的胃口值还要小,那它就是一块废饼乾,谁都满足不了。但如果不是,那它就应该分给胃口最小的那个孩子。”
“因为如果不分给他,万一其他孩子的胃口都比这块饼乾大,我们就白白浪费了一次分配机会。把一个最小的资源,用在最容易被满足的需求上,这看起来是最不亏的选择。”
“在发完这个饼乾后,继续考虑尺寸次小的饼乾,思考方式和上面一样,直到所有尺寸的饼乾都考虑完,就能得到最终答案。”
话音落下,周围静悄悄的。
李林抬起头,发现四周的目光都钉在了自己身上。
他下意识地看向讲台,正看到胡云程脸上的严肃一点点舒展开来,变成了一张几乎压不住的笑脸。
“同学们,看到没有?”
胡云程转过身,拿粉笔在黑板上敲了敲,
“三十——咳,李林同学很谦虚,嘴上说自己不懂贪心算法。但他刚才说的那一套,每一步都在找当前最优解,一步一步推到最后。这就是最標准的贪心算法,也是这道题的最优解。”
他转回来,目光重新落在李林身上,但笑容里多些期待。
“那么,李林。你能回答我的问题吗?为什么这道题,可以用贪心算法解决?”
胡云程注视著他。
不止是昨天,就在刚才,李林又给了他一个惊喜。
贪心算法虽然算不上什么复杂算法,但是能用如此通俗自然的语言解释出来,已经颇为难得了。、
所以他决定赌一把。
赌这个数学只有三十分的学生,真的能达到他的期待。
胡云程一到讲台上,就像变了个人似得,双手撑著桌面,鹰视狼顾,
“信息学竞赛,翻来覆去就考察两个东西——算法,和编程。前者是解决问题的思路,后者是把思路变成机器能执行的步骤。两个环节,少了哪个都不行。”
他抬起手,在键盘上敲了一下。
“现在,看你们面前的屏幕,思考这道题。”
李林的目光落在屏幕上,题目不长,但信息量不小:
“假设你是一位很棒的家长,想要给你的孩子们一些小饼乾。但是,每个孩子最多只能给一块饼乾。”
“对每个孩子i,都有一个胃口值g[i],这是能让孩子们满足胃口的饼乾的最小尺寸;並且每块饼乾j,都有一个尺寸s[j]。如果s[j]>=g[i],我们可以將这个饼乾j分配给孩子i,这个孩子会得到满足。你的目標是满足儘可能多的孩子,並输出这个最大数值。”
单看文字描述,脑子一时半会儿还有点绕。
但题目下面配了两组示例,李林扫了一眼,大概就懂了。
“示例:输入为g=[1,2,3],s=[1,1]时;输出应该为1。”
“解释:你有三个孩子和两块小饼乾,3个孩子的胃口值分別是:1,2,3。虽然你有两块小饼乾,由於他们的尺寸都是 1,你只能让胃口值是1的孩子满足。所以你应该输出1。”
道理不难懂。
但真要让他从头开始想,果然还是有点头痛。
算法的本质,说到底就是数学啊。
而他跟数学的关係,就算比作“美苏冷战”,都会得到“没那么铁”的评价。
“融合。”
李林在心中默念。
【高中数学+高中语文】→【获得效果“分析lv1”】
相性临时提升的李林,也终於开始思考。
然而,才过了不到一分钟,胡云程的声音就从讲台上传了下来。
“这道题该用什么算法?”
李林有些诧异地抬起头。
这么快?
他连思路都还没捋出来。
“贪心算法——”
前排已经有几个同学脱口而出。
胡云程见状,笑了起来,
“很好。一看就是刷过题的,看一眼就知道答案了。”
他隨手指了指刚才抢答的一个男生,
“你,解释一下为什么要用贪心算法。”
那男生颇有自信地起身,声音洪亮道,
“贪心算法的核心思想是,在每一阶段都选择当前看起来最优的解,通过堆积局部最优来达到全局最优。具体到这道题,我们应该先把给出的两个数组排序,然后——”
“停。”
然而,胡云程毫不留情地打断了他,
“我问的是,『为什么』要用贪心算法。”
“额——?”
男生被截断了话头,脸上的表情有些僵硬,
“因为……额,因为……”
“因为什么?因为答案上是这么写的?因为你刷过一模一样的题,所以直接把答案背出来了?”
胡云程一步步逼近,语速越来越快,
“你刚才还说贪心是通过堆积局部最优解达到全局最优,那么一定能达到全局最优吗?是所有问题都能用贪心算法吗?”
“不……不是。”
“那这道题凭什么就能用?”
“……”
一连串的快速提问,直接把那个男生给问傻了。
他张了张嘴,一个字都吐不出来。
机房也瞬间安静,似乎连呼吸声都被刻意屏住了。
可惜,胡云程却没有放过他们的意思。
他一个个地把刚才出声回答的人都点了起来,反覆问同一个问题——
“为什么用贪心算法?”
却没有一个人能给他满意的答覆。
胡云程嘆了口气。
“谁有思路?”
鸦雀无声。
“三十分——”他的目光落在角落里,“你有吗?”
被点到名字的李林缓缓站了起来。
“我不懂贪心算法。”
他的回答很正常,正常到周围的人连表情都懒得做。
也是,一个数学月考三十分的人,指望他懂这个?
现在站著的都是清北班和重点班的学生,难不成还能指望一个普通班的来救场?
要是那个谁……叫杨什么的来,估计还有点戏。
这是大部分人內心的想法。
在下一刻就被打破了。
“但我確实有一个思路。”
周围的目光忽然聚了过来。
“哦?”
胡云程的眉毛也微不可察地挑了一下,
“展开讲讲。”
在他阎王点卯这段时间,李林一直没有停止思考。
此刻李林站起来,脑子里那条原本模糊的思路已经逐渐凝聚成形。
他定了定神,开始说,
“我想的是,选择一个极值作为切入点,比如,尺寸最小的饼乾,应该给哪个孩子?”
“如果这块饼乾的尺寸,比所有孩子里最小的胃口值还要小,那它就是一块废饼乾,谁都满足不了。但如果不是,那它就应该分给胃口最小的那个孩子。”
“因为如果不分给他,万一其他孩子的胃口都比这块饼乾大,我们就白白浪费了一次分配机会。把一个最小的资源,用在最容易被满足的需求上,这看起来是最不亏的选择。”
“在发完这个饼乾后,继续考虑尺寸次小的饼乾,思考方式和上面一样,直到所有尺寸的饼乾都考虑完,就能得到最终答案。”
话音落下,周围静悄悄的。
李林抬起头,发现四周的目光都钉在了自己身上。
他下意识地看向讲台,正看到胡云程脸上的严肃一点点舒展开来,变成了一张几乎压不住的笑脸。
“同学们,看到没有?”
胡云程转过身,拿粉笔在黑板上敲了敲,
“三十——咳,李林同学很谦虚,嘴上说自己不懂贪心算法。但他刚才说的那一套,每一步都在找当前最优解,一步一步推到最后。这就是最標准的贪心算法,也是这道题的最优解。”
他转回来,目光重新落在李林身上,但笑容里多些期待。
“那么,李林。你能回答我的问题吗?为什么这道题,可以用贪心算法解决?”
胡云程注视著他。
不止是昨天,就在刚才,李林又给了他一个惊喜。
贪心算法虽然算不上什么复杂算法,但是能用如此通俗自然的语言解释出来,已经颇为难得了。、
所以他决定赌一把。
赌这个数学只有三十分的学生,真的能达到他的期待。