0%

在计算机科学中,分治法是一种很重要的算法。
字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。
这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)。

算法基本思想 理念

分治法的设计思想是:将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。

适用的情况:

  1. 该问题的规模缩小到一定的程度就可以容易地解决
  2. 该问题可以分解为若干个规模较小的相同问题。
  3. 利用该问题分解出的子问题的解可以合并为该问题的解;
  4. 该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子子问题。

第一条特征是绝大多数问题都可以满足的,因为问题的计算复杂性一般是随着问题规模的增加而增加;

第二条特征是应用分治法的前提它也是大多数问题可以满足的,此特征反映了递归思想的应用;、

第三条特征是关键,能否利用分治法完全取决于问题是否具有第三条特征,如果具备了第一条和第二条特征,而不具备第三条特征,则可以考虑用贪心法或动态规划法。

第四条特征涉及到分治法的效率,如果各子问题是不独立的则分治法要做许多不必要的工作,重复地解公共的子问题,此时虽然可用分治法,但一般用动态规划法较好。

阅读全文 »

解决最优化问题的算法一般包含一系列的步骤,每一步都有若干的选择。对于很多最优化问题,只需要采用简单的贪心算法就可以解决,而不需要采用动态规划方法。贪心算法使所做的局部选择看起来都是当前最佳的,通过局部的最优化选择来产生全局最优解。本文将介绍贪心算法的理论基础和一些简单应用。

贪心算法 能解决的问题,使用动态规划算法也能解决。但是使用贪心算法会更简单
贪心算法 不能解决的问题,可以使用动态规划算法解决。

算法基本思想 理念

分治法的设计思想是:将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。

适用的情况:

  1. 该问题的规模缩小到一定的程度就可以容易地解决
  2. 该问题可以分解为若干个规模较小的相同问题。
  3. 利用该问题分解出的子问题的解可以合并为该问题的解;
  4. 该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子子问题。

第一条特征是绝大多数问题都可以满足的,因为问题的计算复杂性一般是随着问题规模的增加而增加;

第二条特征是应用分治法的前提它也是大多数问题可以满足的,此特征反映了递归思想的应用;、

第三条特征是关键,能否利用分治法完全取决于问题是否具有第三条特征,如果具备了第一条和第二条特征,而不具备第三条特征,则可以考虑用贪心法或动态规划法。

第四条特征涉及到分治法的效率,如果各子问题是不独立的则分治法要做许多不必要的工作,重复地解公共的子问题,此时虽然可用分治法,但一般用动态规划法较好。

阅读全文 »

遗传算法

1. 什么是遗传算法

是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法。

是一类借鉴生物界的进化规律(适者生存,优胜劣汰遗传机制)演化而来的随机化搜索方法。

阅读全文 »

引子

CentOS7.x单用户模式更改密码

CentOS7.x单用户模式与之前版本略有不同 老版本参考

1 启动系统,并在GRUB2启动屏显时,按下e键进入编辑模式。

2 进入下一个界面后,用方向键找到”linux16”所在的行,在行末加入内容:init=/bin/sh ,然后按”ctrl + x” 重启。

阅读全文 »

python 代码规范和命名规范

Python代码规范

一、简明概述

1、编码

如无特殊情况, 文件一律使用 UTF-8 编码
如无特殊情况, 文件头部必须加入#—coding:utf-8—标识

2、代码格式

2.1、缩进

统一使用 4 个空格进行缩进

2.2、行宽

每行代码尽量不超过 80 个字符(在特殊情况下可以略微超过 80 ,但最长不得超过 120)
理由:
这在查看 side-by-side 的 diff 时很有帮助
方便在控制台下查看代码
太长可能是设计有缺陷

2.3、引号

简单说,自然语言使用双引号,机器标示使用单引号,因此 代码里 多数应该使用 单引号
自然语言 使用双引号 “…”
例如错误信息;很多情况还是 unicode,使用u”你好世界”
机器标识 使用单引号 ‘…’
例如 dict 里的 key
正则表达式 使用原生的双引号 r”…”
文档字符串 (docstring) 使用三个双引号 “””……”””

阅读全文 »

python 字符串处理

1. 切片操作

