求一PASCAL大牛教我随机算法....
随机森林顾名思义,是用随机的方式建立一个森林,森林里面有很多的决策树组成,随机森林的每一棵决策树之间是没有关联的。在得到森林之后,当有一个新的输 入样本进入的时候,就让森林中的每一棵决策树分别进行一下判断,看看这个样本应该属于哪一类(对于分类算法),然后看看哪一类被选择最多,就预测这个样本 为那一类。
在建立每一棵决策树的过程中,有两点需要注意 - 采样与完全分裂。首先是两个随机采样的过程,random forest对输入的数据要进行行、列的采样。对于行采样,采用有放回的方式,也就是在采样得到的样本集合中,可能有重复的样本。假设输入样本为N个,那 么采样的样本也为N个。
type
anode=record
shuliang,jiage:longint;
end;
var
p,n,i,j,k,max,pp,jiage,t:longint;
a:array[1..3] of anode;
begin
assign(input,'b.in'); reset(input);
assign(output,'b.out'); rewrite(output);
readln(p); p:=p+1;//需要包括本人
readln(n);
max:=maxlongint; pp:=-1;
for i:=1 to n do
begin
for j:=1 to 3 do
readln(a[j].shuliang,a[j].jiage);//读一个旅馆,处理一个,如果更优,则记录
t:=p; k:=3;//t表示还有多少人需要住宿,k表示优先住在哪种类型的房间
while (t>0)and (k>0) do
begin
if a[k].shuliang*k>=t div k then begin jiage:=jiage+a[k].jiage*t; t:=0; break; end//如果已能住下所有人,则停止
else begin jiage:=jiage+a[k].jiage*a[k].shuliang*k; t:=t-a[k].shuliang*k; end;//否则,能住多少就住多少
k:=k-1;
end;
if (t=0)and(jiage<max) then//t=0说明已能住下所有人
begin max:=jiage; pp:=i; end;
end;
if pp=-1 then writeln('No Answer')//所有的都不能住
else begin writeln(i); for i:=1 to 2 do write(a[i].shuliang,' '); writeln(a[3].shuliang); end;
close(input); close(output);
end.
begin
randomize;
writeln(random(100));//在1~100范围内随机生成数
end.
随机算法经典用途:骗分
流程或执行结果。随机化算法基于随机方法,依赖于概率大小。
随机化算法概述
在我们的生活中,人们经常会去掷色子来看结果,投硬币来决定行动,这就牵涉到一个问题:随机。
计算机为我们提供好了随机方法(部分计算器也提供了),那么对于有些具有瑕疵的算法,如果配上随机化算法的话,又是可以得到一样不到的结果。
定义:
这种算法看上去是凭着运气做事,其实,随机化算法是有一定的理论基础的,我们可以想象,在[1,10000]这个闭区间里,随机1000次,随机到2这个数的几率是多大,何况1000次的随机在计算机程序中仅仅是一眨眼的功夫。可以看出,随机化算法有着广阔的前景。只是由于随机化算法比较难于掌控,所以并不是很多人都接触过他,但肯定有很多人都听说过。
举例
例一
下面,我们就随机化问题,举一个例子:
一个长度在4..10的字符串中,需要判定是否可以在字符串中删去若干字符,使得改变后字符串符合以下条件之一:
(1)AAAA;(2)AABB;(3)ABAB;(4)ABBA。
例如:长度为6字符串“POPKDK”,若删除其中的“O”,“D”两个字母,则原串变为:“PPKK”,符合条件(2)AABB。
分析:
这道题很容易想到一种算法:运用排列组合:枚举每4个字母,然后逐一判断。算法是可行的,但是如果需要题目中加上一句话:需要判断n个字符串,且n<=100000,那么这样的耗时是不能让人忍受①的,因为在枚举的过程中,是非常浪费时间的。
(①:这里是指信息学中要求算法的普遍运算时间为:1000ms)
所以这道题有可能可以借助于随机化算法,下面我们来算一下在10个组符中取4个字符一共有多少种取法:C(4,10)=210。那么很容易得知,随机化算法如果随机100次,能都到的结果基本上就正确了,而随机时的时间消耗是O(1),只需要判断没有随机重复即可,判重的时间复杂度也为O(1),并且最多随机100次,这样就可以有效地得到答案,最大运算次数为:O(100n),这是在计算机的承受范围内(1000ms)的。
从这里就能看出,随机化算法是一个很好的概率算法,但是它并不能保证正确,而且它单独使用的情况很少,大部分是与其他的算法:例如贪心、搜索等配合起来运用。
例二
排序问题。快速排序是排序方法中较为便捷的方法之一,但是由于它极不稳定,最好的时候时间复杂度为O(n㏒n),这里的㏒是指以2为底的对数运算。最坏的时候能达到与普通排序方法一样的O(n^2)。
而制约快速排序的有两个:一是数据,越无序的数据,快排的速度越快;二是中间点的枚举。
因为两个制约条件都与随机有着不可分开的关系。
所以,在快速排序中加入随机化算法无疑是十分重要的。
运用在:
(1)数据读入时,随机排放数据位置。
(2)中间点的枚举进行多次随机化后决定。
这样就基本上将快速排序的时间复杂度维持在最好状态。
如有不明,Q我:1027321803
某沙茶写/贴
595876200,
随机算法主要是骗分用的……
我是沙茶!
var
w,x,y,z:longint;
begin
randomize;{如果没有这句话,每次产生的数是一样的}
readln(x);
z:=random(x);{随机产生一个大于等于0,小于x的数}
writeln(z);
end.
循环
begin
randomize;
readln(x,y);
for w:=1 to x do
writeln(random(y));
{产生的数可用于赋值也可直接输出}
end;
QQ:略
随机算法?
只知道一个随机数函数的路过无知者。。。
var
a:longint;
begin
randomize; a:=random(10);//在1~10之间随机生成数
writeln(a);
end.
求一PASCAL大牛教我随机算法...
所以这道题有可能可以借助于随机化算法,下面我们来算一下在10个组符中取4个字符一共有多少种取法:C(4,10)=210。那么很容易得知,随机化算法如果随机100次,能都到的结果基本上就正确了,而随机时的时间消耗是O(1),只需要判断没有随机重复即可,判重的时间复杂度也为O(1),并且最多随机100次...
pascal大牛进:rqnoj156吞噬比赛是什么算法?
最长单调子序列,就是导弹问题;伪代码:for i:=n downto 1 do begin for j:=i+1 to n do if(f[j]>f[i])and(a[i]
pascal大牛请进 求校园迷宫的标程!!
若当前位置"可通",则纳入"当前路径",并继续朝"下一位置"探索;若当前位置"不可通",则应顺着"来的方向"退回到"前一通道块",然后朝着除"来向"之外的其他方向继续探索;若该通道块的四周四个方块均"不可通",则应从"当前路径"上删除该通道块。求迷宫中一条从入口到出口的路径的伪码算法如下...
pascal大牛进:为什么实型输出前有空格?
前面四个空格 加个1580刚好八位 WRITELN(X:8:0)是输出八位宽的不保留小数的实数.
pascal大牛进:从键盘读入2个100以内的正整数,进行乘法运算并以竖式输...
第一行输入你要算几个 接下来输入算式..只能算两个数的.这个我写了很久..program liuke_arith;var a,b,ba:array[0..512] of integer;c:array[0..512,0..512] of integer;t:array[0..1024] of integer;x:ansistring;o:char;i,j,m,n,l,g,k:longint;procedure init;begin fillchar...
PASCAL动态规划一水题稀里糊涂就过了,请大牛解释一下!
这样f[i]就表示走到第i公里的最优解,第i公里从前面i-1,i-2,i-3...中的最优解中的转移过来,没必要将a中的数据赋值给f 大概是这样了 var f:array[0..100] of integer;a:array[1..10] of integer;i,n,j,k:integer;begin for i:=1 to 10 do read(a[i]);readln(n);for i:...
PASCAL有哪些编译器?最好支持win7。
编译器有:Free Pascal 2.4.4Delphi 7.0LazarusGUIDE比较好用的文本编辑器有:(不能编译,只能打代码)GeditEmacs(大牛一般用Emacs...)
PASCAL有哪些编译器?最好支持win7。
编译器有:Free Pascal 2.4.4Delphi 7.0LazarusGUIDE比较好用的文本编辑器有:(不能编译,只能打代码)GeditEmacs(大牛一般用Emacs...)
c++或pascal的大牛帮帮忙
n]的和 从中找出最大的 最后将这个最大的去除以M 当然直接求的话太慢 应将上一轮求的和减去上一轮的第一个数 在加上这一轮的最后一个数 如 求a[2]到a[m+1]的和 应将上一轮求的 a[1]到a[m]的和-a[1]+a[m+1] 得出 a[2]到a[m+1]的和 这样既不超空间也不超时 ...
pascal Tlist 问题,附代码,大牛帮忙看看
既然定义了nodelist:TList<NodeMsg>;那nodemsg的类型应该是NodeMsg才对,可是程序里却定义了nodemsg:PNodeMsg;根据命名习惯推测这应该是个指针,所以后面程序段中会出现覆盖值的现象,因为你每次加入到nodelist中的都是同一个指针地址。
弋褚斑秃: pascal中使用random(100)可产生[0,99]之间的伪随机整数.如要产生整数a~b(afor i:=1 to n do write(random(101),' '); 可产生0~100之间的随机整数.但是这样的程序段,多次运行的结果是完全一样的.如要使每次运行产生不同的随机数序列,可以在使用随机函数之前,用系统时钟初始化随机数发生器.具体使用方法是使用randomize; 语句.
轮台县13269336410: pascal随机函数怎么做? - ?
弋褚斑秃: 在第一次使用随机数发生器(Random函数)之前,调用一下Randomsize过程 在需要生成随机数时用Random函数.例如:var s: array[1..10] of integer; procedure sample; var i: integer begin randomize; {初始化随机函数} for i:=1 to 10 do begin s[i] := Random( 100 ); {产生一个100以内的随机整数赋给s[i]} end; end;
轮台县13269336410: 求一个随机抽取数字的用pascal写的程序编码?
弋褚斑秃: program Random1; var i,j:integer; begin randomize; for i:=1 to 7 do write(random(32), ' '); writeln(''); end.
轮台县13269336410: pascal中的随机函数怎么用(要详细)求求您! - ?
弋褚斑秃: var a,b:integer; s,p,i,n:integer; begin for i:=1 to 10 do要产生十组数. begin randomize;随机开关. a:=random(100);随机产生0到100的整数. b:=random(100); s:=a+b; write(a,'+',b,'=');然后你输出a+b的值. read (p);电脑判断你的结果是否正确. if s=p then n:=n+10;如果正确,就加10分. end; write (n); end.随机函数在竞赛中几乎不会出现,了解了解就好.
轮台县13269336410: pascal 中如何随机生成一个数 - ?
弋褚斑秃: var a:integer; begin randomize; a:=random(10000000); writeln(a); end. a为随机数
轮台县13269336410: Pascal 问题 如何随机 输出 四则运算式??
弋褚斑秃: 详细的代码就不写了吧,你随机产生一个数字,除以4,如果余数是0 就是加法,1就是减法,2就是乘法,3就是除法.然后再随机产生一个数字,生成第二个数字的时候,应该根据你生成的运算符来分别设定条件.本文转载自 http://www.ncecit.com
轮台县13269336410: 请帮我编个PASCAL随机数程序 - ?
弋褚斑秃: 我来说下思路吧 既然随机数有两个要素(花色)(点数)你可以建立一个2维boolean数组来判断是否被抽到 先随机花色,在随机点数 代码 program dd; var a:array[1..4,1..13]of boolean; i,j,k:integer; begin fillchar(a,sizeof(a),true); i:=0; while i randomize; j:=random(13)+1; k:=random(4)+1; if a[k,j] then begin a[k,j]:=false; writeln(k,'*',j); inc(i); end; end; end.
轮台县13269336410: PASCAL怎么产生不同的随机数?(在同一范围内)简单点的程序?
弋褚斑秃: var n; begin randomize; n:=random(99)+1;//产生1-100的整数 writeln(n); readln; end.
轮台县13269336410: 请告知一段Pascal里产生随机数的原代码并解释其生成的原理!谢谢! - ?
弋褚斑秃: 随机数首先要初始化,然后使用random函数来做,(random函数的作用是取0~1之间的实数,须将其*一个数或者random(x)来取)基本格式是这样的:var i:integer; begin randomize; {初始化随机数发生器} for i:=1 to 10 do write(random(100):5); {随机取10个100内的整数} end;
轮台县13269336410: pascal 随机函数如何定义 - ?
弋褚斑秃: 使用randomize过程打开随机数开关,再用random(n)函数生成0到n-1的随机整数.也可以使用random函数生成0到1的随机实数.