00001 /* 00002 LA: linear algebra C++ interface library 00003 Copyright (C) 2008 Jiri Pittner <jiri.pittner@jh-inst.cas.cz> or <jiri@pittnerovi.com> 00004 00005 This program is free software: you can redistribute it and/or modify 00006 it under the terms of the GNU General Public License as published by 00007 the Free Software Foundation, either version 3 of the License, or 00008 (at your option) any later version. 00009 00010 This program is distributed in the hope that it will be useful, 00011 but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00013 GNU General Public License for more details. 00014 00015 You should have received a copy of the GNU General Public License 00016 along with this program. If not, see <http://www.gnu.org/licenses/>. 00017 */ 00018 #ifndef _PERMUTATION_H 00019 #define _PERMUTATION_H 00020 namespace LA { 00021 template<typename T> 00022 const NRVec<T> inversepermutation(const NRVec<T> &p, const T offset=0) 00023 { 00024 int n=p.size(); 00025 NRVec<T> q(n); 00026 if(!offset) for(int i=0; i<n; ++i) q[p[i]]=i; 00027 else for(int i=0; i<n; ++i) q[p[i]-offset]=i+offset; 00028 return q; 00029 } 00030 }//namespace 00031 #endif