各位帮忙看下我写的算法 blog,各位能读懂么。

2016-10-04 20:13:09 +08:00
 haixiao3156

本人本科 985 毕业几年了,专业非 CS 但是相关专业,今年 6 月份练车之余突然对编程有兴趣了,国庆这几天在看 Algorithms 4th ,本人英文还过的去,书直接是看的是英文原版(我编程书都是英文因为中文的书和资料我实在看不懂,翻译拗口逻辑不通,英文虽然厚但是看起来很简单),视频直接在 YouTube 上看普林斯顿老教授的课。因为本科不是 CS 所以我的英文翻译过来怕别人读不明白,还有我写的语句和排版别人是否能看懂,所以请你们帮忙看下我写的各位能读懂么。下面是两篇的链接。

时间复杂度 Big O notation,并查集 Union-find

4919 次点击
所在节点    程序员
47 条回复
deeporist
2016-10-05 11:50:50 +08:00
我就连高数都不想看中文的怎么办(我要死.jpg) 同济的书 例题和习题就是 2 个世界 例题 1+1=2 习题哥德巴赫猜想
我是看了《从牛顿到勒贝格》和 wiki 的高等数学才明白通彻的 再回头看同济 7 版 简直看不下去
haixiao3156
2016-10-05 11:58:06 +08:00
@bkjzs 我刚刚看了算法,这本书上没有这部分,我又去 YouTube 上看了 MIT 算法导论的公开课,忍受了一个印度口音叨叨半小时,我只弄懂了小 o 和θ,还终于弄明白了为什么在 java 中 variable declaration =2 但我没看到有ω,不知道你看的哪本书,我只有 algorithm 4th 的实体书,没有算法导论的实体,你可以发一份你的书给我看一下。
小 o 就是高数里面的定义,比如 g(n) = (1/2) n^2+( 1/2 ),f(n)=n^2 , g/f=1/2,你可以计作大 O(n^2),而小 o 则一定要是高阶无穷小, f(n)=n^3 就是 g/f=0,计作小 o(n^3),你可以理解为用大 O 的时候 g/f 可以是等于 0 或者等于 C ,但小 o 一定要等于 0,至于θ就是 f 严格等于 g , f(n)等于(1/2) n^2+( 1/2 ),而大 O 只需要 f(n)=n^2 ,你可以计作用θ时候 g/f 一定要等于 1 。
PS :楼主非 CS 专业,编程最近才开始看,不过自认为对自己感兴趣的事情理解能力比较强,如果解释的不对,下面的人一定要告诉我,别误导别人,待会我会更新一下大 O 的文章。
haixiao3156
2016-10-05 12:03:42 +08:00
@deeporist 我感觉中国的教科书都是跟苏联学的哪一套,书特别薄,字字珠玑,但不告诉你怎么来的,上来就一堆公式证明。国外的书厚的能当凶器,但是从这个问题的起源到现在的应用都给你写了进去没准还来点发现人的八卦,很有趣味性,但是很啰嗦,像我这种注意力不专注的人就喜欢看国外跟小说一样的教科书,但学霸到哪里什么书都没问题。
不喜欢同济推荐看下我们学校的高数书,因为我很喜欢那个遍书的老师,私信我告诉你,哈哈。
haixiao3156
2016-10-05 12:44:42 +08:00
没有给我找工作提个意见的么。。。。我想求份北京或者沈阳的 iOS 开发实习工作,我有 demo 的,而且上架 app store 了。要求就是能学到东西,工资就以不用搭钱上班为准,公司最好有 VPN 和台式电脑用,笔记本用的蛋疼。
zzNucker
2016-10-05 12:45:48 +08:00
读唐诗要粤语才能读懂我拒绝同意。
yangff
2016-10-05 12:53:45 +08:00
没有复杂度分析是怎么写出这么长的……

不做复杂度分析的话, disjoint set 的思想很简单啊,
1. A 和 B 在一棵树上,则 AB 在一个集合里
2. 合并两个集合就是合并两棵树
3. 充分利用复杂度,降低之后操作的复杂度。具体来说就是按秩合并和路径压缩(每次操作把访问到的节点提升到根)
4. 观察 1 、 2 、 3 之后,发现我们只需要记录每个点的父亲就行了,因为不会有访问孩子的需求

然后代码就很自然的是那样了。
skydiver
2016-10-05 14:13:56 +08:00
@haixiao3156 V2EX 什么时候有私信了。。。
haixiao3156
2016-10-05 15:48:28 +08:00
@skydiver 不好意思我刚注册,不了解哦,唐诗那个就算了。
haixiao3156
2016-10-05 15:51:33 +08:00
@yangff 就按视频的思路写的啊。
moyang
2016-10-05 16:02:53 +08:00
不知道中文算法书翻译的是不是不好,但是用 cs 术语用英文来理解来交流是完全可行的。反之,如果一个人所有 cs 术语都只知道中文译名不知道原文,那才是问题
GentleSadness
2016-10-05 16:54:57 +08:00
就是因为有你这种又菜又以为自己牛逼的人才会增加老子的工作量

