小编dsi*_*cha的帖子

有效地查找数组中元素的行列?

如何有效地找到数组中每个元素的排名,在平局的情况下求平均值?例如:

float[] rank(T)(T[] input) {
    // Implementation
}

auto foo = rank([3,6,4,2,2]);  // foo == [3, 5, 4, 1.5, 1.5]
Run Code Online (Sandbox Code Playgroud)

我能想到的唯一方法是分配 3 个数组:

  1. 输入数组的副本,因为它必须排序并且我们不拥有它。
  2. 一个数组,用于跟踪输入数组的排序顺序。
  3. 要返回的行列数组。

有谁知道如何在 O(N log N) 时间和 O(1) 辅助空间中执行此操作(意味着我们必须分配的唯一数组是我们要返回的数组),或者至少摆脱其中之一上面的三个数组?

sorting algorithm statistics performance space-efficiency

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

为什么纯函数式语言而不是"不纯"函数式语言?

对于不是理论计算机科学家的人来说,学习像Haskell或Erlang这样的纯函数语言而不是具有强大功能组件的"不纯"语言(如Python或D编程语言的第2版)有什么优势?我的论点如下:

  1. 没有范例是完美的.无论是什么样式,单一范式的语言都是非常严格的.
  2. 当您完成实际工作时,Python或D将使您轻松进入函数式编程.Haskell或Erlang将迫使您在实际做任何感兴趣的事情之前一次性学习功能风格.

编辑:通过"不纯"的函数式语言,我真正的意思是具有功能性的强多语言语言,而不是具有一些非功能性能力的强功能语言.

programming-languages functional-programming

4
推荐指数
3
解决办法
3603
查看次数

如何使长参数列表可读?

我已经开发出对函数中长参数列表的自然厌恶.虽然这在某种程度上是一件好事,但有时长参数列表与代码重复或由于"手动内联"而导致的冗长功能相比,是两个邪恶中的较小者.什么是至少使这些怪物具有人类可读性的好方法?例如:

SomeClass[string] someFunction(SomeClass!(TemplateParam) foo, 
    string[][string] someAA, uint[] dataToProcess, SomeEnumType flag) {
    // Do stuff.
}
Run Code Online (Sandbox Code Playgroud)

这在可读性等级上得分不高,但在很多情况下,四个参数非常合理.

coding-style readability

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

为什么那里有如此多的缩进代码呢?

我越是用不使用Python的语言浏览代码来开源项目,我越觉得似乎很多程序员都不相信正确的缩进.(我不会特别提到任何项目,以避免让任何人过于亲自接受这个问题.)通常代码是缩进的,但在某种程度上与标准风格不同,它让我发疯,特别是在旧/狡猾的代码中.我注意到,当我用类似C语言编写时,我倾向于正确地缩进,就像我在用Python编写时一样,除了调试代码,我实际上想要像拇指一样伸出来.鉴于使用现代IDE来修复不正确的缩进是多么容易,有什么理由可以让宗教上的缩进与大括号保持同步?

coding-style readability indentation

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

PCA:这个算法出了什么问题?

有人可以确认或更正这个维基百科算法来计算第一个主要组件吗?我想在D中简单实现PCA,它没有任何现有的PCA AFAIK库.我已经尝试过实现这一点了,似乎我的简单示例中的结果与从R或Octave得到的东西相匹配.我很确定这不是一个实现错误,因为我已经多次检查了我的实现,甚至从头开始重写它,这是一个非常简单的算法.

language-agnostic algorithm statistics wikipedia pca

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

如何/存储程序的工作目录?

当程序访问文件,使用system()等时,该程序的当前工作目录的物理知识/存储方式和位置是什么?从逻辑上讲,程序的工作目录类似于全局变量,理想情况下它应该是线程本地的,特别是在像D这样的语言中,默认情况下"全局"变量是线程局部的.是否可以使程序的当前工作目录成为本地线程?

注意:如果您不熟悉D,即使是与语言无关的答案也会有用.

filesystems multithreading operating-system d thread-local

4
推荐指数
2
解决办法
614
查看次数

乘法在不精确的浮点运算中总是可交换的吗?

我试图理解D语言运行时中的一些代码.对于以下两件事似乎有单独的功能:

array1[] += scalar * array2[];
array1[] += array2[] * scalar;
Run Code Online (Sandbox Code Playgroud)

为什么不能用一个功能来完成这些?我认为即使在不精确的浮点运算中,乘法也是可交换的.

arrays floating-point d operator-overloading

4
推荐指数
2
解决办法
1133
查看次数

GPGPU:还在流血边缘?

GPGPU是否已准备好用于生产和原型设计,或者您仍然认为它主要是研究/前沿技术?我在计算生物学领域工作,它开始吸引更多来自计算机科学的人在该领域的注意力,但大多数工作似乎是移植众所周知的算法.算法的移植本身就是研究项目,并且该领域的绝大多数人对此并不了解.

我在传统的多核上做了一些非常计算密集的项目.我想知道GPGPU有多接近可用于原型化新算法以及日常生产用途.从阅读维基百科,我得到的印象是编程模型很奇怪(严重SIMD)并且有些限制(没有递归或虚函数,虽然这些限制正在慢慢被删除;没有比C更高级的语言或C++的有限子集),而且有几个相互竞争的,不相容的标准.我也得到的印象是,与常规多核不同,细粒度并行性是城里唯一的游戏.需要重写基本库函数.与传统的多核不同,只需并行化程序的外循环并调用旧式串行库函数,就无法获得巨大的加速.

这些限制在实践中有多严重?GPGPU现在准备好用了吗?如果没有,你会猜多久?

编辑:我试图解决的一个主要问题是,编程模型与常规多核CPU有多少不同,后者具有大量非常慢的内核.

编辑#2:我想我总结我得到的答案的方式是GPGPU足够实用,适合早期采用者,它非常适合,但仍然不足以被视为"标准"工具,如多核或分布式并行,即使在性能很重要的那些利基中也是如此.

performance cuda gpgpu

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

Python:PyPy:SciPy /卡方分布?

我有一个Python项目,其中性能非常重要.老实说,我知道Python(至少是纯Python)不是最好的工具,但无论如何我都在使用它,因为我想分发一些非常简单的纯python版本的一些研究代码,以便人们可以修改它,等,而不必设置复杂的环境.(我还有一个替代实现,用D编写,速度更快但更难破解.)

我使用PyPy作为我的翻译,并向任何使用此代码的人推荐它.这给了我合理的速度.然后我决定调整算法并需要从SciPy访问一些函数(我需要的只是CDF,生存函数和卡方阵的逆CDF).我尝试在CPython中运行我的代码来访问SciPy,它作为糖蜜很慢.

有人可以建议三件事之一:

  1. 一个kludge,允许我使用PyPy的一些片段SciPy.

  2. 在自由主义许可下,我需要更纯粹的python实现卡方分布功能吗?

  3. 一种JIT CPython瓶颈的方法?我知道Psyco,但它似乎没有维护,只适用于32位系统.

python statistics performance pypy libraries

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

STL __merge_without_buffer算法?

在哪里可以获得__merge_without_buffer()C++ STL中使用的算法的高级描述?我正在尝试使用D编程语言重新实现此代码,并进行一些增强.我似乎无法通过阅读STL源代码来理解它在算法级别所做的事情,因为太多的低级细节会掩盖它.此外,我不想盲目地翻译代码,因为那样,如果它不起作用我不知道为什么,我将无法添加我的增强功能.

c++ sorting algorithm stl d

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