C#中返回局部变量一个很奇怪也很严肃的问题,请大神f2些来围观交流一下

C#中怎么定义一个长度是变量的数组,我印象中好像有哪种方法的,求大神指导_百度知道
C#中怎么定义一个长度是变量的数组,我印象中好像有哪种方法的,求大神指导
提问者采纳
list =new List&T&;添加元素
list.Add(..)list.ToArray()转成数组
&T&是什么意思
那长度变量在哪里写呢,我是菜鸟
呵呵 见谅啊
T是任意类型, 比如 List&string&
strlist = new List&string&
strlist.Add(&123&);strlist.Add(&456&);不需要写长度,list会自动 增加。
提问者评价
其他类似问题
为您推荐:
您可能关注的推广
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁问大神一个问题,就是下面这个阶乘,局部变量变成成员变量后,为什么结果就算不对了呢!_百度知道
问大神一个问题,就是下面这个阶乘,局部变量变成成员变量后,为什么结果就算不对了呢!
Ji{public static void main(String[] args) {int sum=0;for(int i=1;i&=3;i++){int ji=1;for(int j=1;j&=i;j++){ji=ji*j;}sum=sum+}System.out.println(&这几个数阶乘和=&+sum);}}上面的运算是对的,但是把int ji放上面后:class
Ji{public static void main(String[] args) {int ji=1;int sum=0;for(int i=1;i&=3;i++){for(int j=1;j&=i;j++){ji=ji*j;}sum=sum+}System.out.println(&这几个数阶乘和=&+sum);}}这个运算的结果就不对,可以编译。但是运算的不对。求大神解答
提问者采纳
因为你下面有一个ji=ji*j; ji是局部变量的时候,每次外循环都会重新把ji定为1,但是你把它当成全局变量的时候,每次循环后,ji的值都变了,不会回到1了,所以结果就不对了。如果非想把ji变成全局变量,就要在外循环里的第一句写上ji=1;
提问者评价
嗯,想了想就是这样子,后来我想了想,栈内存和堆内存,是不是跟这个也有关系啊?
其他类似问题
为您推荐:
阶乘的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁模拟退火是一个通用的全局最优化算法。要理解它的思想,可以从 Gibbs Distribution 入手:这定义了一个概率分布,其中 x 表示系统的状态,P(x) 表示系统取 x 状态的概率,E(x) 表示系统处于 x 状态的能量,T表示温度。在物理上,E(.)的定义取决于系统本质,在最优化上,我们需要虚拟一个系统,让这个系统的 E(.) 对应到我们的优化目标。这个分布有两个特点:1. E(x) 越小,P(x) 则越大;反之亦然。2. T 越大,P(.) 分布越 uniform,反之 P(.) 越 sharp。根据(1),我们做最小化的时候,比如我们要最小化函数 f(x)
的值,就可以直接让 E(x) = f(x);如果是最大化 f(x),可以设 E(x) = -f(x)。总之,这样一来原始的最优化问题就变成了在 P 分布下寻找概率最大的状态 x。对于(2),可以画个不太严谨的图解释如下:可以看到,当T=0的时候,只有对于让 E(x) 最小的 x*,我们有 P(x*)=1,其他的x均为 P(x)=0。可以看到,当T=0的时候,只有对于让 E(x) 最小的 x*,我们有 P(x*)=1,其他的x均为 P(x)=0。而当T=∞时,对于所有的x,P(x)均相等,于是就构成了一个均匀分布(从上面的概率公式看,此时对于任何x都有E(x)/T=E(x)/∞=0,跟E(x)等于几已经无关了)。当T取其他值的时候呢,就是介于0和∞之间的状态。于是我们得出结论:T越大,P(.)越均匀,T越小,P(.)越陡峭。为了更直观,本物理盲在这里瞎扯几句:假设一些水分子组成了一个系统,系统的变量是水分子的空间坐标。当T很大的时候,P(.)变得均匀,于是整个系统变得非常的不稳定,所有的水分子都乱飘(因为取任何坐标的概率都均等嘛),宏观上就是水蒸发成了气体。当T变成0时,P(.)变得非常陡峭,于是整个系统的状态稳定在P(x)=1的x上,宏观上看就是水凝成了固体。现在假设我们有一个算法,可以在给定的 P(.) 上面采样。那么,当 T=0 时,由于只有最优的 x* 满足 P(x*) = 1,其余的 x 均为 P(x) = 0。所以只要我们采集的样本满足此时 P(.) 的分布,那么它一定就是 x*。这个算法就是模拟退火。学过C语言的人都知道rand(),它会以相等的概率返回一个介于0到RAND_MAX之间的随机数。这对应的是在[0,RAND_MAX]的均匀分布上采样。假设我们需要在更加复杂的分布上采样,比如上面的P(.),我们应该怎么做呢?解决方法就是MCMC()。MCMC简单来讲就是,从一个初始状态开始,经过若干步状态转移,最后达到一个状态,这个就是采集出来的样本。在每次状态转移时(到,到等),首先需要 propose 一个可能的新状态 x',然后根据 P(.) 的特点决定是否要接受(accept)这个新的状态:如果接受了,那么下一次的状态就变为 x',否则保持不变。这实际上是为了维护细致平衡()。对于MCMC而言,正是这个关键的步骤保证了采样的结果符合目标分布。在模拟退火的算法中,有一个很诡异的rejection操作,其实就是这个原因。但是,维护细致平衡是有代价的,如果目标分布 P(.) 过于陡峭,那么,很有可能 propose 的 x’ 能量远大于当前的 x(E(x') && E(x)),根据 rejection 公式,可以看到这样的 x' 几乎总是会被拒绝。于是系统的收敛速度会变得巨慢:简言之,你需要非常多的状态转移才能采集到一个合格的样本。但如果 P(.) 比较均匀呢,这时新的 x' 就很容易被接受,相对来说就更容易拿到合格的样本。所以在模拟退火中,从来不直接从T=0(或者其他低温状态)开始采样,尽管理论上这样采集到的样本也是最优解,但为了拿到一个样本,你恐怕要永远地等下去。模拟退火采用的方法是:从高温开始采样,使得算法可以快速拿到下的样本,然后缓慢地降低一点温度到,这时以为起点,在温度下采样,由于和很接近,于是也很接近下面的合格样本,经过少数几轮状态转移,就可以期望拿到下面的样本,于是继续稍微降低温度到,重复这个过程……直到抵达了一个极低温度,这时的样本就是全局最优解。可以看到T有一个减小的过程,这大概就是“退火”这个说法的由来。S. Kirkpatrick在1983年证明了模拟退火这个想法确实是可行的。并且(理论上)它最牛逼的地方在于:这是一个通用算法。也就是说几乎可以吃掉所有的最优化问题,而且得到的结果还是全局最优的!但实际应用中,全局最优基本上是不能保证的,这是因为 S. Kirkpatrick 同时也证明了要达到全局最优需要实现的退火速度(也就是T减小的速度)——这个速度基本上是慢到人类无法承受的。不过好在实际应用中,我们通常可以采用一个快速的降温策略,再配合一些heuristic算法,这样最后得到的结果虽不是全局最优,但基本上也是全局不错的。关于MCMC讲的比较intuitive,请有兴趣的同学自行参考相关资料:)
搬运工,来自网页的内容:一. 爬山算法 ( Hill Climbing )
介绍模拟退火前,先介绍爬山算法。爬山算法是一种简单的贪心搜索算法,该算法每次从当前解的临近解空间中选择一个最优解作为当前解,直到达到一个局部最优解。
爬山算法实现很简单,其主要缺点是会陷入局部最优解,而不一定能搜索到全局最优解。如图1所示:假设C点为当前解,爬山算法搜索到A点这个局部最优解就会停止搜索,因为在A点无论向那个方向小幅度移动都不能得到更优的解。(在实际中,人会看到更高的B点,但是计算机程序是看不到的)二. 模拟退火(SA,Simulated Annealing)思想
爬山法是完完全全的贪心法,每次都鼠目寸光的选择一个当前最优解,因此只能搜索到局部的最优值。模拟退火其实也是一种贪心算法,但是它的搜索过程引入了随机因素。模拟退火算法以一定的概率来接受一个比当前解要差的解,因此有可能会跳出这个局部的最优解,达到全局的最优解。以图1为例,模拟退火算法在搜索到局部最优解A后,会以一定的概率接受到E的移动。也许经过几次这样的不是局部最优的移动后会到达D点,于是就跳出了局部最大值A。
模拟退火算法描述:
若J( Y(i+1) )&= J( Y(i) )
(即移动后得到更优解),则总是接受该移动
若J( Y(i+1) )& J( Y(i) )
(即移动后的解比当前解要差),则以一定的概率接受移动,而且这个概率随着时间推移逐渐降低(逐渐降低才能趋向稳定)  这里的“一定的概率”的计算参考了金属冶炼的退火过程,这也是模拟退火算法名称的由来。  根据热力学的原理,在温度为T时,出现能量差为dE的降温的概率为P(dE),表示为:    P(dE) = exp( dE/(kT) )  其中k是一个常数,exp表示自然指数,且dE&0。这条公式说白了就是:温度越高,出现一次能量差为dE的降温的概率就越大;温度越低,则出现降温的概率就越小。又由于dE总是小于0(否则就不叫退火了),因此dE/kT & 0 ,所以P(dE)的函数取值范围是(0,1) 。  随着温度T的降低,P(dE)会逐渐降低。  我们将一次向较差解的移动看做一次温度跳变过程,我们以概率P(dE)来接受这样的移动。  关于爬山算法与模拟退火,有一个有趣的比喻,可以参见@的解释:  爬山算法:兔子朝着比现在高的地方跳去。它找到了不远处的最高山峰。但是这座山不一定是珠穆朗玛峰。这就是爬山算法,它不能保证局部最优值就是全局最优值。  模拟退火:兔子喝醉了。它随机地跳了很长时间。这期间,它可能走向高处,也可能踏入平地,这里体现了以一定概率接受的问题。但是,它渐渐清醒了并朝最高方向跳去。这就是模拟退火。此外,还可以参照
一个锅底凹凸不平有很多坑的大锅,晃动这个锅使得一个小球使其达到全局最低点。一开始晃得比较厉害,小球的变化也就比较大,在趋于全局最低的时候慢慢减小晃锅的幅度,直到最后不晃锅,小球达到全局最低。求大神看一下这个595程序,全局变量和局部变量为什么去掉任意一个就不能运行了,不懂_百度知道
求大神看一下这个595程序,全局变量和局部变量为什么去掉任意一个就不能运行了,不懂
#include&reg52.h&sbit ser=P3^4;
//(14脚)串行数据输入sbit rclk=P3^5;
//(12脚)并行输出控制sbit srclk=P3^6;
//(11脚)移位时钟控制void hc595(unsigned char send){
for(i=0;i&8;i++)
if((send&&i)&0x80)
rclk=1;}void main(){
hc595(0xf0); }
提问者采纳
你试试把那个char换成int型变量试试,然后把外部全局变量删掉,试试能跑的动呢
提问者评价
其他类似问题
为您推荐:
全局变量的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁正在考试、判断对错!求大神帮忙! 1.局部变量被引用时要在其名称前加上标志“&”。2.在一个数据库_百度知道
正在考试、判断对错!求大神帮忙! 1.局部变量被引用时要在其名称前加上标志“&”。2.在一个数据库
正在考试、判断对错!求大神帮忙!1.局部变量被引用时要在其名称前加上标志“&”。2.在一个数据库中,用户账号唯一标识一个用户。3.在关闭服务器时为了保险起见,通常在停止运行SQL Server之前先暂停SQL Server。4.数据库的表名可以更改。5.数据库中的数据文件和日志文件可以属于相同的文件组。6.局部变量的名称不能与全局变量的名称相同。7.一个用户或工作组取得合法的登录账号即能访问数据库。8.视图名称不得与该用户拥有的任何表的名称相同。9.msdb和tempdb数据库是系统数据库。10.每个数据库不允许有多个日志文件。11.一个数据文件可以属于多个文件组。12.“+”是赋值运算符。13.用户自定义的数据类型的名称在数据库中可以不唯一。
我有更好的答案
1是对的?0是错的?
我去,你说呢?!
二楼答案正好相反、我有点晕.....
额,莫非我记错了,呵呵
反正你的意思1是对的、对吧?
问号是对 叹号是错 !??!??!?!!!??
问号是对?
但是不敢确定啊
必定我也很菜
其他类似问题
为您推荐:
局部变量的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 酷派大神f1 的文章

 

随机推荐