这是一个有关日语动词分类和重构算法的有趣故事。
我最近开始将日语课作为业余爱好。 过去四个月了,现在我们的老师决定教我们动词 。
当然,作为日语的初学者,我们都需要一种系统的方法来记住动词的不同形式,因此我的老师教给我们一个漂亮的小算法,将日语动词分为四类:
- 五段动词
- 一段动词
- カ変动词
- サ変动词
算法
我们学习的原始算法如下所示:
1.动词是否以くる结尾?
-是->カ変动词
-否->继续执行步骤2
2.动词是否以する结尾?
-是->サ変动词
-否->继续执行步骤3
3.动词是否以る结尾?
-是->继续执行第4步
-否->五段动词
4.假名是否在い段或え段中的before之前?
-是->一段动词
-否->五段动词
因此,给定动词如食べる (吃),您可以使用上面的算法轻松地对其进行分类:
- 动词是否以くる结尾? 否->继续执行步骤2 。
- 动词是否以する结尾? 否->继续执行步骤3 。
- 动词是否以る结尾? 是->继续执行步骤4 。
- 是假名在い段或before段中吗? 否->因此,食べる是一个五段动词 。
重构算法
在学习该算法时,我的同班同学(也是软件工程师)立即意识到这不是软件工程师编写它的方式。
让我们将原始算法放入流程图中以便于理解。

软件工程师的思维方式
对于我们的软件工程师而言, 从异常的具体案例入手总是容易的; 然后转到一般的抽象案例 。 这在许多教科书算法中都可以看到,尤其是涉及递归的算法。
我能想到的最简单的例子是对一组数字进行排序。
软件工程师将始终从基本情况开始, 对空集合进行排序 。 因为它最容易实现并且被证明是正确的(不需要排序)。 下一步的逻辑步骤是用一个数字对集合进行排序 ,这也很容易实现(无需排序)。 然后我们继续讨论更复杂的情况,例如两个数字,42个数字,2,147,483,64个数字等。
原始算法的缺陷
如果您仔细查看上面的流程图,实际上甚至在开始步骤1之前,可能首先要检查一个特殊的具体情况(动词以ends结尾):
动词是否以る结尾 。 (最初在步骤3中检查)
如果动词开头不是以ends结尾,那么我们就不必浪费时间(或在计算机上,是非常宝贵的CPU时间)来检查サ変动词和KA変动词的可能性,因为它永远不会是两者中的任何一个。
重构
因此,如果流程图看起来像这样,将会更加简单

在考试中,当给您大量的动词进行分类时,此优化也使扫描和分类变得更加容易,因为您只需要查找る就可以了!