热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

基础算法——概率

*************************************************************************FileName:probabi
/*************************************************************************
    > File Name: probability.cpp
    > Author: xinyang
    > Mail: xuechen.xy@gmail.com 
    > Created Time: Wed 07 Oct 2015 03:11:56 PM CST
 ************************************************************************/

#include 
#include 
#include 
#include 
using namespace std;

/*
 * 获取从a到b之间的一个随机数
 */
int get_random(int a, int b) {
    srand((unsigned)time(NULL));
    return rand()%(b - a) + a ;
}

/*
 * 从1, 2, ..., n中找出k个不重复的随机数
 */
void get_k_random(int A[], int n, int k, vector<int> &ret) {
    if (A == NULL || n <= 0 || k > n) {
        return ;
    }

    int num = n - 1;
    int index;
    for (int i = 0; i i) {
        index = get_random(0, num);
        int tmp = A[index];
        A[index] = A[num];
        A[num] = tmp;
        ret.push_back(A[num]);
        --num;
    }
}

/*
 * 从一个数组中等概率返回一个最大数
 */
int get_random_max(int A[], int n) {
    if (A == NULL || n <= 0) {
        cout <<"array is null" << endl;
        return -1;
    }

    int max = A[0];
    int max_count = 1;
    vector<int> max_vec;
    max_vec.push_back(0);
    for (int i = 1; i i) {
        if (max == A[i]) {
            max_vec.push_back(i);
            max_count ++;
        } else if (max < A[i]) {
            max = A[i];
            while (!max_vec.empty()) {
                max_vec.pop_back();
            }
            max_count = 1;
            max_vec.push_back(i);
        }
    }

    int aim_index = get_random(0, max_count - 1);
    return A[max_vec[aim_index]];
}

/*
 * 从一个数组(n个数)中等概率返回m个数(m <= n)
 */
void get_random_m_digits(int A[], int n, int B[], int m) {
    if (A == NULL || n <= 0 || B == NULL || m <= 0 || m > n) {
        return;
    }
    
    vector<int> rand_array;
    int *TMP = new int[n];
    for (int i = 0; i i) {
        TMP[i] = i;
    }
    get_k_random(TMP, n, m, rand_array);
    delete[] TMP;
    TMP = NULL;

    for (int i = 0; i i) {
        B[i] = A[rand_array[i]];
    }
}

void genknuth(int m, int n) {
    clock_t start, end;
    start = clock();
    srand(time(NULL));
    for(int i = 0; i ) {
        if(rand() % (n - i) < m) {
            cout < endl;
            if(!(--m)) {
                break;
            }
        }
    }

    end = clock();
    cout <<"Process took " << 
        (double(end - start) / CLOCKS_PER_SEC) <<"seconds" << endl;
    return ;
}

int main() {
    int A[100];
    for (int i = 0; i <100; ++i) {
        A[i] = i + 1;
    }

    cout <<"从1, ..., 100获取50个随机数" << endl;
    vector<int> random_without_dup;
    get_k_random(A, 100, 50, random_without_dup);
    for (unsigned int i = 0; i i) {
        cout <;
    }
    cout < endl;

    cout <<"从一个数组中随机返回一个最大数" << endl;
    int B[] = {1, 2, 5, 5};
    cout <4) << endl;
    cout << endl;

    cout <<"从一个包含n个数的数组中随机抽取m个数" << endl;
    int C[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    int *D = new int[5];
    get_random_m_digits(C, 10, D, 5);
    for (int i = 0; i <5; ++i) {
        cout <;
    }
    cout < endl;;

    cout <<"从1, ..., n中随机选m个数字" << endl;
    genknuth(5, 10);

    return 0;
}

基础算法——概率


推荐阅读
  • 深入剖析JVM垃圾回收机制
    本文详细探讨了Java虚拟机(JVM)中的垃圾回收机制,包括其意义、对象判定方法、引用类型、常见垃圾收集算法以及各种垃圾收集器的特点和工作原理。通过理解这些内容,开发人员可以更好地优化内存管理和程序性能。 ... [详细]
  • 本题要求在一组数中反复取出两个数相加,并将结果放回数组中,最终求出最小的总加法代价。这是一个经典的哈夫曼编码问题,利用贪心算法可以有效地解决。 ... [详细]
  • 深入解析动态代理模式:23种设计模式之三
    在设计模式中,动态代理模式是应用最为广泛的一种代理模式。它允许我们在运行时动态创建代理对象,并在调用方法时进行增强处理。本文将详细介绍动态代理的实现机制及其应用场景。 ... [详细]
  • 本文详细探讨了 PHP 中 method_exists() 和 is_callable() 函数的区别,帮助开发者更好地理解和使用这两个函数。文章不仅解释了它们的功能差异,还提供了代码示例和应用场景的分析。 ... [详细]
  • 本文详细介绍了如何解决 Microsoft SQL Server 中用户 'sa' 登录失败的问题。错误代码为 18470,提示该帐户已被禁用。我们将通过 Windows 身份验证方式登录,并启用 'sa' 帐户以恢复其访问权限。 ... [详细]
  • 探索新一代API文档工具,告别Swagger的繁琐
    对于后端开发者而言,编写和维护API文档既繁琐又不可或缺。本文将介绍一款全新的API文档工具,帮助团队更高效地协作,简化API文档生成流程。 ... [详细]
  • 本文探讨了在构建应用程序时,如何对不同类型的数据进行结构化设计。主要分为三类:全局配置、用户个人设置和用户关系链。每种类型的数据都有其独特的用途和应用场景,合理规划这些数据结构有助于提升用户体验和系统的可维护性。 ... [详细]
  • Linux中的yum安装软件
    yum俗称大黄狗作用:解决安装软件包的依赖关系当安装依赖关系的软件包时,会将依赖的软件包一起安装。本地yum:需要yum源,光驱挂载。yum源:(刚开始查看yum源中的内容就是上图 ... [详细]
  • 鼠标悬停出现提示信息怎么做
    概述–提示:指启示,提起注意或给予提醒和解释。在excel中会经常用到给某个格子增加提醒信息,比如金额提示输入数值或最大长度值等等。设置方式也有多种,简单的,仅为单元格插入批注就可 ... [详细]
  • 气象对比分析
    本文探讨了不同地区和时间段的天气模式,通过详细的图表和数据分析,揭示了气候变化的趋势及其对环境和社会的影响。 ... [详细]
  • 本文探讨了C++编程中理解代码执行期间复杂度的挑战,特别是编译器在程序运行时生成额外指令以确保对象构造、内存管理、类型转换及临时对象创建的安全性。 ... [详细]
  • ListView简单使用
    先上效果:主要实现了Listview的绑定和点击事件。项目资源结构如下:先创建一个动物类,用来装载数据:Animal类如下:packagecom.example.simplelis ... [详细]
  • 本文详细介绍了一种高效的算法——线性筛法,用于快速筛选出一定范围内的所有素数。通过该方法,可以显著提高求解素数问题的效率。 ... [详细]
  • 本文详细介绍了get和set方法的作用及其在编程中的实现方式,同时探讨了点语法的使用场景。通过具体示例,解释了属性声明与合成存取方法的概念,并补充了相关操作的最佳实践。 ... [详细]
  • Vue 开发与调试工具指南
    本文介绍了如何使用 Vue 调试工具,包括克隆仓库、安装依赖包、构建项目以及在 Chrome 浏览器中加载扩展的详细步骤。 ... [详细]
author-avatar
mobiledu2502892377
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有