相关疑难解决方法(0)

为什么处理排序数组比处理未排序数组更快?

这是一段看似非常特殊的C++代码.出于某种奇怪的原因,奇迹般地对数据进行排序使得代码几乎快了六倍.

#include <algorithm>
#include <ctime>
#include <iostream>

int main()
{
    // Generate data
    const unsigned arraySize = 32768;
    int data[arraySize];

    for (unsigned c = 0; c < arraySize; ++c)
        data[c] = std::rand() % 256;

    // !!! With this, the next loop runs faster.
    std::sort(data, data + arraySize);

    // Test
    clock_t start = clock();
    long long sum = 0;

    for (unsigned i = 0; i < 100000; ++i)
    {
        // Primary loop
        for (unsigned c = 0; c < arraySize; ++c) …
Run Code Online (Sandbox Code Playgroud)

c++ java optimization performance branch-prediction

2万
推荐指数
27
解决办法
142万
查看次数

随机字符串生成器返回相同的字符串

我已经开发了一个随机字符串生成器,但它的行为并不像我希望的那样.我的目标是能够运行两次并生成两个不同的四个字符随机字符串.但是,它只生成一个四字符随机字符串两次.

这是代码和输出的示例:

private string RandomString(int size)
{
    StringBuilder builder = new StringBuilder();
    Random random = new Random();
    char ch;
    for (int i = 0; i < size; i++)
    {
        ch = Convert.ToChar(Convert.ToInt32(Math.Floor(26 * random.NextDouble() + 65)));                 
        builder.Append(ch);
    }

    return builder.ToString();
}

// get 1st random string 
string Rand1 = RandomString(4);

// get 2nd random string 
string Rand2 = RandomString(4);

// create full rand string
string docNum = Rand1 + "-" + Rand2;
Run Code Online (Sandbox Code Playgroud)

......输出看起来像这样:UNTE-UNTE ......但看起来应该像UNTE-FWNU

如何确保两个明显随机的字符串?

c# random

222
推荐指数
10
解决办法
29万
查看次数

随机高斯变量

.NET的标准库中是否有一个类可以创建遵循高斯分布的随机变量的功能?

.net c# random normal-distribution gaussian

109
推荐指数
6
解决办法
7万
查看次数

System.Guid.NewGuid()是如何随机的?(拿两个)

在您开始将其标记为重复之前,请将我读出来.另一个问题是(很可能)不正确的接受答案.

我不知道.NET如何生成其GUID,可能只有微软这样做,但它很有可能只是调用CoCreateGuid().但是,该函数被记录为调用UuidCreate().并且用于创建UUID的算法已被很好地记录.

长话短说,尽管如此,似乎System.Guid.NewGuid()确实使用了版本4 UUID生成算法,因为它生成的所有GUID都符合标准(参见自己,我尝试了几百万个GUID,它们都匹配).

换句话说,除了一些已知位之外,这些GUID 几乎是随机的.

这再次提出了一个问题 - 随机如何随机的?正如每个优秀的小程序员都知道的那样,伪随机数算法只与其种子(即熵)一样随机.那么种子是UuidCreate()什么?PRNG如何重新播种?它是加密强大的,或者如果两台计算机同时意外呼叫System.Guid.NewGuid(),我可以期望相同的GUID开始倾泻吗?如果收集到足够多的顺序生成的GUID,是否可以猜测PRNG的状态?

补充:为了澄清,我想知道我可以信任的随机性因此 - 我在哪里可以使用它.那么,让我们在这里建立一个粗略的"随机性"量表:

  1. 基本随机性,以当前时间为种子.可以在纸牌中使用洗牌,但是即使没有尝试也很容易碰到碰撞.
  2. 更高级的随机性,不仅使用时间,还使用其他机器特定的种子因子.也许在系统启动时也只播种一次.这可用于在DB中生成ID,因为不太可能重复.尽管如此,它对安全性并不好,因为可以用足够的努力预测结果.
  3. 密码随机,使用设备噪声或其他先进的种子随机源.每次调用或至少经常重新播种.可用于会话ID,分发给不受信任的各方等.

我在想到是否可以将它们用作数据库ID时,以及Guid.comb算法的实现System.Guid.NewGuid()(如NHibernate的实现方式)是否有缺陷,我就来到了这个问题.

.net random guid

43
推荐指数
4
解决办法
1万
查看次数

c#0到1000之间的随机数发生器

我需要帮助编写一个程序,该程序将生成0到1000之间的100个随机数.输出需要显示在Windows消息框中.我坚持使用什么代码来获取框中的数字,并且只有100个随机数.

c# random numbers

36
推荐指数
2
解决办法
9万
查看次数

Do multiple instances of System.Random still use the same seed in .Net Core?

I've seen several articles talking about not generating too many System.Random instances too closely together because they'll be seeded with the same value from the system clock and thus return the same set of numbers:

  1. /sf/answers/189457621/
  2. https://codeblog.jonskeet.uk/2009/11/04/revisiting-randomness/
  3. https://docs.microsoft.com/en-us/dotnet/api/system.random?view=netframework-4.8#instantiating-the-random-number-generator

That appears to be true for .net framework 4.8. Looking at the source code for .net core, however, it looks like instances of System.Random generated on the same thread are seeded from a [ThreadStatic] generator. So it would seem to …

c# .net-core

8
推荐指数
1
解决办法
107
查看次数

Random.Next不工作?

我正在尝试制作一个随机的房间选择器和Random.Next似乎不起作用,请帮忙!

List<string> rooms = new List<string>();
rooms.Add(room1);
rooms.Add(room2);   
int index = Random.Next(rooms.Count);
System.Console.WriteLine(rooms[index]);
Run Code Online (Sandbox Code Playgroud)

我正在使用的系统(我认为这可能是问题)

Using System
Using System.Collections.Generic
Using.Collections
Run Code Online (Sandbox Code Playgroud)

Using.Collections显示为灰色.

c# random system

6
推荐指数
1
解决办法
5871
查看次数

Microsoft是否更改了随机默认种子?

今天,我在.NET Core中进行了一些测试,并且遇到了一些有趣的事情。

以前(〜.NET Framework 4)Random使用过Environment.TickCount,但现在我相信情况已经改变。

考虑以下代码:

while (true)
{
    Random random = new Random();
    Console.WriteLine(random.Next(0, 10000));
}
Run Code Online (Sandbox Code Playgroud)

在较早的.NET Framework版本中,new Random()空构造函数将使用Environment.TickCount,这将导致伪随机值的重复。

因此,您可以期待如下结果:

542
4211
5244
5244
5244
9501
9501
Run Code Online (Sandbox Code Playgroud)

以此类推。

在使用最新编译器的最新.NET Core版本上,我收到以下结果:

5332
220
3928
524
2973
2840
4965
5667
657
6434
3170
3046
7044
Run Code Online (Sandbox Code Playgroud)

绝对可以改善。

在旧版本中,其他表现出此问题的SO问题:

如何生成随机整数?

在C#中生成没有重复的随机数

非重复随机数

C#随机数生成器线程安全吗?


我的设置:.NET Core 2.2 /最新的C#编译器。


实际问题

所以我的问题是,PRNG是否真的得到了改善,或者他们只是将构造函数更改为使用其他默认种子,如果是,则它们用作种子是什么?密码术现在是否更安全(如果他们实际上改变了实现)?

c# random

6
推荐指数
1
解决办法
141
查看次数

我的第一个c#app和第一个null对象异常

总菜鸟在这里.这是我的第一次c#尝试,它是一个控制器应用程序,模拟一个名为"左右中心"的饮酒游戏.在控制台中,我收到以下内容:

安慰

Unhandled Exception: System.NullReferenceException: Object reference not set to an instance of an object
at LeftRightCenter.MainClass.Main (System.String[] args) [0x00038] in     /Users/apple/Projects/LearningC/LearningC/Main.cs:80 
[ERROR] FATAL UNHANDLED EXCEPTION: System.NullReferenceException: Object reference not set to an instance of an object
 at LeftRightCenter.MainClass.Main (System.String[] args) [0x00038] in /Users/apple/Projects/LearningC/LearningC/Main.cs:80 
Run Code Online (Sandbox Code Playgroud)

C#

    using System;

    namespace LeftRightCenter
    {
        class Player
        {
            //fields        
            private int _quarters = 4;

            public int Quarters {
                get{ return _quarters; }
                set{ _quarters += value; }
            }

            public Player (string name)
            {

            }   

        } …
Run Code Online (Sandbox Code Playgroud)

c# oop

4
推荐指数
1
解决办法
394
查看次数

我想在 asp.net c# 中生成 alfa 数字 otp

public void generate()
{
    string alphabets = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    string small_alphabets = "abcdefghijklmnopqrstuvwxyz";
    string numbers = "1234567890";
    string characters = numbers;
    characters += alphabets + small_alphabets + numbers;

    int length =6;
    string opt = string.Empty;
    for (int i = 0; i < length; i++)
    {
        string character = string.Empty;
        do
        {
            int index = new Random().Next(0, characters.Length);
            character = characters.ToCharArray()[index].ToString();
        } while (otp.IndexOf(character) != -1);
        otp += character;
    }
    string str= otp;
}
Run Code Online (Sandbox Code Playgroud)

这是我的代码,对我不起作用。我想尝试小字母、大写字母和 0 到 9 的数字组合。

c# asp.net

3
推荐指数
1
解决办法
4522
查看次数