randperm
подход описывается @Stewie, как представляется, путь в большинстве случаев. Однако, если вы можете использовать Matlab только с 1 входным аргументом, а n
действительно большой, возможно, нецелесообразно использовать randperm
для всех номеров и выбрать первые несколько. В этом случае здесь является то, что вы можете сделать:
- Сформировать целое число от 1 до
n
- Сформировать целое число от 1 до
n-1
, это выбор из доступных чисел.
- Повторяйте до тех пор, пока у
m
номера
Это может быть сделано с randi
и даже может быть векторизации, просто рисуя много случайных чисел на каждом шаге, пока единственная сумма не является правильным.
Это работает, но меньше времени эффективно. Причина в том, что он должен написать код, чтобы найти значение индексированного целого. – George
@George Менее эффективен относительно. Я еще не видел решения до 2011 года, которое может иметь дело с 'n = 1e11' или поэтому, следовательно, я думаю, что это еще что-то добавляет. –
Это, безусловно, делает, но я думаю, что было бы более эффективно реализовать последнюю версию randperm. – George