算法第二章作业--分治思想
分治法思想与体会
如图,分治法顾名思义,就是分而治之,把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题通过递归的解的合并。
分治法有三个重要点
分--将问题分解为规模更小的子问题;
治--将这些规模更小的子问题逐个击破;
合--将已解决的子问题合并,最终得出原问题的解;
适用条件
问题的规模缩小到一定的程度就可以容易地解决;
问题可以分解为若干个规模较小的相同子问题;
问题分解出的子问题的解可以合并为该问题的解;
各个子问题是相互独立的,即子问题之间不包含公共的子问题。
分治法的提出就是为了解决可分解的大型复杂的问题,如果问题无法分解递归,分治法是不适合用于该问题的。同时,分解后各子问题也不可以包含公共的子问题,如果包含多公共子问题,分治法要做许多不必要的工作,重复地解公共的子问题;另外,分解后的子问题的求解一定不是很复杂,否则那样分治法无意义。最后各子问题一定要可以合并,否则无法得到原解。
分治法求时间复杂度
根据公式可以求各个问题的时间复杂度。
优缺点
分治法常用于大型问题求解,能将大规模问题分解为各小规模问题,相比较于暴力算法,分治法大大提高了时间效率,有较大的优势,但是由于递归调用,如果解决大规模问题,则效率不高,空间时间复杂度高。
结对编程情况汇报
优势:结对编程对两个人的进步非常重要,可以弥补彼此编程思想上的不足,同时也可以学到彼此对同一问题的不同看法,使彼此在结对编程中共同进步
缺点:由于两个人对同一问题可能想法不同,正在编码的同学的思路可能会被提供思路的同学提供的思路而混淆编码不下去。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步