」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何產生等概率地求和到預定義值的隨機數?

如何產生等概率地求和到預定義值的隨機數?

發佈於2024-11-08
瀏覽:902

How to Generate Random Numbers Summing to a Predefined Value with Equal Probability?

產生隨機數求和到預定義值

在這種情況下,我們的目標是產生一個偽隨機數列表,這些偽隨機數共同添加直至特定的預定值。一種方法是隨機產生指定範圍內的數字,將其從總數中減去,然後重複此過程,直到總和等於所需值。然而,這種方法在對總和的貢獻方面有利於第一個產生的數字。

為了確保一致性,開發了更複雜的解決方案:

import random

def constrained_sum_sample_pos(n, total):
    """Return a randomly chosen list of n positive integers summing to total.
    Each such list is equally likely to occur."""

    dividers = sorted(random.sample(range(1, total), n - 1))
    return [a - b for a, b in zip(dividers   [total], [0]   dividers)]

此方法產生總和為目標值的正整數清單。關鍵概念是每種可能的數字組合都有相同的可能性產生。此外,將此技術擴展到不同的總和和不同數量的隨機數非常簡單。

例如,如果我們將 n 設為 4,總計設為 40,我們可能會獲得以下輸出:[4, 4, 25 ,7]。需要注意的是,此清單中的每個元素相加後都會產生預定義值 40。

為了允許非正整數,可以進行修改:

def constrained_sum_sample_nonneg(n, total):
    """Return a randomly chosen list of n nonnegative integers summing to total.
    Each such list is equally likely to occur."""

    return [x - 1 for x in constrained_sum_sample_pos(n, total   n)]

透過將每個值加一,我們可以產生一個非負整數列表,這些整數加起來等於所需的總數。

此方法可確保每種可能的組合,無論數字是正數或非負數,都有相同的生成機率。憑藉其用戶友好的實現和跨不同場景的多功能性,constrained_sum_sample_pos 和 constrained_sum_sample_nonneg 已成為 Python 中隨機數生成任務不可或缺的一部分。

最新教學 更多>
  • Top itemmap Scraper 你該知道的 4
    Top itemmap Scraper 你該知道的 4
    有時需要組織並包含在新網站設計中的資訊量可能會令人難以承受,從而使任務變得更加困難。網站地圖是一個有用的規劃工具,可以幫助組織和簡化網站上需要的材料並刪除任何不需要的頁面。此外,精心設計的網站地圖可為訪客提供正面的體驗,從而提高轉換率。 多年來,最好的網頁設計方法一直包括網站地圖;因此,它們並不是...
    程式設計 發佈於2024-11-08
  • 如何在 Web 瀏覽器中追蹤 XMLHttpRequest 的進度更新?
    如何在 Web 瀏覽器中追蹤 XMLHttpRequest 的進度更新?
    取得 XMLHttpRequest 的進度更新Web 瀏覽器為用戶端伺服器資料交換提供 XMLHttpRequest (XHR) 物件。雖然標準 XHR API 缺乏固有的進度追蹤功能,但有一些方法可以監控資料傳輸的進度。 上傳位元組數:XHR 公開 xhr.upload。 onprogress 事...
    程式設計 發佈於2024-11-08
  • 如何在 JavaScript 中向回呼函數傳遞參數?
    如何在 JavaScript 中向回呼函數傳遞參數?
    在JavaScript 中向回調函數傳遞參數在JavaScript 中,回呼函數通常用於在某個事件發生後執行特定任務。在定義這些函數時,通常需要向它們傳遞相關資料或參數。 傳遞參數的簡單方法是在呼叫回呼函數時將它們明確地設定為實參。例如:function tryMe(param1, param2) ...
    程式設計 發佈於2024-11-08
  • 與 Jira 和 LLM 的互動專案報告
    與 Jira 和 LLM 的互動專案報告
    For all projects I worked on, I used some sort of project management system where project scope was defined as a list of tasks (tickets), and progress...
    程式設計 發佈於2024-11-08
  • 如何在 PHP 中對不同格式的日期數組進行排序?
    如何在 PHP 中對不同格式的日期數組進行排序?
    PHP 日期數組排序在 PHP 中對日期數組進行排序可能很棘手,特別是當日期不是標準化格式時。 In根據您的具體情況,您有不同格式的日期數組,例如“11-01-2012”和“01-01-2014”。使用 asort 函數(按升序對數組進行排序)在這種情況下不起作用,因為它將每個日期視為字串並忽略年-...
    程式設計 發佈於2024-11-08
  • 機器學習中的 C++:逃離 Python 與 GIL
    機器學習中的 C++:逃離 Python 與 GIL
    介紹 當 Python 的全域解釋器鎖定 (GIL) 成為需要高並發或原始效能的機器學習應用程式的瓶頸時,C 提供了一個引人注目的替代方案。這篇部落格文章探討如何利用 C 語言進行 ML,並專注於效能、並發性以及與 Python 的整合。 閱讀完整的部落格! ...
    程式設計 發佈於2024-11-08
  • 如何使用 PHP 和 MySQL 以印地語儲存和顯示 Unicode 字串?
    如何使用 PHP 和 MySQL 以印地語儲存和顯示 Unicode 字串?
    使用PHP 和MySQL 儲存和顯示Unicode 字串(हिन्दी)嘗試儲存和顯示Unicode 字串時,您可能會遇到挑戰,特別是在印地語等語言中,由於編碼問題。為了解決這些問題,必須在資料庫和 PHP 腳本中設定適當的字元編碼和排序規則。 資料庫配置對於 MySQL資料庫,將資料庫和資料表編碼...
    程式設計 發佈於2024-11-08
  • 如何在 PHP 中將 UTF-8 字元轉換為 ISO-8859-1 並返回?
    如何在 PHP 中將 UTF-8 字元轉換為 ISO-8859-1 並返回?
    將UTF-8 字元轉換為ISO-88591 並傳回PHP當使用使用不同編碼的多個腳本時,需要在字元集之間進行轉換。其中一種轉換涉及將 UTF-8 字元轉換為 ISO-88591,反之亦然。 儘管存在 utf_encode() 和 _decode(),但將 UTF-8 直接轉換為 ISO-88591 ...
    程式設計 發佈於2024-11-08
  • 以下是一些標題選項,使用問題格式,重點關注文章中提出的挑戰和解決方案:

