Linux安全网 - Linux操作系统_Linux 命令_Linux教程_Linux黑客

会员投稿 投稿指南 本期推荐:
搜索:
您的位置: Linux安全网 > Linux编程 > » 正文

编程是个细活儿,算法是个脑力活

来源: v_JULY_v 分享至:

编程是个细活儿,算法是个脑力活

编程是个细活儿

    编程是个细活儿,是个经验活,非一朝一夕所能炼成,不得有半点马虎,半点浮躁,半点急功近利;算法是个脑力活,只要你肯动脑,爱思考,适合那些小学参加奥数,大学参加ACM的朋友们,或者多看看书,基本能速成。然工作中往往用不到多高深多复杂的算法(除非你的工作跟机器学习,数据挖掘等有关),只要你在编码时稍微考虑下效率便就可以了。编程是个细活儿,非手细腻不可。

    自学编程两年来,总感心有余而力不足。常常无法将心中的想法自由实现,尽管很多的时候,只是一个非常非常简单的想法。

    高水平的软件工程师队伍+极致的产品文化+效率造就了Facebook高水平的软件工程师队伍从何而来?Facebook面试常专门问编程题目,考察对编程的熟练程度,是否能没有任何障碍地把想法写成代码,因为对软件工程师而言,编程就是生产力。

    常有人说,十年学会编程,一点也不夸张。编程基础是根基,在根基没有彻底扎牢之前,警告读者朋友们切忌跟风去学算法,根基不牢,再光鲜靓丽的建筑物,一遇风吹草动,都会轰然倒塌。

    敬告所有读者朋友们:请在学会了编程后(什么叫做学会?标准即是:是否能没有任何障碍地把想法写成代码),再学算法。


算法是个脑力活

若编程功底真正彻底打牢了后,要学算法,那算法复杂么,难学么?举两个极其简单的例子:

1、杨氏矩阵查找

    先看一个编程(面试)题:

    在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
    
  例如下面的二维数组就是每行、每列都递增排序。如果在这个数组中查找数字6,则返回true;如果查找数字5,由于数组不含有该数字,则返回false。

    前面说了,学算法就是多思考,下面,解法有二(如查找数字6):

    1、分治法,分为四个矩形,如果要找的数是介于对角线上相邻的两个数,可以排除掉两个矩形
左下和右上的两个矩形则留下进一步考察,如下图所示:

    2、首先直接定位到最右上角的元素,比要找的小就往下走,比要找的数大就往左走,直到找到要找的数字为止,如下图所示:

    试问,上述算法复杂么?不复杂,只要稍微懂点脑筋,或许没有编程经验的初、高中生也能想到。

2、从倒排索引文件中提取关键词

    再看一个可能实际工作中会遇的从索引中提取关键词的问题:我们知道,搜索引擎的关键步骤就是建立倒排索引,所谓倒排索引一般表示为一个关键词,然后是它的频度(出现的次数),位置(出现在哪一篇文章或网页中,及有关的日期,作者等信息),它相当于为互联网上几千亿页网页做了一个索引,好比一本书的目录、标签一般。读者想看哪一个主题相关的章节,直接根据目录即可找到相关的页面。不必再从书的第一页,到最后一页一页一页的查找。

    搜索引擎的原理也是如此。用户要查找某个query,如在搜索框输入某个关键词:“结构之法”后,搜索引擎不会再次使用爬虫又一个一个去抓取每一个网页,从上到下扫描网页,看这个网页有没有出现这个关键词,而是会在它预先生成的倒排索引文件中查找和匹配包含这个关键词“结构之法”的所有网页。找到了之后,再按相关性度排序,最终把排序后的结果显示给用户。

    如下,既是一个倒排索引文件(不全),粗体部分表示的是某个关键词,及这个关键词的出现次数。我现在要你从这个大索引文件中提取出这些关键词,--Firelf--,-Winter-,.,007,007:天降杀机,02Chan..如何做到呢?一行一行的扫描整个索引文件么?当然不是,请读者自行思考。

    提示一下:通过查找#####便可判断某一行出现的词是不是关键词,但如果这样做的话,便要扫描整个索引文件的每一行,代价实在巨大。如何提高速度呢?对了,关键词后面的那个出现次数为我们问题的解决起到了很好的作用,因为...(再说下去,答案便出来了)。

