VChooseK

版本1.0.0.0(13.7 KB) 1月
选K元素从一个向量-墨西哥人:比NCHOOSEK快100倍

3 k下载

更新2009年12月23日

查看许可协议

VChooseK (V, K)创建一个矩阵,行所有的组合选择K元素的向量V没有秩序,没有repititions。

输入:
V:数组的类双、单(U) INT8/16/32/64,逻辑,CHAR。
凯西:选择的元素数量。

输出:
Y:矩阵的大小(N / K ! (N - K) !,K] with N is the number of elements of V.
Y V同一个类作为输入。

Matlab的输出等于NCHOOSEK,除了NCHOOSEK回复的数量组合为一个标量V:
VChooseK(1,1)回答[1]:一个元素的一组长度为1。
NCHOOSEK(1,1)失败在计算N ! / K (N - K) ! !

例子:
选择2的元素(1、2、3、4):
VChooseK (1:4, 2)
= = > [1、2;1、3;1、4;2、3;2、4;3、4)
速度把输入整数类型如果可能的话:
Y =双(VChooseK (int16 (1:1000), 2);
比:快
Y = VChooseK (1:1000 2);
细胞阵列的组合,使用索引的组合:
C = {' a ', ' b ', ' C ', ' d '};
C2 = C (VChooseK (1:4, 2))
= = > C2 = {“a”、“b”;' a ', ' c ';' a ', ' d ';“b”、“c”;' b ', ' d ';' c ', ' d '}

灵感:
乔斯van der地表古积NCHOOSE2发表了一有效,比Matlab NCHOOSEK:快得多//www.tatmou.com/matlabcentral/fileexchange/20144
我很好奇,如果一个墨西哥人版本要快得多。起初我创建了NChoose2q, 5倍乔斯的Matlab实现。但在C算法太简单,没有使用临时记忆,我扩大了K = 3, 4、5。免费算法K是更具挑战性,但是它只需要3 * K临时内存的指针。因此它比Matlab更快的NCHOOSEK (Matlab 7.8, 1.5 ghz迅驰,512 MB):
NCHOOSEK(1:50, 5): 45.30秒
VChooseK(1:50, 5): 0.32秒= >快141倍
NCHOOSEK(1:20, 16): 0.52秒
VChooseK(1:20, 16) 0.0024秒= >快216倍
NCHOOSEK (int8(40), 4): 0.64秒
VChooseK (int8(40), 4): 0.001562秒= >快410倍

马特的强大组合子图处理repititions和命令序列,但对其具体工作VChooseK非常快(见截图)。

测试:Matlab 6.5, 7.7, 7.8, WinXP
编译器:BCC5.5 LCC2.4/3.8,打开Watcom 1.8
请编译后运行单元测试TestVChooseK和速度的比较。

引用作为

1月(2023)。VChooseK(//www.tatmou.com/matlabcentral/fileexchange/26190-vchoosek), MATLAB中央文件交换。检索

MATLAB版本兼容性
创建R2009a
兼容任何释放
平台的兼容性
窗户 macOS Linux
类别
找到更多的在创建和连接矩阵帮助中心MATLAB的答案

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!
版本 发表 发布说明
1.0.0.0