Notes for Lecture 8
Exhaustive Search and Backtracking
Exhaustive Search -穷举搜索穷举搜索法是对可能是解的众多候选解按某种顺序进行逐一枚举和检验,并从众找出那些符合要求的候选解作为问题的解。
递归格式
SampleSolution自相似 : 对应digits下的每个数都是进制数码与上一级digits的各结果数拼接的结果 (就怎么suo呢,见下例digits=3的结果,是不是0,1与digits=2的结果全连接的结果)
123456789101112131415161718 //Lecture8 Exhaustive Search 2void binaryAllSearchHelper (int digits,string str) { if (digits==0) { cout << str << endl; } else { binaryAllSearchHelper(digits-1,str+& ...
Assign1 LifeGame
简介《生命游戏》是英国数学家J.H.康威于1970年构思的模拟,由马丁·加德纳在他的《科学美国人》专栏中推广。该游戏使用二维细胞网格对细菌的生命周期进行模型。根据最初的模式,游戏使用一套简单的规则模拟后代细胞的出生和死亡。在此任务中,您将实现 J.H.康威 模拟的简化版本和观看细菌随着时间而增长的基本用户界面。
模拟从网格上的细胞初始模式开始,并根据以下规则计算连续几代细胞:
一个零或一个邻居的位置将在下一代空。如果一个细胞在那里,它就会死亡。
有两个邻居的位置是稳定的。如果它有一个细胞,它仍然包含一个细胞。如果是空的,还是空的。
一个有三个邻居的位置将包含下一代的细胞。如果它以前无人居住,一个新的细胞诞生了。如果它目前包含一个细胞,细胞仍然存在。
在下一代中,一个有四个或更多邻居的位置将空无一人。如果那个地方有一个牢房,它就会因人满为患而死亡。
功能模块用户交互模块您的生命游戏计划应首先提示用户提供文件名称,并使用该文件的内容来设置细菌群落网格的初始状态。然后,它应该询问模拟是否应该环绕网格。然后,该计划将允许用户通过几代人的增长推进殖民地。用户可以键入 t 以”勾选”一代的细菌 ...
Git Learning End Version
Git Learning Notes from 廖老大!
简介Git是目前世界上最先进的分布式版本控制系统。
入门推荐一个个人认为讲得很不错链接吧该讲师以类比于Tesla汽车公司的方式,给大家解释git的使用方法,以及GitHub的平台逻辑https://www.bilibili.com/video/BV1wW41167wR?t=478
诞生
BitKeepeGit –基于C
集中式 与 分布式
集中式:需先从中央服务器获得最新版本,改后交由服务器整合。—-联网工作
分布式:每个人的电脑上都是一个完整的版本库,各个电脑可相互推送修改内容。—-不必联网
所有的版本控制系统,其实只能跟踪文本文件的改动,比如TXT文件,而图片、视频这些二进制文件,虽然也能由版本控制系统管理,但没法跟踪文件的详细变化,Microsoft的Word格式是二进制格式
Git安装
官网下载https://git-scm.com/downloads已安装可通过Git本身获得最新的开发版本git clone https://github.com/git/git
设置 -指定仓库的用户名和Email地址git con ...
Notes for Lecture 7
Notes for Lecture 7
Recursion and Fractals
Fractals 分形定义
分形是一种具有自相似的现象,在分形中,每一个组成部分都在特征上与整体相似,仅仅是规模更小而已
特殊分形实例
科赫雪花三角形
从一个正三角形开始,把每条边分成三等份,然后以各边的中间长度为底边。分别向外作正三角形,再把“底边”线段抹掉,反复进行这一过程,就会得到一个“雪花”样子的曲线。这曲线叫做科赫曲线或雪花曲线。
谢尔宾斯基三角形
1.取一个实心的三角形。(多数使用等边三角形)2.沿三边中点的连线,将它分成四个小三角形。3.去掉中间的那一个小三角形。4.对其余三个实心小三角形重复1
Mandelbrot集合
编码123#include"gwindow.h
Canter set 康托尔集三分康托集的构造过程是:
把线段平均分为三段,去掉中间的 1/3 部分段,而只剩下两边部分段
再将剩下的两边部分段各自平均分为三段,同样去掉中间的区间段,这时剩下四段部分段
重复删除每个小段中间的 1/3 段。如此不断的分割下去, 最后剩下的各个小段 ...
Iterator
迭代器浅谈
引入只有少数容器同时支持下标索引,所有标准库类型容器均支持迭代器string类型虽然不是容器,但是拥有与容器相似方法,因此也支持迭代器
定义迭代器可与其指向的容器中的元素建立关联,从而通过解引用来间接访问对应元素
迭代器类型vector为例vector::iterator 可读写访问迭代器指向元素vector::const_iterator 常量类型的迭代器,只能访问迭代器指向元素不可修改
使用所有包含迭代器的容器类型均包含对应迭代器方法
begin() 返回指向容器第一个元素的迭代器
end() 返回指向容器最后一个元素下一个位置的的迭代器 尾(后)迭代器
根据容器类型确定返回迭代器的类型,若为常量容器,则返回常量迭代器如果容器为空 begin()与end()均返回尾迭代器
cbegin() 返回指向容器第一个元素的迭代器
cend() 返回指向容器最后一个元素下一个位置的的迭代器 尾迭代器
返回指定类型的const_iterator的迭代器
迭代器运算符
运算符
结果
*itera
解引用 返回itera所指元素的引用
itera-> ...
Vector
Vector浅谈
定义存储相同类型对象的集合,称为容器,长度可变的序列容器vector是一个类模板不是类型,指定类型参数后可生成对应类型
初始化vector常用构造函数
vector();
创建一个没有任何元素的空向量
vector(vector&& _Right);
创建一个向量,并使用向量_Right初始化该向量
vector(size_type Count);
创建一个大小为Count的向量vect
vector(size_type Count,const Type& Val);
创建一个大小为Count的向量,该向量中所有的元素都初始化为Val
template vector(InputIterator _first,InputIterator _last);
创建一个向量,并以迭代器_first和_last之间的元素初始化该向量
拷贝初始化 赋值运算初始化
直接初始化 构造函数指定参数 ()或{}
默认初始化
不指定长度,不可通过向量索引添加元素
列表初始化
{…}使用列表中元素为向量元素初始化
{}中元素类 ...
Notes for Lecture 6
Notes for Lecture 6
Recursion
定义递归是指一种算法在某种程度上以较小的形式引用它自己
引入
递归程序设计自相似
练习阶乘
12345678910int factorial(int n) { if (n == 1 || n == 0) { return 1; } else { return n * factorial(n - 1); }}
回文判断
1234567891011121314151617bool plalindrome(string n) { if (n.length() <= 0) { return true; }else{ char start = n[0]; char end = n[n.length() - 1]; string sub = n.substr(1, n.length() - 2); if (start != en ...
Notes for Lecture 5
Notes for Lecture 5
Sets and Maps;Big-Oh Notation
Sets
引入
非重复读入大文件中的所有单词
method:存储于向量中 每次输入遍历向量判重 不重存入
每次输入均需要遍历整个向量 耗时
定义
类型
Set
HashSet
操作
运算符(集合交 并 差)
遍历
Maps
定义a collection storing pairs
类型
Map
HashMap
操作
应用
tallying 计数
遍历
Compound/Nested Collections
Lotto tictetsBuddy list
算法分析和Big-Oh符号
Qt 入门
Qt 入门
简介:跨平台的c++开发库,主要用于GUI开发,也可用于CUI (纯C++开发)
GUI :Graphical User Interface
CUI :Command User Interface
KDE :KDE 是 K Desktop Environment 的缩写,中文译为“K桌面环境”
术语与名词Project项目,指为实现某个相对独立功能的程序代码合集,这些代码不单单是放在一块,而是有相互之间的关联性,并且有专门负责管理该项目的项目文件
Qt 使用 .pro 文件管理项目
VC++ 则使用 .vcproj 作为项目文件
集成开发环境通常都是依据项目文件(.pro/.vcproj)管理和构建项目。
Makefile规范化的生成脚本,生成器 make 可以依据规范的 Makefile文件 自动生成目标程序或库文件
Makefile 通常都有工具自动生成,如 qmake 工具
Debug 和 Release
均为二进制目标程序
Debug ,纠错调试 ,Debug 版本的程序是臃肿而不进行优化的调试过程中需要源代码和二进制目标程序之间一一对应的关系, 这 ...