zoukankan      html  css  js  c++  java
  • 面试中遇到的随机题目

    第一题:

    假设张三的mp3里有1000首歌,现在希望设计一种随机算法来随机播放。与普通随机模式不同的是,张三希望每首歌被随机抽到的概率是与一首歌的豆瓣评分(0~10分)成正比的,如朴树的《平凡之路》评分为8.9分,逃跑计划的《夜空中最亮的星》评分为9.5分,则希望听《平凡之路》的概率与《夜空中最亮的星》的概率比为89:95,。现在我们已知这1000首歌的豆瓣评分:

    (1)请设计一种随机算法来满足张三的需求。

    (2)请写代码实现自己的算法。

    思路:

    把所有歌的评分叠加起来,特定的区间属于特定的歌,然后在这个区间上随机采样(服从均匀分布),采样得到的值落在哪个区间上,就播哪首歌。例如8.9+9.5=18.4,if(8.9 < rand(0~18.4) <= 18.4)则播《夜空中最亮的星》。Boosting中就会用到这种技巧。

    代码:

    extern int musicNum; //歌曲数
    
    extern float scoreTable[]; //歌曲评分
    
    float scoreTotal = 0; //评分总和
    
    void init(float *score, int num) {
    
    scoreTotal = 0;
    
    for( int i=0; i<num; i++) {
    
    scoreTotal += score[i];
    
    }
    
    }
    
    int musicSelect(void) { 
    
    int id = 0;
    
    float tmp = ( srand(time()) % ((int)(scoreTotal*10)) )/10.0; //随机数
    
    while( (tmp-=scoreTable[id]) > 0 ) {
    
    id++;
    
    }
    
    return id;
    
    }
    
    int main(void) { 
    
    int id;
    
    init(scoreTable, musicNum);
    
    id = musicSelect(void);
    
    }

    第二题:

    假设有一个数组,里面有10个元素 int a[10]={0, 1, 2, 3, 4, 5, 6, 7, 8, 9}。请写一个算法,得到a数组的一个随机排列。要求时间复杂度尽量小,可以使用random函数。例如输出的随机序列可以是:3 6 2 4 5 1 9 8 0

    思路:

    在数组中随机取一个数,跟第一个交换,

    然后在从第二个开始的子序列中随机取一个数,跟第二个交换。。。

    代码:

    public class Test {
    
    public static void main(String[] args) {
    
    int a[]={0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
    
    int tmp;
    
    for(int i=0;i<a.length;i++){
    
    int random=getRandom(10-i);//获取小于10-i的随机整数
    
    tmp=a[i];
    
    a[i]=a[random];
    
    a[random]=tmp;
    
    }
    
    for(int i=0;i<a.length;i++){
    
    System.out.print(a[i]);
    
    }
    
    }
    
    static int getRandom(int max){
    
    int k=(int)(Math.random()*max*10)/max;//0到max随机数
    
    return k;
    
    }
    
    }
  • 相关阅读:
    网络中有三种通讯模式:单播、广播、组播(多播)
    chmod命令
    linux bash 命令重定向和多命令执行
    linux中管道符“|”的作用
    web测试常用的 linux 命令
    集群主要分成三大类 (高可用集群, 负载均衡集群,科学计算集群)
    iOS 监测电话呼入
    iOS NSUserDefaults [setValue:forKey:] [setObject:forKey:] <Objc> setValue(_,forKey:) set(_,forKey) <Swift 3>
    iOS 将navigationItem.titleView设置为自定义UISearchBar (Ficow实例讲解)
    iOS 加载Viewcontroller的几种方法
  • 原文地址:https://www.cnblogs.com/jasonkent27/p/5093525.html
Copyright © 2011-2022 走看看