【算法速览】分治法

二分搜索

棋盘覆盖问题 (https://www.cnblogs.com/zf-blog/p/8336547.html

 

随机数

生成随机数 

// 产生一个[min,max)范围的随机有理数
function getRandomArbitrary(min, max) {
    return Math.random() * (max - min) + min;
}
// 产生一个[min,max]范围的随机整数,注意这个范围包含max
function getRandomInt(min, max) {
    return Math.floor(Math.random() * (max - min + 1)) + min;
}

上面这个方法中的+ 1是一个很容易遗漏的地方,考虑一下为什么Math.floor(Math.random()*10)最大只能产生9。(因为Math.random生成的是[0,1)) 

 

均匀打乱算法:Fisher–Yates shuffle。

function shuffle(array) {
    var m = array.length,
        t, i;
    while (m) {
        i = Math.floor(Math.random() * m--);
        t = array[m];
        array[m] = array[i];
        array[i] = t;
    }
    return array;
}

未知N的一批数据中,抽取M个随机数:蓄水池算法 (https://blog.csdn.net/huagong_adu/article/details/7619665

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值