“人造太阳”计划

python-递归函数

蹲街弑〆低调 提交于 2020-03-15 23:20:32
#recursion_function.py #-*- coding:utf-8 -*- def recursion(x): if x == 1: return 1 return x * recursion(x - 1) f1 = recursion(1) f2 = recursion(2) f3 = recursion(3) f4 = recursion(4) print f1, f2, f3, f4 递归函数的优点是定义简单,逻辑清晰。理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰。 使用递归函数需要注意防止栈溢出。在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出。 解决递归调用栈溢出的方法是通过 尾递归 优化,事实上尾递归和循环的效果是一样的,所以,把循环看成是一种特殊的尾递归函数也是可以的。 尾递归是指,在函数返回的时候,调用自身本身,并且,return语句不能包含表达式。这样,编译器或者解释器就可以把尾递归做优化,使递归本身无论调用多少次,都只占用一个栈帧,不会出现栈溢出的情况。 上面的 fact(n) 函数由于 return n * fact(n - 1) 引入了乘法表达式,所以就不是尾递归了

acm的STL容器之Map篇

半腔热情 提交于 2020-03-12 11:49:52
1.对map的简单介绍  Map是STL的一个关联容器,它提供一对一(其中第一个称为关键字,每个关键字只能在map中出现一次,第二个称为该关键字的值)的数据处理能力。 这里说下map内部数据的组织,map内部自建一颗红黑树,这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的。 2.map功能介绍  map利用k-v,即Key - value。key 和 value可以声明成任意你需要的类型。 查找的复杂度 基本是Log (N),如果有1000个记录,最多查找10次,1,000,000个记录,最多查找20次。 map的常用操作: 快速插入Key -Value 记录。 快速删除记录 根据Key 修改value记录。 遍历所有记录。 3.map的声明   需要声明头文件,并使用命名空间std。 #include<iostream> #include<map> using namespace std;  声明一个map。根据个人命名规范习惯,推荐int-int类型的map叫 iimap ,如果是<int,string>类型的推荐叫 ismap 一半声明了map后,为了以后查询、遍历、删除等方便,我们顺便声明 iterator map<int,int> iimap;map<int,int>::iterator iter;   4.数据的插入、删除、数量、清空  先不写查询

学习深度学习--线性回归

大憨熊 提交于 2020-03-11 07:57:55
在之前已经了解到神经网络是由一个一个的神经元来组成的,接下来学习神经网络的基础---神经元,从最简单的线性回归开始学起。 1. 直观上来看线性回归解决什么样的问题呢? 用最经典的房价预测来看,首先考虑最简单的情况,假定现在只看房价和面积的大小的关系,通过历史的经验我们可能能够有看到这样一些样本点: 我们可以看到他们大概是呈一种正相关的关系,但是如果现在有一套新房,我们只知道他的面积,我怎么能够大概评估这个房子在什么价位呢?从最简单的角度来考虑,我们能不能找到一条直线来表达价格和面积之间的关系呢? 于是我们就有了一条直线来大概说明房价和面积之间是一种什么样的关系,这条直线用数学公式表达为:y_h = wx+b。但是在这个平面里面可以画无数条直线,哪一条直线是最好的呢?我们使用这条直线来预测房价,当然希望我在相同面积上面我预测的价格和实际的价格的差异越小越好,于是我们就有了优化的方向:Σ(h(x)-y)^2最小。 那怎么样去找到相关的参数,使得Σ(h(x)-y)^2,可以使用梯度下降法来实现。 什么是梯度下降呢? 梯度下降就好比下山,上帝把你随机的放在了一座山的任意一个位置,但是现在你要下山去要怎么走呢?第一是确定一个方向,我们在不知道整座山的全貌的时候,就只好基于我们当前的形式来判断,环顾四周,我走向那个下降最快的方向,这个方向就是梯度,我们可以用偏导数来描述这个方向

05-课堂笔记

