C++ 空間和時間高效的二項式系數(Space and time efficient Binomial Coefficient)

這里函數采用兩個參數n和k,并返回二項式系數 C(n, k) 的值。?

例子:?

輸入: n = 4 和 k = 2

輸出: 6

解釋: 4 C 2 等于 4!/(2!*2!) = 6

輸入: n = 5 和 k = 2

輸出: 10

解釋: 5 C 2 等于 5!/(3!*2!) = 10

????????在本文中,我們討論了 O(n*k) 時間和 O(k) 額外空間算法。C(n, k) 的值可以在 O(k) 時間和 O(1) 額外空間內計算出來。

方法:

1、如果 r 大于 nr,則將 r 更改為 nr,并創建一個變量來存儲答案。

2、從 0 到 r-1 運行循環

3、在每次迭代中更新 ans 為 (ans*(ni))/(i+1),其中 i 是循環計數器。

4、所以答案將等于 ((n/1)*((n-1)/2)*…*((n-r+1)/r),等于 nCr。

C(n, k)?
= n! / (nk)! * k!?
= [n * (n-1) *....* 1] / [ ( (nk) * (nk-1) * .... * 1) *?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ( k * (k-1) * .... * 1 ) ]
簡化后,我們得到
C(n, k)?
= [n * (n-1) * .... * (n-k+1)] / [k * (k-1) * .... * 1]

另外,C(n, k) = C(n, nk) ??
// 如果 r > n-r,則 r 可以更改為 n-r

以下實現中利用上述公式計算C(n,k):

// Program to calculate C(n, k)?
??
#include <bits/stdc++.h>?
using namespace std;?
??
// Returns value of Binomial Coefficient C(n, k)?
int binomialCoeff(int n, int k)?
{?
? ? int res = 1;?
??
? ? // Since C(n, k) = C(n, n-k)?
? ? if (k > n - k)?
? ? ? ? k = n - k;?
??
? ? // Calculate value of?
? ? // [n * (n-1) *---* (n-k+1)] / [k * (k-1) *----* 1]?
? ? for (int i = 0; i < k; ++i) {?
? ? ? ? res *= (n - i);?
? ? ? ? res /= (i + 1);?
? ? }?
??
? ? return res;?
}?
??
// Driver Code?
int main()?
{?
? ? int n = 8, k = 2;?
? ? cout << "Value of C(" << n << ", " << k << ") is "
? ? ? ? ?<< binomialCoeff(n, k);?
? ? return 0;?
}?
??
// This is code is contributed by rathbhupendra

輸出:
C(8, 2) 的值為 28

復雜度分析:?

時間復雜度: O(r)循環必須從 0 運行到 r。因此,時間復雜度為 O(r)。

輔助空間:O(1),因為不需要額外的空間。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/41070.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/41070.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/41070.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

海思SD3403/SS928V100開發(14)WIFI模塊RTL8821驅動調試

1.前言 芯片平臺: 海思SD3403/SS928V100 操作系統平臺: Ubuntu20.04.05【自己移植】 WIFI模塊: LB-LINK的RTL8821 2. 調試記錄 參考供應商提供的操作手冊 2.1 lsusb查看設備 2.2 編譯供應商提供的驅動 2.2.1 修改Makefile 2.2.2 編譯報錯 解決辦法: 將Makefile中arm…

linux中 nginx+tomcat 部署方式 tomcat掛掉設置自動啟動

在Linux環境下&#xff0c;要實現當Tomcat掛掉后自動重啟&#xff0c;可以通過編寫Shell腳本結合cron定時任務或者使用系統守護進程&#xff08;如Systemd、Upstart或SysVinit&#xff09;來完成。 使用Shell腳本和cron定時任務 編寫檢查并重啟Tomcat的Shell腳本&#xff1a;首…

取證與數據恢復:冷系統分析,實時系統分析與鏡像分析之間的過渡辦法

天津鴻萌科貿發展有限公司是 ElcomSoft 系列取證軟件的授權代理商。 ElcomSoft 系列取證軟件 ElcomSoft 系列取證軟件支持從計算機和移動設備進行數據提取、解鎖文檔、解密壓縮文件、破解加密容器、查看和分析證據。 計算機和手機取證的完整集合硬件加速解密最多支持10,000計…

MMSC物料庫位擴充

MMSC物料庫位擴充 輸入事務碼MMSC&#xff1a; 回車后添加新的庫位即可&#xff1a; 代碼實現&#xff0c;使用BDC *&------------------------------------------------* *&BDC的定義 *&------------------------------------------------* DATA gt_bdcdata T…

ggrcs包4.0版本發布—重新對密度圖寬度進行了設計

目前本人寫的ggrcs包新的4.0版本已經在CRAN上線&#xff0c;目前支持邏輯回歸&#xff08;logistic回歸&#xff09;、cox回歸和多元線性回歸。 需要的可以使用代碼安裝 install.packages("ggrcs")如果原來安裝了舊版本&#xff0c;重新在安裝一次就可以升級到新版…

如何選擇小紅書矩陣系統

在內容營銷領域&#xff0c;小紅書已成為一個不可忽視的平臺&#xff0c;尤其是對于品牌和個人創作者來說。小紅書矩陣系統&#xff0c;指的是一系列策略和工具&#xff0c;它們可以幫助用戶在小紅書上高效地管理和分發內容。本文將探討如何選擇適合自己需求的小紅書矩陣系統&a…

(18)GPS/指南針(二)

文章目錄 前言 3 GPS驅動程序選項 4 GPS自動切換 5 高級用途 前言 Copter/Plane/Rover 支持與 GPS、指南針和其他定位技術的整合&#xff1a; 3 GPS驅動程序選項 GPS_DRV_OPTIONS 參數提供了幾個 GPS 操作選項。這個參數是一個位掩碼&#xff0c;允許同時進行多個選項的選…

Oracle數據庫的日志切換策略

Oracle數據庫的日志切換策略是確保數據庫穩定運行和事務連續性的關鍵機制之一。以下是對Oracle日志切換策略的詳細解析 1、自動日志切換 1.1、重做日志切換&#xff1a; Oracle數據庫使用重做日志文件&#xff08;Redo Log Files&#xff09;來保證實例恢復。當當前的重做日…

YOLOv8數據集可視化[目標檢測實踐篇]

先貼代碼,后面再補充解析。 這個篇章主要是對標注好的標簽進行可視化,雖然比較簡單,但是可以從可視化代碼中學習到YOLOv8是如何對標簽進行解析的。 下面直接貼代碼: import cv2 import numpy as np import osdef read_det_labels(label_file_path):with open(labe…

藍橋杯開發板STM32G431RBT6高階HAL庫學習FreeRtos——完成第一個小項目點燈

一、配置LED引腳(注意引腳都配置為高電平) 二、新建兩個任務&#xff0c;一個為動態創建&#xff0c;一個靜態創建&#xff08;以后大多數情況進行動態創建&#xff09;//將兩個優先級設置成一樣 補充&#xff1a; 1.FreeRTOS創建靜態任務和動態任務的各自優缺點 靜態任務和動…

react框架,使用vite和nextjs構建react項目

react框架 React 是一個用于構建用戶界面(UI)的 JavaScript 庫,它的本質作用是使用js動態的構建html頁面&#xff0c;react的設計初衷就是為了更方便快捷的構建頁面&#xff0c;官方并沒有規定如何進行路由和數據獲取&#xff0c;要構建一個完整的react項目&#xff0c;我們需要…

微信小程序:圖片轉icon

svg方式 通過svg圖片的方式也能實現自定義icon。但是相比第一種方式&#xff0c;svg圖片可以修改顏色&#xff0c;并且縮放的失真率也比較低。不過小程序wxss并不支持加載本地的svg圖片。我們可以通過在線(https://www.sojson.com/image2base64.html)svg轉base64的方式在wxss中…

Java中的線程調度與性能優化技巧

Java中的線程調度與性能優化技巧 大家好&#xff0c;我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編&#xff0c;也是冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01; 1. 引言 在Java應用程序中&#xff0c;線程調度和性能優化是提升系統響應速…

3D技術賦能電商行業:“人-貨-場”視角下的新變革!

在當今數字化時代&#xff0c;3D技術正以前所未有的方式賦能電商行業&#xff0c;在提升用戶體驗&#xff0c;優化商品展示&#xff0c;以及打造沉浸式的購。物場景上&#xff0c;重塑了電商行業的面貌&#xff0c;深刻改變著消費者的購物體驗和商家的營銷策略。 51建模網作為專…

Eclipse 菜單:深入解析與高效使用技巧

Eclipse 菜單:深入解析與高效使用技巧 Eclipse 是一款廣泛使用的集成開發環境(IDE),它為Java、C++、PHP等編程語言提供了一個強大的開發平臺。Eclipse 的菜單是其用戶界面的一部分,提供了豐富的功能和選項,以幫助開發者更高效地工作。本文將深入解析 Eclipse 的菜單系統…

視圖庫對接系列(GA-T 1400)九、視圖庫對接系列(本級)機動車數據推送

背景 在上幾章中,我們已經可以將視圖庫的平臺寫到我們的數據庫中了。 換句話說就已經接入我們的平臺了,這幾期的話,我們就對接設備, 將設備的數據接入到我們平臺來。 機動車數據推送 接入機動車數據推送相對比較簡單,我們只需要實現對應的接口就ok了。 具體如圖: 有增…

RRStudio 下載及安裝(詳盡版)

R語言來自S語言&#xff0c;是S語言的一個變種。S語言、C語言、Unix系統都是貝爾實驗室的研究成果。R 語言是一種解釋型的面向數學理論研究工作者的語言&#xff0c;主要用于統計分析、繪圖、數據挖掘。 R 語言自由軟件&#xff0c;免費、開放源代碼&#xff0c;支持各個主要計…

Emacs有什么優點,用Emacs寫程序真的比IDE更方便嗎?

Emacs 是一個功能強大的文本編輯器&#xff0c;它在開發者和程序員中非常受歡迎&#xff0c;主要優點包括&#xff1a; 可定制性&#xff1a;Emacs 允許用戶通過 Lisp 編程語言來自定義編輯器的行為和界面&#xff0c;幾乎可以修改任何方面。擴展性&#xff1a;擁有大量的擴展…

TypeScript 如何快速獲取函數的返回類型

ReturnType 是 TypeScript 的一個內置工具類型&#xff0c;用于獲取一個函數的返回類型。下面是一個使用 ReturnType 的示例: function add(a: number, b: number): number {return a b; }type AddReturnType ReturnType<typeof add>; // AddReturnType 是 number 類型…

C++:類型轉換

目錄 一、C語言中的類型轉換 二、為什么C要新的轉換格式 三、 C強制類型轉換 1.static_cast 2.reinterpret_cast 3.const_cast 4.dynamic_cast 一、C語言中的類型轉換 在C語言中&#xff0c;如果賦值運算符左右兩側類型不同&#xff0c;或者形參與實參類型不匹配&…