Python访问自字符串可以| 进行切片操作 .|下面举一个栗子.

1
2
3
4
5
6
7
8
>>> str1='string'
>>> str1[1:2]
't'

>>> str1='字符串好'
>>> str[:3]
>>> str1[:3]
'字符串'

2. 字符串格式化

1
2
3
>>> str1='字符串'
>>> print('我是%s' %str1)
我是字符串
格式 说明
%c 格式化字符及其ASCII码
%s 格式化字符串
%d 格式化整数
%u 格式化无符号整型
%o 格式化无符号八进制数
%x 格式化无符号十六进制数
%X 格式化无符号十六进制数(大写)
%f 格式化浮点数字,可指定小数点后的精度
%e 用科学计数法格式化浮点数
%E 作用同%e,用科学计数法格式化浮点数
%g %f和%e的简写
%G %f 和 %E 的简写
%p 用十六进制数格式化变量的地址
阅读全文 »

引子

1.规范目的:

  • (1.1)增强代码可维护性。代码的编写不是一次性就能写得很完美的,需要不断的修复bug,修改或增加功能,重新设计整体架构等。这时就需要进入代码中去做修改,如果没有良好的代码规范,时间久了自己阅读起来就很费力。
  • (1.2)提高团队开发效率。大多数项目的代码都不是由一个人编写的,其他成员也许会因为项目的交接需要接手管理你所编写的代码,如果没有良好的代码规范,他人便无法快速轻松的理解你的代码。
  • (1.3)提高个人编码效率。最开始可能会觉得被规范约束,后来反而会因为有规范而有依靠感,不必再为起什么名字而犹豫。

2.规范说明:

代码的规范不是绝对的,每个公司都会有自己的一套代码规范,每个新人刚进入都要最先学习代码规范,才能加入到团队的开发中来。

阅读全文 »

Sublimetext3 使用

一. 设置【Settings】

  • 依次单击菜单栏【Perferences】→【Settings】
  • 把右边的Setting-User中的内容全部删掉,
  • 将左边的Setting-Default里边的内容copy到右边User里,
  • 根据需要修改User的设置
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    // Settings in here override those in "Default/Preferences.sublime-settings",
    // and are overridden in turn by file type specific settings.
    {
    "update_check": false,//(不检查更新)
    "tab_size": 4,
    "translate_tabs_to_spaces": true,//(tab转空格)
    "draw_white_space": "all",//(显示空格,一般不要用,看这难受)
    "trim_trailing_white_space_on_save": true, //(保存的时候去掉行尾的空格)
    "highlight_line":true,//(突出显示当前行)
    "font_size":15,//(根据个人适应程度来调节吧)
    }
  • 设置格式化快捷键

    关于sublimeText3 设置格式化代码快捷键的问题
    sublime中自建的有格式化按钮:
    Edit -> Line -> Reindent
    只是sublime并没有给他赋予快捷键,所以只需加上快捷键即可
    Preference -> Key Bindings -user
    打开用户快捷键绑定设置添加(比如添加:ctrl + alt + l)

注:这里为了和webstorm保持一致就把格式化代码的快捷键设置成ctrl+alt+l

1
{ "keys": ["ctrl+alt+l"], "command": "reindent" },  //注意不要忘记加逗号

阅读全文 »

想了解下pip工作原理
已经python的包的引入逻辑

包结构

1

PKG-INFO

1
2
3
4
5
6
7
8
9
10
Metadata-Version: 1.0
Name: txrestapi
Version: 0.2
Summary: Easing the creation of REST API services in Python
Home-page: http://github.com/iancmcc/txrestapi
Author: Ian McCracken
Author-email: [email protected]
License: MIT
Description: UNKNOWN
Platform: UNKNOWN

python2

有 input 和 raw_input 两个函数

阅读全文 »

引子

之前写的一些东西时间有点久了,想升级一下Django版本

升级Django

requestments.txt

1
2
3
4
5
6
7
8
Django>=2.0,<3.0
mysqlclient
psycopg2
djangorestframework
markdown
django-filter
django-allauth
django-bootstrap3

执行命令

1
pip install -r requestments.txt

尝试运行 runserver

1
./manage.py runserver localhost:5000

发现以下问题

阅读全文 »