状态机,曾经认为没有内涵,最近又思考了思考。。 热:报错 -问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

状态机,曾经认为没有内涵,最近又思考了思考。。 热:报错

2020-06-09 11:50:52 260 1

最近写代码,做算法。反正每年都会有几个月在写算法,可能局部算法目标完全相同,但看待代码设计的角度和感觉不同。以前挺不以为然状态机的。 状态机无非: while个大循环, swtich case 判状态,每个入口完毕后,刷新状态。一切就OK了。 这两天写了个归并算法,又思考了一下,算法设计本身的问题。不是所要面对的算法目标本身。 其实算法的逻辑组合也是个状态机。具体怎么抽象出来,得出的结论,我就不描述了,算是方法论,还是那句,看得懂的,都懂,我是废话,看不懂的,还是不懂,要么以后悟出来了,要么类似问题就是无力解决。 只想说,程序设计,要两个坚持。 1、多动手,不沉下去写,无法对思考方法给予反馈,并总结。这里说的是相同目标。隔段时间重写一遍,而不是每天忙忙碌碌的应付不同业务。 2、多思考,其实相同的事情,不同的层次和角度会有不同的思考模式以及抽象后的结论。即便每年对同样一个设计目标重复处理。也会得出不同的结论。而这些结论的影响力(对其他算法的类似设计思维方式),是不同的。 上述两个是辩证的, 仅思考,不动手,没有问题反馈,没有实践经验,那只是空想。 没有思考,只是动手,重复同样的设计目标,那还不如去外包公司,多少还可以 码完代码换烟钱。

取消 提交回答
全部回答(1)
  • kun坤
    2020-06-09 11:51:04

    有一个函数随机生成 0, 或者 1,产生的结果是不平均。 如何产生平均的随机数 0,1  

    ######

    引用来自“看能不能改个名”的答案

    有一个函数随机生成 0, 或者 1,产生的结果是不平均。 如何产生平均的随机数 0,1  
    多叠几个delay,然后反馈。和信号处理是一样的。哈。说人话。。 加个BUF(循环队列),然后当BUF满时,才能考虑输出。输出是对BUF中,0,1的情况汇总。最简单的方法如下,32个存储位置。
    unsigned int buf = 0;
    unsigned int count = 0;
    void input_rand(int flag){ //0 or 1
        buf = (buf << 1) + (flag!=0);
        count += (count < 32);
    }
    
    float get_rand(void){
        if (count < 32) return -1; // not rand
        return 1 / ((float)(buf) + 1);
    }
    如果你无所谓前32个的随机性,那么上面设计count的代码可以全部去掉。 ######怪我没把问题描述清楚。 问题是, 有一个不平均的随机数生成器,可以生成 0 或者 1, 如何利用这个不平均的随机数生成器生成 平均的随机数 0 或者 1。 ######

    引用来自“看能不能改个名”的答案

    怪我没把问题描述清楚。 问题是, 有一个不平均的随机数生成器,可以生成 0 或者 1, 如何利用这个不平均的随机数生成器生成 平均的随机数 0 或者 1。 
    是说的期望不为0.5的问题吗?如果是这个问题,仍然是做数据累积。获取已有期望和0.5的比例,反过来修正当前的值。 ######

    引用来自“中山野鬼”的答案

    引用来自“看能不能改个名”的答案

    怪我没把问题描述清楚。 问题是, 有一个不平均的随机数生成器,可以生成 0 或者 1, 如何利用这个不平均的随机数生成器生成 平均的随机数 0 或者 1。 
    是说的期望不为0.5的问题吗?如果是这个问题,仍然是做数据累积。获取已有期望和0.5的比例,反过来修正当前的值。
    没看懂你的思路。 不过我觉得 类似的问题很对应你帖子的主题。就是状态机制, 循环,检测,刷状态。   ######

    引用来自“看能不能改个名”的答案

    引用来自“中山野鬼”的答案

    引用来自“看能不能改个名”的答案

    怪我没把问题描述清楚。 问题是, 有一个不平均的随机数生成器,可以生成 0 或者 1, 如何利用这个不平均的随机数生成器生成 平均的随机数 0 或者 1。 
    是说的期望不为0.5的问题吗?如果是这个问题,仍然是做数据累积。获取已有期望和0.5的比例,反过来修正当前的值。
    没看懂你的思路。 不过我觉得 类似的问题很对应你帖子的主题。就是状态机制, 循环,检测,刷状态。  
    关键是,你所谓的不平均是否就是说随机数的期望不是0.5。 ######不平均,期望值不是0.5  ,希望获得 期望值 是0.5的随机数。 ######我的思路。
    int m_rand(); /* 不平均产生0 或者 1 */
    
    int r_rand() {
      int f; /* 状态 */
      int t; /* 临时量 */
    
      t = m_rand(); /* 获取一次 */
      f = t; /* 状态初始化为第一次获取结果 */
      while(t == m_rand()) {
        /* 再次获取结果与上次相同,刷状态 */
        f = f^1;
      }
     return f;
    }
    我的思想就是不停刷状态。 ######

    引用来自“看能不能改个名”的答案

    我的思路。
    int m_rand(); /* 不平均产生0 或者 1 */
    
    int r_rand() {
      int f; /* 状态 */
      int t; /* 临时量 */
    
      t = m_rand(); /* 获取一次 */
      f = t; /* 状态初始化为第一次获取结果 */
      while(t == m_rand()) {
        /* 再次获取结果与上次相同,刷状态 */
        f = f^1;
      }
     return f;
    }
    我的思想就是不停刷状态。
    你这个不能保证平均啊。你的代码等价于,对bitstreams,判断连续1,或0的个数的奇偶性。跑出来的概率是bitstreams的个数奇偶性的概率。我没觉得这个可以保证平均产生0或者1。 除非m_rand的存在上述奇偶性的概率属于平均分布,否则还是不平均。哈。 ######是不是真的啊。 我去测试下。我觉得这样能保证结果期望值是0.5######果然,这样产生的随机数是不平均的。 具体论证是由于产生是不平均的,那么连续数中概率和 不平均概率比例有关系。 连续概率中奇偶比例总体就不平均了。需要改进啊。
    0 0
