精华内容
下载资源
问答
  • 易语言API随机取数模块源码,API随机取数模块,GenerateRandom,GenerateRandomLong,GenerateRandomInteger,CryptAcquireContext,CryptCreateHash,CryptDestroyHash,CryptGetHashParam,CryptGenRandom,CryptHashData,...
  • API随机取数模块.rar

    2020-04-04 10:08:09
    API随机取数模块.rar
  • 随机取数

    千次阅读 2009-07-24 13:45:00
    你的任务是从这N个元素中随机取出k个元素。你只能遍历这个链表一次。你的算法必须保证取出的元素恰好有k个,且它们是完全随机的(出现概率均等)。 解答:先选中前k个, 从第k+1个元素到最后一个元素为止, 以1/i (i...

    1. 给你一个长度为N的链表。N很大,但你不知道N有多大。你的任务是从这N个元素中随机取出k个元素。你只能遍历这个链表一次。你的算法必须保证取出的元素恰好有k个,且它们是完全随机的(出现概率均等)。

    解答:

    先选中前k个, 从第k+1个元素到最后一个元素为止, 以1/i  (i=k+1, k+2,...,N) 的概率选中第i个元素, 并且随机替换掉一个原先选中的元素, 这样遍历一次得到k个元素, 可以保证完全随机选取。 这个算法叫做蓄水池抽样,在某门课上听到的,证明起来也不是很复杂。

    可以参考编程珠玑问题12.10:如何从n个排序的对象中选择一个,但实现不知道n的大小?

    解答:总是选择第一个对象,并使用1/2的概率选择第二个对象,使用1/3的概率选择第三个对象,以此类推。在过程结束时,每个对像被选中的概率都是1/n。伪码如下:

    i = 0;

    while( more objects)

    {

          with probability 1.0/i++

                   choice = this object

          print choice


    }

     

     

    2. 给你一个数组A[1..n],请你在O(n)的时间里构造一个新的数组B[1..n],使得B[i]=A[1]*A[2]*...*A[n]/A[i]。你不能使用除法运算。

    Solution:
    1. 由于不知道N多大,因此不能使用[0, n]之间的等概率随机整数。遍历链表,给每个元素赋一个0到1之间的随机数作为权重(像Treap一样),最后取出权重最大的k个元素。你可以用一个堆来维护当前最大的k个数。
    2. 从前往后扫一遍,然后从后往前再扫一遍。也就是说,线性时间构造两个新数组,P[i]=A[1]*A[2]*...*A[i],Q[i]=A[n]*A[n-1]*...*A[i]。于是,B[i]=P[i-1]*Q[i+1]。

    展开全文
  • 随机取数的列子

    2018-07-16 11:41:24
    本系统是随机获取数字,用于随机编码,抽奖,是应用程序。所有代码全有
  • Scratch基础(六):随机取数

    千次阅读 2020-08-03 22:25:41
    制作一个“随机取数”的程序,如下图: 题目: 设定“开始的数字”和“结束的数字”(从1到100的范围内),以及“取数的个数”,然后由程序随机抽取相应个数的数字,插入到列表中。 隐藏条件: (1)“开始的数字”...

    Scratch基础(六):随机取数

    制作一个“随机取数”的程序,如下图:
    在这里插入图片描述
    题目:
    设定“开始的数字”和“结束的数字”(从1到100的范围内),以及“取数的个数”,然后由程序随机抽取相应个数的数字,插入到列表中。
    隐藏条件:
    (1)“开始的数字”<“结束的数字”;
    (2)“取数的个数” <(“结束的数字”-“开始的数字”)

    制作方法:
    1、设置【变量】,第一个图中的3个变量、1个列表,并限定相关变量的范围,如下图:
    在这里插入图片描述
    【变量】右键,选择【滑杆】,再选择【改变滑块范围】,设置到“1”到“100”。

    2、制作文字和按钮,第一个图中的“随机取数程序”文字图片,以及“随机取数”按钮图片。

    3、编写条件判断。
    在这里插入图片描述
    采用【自制积木】编写上图的程序。

    4、编写“随机选取数字”程序
    在这里插入图片描述
    采用【自制积木】编写上图的程序。

    5、制作按钮的执行程序
    在这里插入图片描述
    这里有按钮的按下和弹起效果;“计时”方法的启动(计时程序就不提供了,请大家自行编写);“开始”后触发“小猫”动作(相关程序,大家可参考前面的例子);调用【检查数字逻辑】和【随机选择数字】。

    本章重点:
    1、【运算】组件的灵活运用
    2、【自制积木】组件的灵活运用(可以简化程序,以及相关积木的重用)
    3、编写一个数学题目的程序设计,有条件的话,可以采用流程图或者思维导图;简单的方法,可以采用便利贴的模式。

    展开全文
  • 最近读了项目中的工具脚本,发现一个随机取数的函数,功能大概是从M个数中不重复的随机取出N个数,算是数组随机排序然后取前N个值的变种。

    等概率随机取数算法的几种实现

      最近读了项目中的工具脚本,发现一个随机取数的函数,功能大概是从M个数中不重复的随机取出N个数,算是数组随机排序然后取前N个值的变种。

      脚本实现采取原始的方法,每随机取一个数就放到一个数组中,下次取数时遍历结果数组判断是否已经取出,平均时间复杂度为O(MlogM),空间复杂度O(N),效率不高。

      想了一下解决方案,能优化的地方应该就是将遍历数组判断是否取出使用哈希或者红黑树实现,以空间换时间,虽然可以降低时间复杂度,但原算法仍存在问题:当M接近于N的时候,效率会急剧下降,十分恐怖。

      如果借助洗牌算法,获取一个随机排列的子集,便能实现等概率随机取数的功能。

    1. Fisher-Yates Shuffle算法

      最早于1938年由Ronald Fisher和Frank Yates所著《Statistical tables for biological,agricultural and medical research》提出,算法描述为:

    1. 将1到N数字存到数组中
    2. 从数组中取一个1到剩下数字个数的随机数k
    3. 从低位开始,将数组第k个数字取出,并保存到结果数组末尾
    4. 重复第2步,直到所有数字都被取出
    5. 第3步得到的结果数组就是所求的随机序列

    该算法存在对数组随机元素的删除操作,时间复杂度O(N^2),空间复杂度O(M),效率仍然比较低。

    2. Knuth-Durstenfeld Shuffle算法

      Knuth和Durstenfeld在Fisher等人的基础上进行了改进。每次随机取出数字后不是从数组中删除,而是与数组尾部进行交换,时间复杂度提升到O(N)

    lua实现

    -- Knuth-Durstenfeld Shuffle算法,时间复杂度O(N),不需要额外空间
    function shuffle(array)
        local len = #array -- 取array的长度
        while len > 0 do
            local r = math.random(1,len)
            -- 交换
            t[r],t[len] = t[len],t[r]
            -- 待排列数组长度减小
            len = len - 1
        end     
        return array
    end
    -- 等概率随机取数算法
    function random_N_not_repeated(array,n)
        local len = #array
        if n > len then return array end
        local result = {}
        for v = 1 , n do
            local r = math.random(1,len)
            table.insert(result,array[r])
            -- 交换
            array[r] = array[len]
            -- 待取数组长度减小
            len = len - 1
        end
        return result
    end
    

    3. Inside-Out算法

      Knuth-Durstenfeld Shuffle是一个in-place算法,会改变原始数据的顺序,而有些场景中我们需要保留原始数据,因此需要额外的空间存储打乱的序列。

      Inside-Out算法思想是设置一个游标i从前向后扫描原始数据的拷贝,在[0,i]之间随机一个下标j,然后用位置j的元素替换掉位置i的数字,再用原始数据位置i的元素替换掉拷贝数据位置j的元素。其作用相当于在拷贝数据中交换i与j位置处的值。与直接从复制数组进行交换相比少一次交换操作,时间复杂度O(N)

    lua实现

    -- Inside-Out 算法,时间复杂度O(N)
    function shuffle(array)
        local len = #array
        local result = deep_copy(array)
        for i = 1 , len do
            r = math.random(1,i)
            result[i] = result[j]
            result[j] = array[i]
        end
        return result
    end
    -- 等概率随机取数算法
    function random_N_not_repeated(array,n)
        local m = #array -- 取array的长度
        -- 集合数目不够抽取数目
        if m <= n then
            return t
        end
    
        local result = array
    
        for i = 1 , n do
            j = math.random(1,i)
            result[i] = result[j]
            result[j] = array[i]
        end
    
        return result
    end
    

    拓展:数据流等概率取数(蓄水池抽样问题 Reservoir Sampling)

      上述算法均需要一个额外的辅助空间,但实际环境中可能会遇到无法完全存储的海量数据流,从这个海量数据流中等概率取出N个数的思路略有不同,当我们无法确定数据流的个数,即M的大小时,无法使用上述方法进行随机取数,这就是数据科学中常见的蓄水池抽样的问题,算法实现描述为:

    1. 将数据流前N个数字存到数组中
    2. 从数据流的第N+1个数开始,取出数据流中的一个数。
    3. 假设这个数索引为K,则以N/K的概率选中该数。
    4. 如果该数选中,则随机替换数组中的一个记录。
    5. 重复第2步直到数据流结束。

    参考文献

    1.Fisher-Yates shuffle 洗牌算法

    2.洗牌算法shuffle

    3.蓄水池抽样-《编程珠玑读书笔记》

    展开全文
  • 从列表中随机取数

    千次阅读 2017-12-05 21:11:43
    问题一:从列表中随机取数。 列表为[“a”,”j”,”g”,”h”,”k”,”i”,”l”,”f”,”v”,”b”,”2”,”5”,”x”] 版本1 import numpy as np word_list = ["a","j","g","h","k","i","l","f","v","b","2",...

    问题一:从列表中随机取数。

    列表为[“a”,”j”,”g”,”h”,”k”,”i”,”l”,”f”,”v”,”b”,”2”,”5”,”x”]

    版本1

    import numpy as np
    word_list = ["a","j","g","h","k","i","l","f","v","b","2","5","x"]
    len_list = range(len(word_list))
    #将列表生成字典,key为元列表的id序号,values为对应序号的字母,先使用zip将列表组合,再用dict将列表化为字典,id在前,字符在后
    word_dict = dict(zip(word_len,word_list))
    result = []
    random_list = np.random.randint(0,13,5)
    random_list.sort()
    def random_dictvalue(random_list):
        for i in random_list:
            result.append(word_dict[i])
        return result
    random_dictvalue(random_list)
    print (result)
    
    展开全文
  • 随机函数(随机取数

    千次阅读 2017-09-01 21:50:58
    Math.random( )是随机函数:随机取0~1之间的任意; 1、四舍五入函数 如果是一位整数,那么就要用到四舍五入函数:Math.round( ); 例如: alert(Math.round(3.4));//3 alert(Math.round(3.5));//4 2、...
  • python字典随机取数

    千次阅读 2020-08-12 21:00:19
    import random listb = {1: '张三', 2: '李四', 3: '王五', 4: '赵六', 5: '王麻子', 6: '包子', 7: '豆浆'} ...a = random.sample(lista.keys(), 1) # 随机一个字典中的key,第二个参数为限制个 ...
  • python之路——从列表中随机取数

    千次阅读 2017-12-05 21:19:16
    自学python,这是我发表的第一篇python博客问题一:从列表中随机取数。列表为[“a”,”j”,”g”,”h”,”k”,”i”,”l”,”f”,”v”,”b”,”2”,”5”,”x”]版本1import numpy as np word_list = ["a","j","g",...
  • 输入一个正整数,再随机抽选出来,按一下选一个,还可以重新输入
  • 一、前言 初一英语单词随机抽查,运行一段时间后,有的单词已抽查了3-4遍,仍有三分之一的单词没抽查到。...如果列表小于提出,在列表外的数据中,随机生成补齐,满足提取要求。 三、代码 import random i...
  • 基于Oracle访问数据不同方法:包含全表扫描和采样表扫描,介绍三种随机取样方式,并分别从随机性和性能(读取时间)作比较。
  • SQL server 在大数据中随机取数

    千次阅读 2013-10-15 09:17:47
    Summary: The authors offer new ideas on how to select random rows from a large table. (4 printed pages) 原文地址 http://msdn.microsoft.com/en-us/library/cc441928.aspx ...If you
  • C/C++ 中随机取数程序

    千次阅读 2009-06-07 13:05:00
    在计算机中并没有一个真正的随机数发生器,但是可以做到使产生的数字重复率很低,这样看起来好象是真正的随机数,实现这一功能的程序叫伪随机数发生器。 有关如何产生随机数的理论有许多,如果要详细地讨论,需要...
  • 主要介绍了js取0-9随机取4个不重复的数字,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 随机取不重复的.sb2

    2019-10-09 16:04:19
    儿童编程开发软件scratch制作简单程序《随机取不重复的
  • Hive表随机抽样取数

    2020-06-18 21:53:20
    1、按比例随机抽样 - 样本总量M, rand()<=(N/M+μ) 例如:如果抽10%的话 select * from table where rand()<=0.1;...特别注意的是:抽样迁先确认表的总记录 ...- 然后再在这些随机样本里随机取N条 这样一...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 342,807
精华内容 137,122
关键字:

随机取数