導航:首頁 > 編程大全 > n個數取m個資料庫

n個數取m個資料庫

發布時間:2022-01-21 00:42:49

❶ 請教一下,在excel里,在n個數字中取m個(<n,指定數),使得該m個數字

用公式組成陣列 m*m大小,作和,再用一個m*m大小的陣列作前一個陣列-指定數,取最小值的位置

❷ 從n個數中取出m個最大的最好的演算法是什麼

有很多演算法,復雜度也不盡相同。以下簡單舉幾個例子:
1. n×m遍掃描
【演算法基本描述】n×m遍掃描
【演算法思想】每次都掃描一遍數組,取出最大元素,這樣掃描m遍就能得到m個最大的數
【演算法復雜度】O(nm)

2.排序後取最大m個數
【演算法基本描述】對n個數排序,對拍完序後的序列取m個最大的數
【演算法復雜度】視排序的復雜度,一般為O(nlogn)或O(n^2)

3.最小堆
【演算法基本描述】一遍掃描+最小堆
【演算法偽代碼
00-建立一個最小堆(優先隊列),最小堆的大小控制在m之內
01-for 每個數:
02-----if 這個數比最小堆的堆頂元素大:
03---------彈出最小堆的最小元素
04---------把這個數插入到最小堆
05-最小堆中的m個元素就是所要求的元素
06-其中最小堆的作用就是保持裡面始終有m個最大元素,且m個元素中最小的元素在堆頂。
【演算法復雜度】O(nlogm) 遍歷O(n) 最小堆O(logm)
【其他】如果要求n個數中取最小的m個,只要把演算法反一下即可

總結:當n與m差不多大時,採用復雜度較低的排序是比較可取的,因為簡單。當m<<n時,排序是很浪費時間的,因為我們不需要後(n-m)個數,所以可以採用最小堆的方法。
我不敢說我的演算法是最好的,但是它一定是一個復雜度較低的演算法。

❸ N個數中取M個數,有幾種不同的取法,只能取一次 剛不完整

n!/m!=n(n-1)(n-2)……1/m(m-1)(m-2)1
即n乘到1除以m乘到1

❹ 從n個元素中取m個(可重復取)的組合個數為多少

1、考慮取的順序,則組合數為n^m。考慮順序,每次取都有n種可能,所以組合個數是n的m次方。

2、不考慮取的順序,則組合數為C(n+m-1,m) =(n+m-1)!/m!(n-1)!,不考慮取的順序相當於從n+m-1個不同元素中不可重復取m個,所以組合數是

以上計算認為n個元素無重復的(有重復的話,需要提供重復元素的數量方可計算)。

(4)n個數取m個資料庫擴展閱讀:

排列組合的計算原理和方法:

1、加法原理和分類計數法

a、加法原理,做一件事,完成它可以有n類辦法,在第一類辦法中有m1種不同的方法,在第二類辦法中有m2種不同的方法,……,在第n類辦法中有mn種不同的方法,那麼完成這件事共有N=m1+m2+m3+…+mn種不同方法。

b、第一類辦法的方法屬於集合A1,第二類辦法的方法屬於集合A2,……,第n類辦法的方法屬於集合An,那麼完成這件事的方法屬於集合A1UA2U…UAn。

c、分類的要求 :每一類中的每一種方法都可以獨立地完成此任務;兩類不同辦法中的具體方法,互不相同(即分類不重);完成此任務的任何一種方法,都屬於某一類(即分類不漏)。

2、乘法原理和分步計數法

a、乘法原理,做一件事,完成它需要分成n個步驟,做第一步有m1種不同的方法,做第二步有m2種不同的方法,……,做第n步有mn種不同的方法,那麼完成這件事共有N=m1×m2×m3×…×mn種不同的方法。

b、合理分步的要求

任何一步的一種方法都不能完成此任務,必須且只須連續完成這n步才能完成此任務;各步計數相互獨立;只要有一步中所採取的方法不同,則對應的完成此事的方法也不同。

❺ 從n個數中取出m個數字的所有情況,用什麼演算法解決,哪種效率比較高呢