相关问答

0

回答

dms对Starrocks任务编排时任务一直失败,日志也没怎么报错,可以提供个排查思路么

2022-09-14 11:04:09 32浏览量 回答数 0

1

回答

vue 下载别人的代码后npm install 报错 <?报错

2020-06-23 16:07:45 229浏览量 回答数 1

1

回答

在执行start-all.sh命令后,查看/hadoop/logs日志时发现错误?报错

2020-06-09 11:14:20 361浏览量 回答数 1

1

回答

各位老鸟们,你们认为简历上,项目经验应该怎么写比较好呢?有什么技巧要分享吗?:报错

2020-06-09 12:05:03 202浏览量 回答数 1

1

回答

JMS,Queue,阻塞队列发生异常(JBOSS环境):报错

2020-06-06 17:17:26 296浏览量 回答数 1

1

回答

CAS SSO配置后,客户端请求登陆成功、回跳的时候报错-配置报错

2020-06-01 21:22:12 257浏览量 回答数 1

3

回答

ECS 挂载 NAS 存储报错

2019-03-01 14:06:09 893浏览量 回答数 3

2

回答

将OSS中的图片下载到本地中,报错,系统找不到指定的路径

2017-03-16 16:20:50 5503浏览量 回答数 2

2

回答

ftp4oss 下载后报错。

2016-10-27 16:29:36 3211浏览量 回答数 2

6

回答

云虚拟机上安装discuzx3.2,后台seo设置不生效,不能更改门户两字

2015-10-24 21:56:10 6313浏览量 回答数 6
+关注
0
文章
13395
问答
问答排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载