Если ваша программа основана на Linux (например, у вас есть доступ к оболочке типа bash), то вы можете получить все комбинации, скажем, a,b,c,d с N=3, введя команду: "echo {a ,b,c,d}{a,b,c,d}{a,b,c,d}" - выведет все приведенные выше комбинации: aaa, aab... и т.д.
Затем вы можете поймать этот вывод и проанализировать его побуквенно и умножить базовый вектор (скажем, (1,1,1,1) для dim = 4) на каждый из векторов, соответствующих букве. Но опять же, что вы подразумеваете под умножением векторов? Вы имеете в виду найти величину а*а*а? Потому что вы не можете умножать (1x4) векторы вместе - вы можете взять только их скалярное произведение. (поэтому единственно возможной интерпретацией a*a*a может быть |a|^3.)
Пример вызова эхо-команды:
#include <stdio.h>
#include <string>
#include <vector>
int n; //user given - n>1
Vector4D* vectors[n]; // Or some other name for the class
// Have the user input the vectors
std::string base = "a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z";
std::string list = "{"+base.substr(0,2*n+1)+"}";
std::string query = "echo ";
for(int i = 0; i<4; i++){
query += list;
}
File *file;
file=popen(query.c_string(), "r");
char combo[4];
std::vector<Vector4D> results;
while(fscanf(file,"%s", combo)){
Vector4D result(1,1,1,1); //our default (identity) vector
for(int i = 0; i<4; i++){
result = Vector4D.multiply(result, Vectors[combo[i]-'a']);
}
results.push_back(result);
}
fclose(file);
что-то вроде этого, хотя а) непроверенный б) неполный в) работает только для размеров выборки до 26 векторов (хорошо 52, если вы включаете заглавные буквы)
person
strelok
schedule
16.07.2011