首页 > 编程语言 >go语言编写算法

go语言编写算法

时间:2023-06-14 19:46:20浏览次数:36  
标签:10 概率 min ++ len 算法 随机数 go 编写

1、冒泡排序

    // 冒泡排序
    a := []uint8{9, 20, 10, 23, 7, 22, 88, 102}
    for i := 0; i < len(a); i++ {
        for k := i + 1; k < (len(a) - i); k++ {
            if a[i] > a[k] {
                a[i], a[k] = a[k], a[i]
            }
        }
    }
    fmt.Println(a)
冒泡排序

2、选择排序

    // 选择排序
    a := []int8{9, 20, -1, 10, -5, 23, 7, 22, 88, 102}
    for i := 0; i < len(a); i++ {
        var (
            min_n int8 = a[i]
            min_i int  = i
        )
        for k := i + 1; k < len(a); k++ {
            if a[k] < min_n {
                min_n = a[k]
                min_i = k
            }
        }
        a[i], a[min_i] = a[min_i], a[i]
    }
    fmt.Println(a)
选择排序

 3、插入排序

    a := []int8{9, 20, 22, -1, 10, -5, 23, 7, 7, 22, 88, 102}
    for i := 1; i < len(a); i++ {
        for k := i - 1; k >= 0; k-- {
            if a[k+1] < a[k] {
                a[k+1], a[k] = a[k], a[k+1]
            }
        }
    }
    fmt.Println(a)
插入排序

 4、随机数出现的概率为平方

正常来讲,对于[0-10)范围内的任意一个整除的随机数概率为0.1,如果我要实现其中任意一个整数的随机数为0.1^2呢?

 下面的示例中,是计算随机数为0-4范围的平方,正常来讲,0-4范围是5个,所以出现的概率为1/2。求其平方,即0.25

    // 随机数的概率为平方
    var count float64 = 0
    for i := 0; i < 100000; i++ {
        if rand.Intn(10) < 5 {
            if rand.Intn(10) < 5 {
                count++
            }
        }
    }
    p := count / 100000
    fmt.Println(p)
随机数平方概率

 5、这是一个题目:

我当前有一个函数可以等概率随机返回[1-5]之间的任意一个数,在不使用内部函数的前提下,如何只根据当前的这个随机函数来等概率返回[1-7]中的任意一个数呢?

下面是这个随机函数:

func f1() int {
    rn := rand.Intn(5) + 1
    return rn
}

解题思路是这样的,可以先构造一个函数,等概率返回0和1,然后再构造一个函数,1-7中的数,可以用三个bit位来表示了,但是还有返回0的时候,当返回0的时候,扔掉,重新来随机

下面是等概率返回0和1的函数:

func f2() int {
    for {
        num_1 := f1()
        if num_1 < 3 {
            return 0
        } else if num_1 == 3 {
            continue
        } else {
            return 1
        }
    }
}
f2

下面是返回[1-7]的函数:

func f3() int {
    for {
        num_2 := (f2() << 2) + (f2() << 1) + f2()
        if num_2 == 0 {
            continue
        } else {
            return num_2
        }
    }
}
f3()

 

标签:10,概率,min,++,len,算法,随机数,go,编写
From: https://www.cnblogs.com/caibao666/p/17479446.html

相关文章

  • 简单易学的机器学习算法——K-Means算法
    一、聚类算法的简介  聚类算法是一种典型的无监督学习算法,主要用于将相似的样本自动归到一个类别中。聚类算法与分类算法最大的区别是:聚类算法是无监督的学习算法,而分类算法属于监督的学习算法。  在聚类算法中根据样本之间的相似性,将样本划分到不同的类别中,对于不同的相似......
  • 推荐算法——基于矩阵分解的推荐算法
    一、推荐算法概述对于推荐系统(RecommendSystem,RS),从广义上的理解为:为用户(User)推荐相关的商品(Items)。常用的推荐算法主要有:基于内容的推荐(Content-BasedRecommendation)协同过滤的推荐(CollaborativeFilteringRecommendation)基于关联规则的推荐(AssociationRule-Based......
  • 推荐系统中的常用算法——基于Graph Embedding的GES和EGES
    1.概述相比较于基于CollaborativeFilter算法,基于基础GraphEmbedding模型可以根据用户的行为序列学习出item的embedding,利用item对应的Embedding可以方便计算item与item之间的相似度,并在实践中被证明是卓有成效的方法,在基于基础GraphEmbedding模型,主要包括item2vec,node2vec,deepw......
  • 文本分类fastText算法
    1.概述在深度学习遍地开花的今天,浅层的网络结构甚至是传统的机器学习算法被关注得越来越少,但是在实际的工作中,这一类算法依然得到广泛的应用,或者直接作为解决方案,或者作为该问题的baseline,fastText就是这样的一个文本分类工具。fastText是2016年由facebook开源的用于文本分类的工......
  • 机器学习算法实现解析——libFM之libFM的训练过程概述
    本节主要介绍的是libFM源码分析的第四部分——libFM的训练。FM模型的训练是FM模型的核心的部分。4.1、libFM中训练过程的实现在FM模型的训练过程中,libFM源码中共提供了四种训练的方法,分别为:StochasticGradientDescent(SGD),AdaptiveSGD(ASGD),AlternatingLeastSquares(ALS)和MarkovCh......
  • 挑战数据结构和算法面试题——二叉搜索树的后序遍历
    分析:根据二叉查找树的定义,二叉查找树或者是一棵空二叉树,或者是具有一下特性的二叉树:若它的左子树不为空,则左子树上的所有结点的值均小于根节点的值;若它的右子树不为空,则右子树上的所有结点的值均小于根节点的值;它的左右子树又分别是二叉查找树。结合二叉树的后序遍历,则初始序列的最......
  • 【数据结构和算法面试题】左旋转字符串
    问题分析:本题是常见的旋转字符串的问题,解决的方法是两步旋转的方法:方法:voiddo_reverse(char*p_start,char*p_end){ if(NULL==p_start||NULL==p_end||p_start>p_end)return; chartmp; while(p_start<p_end){ tmp=*p_start; *p_start=*p_end; *p_end......
  • VSCode - Replace Tab with 4 Spaces for Go
    Checkbelowsettings:Ifgotbelowerrormessage,justrunthecommand:The"goformat"commandisnotavailable.Run"goinstall-vwinterdrache.de/goformat/[email protected]"toinstall. Openafile,cl......
  • 代码随想录算法训练营第七天| 344.反转字符串 、 541. 反转字符串II、 剑指Offer 05.
     344.反转字符串代码:1voidreverseString(vector<char>&s){23inti=0;4intj=s.size()-1;5while(i<j)6{7charmid=s[i];8s[i]=s[j];9s[j]=mid;1011i++;12......
  • 【数据结构与算法面试题】子数组的最大和
    题目来源“数据结构与算法面试题80道”。问题分析:在数组的每一个位置处保存当前的最大值,当前的最大值组成为:解决方案:intget_max_subarray(int*a,intlength,bool&is_array_ok){ if(NULL==a||length<=0){ is_array_ok=false; return0; } int*p_h_a=(int*......