我觉得有必要改变一下了

大赛后的自我反思与成长

其实软件大赛之后自己一直在反思。

现在想明白了很多事情。有句话说的好,大牛和菜鸟的区别就在于思考。

这句话是对的,但是太绝对。菜鸟并不是不思考的,只不过是思考的深度不够。

这里所说的菜鸟不是不学习的菜鸟,那个不在我们讨论的范围之内。这里所讨论的菜鸟,是那些努力很久,费了很大的力气,却仍然没有取得好成绩的人。比如我。

好,言归正传,说几句要时刻记在心中的话。

1.要思考。像IBM员工的本子上都有的那个单词:Thinking。这个并不是你想的那么容易,很多东西不是你思考就能明白的。因为思考的深度很大程度上和你的知识水平和学习习惯有着很密切的联系。知识可以弥补,但是学习习惯的养成不是一朝一夕的事情。这让我想起了我的高中时期,就是这样,每天去做题目,却从不肯进行稍微有一点点痛苦的反思。如果那个时候养成深入思考,举一反三的好习惯,现在学起来也不至于那么吃力。没办法,习惯问题只能一点一点养成,书上的每句话多想一些,多看几遍,不为了考试或者deadline来看书,这样就才能钻进去。

2.要浮躁。这个和上面是差不多的,我回想起在准备比赛的日子里,我一直在准备《C语言名题百则》。这本书很好,但是我的错误在于在于只限于明白代码的含义,却没学会用其中的思想去解决在考试还是实际生活中遇到的实际问题。看过这个博客的人能看到,《C语言名题百则》系列里,我的写法只是贴上题目,然后给出书里的代码和自己的代码,如果差别不大就兴高采烈。现在想想,真是幼稚,如果那个时候可以顺便写下很多思考的内容,这样不仅可以加深对题目和思想的理解,更重要的是,这些已经成为了自己的东西会在记忆中很久。Stay hungry,stay foolish 不仅要印在屏幕上,更要印在心里。

3.刻苦。每天中午11点的时候,就已经学不下去了,心思已经飞到了食堂。不是说食堂里面的饭好吃,是怕一会会很挤,然后吃完饭到宿舍,玩会,睡个午觉。现在想想那时候怎么那么清闲。有句话说的好,阻碍你进步的最大障碍,是你饱了会困,醒了会饿。其实吃饭不规律对这个年纪的人来说影响不是那么的大。如果能坚持调试完一个程序再去吃饭,就算饭已经打完不得不泡面,也是多么的香啊!

这次的一个情况不得不提,就是这次的决赛实在北航的沙河校区举办的。那是宝贝儿的校区啊!

先痛苦五分钟 。。。

所以,必须选择铭记这次。


马上放假了,我的安排是先做个android应用或者人人开放平台上的网络程序,然后回来学算法。之所以做这个,一是为了了解一个成型的软件的生产过程,二是可以获得一点收入。现在的生活费不算少,自从给我妈说交女朋友之后,一个月我妈会给我打1500。一个月会剩很多。但是用家里的钱养女朋友,感觉很不自立。有句话说的好,创业就是追求人格独立的过程。写个小程序算是小创业了。我一开始选择当技术人员,就是为了不求别人,不知道这算不算一种文人的迂腐。

算法的学习就是做题,然后为了解决问题去学习。

先写这些。


