为什么BLAS具有gemm矩阵 - 矩阵乘法gemv功能和矩阵向量乘法的单独函数?矩阵向量乘法不是矩阵乘法的一个特例,其中一个矩阵只有一个行/列吗?
甚至大多数喜欢C++的人也承认它有很多与其作为系统/性能编程语言的利基无关的瑕疵.这些包括其过时的模块管理系统(头文件),前向声明的要求,使其语法不可判定的语法怪癖(例如<>模板声明的尖括号),包含在文本级而不是真实语言中操作的宏解决宏所用的功能,复制功能,如数组和字符串(这些类型的STL和C版本),几乎没有语法糖,以及缺乏现代功能,如线程,垃圾收集,委托/闭包,等等(注意:是的,在内存受限或实时环境中,你可能有充分的理由不想收集垃圾,
另一方面,C++是唯一允许您有效地编写代码并接近金属的主流语言,但也至少提供了一些高级抽象.它是成熟的,标准化的,拥有大量的编译器实现和库以及大量的遗留代码库.
对于那些使用C++作为主要语言的人来说,是什么让你个人认为它的疣值得忍受?如何让你改变主意并决定使用较少的这类疣的新语言?你是否真的喜欢使用C++ ,还是因为传统问题或者因为没有其他成熟的主流语言而勉强使用C++ ?
假设我有一个a长度数组n和第二个数组indices,也是长度数组n. indices包含序列的一些任意排列[0, n).我想重新排列a,使其按照指定的顺序排列indices.例如,使用D语法:
auto a = [8, 6, 7, 5, 3, 0, 9];
auto indices = [3, 6, 2, 4, 0, 1, 5];
reindexInPlace(a, indices);
assert(a == [5, 9, 7, 3, 8, 6, 0]);
Run Code Online (Sandbox Code Playgroud)
这可以在O(1)空间和O(n)时间内完成,最好不要变异indices吗?
鉴于有符号和无符号整数使用相同的寄存器等,并且只是不同地解释位模式,而C字符基本上只是8位整数,C中有符号和无符号字符之间的区别是什么?我理解char的签名是实现定义的,我根本无法理解它是如何产生影响的,至少当char用于保存字符串而不是数学时.
有没有办法使用标准库在Python中序列化词法闭包?泡菜和元帅似乎不适用于词法封闭.我真的不关心二进制与字符串序列化等细节,它只需要工作.例如:
def foo(bar, baz) :
def closure(waldo) :
return baz * waldo
return closure
Run Code Online (Sandbox Code Playgroud)
我希望能够将闭包实例转储到文件中并将其读回.
编辑:可以解决这个问题的一个相对明显的方法是使用一些反射技巧将词法闭包转换为类对象,反之亦然.然后可以转换为类,序列化,反序列化,转换回闭包.哎呀,鉴于Python是鸭子类型,如果你重载类的函数调用操作符使它看起来像一个函数,你甚至不需要将它转换回闭包,使用它的代码不会知道区别.如果有任何Python反射API大师,请说出来.
是否有可能在O(1)辅助空间中迭代二叉树(没有使用堆栈,队列等),或者这被证明是不可能的?如果有可能,怎么办呢?
编辑:如果有关于父节点的指针很有趣并且我不知道这可以做到,那么我得到的关于这可能的响应是可能的,但是根据你如何看待它,可以是O(n)辅助空间.此外,在我的实际用例中,没有指向父节点的指针.从现在开始,请在回答时假设这一点.
language-agnostic algorithm tree binary-tree memory-management
当用类C语言编程时,一个人的"默认"整数类型是int还是uint/unsigned int?默认情况下,我的意思是当你不需要负数时,但任何一个都应该足够大,足以容纳你所持有的数据.我可以为两者考虑好的论点:
签名:数学上表现更好,如果你试图在一些你没想到的边界情况下低于零,那么奇怪行为的可能性就会降低,通常可以更好地避免奇怪的角落情况.
unsigned:为溢出提供一点额外的保证,以防你对值的假设是错误的.作为文档,变量表示的值永远不应为负数.
我正在尝试研究如何有效地排序不适合内存的巨大数据集.高级别的明显答案是使用一些标准算法对一大堆适合内存的块进行排序,将这些块写入磁盘,然后合并它们.合并它们是问题所在.
假设数据分为C块,所以我要合并C文件.如果我在一次传递中进行C-way合并,那么从技术上讲,我有一个O(N ^ 2)算法,尽管只需要执行O(N)写入磁盘.如果我迭代地将它们合并到C/2文件,然后是C/4文件等,那么我有一个O(N log N)算法,但是一个必须执行O(N log N)写入磁盘,因此一个巨大的常数.
这个难题的典型解决方案是什么?有什么好的吗?
在我看来,在某种程度上,Java是C在不久前的地方.两者都是当时相当简约的语言,具有相对干净,简单的内核.(我指的是这里的核心语言,而不是库.)两者都非常受欢迎.两者都是通用语言,包含大量遗留代码.两者都缺乏一些现代生产力功能,其他语言的程序员经常会错过这些功能.两者似乎都非常惯性,并且适应不断变化的世界.
在我看来,创建一个大致是Java的超集的Java ++是合理的,因为C++是C语言.这样的语言会试图将Java从其经历的相对停滞中解脱出来,仅在少数几个方面打破向后兼容性只有在绝对必要的情况下,才会添加许多现有功能,这些功能可能会缺少普通的旧Java,并且会在以后担心标准化问题.可能是一个好主意的功能包括:
varC#或autoD.你认为会有这种语言的需求吗?你觉得这样的事会成功吗?
编辑:我不是在谈论运行时/字节码级别的兼容性,我在谈论源级别的Java兼容性.此外,是的,Java 7可以添加其中一些,但似乎向Java添加功能的"官方"过程非常保守.真正的观点是将Java分支成一个分支的想法是关注创新而不是稳定性/标准化.
algorithm ×4
c++ ×2
arrays ×1
binary-tree ×1
blas ×1
c ×1
char ×1
closures ×1
coding-style ×1
innovation ×1
java ×1
performance ×1
python ×1
random ×1
signed ×1
sorting ×1
string ×1
tree ×1