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;
    
    }
    
    }
  • 相关阅读:
    zookeeper配置
    redis前端启动和后台启动的区别
    SpringMVC接受JSON参数详解及常见错误总结我改
    SpringMVC @RequestBody接收Json对象字符串
    spring MVC 如何接收前台传入的JSON对象数组
    springMVC 接收json字符串参数
    mysql数据库user表host字段的%问题
    mysql.user表中Host为%的含义
    开店攻略: 零售店铺经营的三大原则
    开店攻略: 如何巧妙接近顾客
  • 原文地址:https://www.cnblogs.com/jasonkent27/p/5093525.html
Copyright © 2011-2022 走看看