半世苍凉 提交于 2020-03-10 05:32:32
复习 '''1.函数的参数:实参与形参 形参:定义函数()中出现的参数 实参:调用函数()中出现的参数 形参拿到实参的值,如果整体赋值(自己改变存放值的地址),实参不会改变,(可变类型)如果修改内部内容,实参会跟着变化 位置实参 - 只能对位置形参赋值 关键字实参 - 可以对所有(不包含可变长位置形参)形参赋值 位置形参 - 必须出现在最前,且必须传值 默认形参 - 出现在位置形参后*前,可以不用传参 可变长位置形参 - 接收所有位置形参、默认形参没有接收完的位置实参 有无默认值关键字形参 - 必须出现在所有位置形参之后,有默认值可以不用传参,没有默认值必须通过关键字实参传值 可变长关键字形参 - 接收所有有名字的关键字形参没有接收完的关键字实参 def fn(a, b=10, *args, c, d=20, e, **kwargs): pass​ 2.函数的嵌套调用 在一个函数的内部调用另一个函数:在函数内部遇到调用其他函数,就进入其他函数内部,全部走完 回到调用其他函数 的入口​3.函数对象 - 直接赋值、可以加()调用、作为其他函数的参、作为函数的返回值、作为容器对象的元素(成员)4.名称空间与作用域 - LEGB:查找顺序LEGB | 加载顺序BGEL 5.函数的嵌套定义 - 闭包 - 函数的嵌套定义:在一个函数内部定义另一个函数,内部的函数就是闭包 - 应用场景: -

对ListCtrl - button的修改

廉价感情. 提交于 2020-03-08 12:28:03
从别处下了个“ListCtrl-Button”Demo发现总体不错,但有一些小问题,如: 1、Button列不在可视区域时 2、改变列宽时(拖动或双击) 3、滚动时 4、删除时 改后代码如下: ListCtrlEx.h 代码 /* ******************************************************************* * Project : NetMonitor * FileName : ListCtrlEx.h * Change : * Brief : * Author : Chen Jun ( chenjun@3cis.com.cn ) * Copyright ( c ) 2007-2008 3cis * All Right Reserved ******************************************************************** */ #if !defined( AFX_LISTCTRLEX_H__3D2C6B4A_4031_48EF_8162_492882D99D43__INCLUDED_ ) #define AFX_LISTCTRLEX_H__3D2C6B4A_4031_48EF_8162_492882D99D43__INCLUDED_ #if _MSC_VER > 1000

C++ map的基本操作和使用

戏子无情 提交于 2020-03-08 05:28:17
C++ map的基本操作和使用 来源:( http://blog.sina.com.cn/s/blog_61533c9b0100fa7w.html ) - C++ map的基本操作和使用_Live_新浪博客 Map是c++的一个标准容器,她提供了很好一对一的关系,在一些程序中建立一个map可以起到事半功倍的效果,总结了一些map基本简单实用的操作! 1. map最基本的构造函数; map<string , int >mapstring; map<int ,string >mapint; map<sring, char>mapstring; map< char ,string>mapchar; map<char ,int>mapchar; map<int ,char >mapint; 2. map添加数据; map<int ,string> maplive; 1.maplive.insert(pair<int,string>(102,"aclive")); 2.maplive.insert(map<int,string>::value_type(321,"hai")); 3, maplive[112]="April";//map中最简单最常用的插入添加! 3,map中元素的查找: find()函数返回一个迭代器指向键值为key的元素,如果没找到就返回指向map尾部的迭代器。 map

Spark源码系列(二)RDD详解

十年热恋 提交于 2020-03-07 11:57:40
1、什么是RDD? 上一章讲了Spark提交作业的过程,这一章我们要讲RDD。简单的讲,RDD就是Spark的input,知道input是啥吧,就是输入的数据。 RDD的全名是Resilient Distributed Dataset,意思是容错的分布式数据集,每一个RDD都会有5个特征: 1、有一个分片列表。就是能被切分,和hadoop一样的,能够切分的数据才能并行计算。 2、有一个函数计算每一个分片,这里指的是下面会提到的compute函数。 3、对其他的RDD的依赖列表,依赖还具体分为宽依赖和窄依赖,但并不是所有的RDD都有依赖。 4、可选:key-value型的RDD是根据哈希来分区的,类似于mapreduce当中的Paritioner接口,控制key分到哪个reduce。 5、可选:每一个分片的优先计算位置(preferred locations),比如HDFS的block的所在位置应该是优先计算的位置。 对应着上面这几点,我们在RDD里面能找到这4个方法和1个属性,别着急,下面我们会慢慢展开说这5个东东。 //只计算一次 protected def getPartitions: Array[Partition] //对一个分片进行计算,得出一个可遍历的结果 def compute(split: Partition, context: TaskContext):

Python面向对象编程 - 4

断了今生、忘了曾经 提交于 2020-03-06 22:27:39
特殊成员和魔法方法 Python中有大量类似__doc__这种以双下划线开头和结尾的特殊成员及“魔法方法”,它们有着非常重要的地位和作用,也是Python语言独具特色的语法之一! __init__ : 构造函数,在生成对象时调用 __del__ : 析构函数,释放对象时使用 __repr__ : 打印,转换 __setitem__ : 按照索引赋值 __getitem__: 按照索引获取值 __len__: 获得长度 __cmp__: 比较运算 __call__: 调用 __add__: 加运算 __sub__: 减运算 __mul__: 乘运算 __div__: 除运算 __mod__: 求余运算 __pow__: 幂 1.__doc__ 说明性文档和信息。Python自建,无需自定义。 class Foo: """ 描述类信息,可被自动收集 """ def func(self): pass # 打印类的说明文档 print(Foo.__doc__) 2.__init__() 实例化方法,通过类创建实例时,自动触发执行。 class Foo: def __init__(self, name): self.name = name self.age = 18 obj = Foo(jack') # 自动执行类中的 __init__ 方法 3.__module__和__class__ _

c++ string转char* char字符数组转字符串 push_back使用方法

别说谁变了你拦得住时间么 提交于 2020-03-06 16:40:36
c++ string转char* 1、如果要将string转换为char*,可以使用string提供的函数c_str() ,或是函数data(),data除了返回字符串内容外,不附加结束符'\0',而c_str()返回一个以‘\0’结尾的字符数组。 2、const char *c_str(); c_str()函数返回一个指向正规C字符串的指针,内容与本string串相同. 这是为了与c语言兼容,在c语言中没有string类型,故必须通过string类对象的成员函数c_str()把string 对象转换成c中的字符串样式. 注意:一定要使用strcpy()函数 等来操作方法c_str()返回的指针 比如:最好不要这样: char* c; string s="1234"; c = s.c_str(); //c最后指向的内容是垃圾,因为s对象被析构,其内容被处理 应该这样用: char c[20]; string s="1234"; strcpy(c,s.c_str()); 这样才不会出错,c_str()返回的是一个临时指针,不能对其进行操作 再举个例子 c_str() 以 char* 形式传回 string 内含字符串 如果一个函数要求char*参数,可以使用c_str()方法: string s = "Hello World!"; printf("%s",s.c_str()); /

python--迭代器和生成器详解

痞子三分冷 提交于 2020-03-06 14:13:22
迭代器和生成器 在Python这门语言中,生成器毫无疑问是最有用的特性之一。生成器同时也满足iterator与iterable。 迭代器 这里有两个概念:Iterable(可迭代)与Iterator。 实现了__next__方法,就叫做Iterator,注意__next__要有退出条件。 实现了__iter__方法就是Iterable,且这个方法返回的是一个Iterator。 所以一个类中我可以不用全部实现__iter__和__next__,只用实现一个,于是我试了一下像这样: class Iterable(object): def __init__(self,MaxIter): self.MaxIter = MaxIter self.Iterator = Iterator(self.MaxIter) def __iter__(self): return self.Iterator class Iterator(object): def __init__(self,MaxIter): self.a, self.b = 0,1 self.iterNum = 0 self.MaxIter = MaxIter def __next__(self): self.iterNum += 1 self.a, self.b = self.b, self.a + self.b if self