标签: theory

简单的大O复杂性并不总是线性的?

我相信大多数人都知道,如果函数输入大小为n,嵌套循环的复杂度为O(n ^ 2)

for(int i = 0; i < n; i++){
for(int j = 0; j < n; j++){
...
}
}
Run Code Online (Sandbox Code Playgroud)

我认为这是类似的,通过一个类似的论点,但我不确定任何人都可以确认?

for(int i = 0, max = n*n; i < max; i++{
...
}
Run Code Online (Sandbox Code Playgroud)

如果是这样,我猜有些类型的代码,除了递归和子程序之外,其大O映射并不是很明显.

theory complexity-theory big-o

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

这些C指针操作会导致问题吗?

让我说我得到了:

char *p = NULL;
Run Code Online (Sandbox Code Playgroud)

我确定这个会出现问题,因为我要取消引用一个NULL指针:

*p = 16;
Run Code Online (Sandbox Code Playgroud)

另一方面,我认为这个可以,因为我得到*p的地址NULL本身不是:

char **pp = &p;
Run Code Online (Sandbox Code Playgroud)

在这两种情况下我都是对的吗?

c theory pointers lvalue dereference

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

中心极限定理

我想观察中心极限定理并写下这个程序.但是我很困惑,我必须这样观察.有什么不对吗?

xx
xxx
xxxx
xxxxx
xxxxxx
xxx
xxxx
xxx
x
x
Run Code Online (Sandbox Code Playgroud)
namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
                Func();
        }
        public static void Func()
        {
            Random r = new Random();
            int[] d = new int [10];
            int sum;

            for (int k = 0; k < 5000; k++)
            {
                sum = 0;

                for (int i = 0; i < 50; i++)
                    sum += r.Next(0, 10000);
                Set(d, sum/50);

            }

            DispResult(d);
        }
        private static void DispResult(int[] d)
        {
            for …
Run Code Online (Sandbox Code Playgroud)

c# theory math

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

如果没有明确的类型转换,语言是否可以"完整"?

如果没有显式的转换,编程语言能否"完整" ?从本质上讲,使用缺少显式类型转换的语言有什么我们不能做的吗?

例如,下面的帖子演示了Java需要显式类型转换来编写自定义泛型类.

是否有其他示例用例我们绝对需要显式转换?

java language-agnostic theory casting

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

是否有可能构建一个编程给定API的图灵机?

我想知道,是否可以定义一个API并将其作为TM图灵机的输入,输出将是代码c或任何其他自然/编程语言?

我猜不是,但我如何通过减少等正式展示?

theory nlp turing-machines

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

为什么单元测试不应该使用数据库?

阅读文章Evil单元测试,我不确定为什么单元测试永远不要使用DB,网络或文件系统。如果是网络应用程序怎么办?

theory testing unit-testing

1
推荐指数
2
解决办法
2670
查看次数

线程像非线程一样"慢"

今天我在python中用线程计算素数有一个问题.它几乎和没有线程一样慢(参见问题).

现在我创建了相同的代码,认为使用pthread在C中不存在python问题.

#include <stdio.h>
#include <time.h>
#include <pthread.h>

int isPrime(int number) {
    int i;
    for (i=2; i<number; i++) {
        if (number % i == 0 && i != number) return 0;
    }
    return 1;
}

void calcPrimeNumbersFromNtoM(int n, int m){
    for (int i = n; i <= m; i++) {
        if (isPrime(i)) {
            //printf("%i\n",i);
        }
    }

}

void *calcFirstHalf(){
    calcPrimeNumbersFromNtoM(1,5000);
    return NULL;
}

void *calcSecondHalf(){
    calcPrimeNumbersFromNtoM(5001,10000);
    return NULL;
}

void calcThreadedPrimenumbers(){
    pthread_t t1, t2;
    pthread_create(&t1, NULL, calcFirstHalf, NULL); …
Run Code Online (Sandbox Code Playgroud)

c theory algorithm multithreading pthreads

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

void方法中的const-correctness和lambda'技巧'

我有一个方法接受一个对象的引用作为const,这个方法不会改变方法的任何内容,而const表明,这个方法也调用了类中的其他方法,并且是无效的不接受任何参数,也是虚拟的,这意味着扩展基类的类可以覆盖方法,但它也需要是const.例如:

#include <iostream>

class Boz
{
public:
    virtual void introduce() const = 0;
};

class Foo
{
public:
    virtual void callable() const
    {
        // ...
    }

    void caller(const Boz& object) const
    {
        callable();
        object.introduce();
    }
};

class Bar : public Boz
{
public:
    void introduce() const
    {
        std::cout << "Hi." << std::endl;
    }
};

class Biz : public Foo
{
public:
    void callable() const
    {
        std::cout << "I'm being called before the introduce." << std::endl;
    }
};

int main(void)
{ …
Run Code Online (Sandbox Code Playgroud)

c++ theory lambda c++11 c++14

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

c ++动态声明的数组无法正常工作

我试图使用double *data = new double[14141414]()声明将文件的数据读入动态声明的数组.注意,它是一个大文件; 因此阵列的大小.

问题是我无法将所有数据放入数组中,因为索引= 14000000左右执行只会停止.
代码编译得很好(没有错误).我做了调试,并new返回一个地址,而不是0或NULL.所以看起来内存分配没有问题(即内存不足).我甚至在没有数组分配的情况下将文件回显到屏幕,只是为了看到我能够很好地读取文件.一切看起来都不错

然而,当我开始将数据放入数组时,程序将停止接近结束但是在随机位置,有时它将是1400万,有时索引会稍微多一些,有时会少一点.有几次程序运行良好.

有人知道发生了什么吗?我怀疑计算机耗尽了物理内存,从而导致程序的这种行为.但如果是这样,那么为什么new运营商会返回一个地址呢?如果内存分配失败,它应该返回0还是NULL?

谢谢!!

更新:根据#Jonathan Potter的要求,我在这里包含了代码.谢谢!!真不错的主意!!

void importData(){

int totalLineCount = 14141414;

double *height = new (nothrow) double[totalLineCount]();
int *weight = new (nothrow) int[totalLineCount]();
double *pulse = new (nothrow) double[totalLineCount]();
string *dateTime = new (nothrow) string[totalLineCount];
int *year = new (nothrow) int[totalLineCount]();
int *month = new (nothrow) int[totalLineCount]();
int *day = new (nothrow) int[totalLineCount]();

fstream dataFile(file.location.c_str(), ios::in);
for (int i = 0; i < totalLineCount; i++) …
Run Code Online (Sandbox Code Playgroud)

c++ theory memory-management heap-memory new-operator

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

字符串的前缀

如果存在xz = y,则X是字符串y的前缀,如果x不等于y,则x是正确的前缀.

只是想确保我正确理解这个概念.

例如,如果有一个字符串y ="abracadabra"是否意味着有大量可能的前缀?因此,如果x是前缀,则x可以等于"a","ab","abr"或甚至"abracadabra",但在这种情况下,当x = y时,它现在被称为不正确的前缀我认为.但是,我不确定x = y的最后一部分是否仍然可以被认为是前缀?

如果没有成员是另一个成员的正确前缀,则语言是无前缀的.

再次,不确定我是否正确理解它.例如,如果有一种语言="你好,世界!我的名字是安德鲁",我想,它是无前缀的,因为每个成员的开头都是彼此不同的.但是,如果我们有"你好,世界!你好吗?" 这种语言不再是无前缀的,因为"H"是"Hello"和"How"的前缀.我的思维方式是正确的还是我误解了什么?

我正在阅读的书中没有给出示例,这似乎是一个简单的话题,所以我想这可能是我找不到更详细解释的原因.但无论如何,我只是想确保我不会误解任何事情.

我会很感激所有的答案.谢谢.

theory string prefix computation-theory

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