热门标签 | 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;
}

基础算法——概率


推荐阅读
  • Manacher算法详解:寻找最长回文子串
    本文将详细介绍Manacher算法,该算法用于高效地找到字符串中的最长回文子串。通过在字符间插入特殊符号,Manacher算法能够同时处理奇数和偶数长度的回文子串问题。 ... [详细]
  • 经过一年的思考,我发现自己对开发的兴趣并不浓厚,而对算法研究则更加热衷。本文将探讨开发与算法之间的本质差异,并分享我的未来学习计划。 ... [详细]
  • 使用 Git Rebase -i 合并多个提交
    在开发过程中,频繁的小改动往往会生成多个提交记录。为了保持代码仓库的整洁,我们可以使用 git rebase -i 命令将多个提交合并成一个。 ... [详细]
  • 本文介绍了多种开源数据库及其核心数据结构和算法,包括MySQL的B+树、MVCC和WAL,MongoDB的tokuDB和cola,boltDB的追加仅树和mmap,levelDB的LSM树,以及内存缓存中的一致性哈希。 ... [详细]
  • A*算法在AI路径规划中的应用
    路径规划算法用于在地图上找到从起点到终点的最佳路径,特别是在存在障碍物的情况下。A*算法是一种高效且广泛使用的路径规划算法,适用于静态和动态环境。 ... [详细]
  • 蒜头君的倒水问题(矩阵快速幂优化)
    蒜头君将两杯热水分别倒入两个杯子中,每杯水的初始量分别为a毫升和b毫升。为了使水冷却,蒜头君采用了一种特殊的方式,即每次将第一杯中的x%的水倒入第二杯,同时将第二杯中的y%的水倒入第一杯。这种操作会重复进行k次,最终求出两杯水中各自的水量。 ... [详细]
  • 本文介绍了Java编程语言的基础知识,包括其历史背景、主要特性以及如何安装和配置JDK。此外,还详细讲解了如何编写和运行第一个Java程序,并简要介绍了Eclipse集成开发环境的安装和使用。 ... [详细]
  • Bootstrap 缩略图展示示例
    本文将展示如何使用 Bootstrap 实现缩略图效果,并提供详细的代码示例。 ... [详细]
  • 本文介绍了如何在 ASP.NET 中设置 Excel 单元格格式为文本,获取多个单元格区域并作为表头,以及进行单元格合并、赋值、格式设置等操作。 ... [详细]
  • LDAP服务器配置与管理
    本文介绍如何通过安装和配置SSSD服务来统一管理用户账户信息,并实现其他系统的登录调用。通过图形化交互界面配置LDAP服务器,确保用户账户信息的集中管理和安全访问。 ... [详细]
  • 如果应用程序经常播放密集、急促而又短暂的音效(如游戏音效)那么使用MediaPlayer显得有些不太适合了。因为MediaPlayer存在如下缺点:1)延时时间较长,且资源占用率高 ... [详细]
  • 网络爬虫的规范与限制
    本文探讨了网络爬虫引发的问题及其解决方案,重点介绍了Robots协议的作用和使用方法,旨在为网络爬虫的合理使用提供指导。 ... [详细]
  • 本文介绍了 AngularJS 中的 $compile 服务及其用法,通过示例代码展示了如何使用 $compile 动态编译和链接 HTML 元素。 ... [详细]
  • [c++基础]STL
    cppfig15_10.cppincludeincludeusingnamespacestd;templatevoidprintVector(constvector&integer ... [详细]
  • ZooKeeper 入门指南
    本文将详细介绍ZooKeeper的工作机制、特点、数据结构以及常见的应用场景,包括统一命名服务、统一配置管理、统一集群管理、服务器动态上下线和软负载均衡。 ... [详细]
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社区 版权所有