看完之后,第一感觉是比较激动,觉得人家真是聪明,可以想出这么漂亮的解。在blog里面提到这个解法,对于算法的复杂度,因为有公式直接求解,我当时认为是O(1)常量操作。
blog写好之后,又把这段贴到豆瓣上。过了两天,忽然觉得有点不对,因为如果不是两个两个的划掉,那基数就不应该是2啊,那样的话,这种类型的公式就可能涉及到不同基数的数字转换,那应该是O(log(n))的啊。于是我修改了blog和豆瓣里的评论,把里面说的复杂度改成O(log(n))了。
前两天有人开始在豆瓣上回应我的那个评论,质疑这个复杂度,我觉得需要仔细研究一下,于是就开始推导如果三个三个的划掉,最后的公式是什么样的,但发现这个推导不是那么容易的,而书中的确没有给出通常问题的解,所以人家质疑的很对,于是我干脆从评论中删除了关于复杂度的说法。
现在看,准确的说法应该是,对于两个两个划掉的原始约瑟夫问题,书中给出了一个很完美的解,复杂度是O(1);对于通常的约瑟夫问题,书中没有提到解法,所以也无从分析复杂度,只是我猜测可能是O(log(n))的。
这个事情,说明我在思维方式上,比较粗糙,简单的想一下,觉得差不多,就下结论了,缺少仔细的推敲。
还是前两天,itpub上贴了一个题目,出题目的人给了一个解,但是没有给出证明说解是符合要求的,我就尝试了一下,给了一个证明。思路当然并不困难,还是比较简单,但是在最后解三角形的时候,我犯了一个错误,这个错误很快就被人指出了,我也修正了。这个事情和上面说的那个事情是一样的,都是说明在思考过程中,思维还是比较粗,一旦给了一个解,就急急的认可了这个解,而没有去认真推敲这个解是否有漏洞。
思维方式上的这种缺陷,实质上是因为我性格上急躁易冲动,容易想当然,以后要尽量放慢,思维上力求缜密,不求快,但求对。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/67063/viewspace-169292/ ,如需转载,请注明出处,否则将追究法律责任。