第2種スターリング数
名前のない空でないグループに物を分ける方法を数えます。5人を2チームに分けると15通り、3チームなら25通りで、それぞれS(5,2)とS(5,3)です。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- N
- 5
- K
- 2
- 値
- 15
- 数量
- 15
第2種スターリング数は離散数学における基本的な数え上げの問いに答えます。n個の相異なる対象を、ちょうどk個の空でないラベルなしグループに分割する方法は何通りか。答えはS(n,k)、あるいは波括弧付きの{n choose k}と書きます。チームに名前を付けずに人を班分けする、鍵集合をラベルなしのバケツに分ける、全射関数を階乗因子まで数える、Bell数をkについての和として組み立てる、置換ではなく集合分割を求める課題を採点する——こうした場面で現れます。この機能は非負整数n(要素数)とk(空でない部分集合の数)を受け取り、BigInt動的計画法で計算した厳密なS(n,k)を十進文字列として返します。通常の安全整数の限界を大きく超える値でも桁ごとに正確です。負のkやkがnより大きい入力は、黙ったゼロや誤答ではなく明確な検証エラーで拒否されます。
第2種スターリング数の定義
第2種スターリング数S(n,k)は、n要素集合をちょうどk個の空でないラベルなし部分集合へ分割する通り数を数えます。部分集合内部の順序は関係なく、部分集合どうしも順序付きではありません。分割{{1,2},{3}}は{{3},{1,2}}と同じです。
標準漸化式はS(n,k) = k · S(n−1,k) + S(n−1,k−1)です。直感的には、最新要素nを加えるとき、単独のシングルトンになるか(残りn−1要素がk−1部分集合を成し、S(n−1,k−1)で数えられる)、または最初のn−1要素をkブロックに分割した既存のk部分集合のどれかに入るか(k通り、×S(n−1,k))です。
表を閉じる基底はS(0,0)=1、n>0でS(n,0)=0、k>0でS(0,k)=0、S(n,1)=1、S(n,n)=1です。教科書の定番確認はS(3,2)=3、S(4,2)=7、S(5,2)=15、S(5,3)=25です。Bell数B_nは任意個のブロックでのn集合の分割総数で、kを0からnまで足したS(n,k)の和です。
関連するが異なる対象には第1種スターリング数(サイクル数による置換)と二項係数(残りを分割せず要素を選ぶ)があります。本実装は浮動小数近似、モンテカルロ、外部表を一切使わず、動的計画法の行を厳密BigInt演算で埋め、各桁を正しくします。経路は完全に決定的で、乱数シード、時計、ネットワーク、モデルのドリフトはなく、同じnとkは常に同じ文字列を返します。
宣言された境界はnとkを0から1000に保ち、k≤nの規則のもと、無料ブラウザツールと軽量Worker経路に適した最悪レイテンシを保ちつつ、コンテスト・教室・パイプラインの厳密分割数え上げをカバーします。
実務で第2種スターリング数え上げが現れる場面
組合せ論の授業やプログラミングコンテストでは、n人のラベル付き人をk個のラベルなしチームに分ける通り数、n要素上のちょうどkクラスの同値関係の数、n個の相異なる贈り物をk個の同一の空でない箱に配る通り数——いずれもS(n,k)——が絶えず問われます。
アルゴリズム設計者は集合分割データ構造、固定クラスタ数のクラスタリングスケッチ、再帰過程が中間結果をまとめる通り数の解析に第2種Stirling表を使います。確率・統計の授業はS(n,k)を、n個の相異なる結果をk個の空でないラベルなしビンに割り当てる通り数、およびn集合からk集合への全射の数の閉形式k!· S(n,k)と結び付けます。
教育者や面接対策では小さなS(n,k)の短い三角を示すことが多く、1回の呼び出しで1エントリを計算すると、大きな表を手メンテせずに対話デモを教科書や解答キーと揃えられます。後で第1種Stirling数、Bell数のみ、k!
因子を既に掛けた全射の数え上げ、数え上げではなく分割の明示リストが必要なら、このランディングを過負荷にせず別の検索意図として扱ってください。
活用例
集合分割の宿題とコンテスト
オリンピック問題、離散数学演習、kブロックのラベルなし分割を求める自動解答キー向けに厳密なS(n,k)を計算します。
全射とクラスタリングの分析
全射関数n→kと固定kクラスタリングスケッチの背後の分割因子を、浮動小数表なしで寸法決めします。
Bell数の構成部品
kについてのS(n,k)の和や、教科書の三角に対するBell数パイプライン検証で、第2種の個別エントリを生成します。
よくある質問
第2種スターリング数とは何ですか?
S(n,k)はn個の相異なる要素をちょうどk個の空でないラベルなし部分集合に分割する通り数です。部分集合内・間の順序は関係ありません。
第1種との違いは何ですか?
第1種はサイクル数による置換を数えます。第2種はブロック数による集合分割を数えます。異なる数え上げの問いに答えます。
kが負またはnより大きい場合は?
本計算機は0 ≤ k ≤ nを要求し、負のkやnを超えるkは拒否され課金されません。
値が数値ではなく文字列なのはなぜですか?
Stirling数はJavaScriptの安全整数をすぐに超えます。十進文字列は大きなS(n,k)でも各桁を厳密に保ちます。
ベル数とはどのような関係がありますか?
ベル数は、グループの数を問わずに集合を分ける方法の総数です。第2種スターリング数をkが0からnまでについて足し合わせると、ベル数になります。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/combo/stirling-second \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"n":5,"k":2}'const res = await fetch("https://api.kit.forhosting.com/combo/stirling-second", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"n": 5,
"k": 2
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/combo/stirling-second",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"n": 5,
"k": 2
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/combo/stirling-second", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"n":5,"k":2}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"n":5,"k":2}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/combo/stirling-second", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"n": 5,
"k": 2
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "combo.stirling_second",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
制限
min_n | 0 |
max_n | 1000 |
min_k | 0 |
max_k | 1000 |
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
無料のブラウザツールと有料APIは同一の純粋関数を共有するため、教室デモと自動パイプラインが同じ対で食い違うことはありません。
送信内容と返却内容
要素数nは0から1000(両端含む)の整数、部分集合数kは0から1000(両端含む)の整数でk≤nを満たす必要があります。成功時、応答には常に正規化されたnとk、同じ厳密十進文字列としてのvalueとcount(S(n,k))、表示用の短い数式文字列(例:S(5,2))が含まれます。宿題と素早い健全性確認には無料ブラウザツールを使い、分割数え上げフィクスチャの大量生成時にはスクリプトから同一契約を呼び出してください。必須の整数nをフィールドn(別名itemsまたはsize)、必須の整数kをフィールドk(別名subsetsまたはparts)で指定してください。欠落フィールド、非整数、小数、負のn、負のk、nを超えるkはinvalid_inputで拒否され、課金されません。エラーメッセージは問題のフィールドと失敗した規則を示すため、フォームやスクリプトは推測なしに入力を修正できます。例:n=5かつk=2でcountは15;n=5かつk=3で25;n=3かつk=1で1;n=4かつk=4で1;n=0かつk=0で1;n=3でk=6はkがnを超えるためinvalid_input;k=−1もinvalid_input。契約はユニットテスト、教室デモ、一括パイプラインに適した安定したJSONです。成功したAPI呼び出しの料金は公開ベースの1件$0.002で、検証失敗は前払い残高を消費しません。
実務で第2種スターリング数え上げが現れる場面
この機能は純粋なparseエンジンのため、API料金は成功1件あたり公開ベースの$0.002で、検証失敗は残高を消費しません。
技術的な質問
料金はいくらですか?
ブラウザツールは無料でローカル実行です。APIリクエストは成功1件あたり$0.002の前払いKIT残高を使い、無効入力は課金されません。