为期五天的毕业实习,我们参观了位于溧水的宁溧城际铁路交通路地铁站TA08标段、苏州虎丘塔、上海青浦区金泽水库、上海石洞口无水处理厂、无锡雪浪山边坡治理工程、南京双子楼及南京眼。
使用tensorflow训练神经网络
tensorflow是一个采用数据流图(data flow graph)的机器学习平台,其特征在于用点和线来表示状态和计算过程。
coq学习笔记
因为没找到比较好的 Coq 中文学习资料,所以主要根据官方 doc和tutorial-nahas等国外的教程来学习。
这篇文章被 deprecated 掉了,详见 Software Foundation 做题的 Notes。
使用deap实现遗传算法
最近在做毕业论文,其中涉及到一项是检验某个为有限元程序优化参数的遗传算法的正确性。
deap是Python上的一个遗传算法库,主要封装了和遗传算法相关的生成population、select、mutant这些相关的操作。比较方便的是deap框架允许自定义个体类型、种群生成方法、评价函数等,所以灵活性比较高
Haskell学习笔记
Channel 9上有个非常好的介绍Haskell和函数式编程的视频,这个视频是根据Programming in Haskell这本书讲述的。Slides和Codes可以在http://www.cs.nott.ac.uk/~pszgmh/上下载,不过后面几章会和实际的课程内容有出入。此外Learn You a Haskell上的教程,以及Wikipedia上有关Haskell的词条也是非常有用的。
相对于其他的一些Haskell的教程,通过这本书/视频进行学习能够了解Haskell的好处以及设计原理
C++右值
C++11标准引入的是右值引用的概念来方便我们操作右值,但右值的概念是在之前的版本中就有的。在引入右值引用概念后,左右值也被分为左值(lvalue)、将亡值(xvalue)、纯右值(prvalue)。其中将亡值和左值合称为泛左值,将亡值和纯右值合称为右值。
- 左值可以形象理解为可以取到地址的值
比如字符串字面量能取到地址,是左值。 - 纯右值例如整型字面量或者求值结果相当于是字面值或者不具名的临时对象
- 将亡值包括类似
T && foo()函数返回的右值引用或由std::move强转来的右值引用。
将亡值属于泛左值,又属于右值。属于泛左值是由于将亡值作为右值引用是具名的,这和纯右值如字面量不一样,所以被视为左值。作为右值是由于将亡值具有可移动性。而将亡值之所以又具名又能移动,是因为它要死了。
这些概念的区分涉及到 Value categories,在这里会有简单讨论。
注意类似 T foo() 的函数返回值是纯右值。在使用右值和移动语义时容易产生下面的问题:
- 右值、右值引用之间有什么区别
- 重载决议中右值引用、左值引用、通用引用有什么区别
- 右值、(N)RVO之间的关系是什么
- 移动语义在哪些地方可以提高性能
诸如此类,在本文中详细讲解。
Leetcode解题报告
寒假没事情,在家里刷Leetcode。这里放的是LeetCode解题报告【更新中】,代码在GitHub上,有些被坑的题目会专门写一篇post。
必须先对Leetcode吐个槽,这复杂度卡的真是魔幻,同样的复杂度C++能过,Python就不能过,而且都是卡在最后两三个样例上(不会就最后两三个大数据吧?)
Leetcode上面有题解,不过有时候很奇怪他们算复杂度的时候会强行令某些操作,比如判断字符串是否相等(Problem 14),std::map查找元素(Problem 1)的复杂度为1,感觉这并不是很严谨的,后来在Google Codejam/Kickstart的官方题解上也看到类似的算法,只能说这是一种计算方式吧。
在刷Leetcode的时候,取得Accepted通常是容易的,但是如果能够翻翻Submissions里面速度靠前的答案,看看人家是怎么在同复杂度下进行常数优化也是很有必要的。
去除reimage repair恶意广告软件
今天发现自己的Chrome上超链接被篡改了,在点击这样的超链接时,会打开一个独立窗口并跳到某个广告页面然后窗口自动消失,并且扩展程序页面chrome://extensions打不开了。后来发现这是一个叫reimage repair plus的恶意广告软件导致的
Leetcode4 Median of Two Sorted Arrays
LeetCode第4题,求两个数组nums1和nums2的中位数,要求对数复杂度。这个思路很清晰,就是二分。一开始想的lower_bound比较一波,算一下偏移,然后两段去掉相同数目的元素,构成一个子问题。不过实现的时候被字符串常见的边界情况和上下中位数困住了,想了好久,后来发现其实自己想复杂了,这就是一个求第k个数的问题,直接二分答案就好了。
C++中编译器优化导致的一个问题
今天在MSVC2015上在用for遍历std::vector<T>时遇到一个Access Violation错误,关键代码如下
1 | for (auto i = v.size() - 1; i >= 0; i--) |