從n中選m個數,以下兩種方法:
(1)遞歸
a.
首先從n個數中選取編號最大的數,然後在剩下的n-1個數裡面選取m-1個數,直到從n-(m-1)個數中選取1個數為止。
b.
從n個數中選取編號次小的一個數,繼續執行1步,直到當前可選編號最大的數為m。
下面是遞歸方法的實現:
///
求從數組a[1..n]中任選m個元素的所有組合。
///
a[1..n]表示候選集,n為候選集大小,n>=m>0。
///
b[1..M]用來存儲當前組合中的元素(這里存儲的是元素下標),
///
常量M表示滿足條件的一個組合中元素的個數,M=m,這兩個參數僅用來輸出結果。
void
combine(
int
a[],
int
n,
int
m,
int
b[],
const
int
M
)
{
for(int
i=n;
i>=m;
i--)
//
注意這里的循環范圍
{
b[m-1]
=
i
-
1;
if
(m
>
1)
combine(a,i-1,m-1,b,M);
else
//
m
==
1,
輸出一個組合
{
for(int
j=M-1;
j>=0;
j--)
cout
<<
a[b[j]]
<<
"
";
cout
<<
endl;
}
}
}
(2)01轉換法
程序的思路是開一個數組,其下標表示1到n個數,數組元素的值為1表示其代表的數被選中,為0則沒選中。
首先初始化,將數組前n個元素置1,表示第一個組合為前n個數。
然後從左到右掃描數組元素值的「10」組合,找到第一個「10」組合後將其變為「01」組合,同時將其左邊的所有「1」全部移動到數組的最左端。
當第一個「1」移動到數組的n-m的位置,即n個「1」全部移動到最右端時,就得到了最後一個組合。
例如求5中選3的組合:
1
1
1
0
0
//1,2,3
1
1
0
1
0
//1,2,4
1
0
1
1
0
//1,3,4
0
1
1
1
0
//2,3,4
1
1
0
0
1
//1,2,5
1
0
1
0
1
//1,3,5
0
1
1
0
1
//2,3,5
1
0
0
1
1
//1,4,5
0
1
0
1
1
//2,4,5
0
0
1
1
1
//3,4,5

❻ 急!N個數中取M個數,請問有幾種不同的取法

這是個組合問題~cm(右上角一個n)。(不好意思,不好打)。
即:[m*(m-1)*(m-2)...*(m-n+1)]/n!。
n!表示n的階乘,即為n*(n-1)*(n-2)...*1.

❼ 求指導!用C語言從N個數中任意取出M個的組合的個數,只求個數!!!

#include<stdio.h>
void main()
{
long i,j=1,m,n,a,b,c,t; //首先j在最開始賦初值,如果在for中,那每次循環都會賦值為1,這里錯了
scanf("m=%d,n=%d",&m,&n);
for(i=1;i<=n;i++)
{
j=j*i;
if (i==m)
a=j;
if(i==n-m) //因為n-m可能與m相等,所以不能用else
b=j;
else t=j;
}
c=t/(a*b);
printf("從n中選m個數的方法有%d個\n",c);
}
這個演算法是沒錯,但是容納的數據太大就會爆掉,可以用大數乘法,但是這樣就會很麻煩了

❽ 從1—n個數中取m個數,列印所有情況的源代碼(c語言)

典型的組合問題,解法有遞歸、回溯等等
遞歸法較簡單,代碼如下:

void combine(int a[], int n, int m, int b[], int M);

參數:
a 存放候選數字
n 總項數
m 取出項數
b 存放選出結果
M = m

#include "stdio.h"
#define MAX 100

void combine(int a[], int n, int m, int b[], int M);

int main(void)
{
int i;
int a[MAX], b[MAX];

for (i = 1; i < 100; i++)
a[i - 1] = i;

combine(a, 5, 4, b, 4);
}

void combine(int a[], int n, int m, int b[], int M)
{
int i, j;

for (i = n; i >= m; i--)
{
b[m - 1] = i - 1;
if (m > 1)
combine(a, i - 1, m - 1, b, M);
else
{
for (j = M - 1; j >= 0; j--)
printf("%d ", a[b[j]]);
printf("\n");
}
}
}

❾ N個數中取M個有序數(可重復)的組合數

首先 從N中取M個數 如果是非減的 那麼也就只有一種情況

因此 組合數就是 Cmn

閱讀全文

與n個數取m個資料庫相關的資料

熱點內容
台灣有部電影失憶的女主角 瀏覽:125
馬爾科夫模型是用什麼編程的 瀏覽:937
以前的香港電影好多孩子特異功能深化 瀏覽:942
限制上傳excel文件 瀏覽:336
編程和代數學有什麼關系 瀏覽:87
文件重命名擴展名 瀏覽:937
電影 女的到國外做妓女 瀏覽:521
千年人參電影曹查理 瀏覽:385
gps怎麼導出數據導出 瀏覽:919
色色的男同電影 瀏覽:606
泰國百合短片《此刻心情》 瀏覽:434
那個網站可以看島國片 瀏覽:189
方唐鏡大什麼大 瀏覽:291
lt18i強刷工具 瀏覽:542
觀影網址 瀏覽:661
17世紀美洲建國類小說 瀏覽:427
中文字幕的日本片 瀏覽:785
韓國電影愛情片免費看有哪些 瀏覽:59
一本小說主角是木匠 瀏覽:272
如何從ftp下載文件夾 瀏覽:963

友情鏈接