大二入门动态规划时,最先学得就是 LCS
, LIS
和各种背包问题,后来接触二维DP和各种无厘头DP(数位DP啊,插头DP啊,状压DP啊,树状DP啊等等),以我这种智商水平,听听名字就好了。最近的算法课讲到了 DP
专题,找出了之前看的 背包九讲
看了看,放出来,纪念一发当年的岁月吧。
Ubuntu中配置SS多用户模式并限制每个用户的流量
1、更新软件并安装vim
1 | sudo apt-get update |
2、更改 SSH 默认端口
1 | sudo vim /etc/ssh/sshd_config |
这里将ssh端口改成了22222,如下图(PS:不要问我为啥强行改22号端口,就是任性,额,其实有点其他用途,青大校友表示当年我就是靠这个强行免费使用校园网):
3、安装shadowsocks-python版本
LeetCode11-20
11、盛最多水的容器
双指针,算法中一个很重要的技巧,之前的三数求和就用到了双指针的技巧。
我们在由线段长度构成的数组中使用两个指针,一个放在开始,一个置于末尾。 此外,我们会使用变量 maxArea
来持续存储到目前为止所获得的最大面积。 在每一步中,我们会找出指针所指向的两条线段形成的区域,更新 maxArea
,并将指向较短线段的指针向较长线段那端移动一步。
1 | class Solution { |
colab免费云GPU使用教程
谷歌coLab免费云GPU搭建教程
网上教程的链接
知乎 https://zhuanlan.zhihu.com/p/34436045
cnblogs http://www.cnblogs.com/kid551/p/8544908.html
1、注意第11步的代码替换成下列的代码:
1 | !apt-get install -y -qq software-properties-common software-properties-common module-init-tools |
网上很多教程第一句中使用的是python-software-properties
包,但是colab
提供的操作系统是最新的18.04 ubuntu
,使用该包会出错,显示E: Package 'python-software-properties' has no installation candidate
。所以改成使用software-properties-common
。具体的,software-properties-common
包是 python-software-properties
的备用包,当系统版本在12.04
一下,使用 python-software-properties
,当系统版本在12.10
以上,使用software-properties-common
。
2、将google云盘当成一个盘符挂载到colab上
使用 google-drive-ocamlfuse
将云盘文件夹和远程的VM链接起来,方便文件共享操作。
1 | !mkdir -p drive |
路径:\content\drive\...
,后期文件操作啥的就可以与云盘交互了。
3、取消挂载
1 | fusermount -u ***pathName*** |
注意,colab
一次只能免费使用最多12
小时,过期会自动释放掉之前配置的虚拟环境,那么就需要每次使用时都执行上述操作,可以将其保存成一个文件,每次使用执行一下即可。
Ubuntu16.04安装Tensorflow-GPU
一、Ubuntu安装及TensorFlow-Gpu安装
1、UEFI启动的ubuntu要将 \boot
分区设置成 EFI
分区,这样会在bios
中出现启动项。注意EFI模式只识别FAT32的U盘启动盘。
2、安装 搜狗输入法
1 | 下载 sogou.deb |
3、设置息屏时间
4、注意一定要安装好对应的显卡版本,在 设置 >> 软件和更新 >> 附加驱动
里进行选择对应的显卡驱动nvidia
;命令 nvidia-smi
查看GPU驱动信息。
5、安装更新 sudo apt-get update
sudo apt-get install vim
6、安装 及卸载Anaconda
官网下载对应的安装包,执行命令 bash Anaconda2-4.4.0-Linux-x86_64.sh
即可进行安装,期间会选择安装路径啥的,默认即可。 安装完成后,重启 命令窗口
,执行 python 命令即可看到已经安装成功。如果不成功,执行 source ~/.bashrc
命令,使 bashrc
生效。
卸载的话:
- 删除整个anaconda的目录
rm -rf anaconda*
- 将
~/.bashrc
文件中的关于 anaconda的行注释掉 - 生效
source ~/.bashrc
7、命令 anaconda-navigator
进入图形界面的操作。其实主要还是命令行操作,下面是 conda
的常用命令。注意 conda
是python的环境管理工具,兼具包管理;pip
只是python的包管理工具而已。
算法课第一次作业
一、Divide and Conquer
You are interested in analyzing some hard-to-obtain data from two separate databases. Each database contains n numerical values, so there are 2n values total and you may assume that no two values are the same. You’d like to determine the median of this set of 2n values, which we will define here to be the n-th smallest value.
However, the only way you can access these values is through queries to the databases. In a single query, you can specify a value k to one of the two databases, and the chosen database will return the kth smallest value that it contains. Since queries are expensive, you would like to compute the median using as few queries as possible.
Give an algorithm that finds the median value using at most O(logn) queries.
1、problem-solving ideas and pseudo-code
首先将现实问题转化一下,变成计算机算法问题,即 找2个有序数组的并集的中位数 ,LeetCode 第四题。
(1)problem-solving ideas
求中位数需要根据数组长度是奇数还是偶数分别讨论,奇数长度时中位数为最中间的一个数,偶数长度时中位数为最中间的两个数的平均值,为了方便,可以实现一个比题目更一般化的函数,求A和B的第k小数的函数,那么中位数的问题很容易解决。
求一个有序数组的第k个数只需要O(1)的复杂度,现在有两个数组,显然花费额外空间以O(n)时间归并然后O(1)寻找不满足题目要求。既然要求log时间复杂度,一般需要使用到二分思想。
分别考虑A和B的第k/2个元素:
- 如果它们相等,则第k个数为其中的任意一个
- 如果A中的比较大,则B中前k/2个元素都不可能是第k个数了,因为这个数至少应该为A的第k/2个数,把B的前k/2去掉,然后重新寻找。
- 如果B中的比较大,则把A的前k/2个数去掉,重新寻找。
直到A和B中某个变为空时或者寻找第1个数时可以停止递归,直接找到结果。
注意,上面的k/2只是理想的简单情况,实际上A和B的长度可能不够k/2,或者k为奇数等,但这些不是主要问题,可以让A取第k/2个数字,然后A不够长,则取A的最后一个数字,然后B取剩下长度对应的那个数字,具体参考代码。
LeetCode1-10
1、两数之和
1 | class Solution { |
2、两数相加
1 | /** |
GitHub Pages+Hexo+Next博客搭建记录
1、前言
大二的时候看见学长搭建的个人博客,感觉好高大上的样子,想着自己啥时候不再是哪个只会喊:哇、牛批、666、厉害厉害的傻逼选手,然后浪啊浪,突然有一天,CSP考试上考到了一个Markdown转HTML的大模拟题:现场狂写2小时,黑箱测试最后只得20分,从此心理对MD留下了挥之不去的阴影,然后就没有了然后,此事不来了了之。大二的时候在CSDN上写过,但是感觉CSDN的广告是越来也严重了,上面,下面,左面,右面等等四面八方全是各种广告,于是乎,时隔三年,趁着中秋没钱出去浪啊,舍友也回家了,丧尸宿舍也搭建一个简单的个人博客吧,此文简单记录一下搭建过程。
本文使用的是 Github pages + Hexo + Next 主题。