`
kmplayer
  • 浏览: 509830 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

生成[0 maxval]范围内m个整数的随机有序序列.

J# 
阅读更多
1,借助于容器set实现.
#include <iostream>
#include <set>
#include <ctime>
using namespace std ;

class IntSetSTL
{
public:
    IntSetSTL(int max,int num){}
    int size(){ return S.size(); }
    void insert(int t){ S.insert(t); }
    void report(int* v)
    {
        int i=0;
        for(set<int>::iterator ite=S.begin();ite!=S.end();ite++)
            v[i++]=*ite;
    }
private:
    set<int> S;
};

void generateSetSTL(int m,int maxVal)
{
    int* v=new int[m];
    IntSetSTL stl(maxVal,m);
    while(stl.size()<m)
        stl.insert(rand()%(1+maxVal));
    stl.report(v);
    for(int i=0;i<m;i++)
        cout<<v[i]<<endl;
    cout<<endl;
    delete[] v;

}

int main ()
{
    srand(time(0));
    const int maxVal=100;
    const int m=10;
    generateSetSTL(m,maxVal);
	return 0 ;
}


2,用数组实现
#include <iostream>
#include <ctime>
using namespace std ;

class IntSetArray
{
public:
    IntSetArray(int maxVal,int m)
    {
        a=new int[m+1];
        //设置一个哨兵
        n=0;
        a[0]=maxVal;
    }
    int size(){ return n; }
    void insert(int t)
    {
        int i;
        for(i=0;a[i]<t;i++)
            ;
        if(a[i]==t)
            return;
        for(int j=size();j>=i;j--)
            a[j+1]=a[j];
        a[i]=t;
        n++;
    }
    void report(int* v)
    {
        for(int i=0;i<size();i++)
            v[i]=a[i];
    }
private:
    int* a;
    int n;
};

void generateSetArray(int m,int maxVal)
{
    int* v=new int[m];
    IntSetArray array(maxVal,m);
    while(array.size()<m)
        array.insert(rand()%maxVal);
    array.report(v);
    for(int i=0;i<m;i++)
        cout<<v[i]<<endl;
    cout<<endl;
    delete[] v;

}

int main ()
{
    srand(time(0));
    const int maxVal=100;
    const int m=10;
    generateSetArray(m,maxVal);
	return 0 ;
}

3,用链表实现

#include <iostream>
#include <ctime>
using namespace std ;

struct Node
{
    Node(int i,Node* p):val(i),next(p){}
    int val;
    Node* next;
};

class IntSetList
{
public:
    IntSetList(int maxVal,int m)
    {
        sentinel=head=new Node(maxVal,NULL);
        n=0;
    }
    int size(){ return n; }
    void insert(int t)
    {
        head=rinsert(head,t);
    }
    void report(int* v)
    {
        int i=0;
        for(Node* p=head;p!=sentinel;p=p->next)
            v[i++]=p->val;
    }
private:
    //这里nb的递归
    Node* rinsert(Node* p,int t)
    {
        if( t>(p->val) )
            p->next=rinsert(p->next,t);
        else if( t<(p->val) )
        {
            p=new Node(t,p);
            n++;
        }
        return p;
    }
    Node* head;
    //哨兵节点
    Node* sentinel;
    int n;
};

void generateSetList(int m,int maxVal)
{
    int* v=new int[m];
    IntSetList list(maxVal,m);
    while(list.size()<m)
        list.insert(rand()%maxVal);
    list.report(v);
    for(int i=0;i<m;i++)
        cout<<v[i]<<endl;
    cout<<endl;
    delete[] v;

}

int main ()
{
    srand(time(0));
    const int maxVal=100;
    const int m=10;
    generateSetList(m,maxVal);
	return 0 ;
}

4,用二叉搜索树实现

#include <iostream>
#include <ctime>
using namespace std ;

struct Node
{
    Node(int i):val(i),lchild(NULL),rchild(NULL){}
    int val;
    Node* lchild;
    Node* rchild;
};

class IntSetBST
{
public:
    IntSetBST(int maxVal,int m):root(NULL),n(0){}
    int size(){ return n; }
    void insert(int t)
    {
        root=rinsert(root,t);
    }
    void report(int* x)
    {
        v=x;
        vn=0;
        traverse(root);
    }
private:
    //这里nb的递归
    Node* rinsert(Node* p,int t)
    {
        if(p==NULL)
        {
            p=new Node(t);
            n++;
        }
        else if( t>(p->val) )
        {
            p->rchild=rinsert(p->rchild,t);
        }
        else if( t<(p->val) )
        {
            p->lchild=rinsert(p->lchild,t);
        }
        return p;
    }
    void traverse(Node* p)
    {
        if(p==NULL)
            return;
        traverse(p->lchild);
        v[vn++]=p->val;
        traverse(p->rchild);
    }
    Node* root;
    int n;
    int *v,vn;
};

void generateSetBST(int m,int maxVal)
{
    int* v=new int[m];
    IntSetBST bst(maxVal,m);
    while(bst.size()<m)
        bst.insert(rand()%maxVal);
    bst.report(v);
    for(int i=0;i<m;i++)
        cout<<v[i]<<endl;
    cout<<endl;
    delete[] v;

}

int main ()
{
    srand(time(0));
    const int maxVal=100;
    const int m=10;
    generateSetBST(m,maxVal);
	return 0 ;
}


5,用比特位向量实现.
#include <iostream>
#include <ctime>
using namespace std ;

class IntSetBitVector
{
public:
    IntSetBitVector(int maxVal,int m):hi(maxVal),n(0),x(new int[maxVal/BITSPERWORD+1])
    {
        for(int i=0;i<hi;i++)
            clear(i);
    }
    int size(){ return n; }
    void insert(int t)
    {
        if(!test(t))
        {
            set(t);
            n++;
        }
    }
    void report(int* v)
    {
        int j=0;
        for(int i=0;i<hi;i++)
        {
            if(test(i))
                v[j++]=i;
        }
    }
private:
    enum{ BITSPERWORD=32, SHIFT=5, MASK=0x1f};
    void set(int i)
    {
        x[i>>SHIFT]|=(1<<(i&MASK));
    }
    void clear(int i)
    {
        x[i>>SHIFT]&=~( 1<<(i&MASK) );
    }
    int test(int i)
    {
        return x[i>>SHIFT]&(1<<(i&MASK));
    }

    int n,hi;
    int* x;
};

void generateSetBitVector(int m,int maxVal)
{
    int* v=new int[m];
    IntSetBitVector bitVector(maxVal,m);
    while(bitVector.size()<m)
        bitVector.insert(rand()%maxVal);
    bitVector.report(v);
    for(int i=0;i<m;i++)
        cout<<v[i]<<endl;
    cout<<endl;
    delete[] v;

}

int main ()
{
    srand(time(0));
    const int maxVal=100;
    const int m=10;
    generateSetBitVector(m,maxVal);
	return 0 ;
}
分享到:
评论

相关推荐

    基于TensorFlow常量、序列以及随机值生成实例

    与正态分布类似,但会截去平均值之外超过2个标准差的值,确保所有生成的值都在可接受范围内。 掌握这些基本操作对于使用TensorFlow进行机器学习模型的搭建至关重要。它们不仅可以用于初始化模型参数,还可以在模型...

    TensorFlow总结

    - `tf.random.uniform()`:生成指定范围内的均匀分布随机数,例如 `tf.random.uniform([4, 5], minval=0, maxval=1)` 生成一个 4x5 的张量,每个元素在 [0, 1) 区间内。 3. 张量操作: - `tf.cast()`:将张量转换...

    C++基础-编程练习题和答案.pdf

    - 第二行包含m个整数,表示已排序的数组元素。 - 第三行包含一个整数x,表示待插入的整数。 **输出格式**: 输出一个整数,表示x应该被插入的位置。 **示例**: - **输入样例**: - 10 - 9 19 20 23 56 78 90 ...

    EXCEL VBA代码求某一列的绝对值的最大值

    下面详细介绍如何使用VBA编写一个函数`AbsMax`来计算选定范围内的数据的绝对值最大值: ```vba Function AbsMax(rng As Range) As Double Dim cell As Range Dim maxVal As Double ' 初始化最大值为0 maxVal ...

    排序程序文档

    代码中包含一个名为`Maxval`的函数,用于找出数组中最大连续出现的相同值。这个函数首先初始化几个变量,然后遍历数组,使用一个计数器来跟踪当前元素与下一个元素是否相等。当遇到不同的元素时,它会更新最大连续值...

    matlab开发-TruthTableMatrix生成器

    在MATLAB中,开发一个“TruthTableMatrix生成器”是为了帮助用户快速生成任意数量变量的逻辑真值表。真值表是逻辑运算和布尔代数中的一个重要工具,它列出所有可能的输入组合及其对应的输出结果。这个生成器适用于...

    江苏省2011年二级计算机考试VB上机试题3.doc

    1. 使用InputBox生成随机数组:根据用户输入的数据个数(或默认值),生成包含两位数的随机整数数组,并显示在Text1文本框中。 2. 查找并交换元素:在Text1数组中查找最大和最小值,将最大值与数组首元素交换,...

    山东省分析数据库的考试题目基础.pdf

    给定一个链表和两个参数s和m,从第s个节点开始报数,数到第m个节点将其删除,然后从下一个节点重新开始报数,直到链表为空。解决这个问题可以使用两个指针,一个用于报数,一个用于记录当前节点,当报数到达m时,...

    递归求链表中最大值、平均值、节点数

    在这个问题中,我们要用递归来处理单链表,并实现三个主要功能:找到链表中的最大值、计算链表的节点数量以及求所有整数的平均值。下面将详细讨论这些知识点。 首先,链表是一种基本的数据结构,由一系列节点组成,...

    C 代码 生成 ASCII 可移植像素映射 (PPM) 图像 曼德布洛特分形集.rar

    最大颜色值(Maxval)定义了颜色范围,通常在0到255之间;像素数据按照行优先顺序存储,每像素由红、绿、蓝三个分量表示,每个分量用一个整数表示。 曼德布罗特分形集是通过迭代函数系统生成的,其基本思想是计算每...

    【官方文档】TensorFlow Python API documentation.pdf

    - **序列**:用于创建特定范围内的数值张量。 - `tf.linspace(start, stop, num, name=None)`: 创建一个等差数列。 - `tf.range(start, limit=None, delta=1, name='range')`: 创建一个等差数列。 - **随机张量**...

    radix sort

    基数排序的基本思想是通过一趟排序将待排记录分隔成独立的若干个子序列,每个子序列都是相应关键字值的记录,此时,就可以分别对这些子序列进行排序,所有子序列排序完成后,整个序列就变为有序序列。它通常使用“桶...

    trirnd:TRIRND 从三角形分布生成离散随机数。-matlab开发

    randomValue = TRIRND(minVal, topVal, maxVal); 分布定义为: - 最小值和最大值- “最高”值,概率... 一种对小范围内的大量随机点(maxVal-minVal)有效,而另一种对合理数量的点的大范围有效。 对于大范围,关于

    java代码-LeetCode 152. 乘积最大子序列

    在LeetCode的第152题“乘积最大子序列”中,我们面临的挑战是找到一个整数数组中乘积最大的连续子序列。这个题目属于动态规划和数组处理的范畴,是Java编程中常见的算法问题。下面将详细介绍解决这个问题的关键知识...

    C++实现基数排序(源代码)

    它通过对整数的每一位进行排序来达到整体序列的有序化。该算法的特点在于它不是通过元素间的相互比较来进行排序,而是通过按数字的每一位(从最低位到最高位)进行排序,从而实现整个序列的排序。 #### 二、基数...

    TensorFlow Python API文档

    - `tf.random_uniform(shape, minval=0, maxval=None, dtype=tf.float32, seed=None, name=None)` — 创建一个具有均匀分布的随机值的张量。 - `tf.random_shuffle(value, seed=None, name=None)` — 随机排列一个...

    matlab.rar_矩阵中最大值

    在MATLAB中,寻找矩阵中n个绝对值最大的数是一个常见的任务,这在数据分析、数值计算和各种数学问题中都有应用。以下是如何在MATLAB中实现这个功能的详细步骤及相关的MATLAB知识点。 1. **矩阵操作**: 在MATLAB中...

    107 个js 基础

    // 生成 0 到 9 之间的随机整数 ``` ### 40. 日期操作 使用 `Date` 对象进行日期和时间的操作。例如: ```javascript var today = new Date(); console.log(today.getTime()); // 当前时间戳 console.log(today....

    Tensorflow的常用矩阵生成方式

    使用tf.range函数可以生成一个整数范围的矩阵,类似于Python的range函数。它接受起始值、结束值和步长。例如: ```python v7_1 = tf.range(10, 20, 3) ``` 这段代码创建了一个从10开始到20结束(不包括20),步长为3...

    TensorFlow Python API documentation

    - **`tf.range(start, limit=None, delta=1, name='range')`**:生成一个整数序列。 #### 随机张量 (Random Tensors) - **示例**: - **`tf.random_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=...

Global site tag (gtag.js) - Google Analytics