--Firelf--(关键词) 8(出现次数)
20111116 2 TO011111600004603 240 O0 240 e2f6dc51c6f5231770cfd1ee8eaec376 85358 1#####TO011111600004604 240 O0 240 219e546753ab8de6e6bd6abbfbcad176 84539 1#####
20111115 5 TO011111500008241 240 O0 240 36c7627ea4eb9e6b31af9217435b55da 131221 1#####TO011111500007324 240 O0 240 201565a65f92bf1c33c69606f074c974 113059 1#####TO011111500005758 240 O0 240 d3bb710c0af1e29fdc7661ccc9623b68 103437 1#####TO011111500005756 240 O0 240 849aaa451ed929d50a7cd197ff42c7f0 103436 1#####TO011111500003426 240 O0 240 c67809f02d310b8fca23ec0dd27fd211 83039 1#####
20111114 1 TO011111400004894 240 O0 240 6d6a715558a5e67b815724af6050bbc1 123028 1#####
20111112 1 TO011111200001071 240 O0 240 f11bbb2063fac37b08a87175f80c1e47 84124 1#####
20111111 5 TO011111100003099 240 O0 240 cd2a41c4011cfec6aa237ed8f74234a6 94256 1#####TO011111100003741 240 O0 240 ad265e9273dde022ae7cc636b3adfd72 94032 1#####TO011111100002535 240 O0 240 710c92f6d1dc3392b1179b6b129700a4 90851 1#####TO011111100002473 240 O0 240 487d3280bf014d99b56c3cedd11223ff 84518 1#####TO011111100002086 240 O0 240 4363b608e19c08fca26c8c4252355a77 83051 1#####
20111110 9 TO011111000011295 0 O0 240 99778567b5c10ace0097195e0534c49b 160408 1#####TO011111000010700 240 O0 240 23037e2c9b694ae6fcd1d9b37cf8fa92 155151 1#####TO011111000010701 240 O0 240 9116d2386b06a79b61324d777e4ba4a6 155151 1#####TO011111000010699 0 O0 240 4042d3edb3f012ca289b42990e1163bb 153013 1#####TO011111000008210 240 O0 240 5fd4f3b03663f758ad8c362b056980fe 141723 1#####TO011111000008209 240 O0 240 482fa3d893ded7d734d4697a5944184c 141722 1#####TO011111000008203 0 O0 240 cbf0a7880b037c4f66e17b603bbeb4c9 140007 1#####TO011111000006911 0 O0 240 a812bb7faea6fb36936ecdb20839e43c 113028 1#####TO011111000005182 0 O0 240 0c01b893d8b636c4addd05443b8d9b3f 104029 1#####
20111102 4 TO011110200007030 48 O0 240 c84be7f5dc7d58aacd6923a87cd33e20 140003 1#####TO011110200003672 48 O0 240 4776396a57e0347c9c8cb6bc4cec3111 100008 1#####TO011110200000823 48 O0 240 bbbae264a8ea1c9c1405a267d64cdddd 93031 1#####TO011110200000827 48 O0 240 a7aab6523280ef652c8bc1d143c44858 80021 1#####
20111101 2 TO011110100010412 48 O0 240 f0ed2f08235b2dcd77cc7a20e45ebd1b 163759 1#####TO011110100010411 48 O0 240 e6c572ecb9ca300f0f69cbb8fd388a12 163758 1#####
-11(关键词) 1(出现次数)
20111115 3 PU011111500017163 156 U0 156 e9cc79096791d0325457ada45479c574 204455 1#####PU011111500017162 156 U0 156 e9cc79096791d0325457ada45479c574 204454 1#####PU011111500017161 156 U0 156 e9cc79096791d0325457ada45479c574 204452 1#####
-Winter-(关键词) 1(出现次数)
20111109 2 PU011110900013663 120 U0 156 6be088cc820436aa637f5be6cfee0309 205723 1#####PU011110900008419 120 U0 156 6be088cc820436aa637f5be6cfee0309 122538 1#####
.(关键词) 14(出现次数)
20111116 1 TH011111600017185 317 H0 317 ec8485e3c1eb234edbd06b049b7a167a 143222 1#####
20111115 1 TH011111500005035 317 H0 317 c6db57636d17284704c9ce3bf377c91d 93353 1#####
20111114 2 TH011111400025995 317 H0 317 eb142b74e9d50755f9eaa9ae190a23f8 224200 1#####TH011111400024634 317 H0 317 923c7dc4d5643bc1e37bb94349704042 183116 1#####
20111113 2 TH011111300002493 317 H0 317 25b70ed531d216410b1b3352c8685583 162256 1#####TH011111300001507 317 H0 317 6c2f90b049ca859fa0be580bf8efb7e3 114656 1#####
20111110 1 TH011111000006082 0 H0 317 f6269a29d6e6d4209506f7a24c2e04cc 112537 1#####
20111108 1 TH011110800008740 274 H0 317 adea63908a65a0eed87a8e3cace69cf6 151951 1#####
20111107 1 TH011110800008493 274 H0 317 a4f480042169709aa7646f06842d9dc4 175644 1#####
20111104 2 TH011110800008495 274 H0 317 9f51b969f50c48e8223a1dd7ed2eaa15 223600 1#####TH011110800008496 274 H0 317 85fb5f98413de8806d67d8293fc190e9 92700 1#####
20111102 1 TH011110800008497 274 H0 317 8ae6ff54d5cf8a32a9ada14a0889173e 175400 1#####
20111101 1 TH011110800008498 274 H0 317 45234e0438f68e613b9376a12e454918 145000 1#####
20111031 3 TH011110800008499 274 H0 317 9216c116405317fd0465679696e378e6 165400 1#####TH011110800008500 274 H0 317 5c16e1a7cdef3c7021b0cd3d612a5981 143200 1#####TH011110800008501 274 H0 317 7162763b4a08c00b283a348ebbc75512 83700 1#####
20111028 1 TH011110800008502 274 H0 317 554fc8284454da98c91cc7ad8cf3c7b1 171000 1#####
20111024 1 TH011110800008503 274 H0 317 e242db640dd18b198d28acf00347eaca 85800 1#####
20111022 1 TH011110800008504 274 H0 317 9190867388f627e01ad4035e036e8b61 105200 1#####
007(关键词) 1(出现次数)
20111127 1 TB111112700002087 369 B1 172 809439b6900122369318fa3ae1e43e78 43100 1#####
007:天降杀机(关键词) 2(出现次数)
20111127 1 TB111112700000280 389 B1 2 724c5d3cca8e46a2a2a25d9a81fe5268 91342 1#####
20111126 1 TB111112600006933 282 B1 282 0384aaa4a0900912a845f1bc5c905e89 142910 1#####
.......

    而后,你自会发现,大部分的工作中要用到的算法其实很简单,没你想的那般复杂。学算法,无它,多思考而已。


后记

    编程是个动手活,是细活儿,算法是个脑力活。编程就像大军打仗中那一个个冲在最前面的小兵,而算法则是调度官,是将领,指点江山,挥斥方遒,但若没有那样一群小兵,则再强大的调度官也无法征服任何一座山峰,更不用说奔腾至最高最远处。


Tags:
分享至:
最新图文资讯
1 2 3 4 5 6
验证码:点击我更换图片 理智评论文明上网,拒绝恶意谩骂 用户名:
关于我们 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 发展历史