選項 1(直接且簡潔):
* 如何避免 Angul 中的模板標籤衝突
    以下是一些標題選項,使用問題格式,重點關注文章中提出的挑戰和解決方案: 選項 1(直接且簡潔): * 如何避免 Angul 中的模板標籤衝突
    為AngularJS 和Django 定制模板標籤由於模板標籤衝突,將AngularJS 與Django 集成可能會帶來挑戰,兩者都使用{{}}。為了克服這個問題,需要調整 AngularJS 或 Django 的模板標籤語法。 AngularJS 範本標籤自訂:在 AngularJS 1.0 中,...
    程式設計 發佈於2024-11-08
  • 每個開發人員都應該了解的高階 JavaScript 概念
    每個開發人員都應該了解的高階 JavaScript 概念
    JavaScript 是许多开发人员日常使用的语言,但其生态系统中存在许多隐藏的瑰宝,即使是经验丰富的开发人员也可能不熟悉。本文探讨了一些鲜为人知的 JavaScript 概念,它们可以显着提高您的编程技能。我们将介绍 代理、符号、生成器等概念,通过示例演示每个概念并解决问题以说明其强大功能。 最...
    程式設計 發佈於2024-11-08
  • 直接用mysqli_函數取代mysql_函數會帶來挑戰嗎?
    直接用mysqli_函數取代mysql_函數會帶來挑戰嗎?
    盲目地用 mysqli_ 取代 mysql_ 函數會導致問題嗎? 將程式碼庫更新到 PHP 7 需要將已棄用的 mysql_ 函數替換為 mysqli_ 對應函數。然而,一個常見的誤解是您可以直接進行全面替換。 答案:不,事情沒那麼簡單雖然函數名稱可能會出現類似地,與 mysql_ 相比,mysql...
    程式設計 發佈於2024-11-08
  • 為什麼 `malloc()` 在 C++ 中會導致「無效轉換」錯誤?
    為什麼 `malloc()` 在 C++ 中會導致「無效轉換」錯誤?
    Malloc 分配問題:了解「無效轉換」錯誤提供的程式碼在嘗試使用malloc 分配記憶體時引入了一個常見問題( )。此錯誤源自於將 malloc() 的回傳值直接指派給 char 指標而沒有進行正確的轉換。 malloc() 函數在堆中保留一塊記憶體並傳回一個通用的 void 指標。但是,程式碼將...
    程式設計 發佈於2024-11-08
  • 如何在 Zend Framework 中確定客戶端的時區?
    如何在 Zend Framework 中確定客戶端的時區?
    客戶端時區確定確定客戶端時區對於時間敏感的應用程式至關重要。這個問題探討如何在 Zend Framework 中取得此資訊。 以秒偏移量形式檢索時區取得時區的首選方法是作為 UTC 的秒數。例如,俄羅斯莫斯科將返回 36060,而英國倫敦將返回 0。 建議的解決方案建議的解決方案涉及利用jQuery...
    程式設計 發佈於2024-11-08
  • 如何使用 React 建立通知功能
    如何使用 React 建立通知功能
    Hello everyone ?? In today's tutorial, we'll guide you through building a real-time notifications feature using SuperViz, a powerful platform for rea...
    程式設計 發佈於2024-11-08
  • 了解命令式程式設計和聲明式程式設計之間的區別
    了解命令式程式設計和聲明式程式設計之間的區別
    當我剛開始學習React時,我的老師說:「JavaScript是命令式編程,而React是聲明式編程。」然而,一開始這對我來說不太有意義。因此,我決定將其分解以更好地理解其中的差異。 將命令式和聲明式程式設計與披薩進行比較? 為了更容易理解,讓我們來比較一下這兩種烹飪方法。 ...
    程式設計 發佈於2024-11-08

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3