OS X 的terminal输出信息是utf-8编码的,
但是javac默认输出GBK,会导致乱码。
可以用javac -J-Dfile.encoding=UTF-8
来使其输出utf-8编码的信息。
解决方案:
1
|
|
I never quit, I never forgot my dreams.
OS X 的terminal输出信息是utf-8编码的,
但是javac默认输出GBK,会导致乱码。
可以用javac -J-Dfile.encoding=UTF-8
来使其输出utf-8编码的信息。
解决方案:
1
|
|
文件是中文路径的话,使用build system不能正常工作。
解决方法:
在OS X上,
1
|
|
在文件末尾添加两行代码,
1 2 |
|
这篇东西其实是当时为了找实习而复习排序弄的,面试官无聊就喜欢问你个排序,如果你连插入排序跟选择排序都分不清楚的话还是别去找虐了。
大致按算法难度、类型从上到下排。
算法描述都按升序排序,复杂度都指平均复杂度。
冒泡排序
模拟气泡浮上来的过程,n-1趟float,时间复杂度O( n2 )
选择排序,一般指简单选择排序
每次在无序区中选择出最大的元素,然后放到有序区跟无序区间,n-1趟,时间复杂度O( n2 )
插入排序,一般指直接插入排序,还有折半插入排序、2-路插入排序、表插入排序等
本质:元素插入到有序列。
左边有序区,右边无序区(待排),每次将无序区最左边的元素插入到有序区中合适的位置(故涉及到元素的右移),n-1次,时间复杂度O( n2 )
希尔排序,对直接插入排序的改进
简单来说,就是取不同步长,进行多次插入排序,最后步长为1,就是以此直接插入排序。重点在于步长的选择,原始版本步长为n/( 2i ),最坏复杂度O( n2 )。现在最好的步长可以达到O( n(logn)2 ),仅次于O(nlogn)的排序。
当刚开始元素很无序的时候,步长最大,所以插入排序的元素个数很少,速度很快;当元素基本有序了,步长很小,插入排序对于有序的序列效率很高。
基数排序
这篇文章的唯一一个非比较型排序算法。基数(Radix),即数的进制。之所以能够不进行比较,是因为它按数位将数分配到Radix个桶中,再顺序进行收集。
有LSD(Least significant digital)、MSD(Most significant digital)两种方式。需要进行k(数据中最大位数)趟,每趟分配要O(n),收集要O(radix),所以总复杂度O(k(n+radix))。
归并排序,一般指2-路归并排序,还有非递归归并排序、自然归并排序等。
本质:分治,有序列合并。
二分需要O(logn),合并需要O(n),总时间复杂度O(nlogn)。需要O(n)的额外空间,用于存放合并有序列的临时结果。
快速排序
本质:分治,Patition。
难点在于Patition,要做到O(n)的时间复杂度。简单来说,就是选最左边的作为pivot,并维护值,然后两个指针,从右往左扫,从左往右扫,遇到不合适的,则换到另一边。直到两个指针相遇。
总平均时间复杂度O(nlogn)。
堆排序
本质:堆(分治)
升序排列的话需要借助大顶堆,涉及max_heapify、sift_down两个子操作。其中sift_down类似直接插入排序中的数组右移。
其实说白了就是二叉堆上的插入排序。
冒泡、选择、插入,都可以认为是将元素划分为有序区、无序区,都要n-1趟处理(无序区拓展到有序区),时间复杂度都是O( n2 )。
希尔,实现起来很简单,采用最佳步长的话,复杂度可以达到O( n(logn)2 ),仅次于O(nlogn)的排序。而且插入排序在元素基本有序的情况下时间复杂度接近O(n)。在一些情况下还是很有优势的。
基数,非比较型排序算法,类似的还有桶排序等。在数据有一定限制(比如都在0~1000间),数据量很大(比较型算法最快也要O(nlogn))的情况下,可以考虑非比较型算法,可以O(n)完成。
归并、快速、堆排,都应用了分治思想,平均复杂度都是O(nlogn)。这也是基于比较的排序算法的极限了。
我希望用最简洁的代码实现算法。
因为面试一般不让写伪代码,而且是在纸上写,所以我就不用宏定义写得标准一点了。
Ps. 我原来写swap是这样写,inline int swap(int &x, int &y) { x^=y; y^=x; x^=y; }
,结果被坑了,why?试想x、y地址一样的话…
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 |
|
Not Finished yet
选了个人工智能的选修,教的是prolog(为啥不教lisp..)
prolog好老了,看了下介绍,貌似是种描述型语言,不带流程控制,依靠数据间的关系(逻辑),自动进行推理(所谓智能)。
只有三种语句,事实、规则、问题(目标)。 语句都要用点(.)结束。
基本就是离散数学里的数理逻辑部分那个意思,前提、产生式、结论。
Prolog语言是一种以一阶谓词为基础的逻辑性语言(Programming in logic)。
从命题逻辑,到谓词逻辑(加入谓词、量词)形成一阶逻辑系统。回想了下,数理逻辑好像很厉害的样子,不过学完了也记不得多少理论的东西了…
格式:P. (P表示一个谓词公式,即<谓词名>(<项表>)) 含义:无条件成立,恒为真 eg. like(monkey, banana)
格式:P :- P1, P2, …, Pn. (:- 表示 蕴含,即->,,表示 合取/与,及) 含义:若P1, …,Pn均为真,P为真
格式:Q1,Q2,…Qm. 含义:待回答的问题,即Q1,…Qm同时为真吗?
Ps.由于课没去过几次,今天看ppt发现课上讲的是Turbo Prolog(呵呵..我说咋差这么大呢),Wiki上说
Visual Prolog, formerly known as PDC Prolog and Turbo Prolog, is a strongly typed object-oriented dialect of Prolog, which is very different from standard Prolog. As Turbo Prolog it was marketed by Borland, but it is now developed and marketed by the Danish firm PDC (Prolog Development Center) that originally produced it.
Prolog好几种方言啊,咱还是用GNU吧(找到个for OS X的IDE)。
你懂么? 没什么好愧疚的,你只是在为自己战斗而已。 总会受伤。 你会继续前进, 因为你是在为自己战斗。 唯心主义, 你只相信你所感受到的。 所以你的心情能决定一切。 这种人是能无敌, 还是走向毁灭, 一念之间而已。 你真是个奇葩。 哦,这我已经习惯了。 没事, 你只要学会控制你的情绪就可以了。 而关键在于, 你要放下压力。 压力源于何处? 绝对不是来自本身,而是别人。 所以你应该放下你所承担的, 别人要求的,或是自己认为的。 没有压力,没有畏惧,你便无敌。 也许这是对的。 你只需在心中默念, 输也是我, 赢也是我, 我有什么好怕的。 我是我, 里外保持一致的我, 各种维度一致的我。 人应当这样纯粹。 . . . 你不懂我在说什么? 其实我也不懂。。。
今天MSTC的人突然说要采访往届参赛选手,囧,都过去快一年了,回忆下。。
2012编程之美是MSRA举办的,分为初赛跟决赛。 初赛比的是AI对战,北航的MSTC做的海战游戏并提供了3种不同语言的SDK,海选,网上提交代码。 决赛取64名,地点在北京海淀的微软大厦,比的是工程类题目,解决问题,Topic是“大数据可视化”,形式是结对编程,2天时间。当时是3个题目任选,我选的是“字云”。决赛没比好,时间不够,没入围10强。
要说比赛让我收获了什么:
。。。就这样吧,最后放上一张图,在那个什么Sky Garden拍的,话说微软的楼确实不错。。
主要是根据前辈的一篇博文,谁说Vim不是IDE?(三)写的,自己实践整理的一个记录。
下一步计划是消化这两篇:
先是熟悉ctags,然后把vim搞成IDE,完善自己的.vimrc。
通过管理runtimepath
来简化插件安装、运行时的文件,使其能位于自己自定义目录(默认为 bundle)下。
项目位于github
1 2 3 |
|
1
|
|
用于在一个给定目录下快速定位文件,Go To File的功能。
1
|
|
1
|
|
执行 :UseVimball ~/.vim/bundle/command-t
1 2 3 |
|
一个增强的窗口状态栏。
1 2 |
|
安装一些 vim-powerline patched fonts,我用的是Menlo,然后安装到系统
1 2 3 4 5 6 7 |
|
这次主要是一些跟窗口有关的操作。
:split - 水平分,可以简写成 sp
:vsplit - 垂直分,可简写成 vs
:new+{name} - 水平新建窗口,name为文件名
:vnew+{name} - 垂直
ctil+w {h|j|k|l} 上下左右切换窗口
:diffsplit {filename} - 对{filename}开一个新窗口,并比较。同vimdiff命令。
:diffpatch {patchfile} - 给当前buffer打上{patchfile}补丁后显示。
:diffthis - 使当前窗口加入diff。
其实这些话是前段时间写的,但是…我有拖延症嘛…
就是这样 觉得什么都能做 却什么都不做 其实事实上你不做你怎么知道自己能做 不做是因为没有激情 没有激情是因为不知道自己到底想要什么 觉得自己什么都能做,而做什么都好像没有意义 哎 我是如此地了解自己,又如此地不了解自己
NUxtZjZLNjQ1b2lSNUxpTjU0aXg1TDJnNzd5TTVMbWY2SzY0NW9pUjVZK3E1cGl2NWErQzVhK2U0NENDQ3VhVm1lYUlrZSs4ak9hQWp1UzVpT1M0amVhRHMrUzlvT09BZ2c9PQ==