<think>好的,我现在需要回答用户关于遍历算法与分治算法区别与联系的问题。用户之前问过堆排序的时间复杂度,现在转向算法思想的理解,特别是遍历和分治之间的关系。首先,我要回顾已有的引用内容,看看是否有相关信息可以整合。 根据用户提供的引用,引用[1]提到分治和递归的区别,分治是处理问题的思想,递归是编程技巧,分治通常用递归实现。引用[3]中的二叉树相似性判断使用了递归分治,递归比较左右子树。引用[5]讨论了回溯算法类似于枚举,而分治是分解问题。同时,用户之前的回答中提到了分治在堆排序中的应用,比如建堆的过程可能涉及分治思想。 首先,我需要明确遍历和分治的定义。遍历算法,如二叉树的先序、中序、后序遍历,是按照某种顺序访问所有节点的过程,通常用递归或迭代实现。分治算法则是将问题分解成子问题,解决子问题后合并结果,如归并排序、快速排序。 接下来,分析它们的区别。遍历侧重于访问所有元素,而分治侧重分解问题。遍历可能不改变数据结构,而分治通常处理问题的结构。相似之处在于都可能使用递归,比如遍历二叉树时递归访问左右子树,分治同样递归处理子问题。 需要结合引用中的例子,比如判断二叉树相似性(引用[3])使用了递归分治,而遍历则是访问每个节点。分治可能在处理子问题后合并结果,而遍历只是访问。此外,分治可能涉及将问题分解为多个子问题,如快速排序分成两部分,而遍历可能只分解为一个子问题(如单链表的遍历)。 还要注意用户提到的分治与递归的关系,分治可以用递归或迭代实现,但遍历同样如此。这可能是一个共同点。另外,引用[5]提到回溯是类似枚举的搜索,可能和遍历有相似之处,但回溯会回退,而遍历通常不涉及回退。 需要确保回答结构清晰,分点说明区别和联系,并引用提供的资料。例如,在区别部分,处理方式、目的、结构变化等方面展开;联系部分则讨论递归实现、分解子问题等。同时,举例子如二叉树遍历和归并排序作为例子,说明两者的不同应用场景。 可能还需要指出,分治算法可能包含遍历步骤,例如在归并排序中,分解后的子数组需要被排序(分治),而合并过程可能需要遍历元素。但遍历本身不涉及分解问题,只是访问节点。 最后,生成相关问题时要围绕两者的区别和联系,例如分治是否必须用遍历,或者遍历算法是否属于分治等。</think>### 遍历算法与分治算法的区别与联系分析 --- #### 一、核心定义对比 1. **遍历算法** - **目的**:按特定顺序访问数据结构中所有元素(如树、图的节点) - **典型应用**:二叉树前序/中序/后序遍历、图的广度优先搜索(BFS)与深度优先搜索(DFS) - **特点**:**线性访问**过程,不改变数据结构本身,仅读取或处理数据[^2][^3] 2. **分治算法** - **目的**:将问题分解为若干子问题,分别解决后合并结果 - **典型应用**:归并排序、快速排序、二叉树相似性判断[^1][^3] - **特点**:**递归分解**问题,子问题间可能独立,最终合并结果[^1][^5] --- #### 二、核心区别 | 维度 | 遍历算法 | 分治算法 | |---------------|-----------------------------------|-----------------------------------| | **核心目标** | 访问所有数据 | 解决复杂问题 | | **处理方式** | 线性/层级访问 | 分解→解决→合并 | | **结构变化** | 不改变数据结构[^3] | 可能改变数据结构(如排序分割)[^1]| | **子问题关系**| 通常无独立子问题(如单链表遍历) | 子问题独立且可并行处理[^1] | | **递归必要性**| 可用递归或迭代实现[^2] | 通常依赖递归实现[^1][^5] | --- #### 三、联系与重叠 1. **递归实现的共性** - 两者均可通过递归实现(例如:二叉树遍历递归实现[^3] vs 归并排序递归分治[^1]) - **区别**:遍历的递归仅访问数据,而分治的递归包含问题分解与结果合并[^3] 2. **分治中的遍历操作** - 分治算法可能包含遍历步骤(例如:归并排序合并阶段需遍历子数组元素) - **关键差异**:分治的遍历服务于子问题合并,而遍历算法本身是最终目的[^1][^4] 3. **问题分解的相似性** - 二叉树相似性判断同时体现两种思想: - **分治**:将问题分解为左右子树比较[^3] - **遍历**:递归访问每个节点 --- #### 四、典型场景对比 1. **遍历算法示例** - 按树状打印二叉树:需要层级遍历所有节点以确定打印格式[^3] ```python # 二叉树中序遍历(递归实现) def inorder_traversal(root): if root: inorder_traversal(root.left) print(root.val) inorder_traversal(root.right) ``` 2. **分治算法示例** - 归并排序:将数组分解为最小单元后合并排序 ```python def merge_sort(arr): if len(arr) <= 1: return arr mid = len(arr) // 2 left = merge_sort(arr[:mid]) # 分治:分解左半部分 right = merge_sort(arr[mid:]) # 分治:分解右半部分 return merge(left, right) # 合并结果 ``` --- #### 五、本质差异总结 | 特征 | 遍历算法 | 分治算法 | |---------------------|---------------------------|---------------------------| | **问题规模** | 问题规模固定(如访问全部)| 问题规模逐渐缩小[^1][^5] | | **操作复杂度** | 通常为 $O(n)$ | 通常为 $O(n \log n)$[^1] | | **数据依赖** | 无跨节点计算 | 子问题结果需合并 | --- ### 相关问题 1. **为什么分治算法的时间复杂度常包含 $\log n$ 项?**[^1] 2. **如何用迭代方式实现二叉树的后序遍历?**[^2] 3. **分治算法在合并结果时可能引发哪些性能瓶颈?**[^1] 4. **遍历算法能否用于优化分治过程?举例说明。**[^5] --- 通过对比可发现:**遍历是分治的基础操作,分治是遍历的扩展应用**。两者的核心差异在于是否通过分解子问题重构解决方案[^1][^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值