itertools.combinationsin python 是一个强大的工具,用于查找r项的所有组合,但是,我想知道它的计算复杂度。
假设我想知道n和r方面的复杂性,当然它会给我n项列表中的所有r项组合。
根据官方文档,这是粗略的实现。
def combinations(iterable, r):
# combinations('ABCD', 2) --> AB AC AD BC BD CD
# combinations(range(4), 3) --> 012 013 023 123
pool = tuple(iterable)
n = len(pool)
if r > n:
return
indices = list(range(r))
yield tuple(pool[i] for i in indices)
while True:
for i in reversed(range(r)):
if indices[i] != i + n - r:
break
else:
return
indices[i] += 1
for …Run Code Online (Sandbox Code Playgroud) 对于方阵,可以得到SVD
X= USV'
Run Code Online (Sandbox Code Playgroud)
通过简单地使用numpy.linalg.svd进行分解
u,s,vh = numpy.linalg.svd(X)
Run Code Online (Sandbox Code Playgroud)
例程或numpy.linalg.eigh,以计算埃尔米特矩阵X'X 和XX'的eig分解
他们使用相同的算法吗?调用相同的Lapack例程?
在速度方面有什么不同吗?和稳定性?
我需要释放ptr吗?如果是这样,怎么样?
#include <iostream>
using namespace std;
void printFromPtr(int *ptr);
int main()
{
int a = 3;
int numPrint = 10000;
for (int i = 0; i < numPrint; i++)
{
printFromPtr(&a);
}
}
void printFromPtr(int* ptr)
{
cout << *ptr << endl;
}
Run Code Online (Sandbox Code Playgroud)