说真的,真牛逼,发论文去,一篇真正有效加快排序与查找的论文,学位,工作,要啥有啥
haixiao3156
2016-10-05 17:24:46 +08:00
@GentleSadness 素质可以啊,喷人不费电啊,不过无所谓,有的人能看懂就行,喷人能让你生活的更开心就好。
haixiao3156
2016-10-05 17:35:10 +08:00
看到别人能看懂我写的就好,帖子也不再回复了,倒不是因为楼上的回复,我就是想了解一下别人能否读懂,因为我从小就没记笔记这个习惯。算法的东西会慢慢更新,总觉得能理解算法是一步,能自己写出来是一步,可以做题是一步,以后伪代码和题也会更新,争取 2 年内弄完这个工程,我出去吃火锅了, Have a nice night , 88 。
Aspx
2016-10-05 18:48:42 +08:00
@haixiao3156 平行线不相交是基于欧几里德的定论,如果不适用欧的定论,平行线就可以相交嘛。纯属猜测,不知对不对,求解答
wenxw1997
2016-10-05 20:26:06 +08:00
@Aspx 搜索一下平行公设就知道了。
欧氏几何:给定一条直线,通过此直线外的任何一点,有且只有一条直线与之平行。
罗氏几何(双曲几何):给定一条直线,通过此直线外的任何一点,可以引至少两条平行线。
黎曼几何(椭圆几何):给定一条直线,通过此直线外的任何一点,一条平行线也不能引。
后两者通称非欧几何。

这里的平行是指两直线不会相交。
直接去掉平行公设则可以得到更一般的几何。

我个人认为这个知识对非数学专业的人来说基本算是数学的一个通识吧,当兴趣了解一下就好。如果没有严格的数学逻辑思维本来就很难发现平行公设的问题。其实虽然楼主用这个举例,但我还是很怀疑楼主对这个能有多少了解……事实上,楼主连平行的定义都没有给出……所以我并不能看懂平行线会相交指的是什么,感觉楼主只是知道一点科普知识就来炫耀了(只是感觉,如果冒犯了不好意思)……但我并不认为这种问题也会普遍出现在国内教材中……

看了楼主的博客,很好奇楼主是认为口语化的语言可读性更强吗……我觉得逻辑清晰才是最要紧的。感觉楼主也有些自以为是的地方。比如 log ,我们学数学分析时默认就是以 e 为底(因为其他底基本没怎么用),而计算机领域一般默认以 2 为底,以 10 为底在其他领域计算则对判断大小很有帮助,只能说不同的领域有不同的简写习惯(反正我认为高中教学教以 10 为底是最好的)。看了 wiki 才知道 lg()一般就是指以 10 为底的。楼主居然是用国内和国外来区分……

还有这句: O(f(n)):这是一个解析数学中的概念,你只要记住最后求出复杂度用 O(f(n)( big O notation ),其中的 f(n)就为其复杂度上界。
解析数学是什么?国内一般也没有这样的叫法,你指的是数学分析吗?

还有,感觉楼主有可能为了避免和国内译法雷同,特意生造了一些翻译……

相信楼主发出这个帖也是为了让大家把你批判一番,我虽然目前还只是个非 CS 专业的本科生,但真心不认同楼主对原作 /译作,国内教材 /国外教材的看法。准确度什么的,其实很多教材都做得相当好了(有一点输入的错误在所难免),读中文书我觉得对于不常用英语的人来说是比较高效的做法,你应该批判的是那些写了一些垃圾来骗钱骗关注的作者(也希望楼主不要制造这种垃圾,就像 @GentleSadness 说的,增加了读者的工作量)。我觉得对一般人来说英语好到能看懂一个具体问题的解释就可以了,没有用英语进行日常阅读。

当然了,我说的也有点多,所以上述内容也可能因为我见识比较浅而错漏百出……
yangff
2016-10-05 20:32:44 +08:00
@haixiao3156 苏联的书…… 书架上躺灰的三本《微积分学教程》不服
GentleSadness
2016-10-05 20:52:27 +08:00
@wenxw1997 怎么说呢,对于一个自以为是菜鸡,你这么认真不太好

然后因为看到你这么认真,我就看了几眼楼主写的东西

前面那个居然是翻译关于时间复杂度的符号含义

很醉,一个本科生,居然以为自己被那些教授级人物牛逼

勉强看到:为什么将 int count = 0 这一语句算成 2 frequency,这是因为和 java 的底层 reference

这句,说真的, CS 专业基本都学过 C ,然后真有认真学过的,基本都会一点底层

关于 java 的引用, 王垠的博客是这样说的: http://www.yinwang.org/blog-cn/2016/06/08/java-value-type

说真的,写这些东西来吹,只能说楼主,妈的智障

要扯,本科就去扯,编译器,服务器,操作系统,我记得第四个好像是文本编辑器?
GentleSadness
2016-10-05 20:54:18 +08:00
喷人不费电啊

废话,喷人要用脑力还不如去搞其他事

上面那堆东西,都是以前学的,现在用来喷你,不用花一点时间来查资料
ryd994
2016-10-05 20:58:00 +08:00
自己记笔记还共享出来自然是好的
但是实际上还是直接看书更快,所以上面才有人说这是垃圾
说句不好听的,鹦鹉学舌复述一遍,以为别人不会看书么?

而且算法这个,更多的是一种思路,见多了很快就有感觉的,什么情况用什么,就算不是最优解,大体上不会错。有点灵性的人,看到一小段就大致有数了,后面随便一点就通。

说学算法入门难的,基本是自己写程序从来不过脑子,只以能跑通为目标。认真写程序的,总是会想有没有更好的写法,最后证明没有。又或者看到别人的解,会拍手称妙。

举个例子,判断某数是不是 2 的整数次方,最直接的想法就是 log ,其次是连除,其次是移位取余。然而网上搜一搜,其实用位逻辑就行。
ryd994
2016-10-05 21:03:47 +08:00
刚好看到楼上说到 2 frequency
我看到这段只觉得很扯,就像茴字有四种写法一样
从算法而言, 1 和 2 根本没有区别,因为都是 O(1)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/310559

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX