美文网首页
算法导论5.1 random函数的golang实现

算法导论5.1 random函数的golang实现

作者: Ahungrynoob | 来源:发表于2018-05-01 12:17 被阅读0次

思想:利用random(0,1)去构造二进制切片,然后再化为十进制数字。

复杂度: O(lg(b-a))

以下是代码:

package main

import (
    "fmt"
    "math"
    "math/rand"
    "time"
)

func randomAtoB(a, b int) int {
    s1 := rand.NewSource(time.Now().UnixNano())
    r1 := rand.New(s1)
    if b < a {
        a, b = b, a
    }
    len := int(math.Ceil(math.Log2(float64(b) - float64(a)))) //二进制切片的长度
    arr := make([]int, len)
    for {
        resultNum := 0 //十进制的数字
        for i := 0; i < len; i++ {
            arr[i] = r1.Intn(2)
            resultNum += arr[i] * int(math.Pow(2, float64(i)))
        }
        if resultNum >= 0 && resultNum <= b-a {
            return (a + resultNum)
        }
    }
}

func main() {
    fmt.Println(randomAtoB(3, 11))
}

相关文章

  • 算法导论5.1 random函数的golang实现

    思想:利用random(0,1)去构造二进制切片,然后再化为十进制数字。 复杂度: O(lg(b-a)) 以下是代码:

  • Day9 Function 函数

    导入random模块import random 一、函数 1.什么是函数 函数就是对实现某一特定功能的代码段的封装...

  • 使用golang编写简单的算法

    通过编写一些简单的算法学习golang语言。下面是插入排序算法golang语言的实现:一般的写法: golang语...

  • Golang 排序算法

    基本排序算法的Golang实现 BubbleSort InsertSort SelectSort

  • 算法导论第六章-最小优先队列

    首先是最小堆算法的golang实现: 然后是基于最小堆的最小队列的golang实现:

  • 快排【算法导论】

    注:学习算法导论,按照标准伪代码理解翻译为java实现,如有兴趣理解整个过程的细节,建议阅读《算法导论》第7章:快...

  • 什么是函数

    导入random模块 import random 1.什么是函数 函数就是对实现某一特定功能的代码段的封装 2.函...

  • 插入排序【算法导论】

    注:学习算法导论,按照标准伪代码理解翻译为java实现,如有兴趣理解整个过程的细节,建议阅读《算法导论》第二章:2...

  • 归并排序【算法导论】

    注:学习算法导论,按照标准伪代码理解翻译为java实现,如有兴趣理解整个过程的细节,建议阅读《算法导论》第二章:2...

  • 用分治法求最大子项

    算法导论中的伪代码转换而来的Java语言实现的求最大子项的实现

网友评论

      本文标题:算法导论5.1 random函数的golang实现

      本文链接:https://www.haomeiwen.com/subject/anpxrftx.html