给定整数范围的开始和结束,如何计算此范围之间的正态分布随机整数?
我意识到正态分布进入 - +无穷大.我猜尾巴可以被截断,所以当一个随机数被计算到范围之外时,重新计算.这提高了范围内整数的概率,但只要这种效果可以容忍(<5%),就可以了.
public class Gaussian
{
private static bool uselast = true;
private static double next_gaussian = 0.0;
private static Random random = new Random();
public static double BoxMuller()
{
if (uselast)
{
uselast = false;
return next_gaussian;
}
else
{
double v1, v2, s;
do
{
v1 = 2.0 * random.NextDouble() - 1.0;
v2 = 2.0 * random.NextDouble() - 1.0;
s = v1 * v1 + v2 * v2;
} while (s >= 1.0 || s == …Run Code Online (Sandbox Code Playgroud) 我只是在学习f#所以我可能正在做一些非常愚蠢的事情.请随意指出我的相关文档,我已经搜索但无法找到.我在Windows 7(.Net 4.0)上使用Visual Studio 2010 beta.
我的第一个f#项目一切顺利.嗯..几乎一切.特别是我正在编写一个非常简单的线性插值函数,其代码如下:
let linterp (x:double) (xvalues:double list) (yvalues:double list) =
let num_els = xvalues.Length
if x <= xvalues.Head then
let result = yvalues.Head
elif x >= (List.rev xvalues).Head then
let result = (List.rev yvalues).Head
else for idx in [0 .. num_els] do
if List.nth xvalues idx >= x then
let x0 = xvalues.Item idx
let y0 = yvalues.Item idx
let x1 = xvalues.Item (idx+1)
let y1 = yvalues.Item (idx+1)
let result = y0 + (y1-y0)/(x1-x0)*(x …Run Code Online (Sandbox Code Playgroud) 我们使用第三方产品来管理我们的体育中心会员资格.我们有几种会员类型(例如,初级,学生,员工,社区)和几种会员身份(例如,年度,活动,非活动,暂停).不幸的是,该产品仅记录会员当前的会员类型和状态.我希望能够跟踪我们的会员类型和状态随时间变化的方式.
目前,我们可以访问产品的数据库设计.它在SQL Server上运行,我们定期针对产品表运行自己的SQL查询,以生成我们自己的表.然后,我们将表格链接到Excel中的数据透视表以生成图表.所以我们熟悉数据库设计和SQL.但是,我们仍然坚持如何最好地解决这个问题.
该产品记录会员的会员购买情况以及他们的开始和到期日期.因此,我们可以回过头来确定会员在任何时间点的类型和状态.举例来说,如果他们买了在2007年1月1日,一个初级会员,并于2007年12月31日到期,那么他们买了2008年6月1日,一个学生会员,我们可以看到他们的状态,从主动去激活到激活(于扬分别于2008年1月和2008年6月1日),他们的类型从初中到学生(2008年6月1日).
基本上我们希望将成员的类型和状态属性转换为时间属性或有效性 a-la Fowler(或其他随时间变化的事物).
我们的问题(最后:) - 鉴于上述情况:您建议我们使用什么数据库表设计来保存此成员信息.我想它会有一个MemberID列,所以我们可以键入现有的Member表.它还需要存储成员的状态和类型以及他们所持有的日期范围.我们希望能够轻松地针对此表编写查询,以确定在给定时间点我们拥有的每种类型和状态的成员数量.
更新2009-08-25:已经进行了侧面跟踪,并且还没有机会尝试提出的解决方案.希望尽快这样做,并根据结果选择答案.
如果我对你说:
"我想的是0到n之间的数字,我会告诉你你的猜测是高还是低",然后你会立即进行二分搜索.
如果我删除上限怎么办?即我正在考虑一个正整数,你需要猜测它.
一种可能的方法是让你猜测2,4,8,......,直到你猜到某些k为2**k而我说"较低".然后您可以应用二进制搜索.
有更快的方法吗?
编辑:
显然,任何解决方案都需要花费时间与目标数量的大小成比例.如果我通过Ackermann功能查询格雷厄姆的数字,我们将等待你所追求的任何策略.
我也可以提供这个算法:从1开始依次猜测每个整数.
它保证在有限的时间内完成,但它显然比我的"2力量"策略更糟糕.如果我能找到更糟糕的算法(并且知道它更糟),那么也许我可以找到更好的算法?
例如,代替2的幂,也许我可以使用10的幂.然后我找到log_10(n)步骤的上限,而不是log_2(n)步骤.但我必须寻找更大的空间.说k = ceil(log_10(n)).然后我需要log_2(10**k - 10**(k-1))我的二进制搜索的步骤,我想这是关于10+log_2(k).对于2的幂,我在log_2(log_2(n))搜索阶段大致有步骤.哪个胜利?
如果我向上搜索n**n怎么办?还是其他一些序列?奖品是否适用于能够找到增长最快的序列的人?这是答案的问题吗?
谢谢你的想法.我向你们提出道歉,我建议我从MAX_INT或2**32-1开始,因为我显然已经偏离了实用性的界限.
最终编辑:
大家好,
谢谢你的回复.我接受了Norman Ramsey(以及评论者onebyone)的回答,我理解为以下论点:对于目标数n,任何策略必须能够区分(至少)0..n之间的数字,这意味着你需要(至少)O(log(n))比较.
然而,你们的一些人也指出,问题首先没有明确定义,因为在均匀概率分布下不可能选择"随机正整数"(或者说,统一概率分布不能存在于无限集).一旦我给你一个非均匀分布,你可以把它分成两半并正常应用二进制搜索.
当我四处走动时,这是一个我经常思考的问题,所以我很高兴有两个确凿的答案.
我正在尝试在Erlang中编写一个简单的Thrift服务器,它接受一个字符串并返回一个字符串.
一切似乎都在努力调用我的功能:
handle_function(Function, Args) when is_atom(Function), is_tuple(Args) ->
case apply(?MODULE, Function, tuple_to_list(Args)) of
ok -> ok;
Reply -> {reply, Reply}
end.
test([X]) ->
"You sent: " ++ X.
Run Code Online (Sandbox Code Playgroud)
我得到了一个function_clause.堆栈跟踪显示以下内容:
{function_clause,[{server,test,[<<"w00t">>]},
{server,handle_function,2},...
我的handle_function是从教程文件中复制的,所以如果我需要调整它,我不会感到惊讶.有任何想法吗?
Python shutil.copytree不是很灵活; 在复制时添加对忽略权限的支持的最简单方法是什么copytree(无需重写其实现)?
否则,copytree失败如下:
(…)”[Errno 45] Operation not supported: ‘/path/foo/bar’”
Run Code Online (Sandbox Code Playgroud) 严格来说,style标签是否需要在headHTML文档中?4.01标准意味着,但没有明确说明:
STYLE元素允许作者将样式表规则放在文档的头部.HTML允许文档的HEAD部分中的任意数量的STYLE元素.
我说"严格来说"因为我有一个应用程序将样式元素放在正文中,而我测试过的所有浏览器似乎都使用了样式元素.我只是想知道这是否合法.
假如我有一个大型数据集,该表有超过一百万条记录,并且数据库已经标准化,所以外键和东西.我已经正确设置了关系,我获得了第一个对象的列表,applications = EntityLoad("entityName") 但由于关系和填充页面需要24秒加载,即使我将记录数量限制为显示为5,也需要很长时间载入.
我的解决方案是创建另一个只获取列表的对象,然后在用户想要的时候,使用具有所有关系的对象并将其显示给用户.这是接近它的正确方法,还是我错过了一个大的ORM概念?
我需要澄清一下MySQL中varchar字段的最大长度.
我一直认为最大长度是255(255什么?我假设的字符,但这可能是我混淆的原因).看一下我们正在使用的外部公司设置的数据库表,我看到一个字段设置为varchar(20000),保存的块长度超过255个字符.为什么这样做?20000是有效值吗?
一些谷歌搜索显示,在mysql varchar有65,535字节的限制,我看到varchar(65535)正在使用,那么255限制如何与此相关?
我有一个非常长的SQL查询(数据导入等).它是垃圾 - 它使用游标,它运行缓慢.它正在做,所以我不太担心性能.
无论如何,我可以暂停一会儿(而不是取消查询)吗?
它嚼了一点CPU,所以我希望暂停它,做一些其他的东西......然后恢复它.
我假设答案是"否",因为行和数据被锁定等等.
我正在使用Sql Server 2008,顺便说一句.