{"config":{"lang":["ja"],"separator":"[\\s\\-\u3000\u3001\u3002\uff0c\uff0e]+","pipeline":["stemmer"],"fields":{"title":{"boost":1000.0},"text":{"boost":1.0},"tags":{"boost":1000000.0}}},"docs":[{"location":"chapter_appendix/","title":"\u7b2c 16 \u7ae0 \u00a0 \u4ed8\u9332","text":""},{"location":"chapter_appendix/#_1","title":"\u7ae0\u306e\u5185\u5bb9","text":""},{"location":"chapter_appendix/contribution/","title":"16.2 \u00a0 \u30b3\u30f3\u30c8\u30ea\u30d3\u30e5\u30fc\u30b7\u30e7\u30f3","text":"

\u8457\u8005\u306e\u80fd\u529b\u306b\u9650\u308a\u304c\u3042\u308b\u305f\u3081\u3001\u672c\u66f8\u306b\u306f\u3044\u304f\u3064\u304b\u306e\u7701\u7565\u3084\u8aa4\u308a\u304c\u907f\u3051\u3089\u308c\u307e\u305b\u3093\u3002\u3054\u7406\u89e3\u3092\u304a\u9858\u3044\u3057\u307e\u3059\u3002\u8aa4\u5b57\u3001\u30ea\u30f3\u30af\u5207\u308c\u3001\u5185\u5bb9\u306e\u6b20\u843d\u3001\u6587\u7ae0\u306e\u66d6\u6627\u3055\u3001\u8aac\u660e\u306e\u4e0d\u660e\u78ba\u3055\u3001\u307e\u305f\u306f\u4e0d\u5408\u7406\u306a\u6587\u7ae0\u69cb\u9020\u3092\u767a\u898b\u3055\u308c\u305f\u5834\u5408\u306f\u3001\u8aad\u8005\u306b\u3088\u308a\u826f\u8cea\u306a\u5b66\u7fd2\u30ea\u30bd\u30fc\u30b9\u3092\u63d0\u4f9b\u3059\u308b\u305f\u3081\u3001\u4fee\u6b63\u306b\u3054\u5354\u529b\u304f\u3060\u3055\u3044\u3002

\u3059\u3079\u3066\u306e\u30b3\u30f3\u30c8\u30ea\u30d3\u30e5\u30fc\u30bf\u30fc\u306eGitHub ID\u306f\u3001\u672c\u66f8\u306e\u30ea\u30dd\u30b8\u30c8\u30ea\u3001\u30a6\u30a7\u30d6\u3001PDF\u30d0\u30fc\u30b8\u30e7\u30f3\u306e\u30db\u30fc\u30e0\u30da\u30fc\u30b8\u306b\u8868\u793a\u3055\u308c\u3001\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u3078\u306e\u7121\u79c1\u306e\u8ca2\u732e\u306b\u611f\u8b1d\u3044\u305f\u3057\u307e\u3059\u3002

\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u306e\u9b45\u529b

\u7d19\u306e\u672c\u306e2\u3064\u306e\u5370\u5237\u7248\u306e\u9593\u9694\u306f\u3057\u3070\u3057\u3070\u9577\u304f\u3001\u5185\u5bb9\u306e\u66f4\u65b0\u304c\u975e\u5e38\u306b\u4e0d\u4fbf\u3067\u3059\u3002

\u3057\u304b\u3057\u3001\u3053\u306e\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u306e\u672c\u3067\u306f\u3001\u5185\u5bb9\u306e\u66f4\u65b0\u30b5\u30a4\u30af\u30eb\u306f\u6570\u65e5\u3001\u3055\u3089\u306b\u306f\u6570\u6642\u9593\u306b\u77ed\u7e2e\u3055\u308c\u307e\u3059\u3002

"},{"location":"chapter_appendix/contribution/#1","title":"1. \u00a0 \u5185\u5bb9\u306e\u5fae\u8abf\u6574","text":"

\u4e0b\u306e\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u5404\u30da\u30fc\u30b8\u306e\u53f3\u4e0a\u89d2\u306b\u300c\u7de8\u96c6\u30a2\u30a4\u30b3\u30f3\u300d\u304c\u3042\u308a\u307e\u3059\u3002\u4ee5\u4e0b\u306e\u624b\u9806\u306b\u5f93\u3063\u3066\u30c6\u30ad\u30b9\u30c8\u3084\u30b3\u30fc\u30c9\u3092\u4fee\u6b63\u3067\u304d\u307e\u3059\u3002

  1. \u300c\u7de8\u96c6\u30a2\u30a4\u30b3\u30f3\u300d\u3092\u30af\u30ea\u30c3\u30af\u3057\u307e\u3059\u3002\u300c\u3053\u306e\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u30d5\u30a9\u30fc\u30af\u3057\u307e\u3059\u304b\u300d\u3068\u4fc3\u3055\u308c\u305f\u5834\u5408\u306f\u3001\u540c\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002
  2. Markdown\u30bd\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb\u306e\u5185\u5bb9\u3092\u4fee\u6b63\u3057\u3001\u5185\u5bb9\u306e\u6b63\u78ba\u6027\u3092\u78ba\u8a8d\u3057\u3001\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306e\u4e00\u8cab\u6027\u3092\u4fdd\u3064\u3088\u3046\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
  3. \u30da\u30fc\u30b8\u306e\u4e0b\u90e8\u3067\u4fee\u6b63\u8aac\u660e\u3092\u8a18\u5165\u3057\u3001\u300cPropose file change\u300d\u30dc\u30bf\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3057\u307e\u3059\u3002\u30da\u30fc\u30b8\u304c\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3055\u308c\u305f\u5f8c\u3001\u300cCreate pull request\u300d\u30dc\u30bf\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u958b\u59cb\u3057\u307e\u3059\u3002

\u56f3 16-3 \u00a0 \u30da\u30fc\u30b8\u7de8\u96c6\u30dc\u30bf\u30f3

\u56f3\u306f\u76f4\u63a5\u4fee\u6b63\u3067\u304d\u306a\u3044\u305f\u3081\u3001\u65b0\u3057\u3044Issue\u3092\u4f5c\u6210\u3059\u308b\u304b\u3001\u554f\u984c\u3092\u8aac\u660e\u3059\u308b\u30b3\u30e1\u30f3\u30c8\u304c\u5fc5\u8981\u3067\u3059\u3002\u3067\u304d\u308b\u3060\u3051\u65e9\u304f\u56f3\u3092\u518d\u63cf\u753b\u3057\u3066\u7f6e\u304d\u63db\u3048\u307e\u3059\u3002

"},{"location":"chapter_appendix/contribution/#2","title":"2. \u00a0 \u5185\u5bb9\u306e\u4f5c\u6210","text":"

\u3053\u306e\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3078\u306e\u53c2\u52a0\u306b\u8208\u5473\u304c\u3042\u308b\u5834\u5408\u3001\u30b3\u30fc\u30c9\u3092\u4ed6\u306e\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\u306b\u7ffb\u8a33\u3057\u305f\u308a\u3001\u8a18\u4e8b\u306e\u5185\u5bb9\u3092\u62e1\u5f35\u3057\u305f\u308a\u3059\u308b\u3053\u3068\u3092\u542b\u3081\u3066\u3001\u4ee5\u4e0b\u306e\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u3092\u5b9f\u88c5\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

  1. GitHub\u306b\u30ed\u30b0\u30a4\u30f3\u3057\u3001\u672c\u66f8\u306e\u30b3\u30fc\u30c9\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u500b\u4eba\u30a2\u30ab\u30a6\u30f3\u30c8\u306b\u30d5\u30a9\u30fc\u30af\u3057\u307e\u3059\u3002
  2. \u30d5\u30a9\u30fc\u30af\u3057\u305f\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u30a6\u30a7\u30d6\u30da\u30fc\u30b8\u306b\u79fb\u52d5\u3057\u3001git clone\u30b3\u30de\u30f3\u30c9\u3092\u4f7f\u7528\u3057\u3066\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u30ed\u30fc\u30ab\u30eb\u30de\u30b7\u30f3\u306b\u30af\u30ed\u30fc\u30f3\u3057\u307e\u3059\u3002
  3. \u30ed\u30fc\u30ab\u30eb\u3067\u5185\u5bb9\u3092\u4f5c\u6210\u3057\u3001\u5b8c\u5168\u306a\u30c6\u30b9\u30c8\u3092\u5b9f\u884c\u3057\u3066\u30b3\u30fc\u30c9\u306e\u6b63\u78ba\u6027\u3092\u691c\u8a3c\u3057\u307e\u3059\u3002
  4. \u30ed\u30fc\u30ab\u30eb\u3067\u884c\u3063\u305f\u5909\u66f4\u3092\u30b3\u30df\u30c3\u30c8\u3057\u3001\u30ea\u30e2\u30fc\u30c8\u30ea\u30dd\u30b8\u30c8\u30ea\u306b\u30d7\u30c3\u30b7\u30e5\u3057\u307e\u3059\u3002
  5. \u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u30a6\u30a7\u30d6\u30da\u30fc\u30b8\u3092\u66f4\u65b0\u3057\u3001\u300cCreate pull request\u300d\u30dc\u30bf\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u958b\u59cb\u3057\u307e\u3059\u3002
"},{"location":"chapter_appendix/contribution/#3-docker","title":"3. \u00a0 Docker\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8","text":"

hello-algo\u30eb\u30fc\u30c8\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3067\u3001\u4ee5\u4e0b\u306eDocker\u30b9\u30af\u30ea\u30d7\u30c8\u3092\u5b9f\u884c\u3057\u3066http://localhost:8000\u3067\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u30a2\u30af\u30bb\u30b9\u3057\u307e\u3059\uff1a

docker-compose up -d\n

\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3092\u4f7f\u7528\u3057\u3066\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u3092\u524a\u9664\u3057\u307e\u3059\uff1a

docker-compose down\n
"},{"location":"chapter_appendix/installation/","title":"16.1 \u00a0 \u30a4\u30f3\u30b9\u30c8\u30fc\u30eb","text":""},{"location":"chapter_appendix/installation/#1611-ide","title":"16.1.1 \u00a0 IDE\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb","text":"

\u30ed\u30fc\u30ab\u30eb\u306e\u7d71\u5408\u958b\u767a\u74b0\u5883\uff08IDE\uff09\u3068\u3057\u3066\u3001\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u3067\u8efd\u91cf\u306aVS Code\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\u3002VS Code\u516c\u5f0f\u30a6\u30a7\u30d6\u30b5\u30a4\u30c8\u306b\u30a2\u30af\u30bb\u30b9\u3057\u3001\u304a\u4f7f\u3044\u306e\u30aa\u30da\u30ec\u30fc\u30c6\u30a3\u30f3\u30b0\u30b7\u30b9\u30c6\u30e0\u306b\u9069\u3057\u305fVS Code\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u9078\u629e\u3057\u3066\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3001\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u3066\u304f\u3060\u3055\u3044\u3002

\u56f3 16-1 \u00a0 \u516c\u5f0f\u30a6\u30a7\u30d6\u30b5\u30a4\u30c8\u304b\u3089VS Code\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9

VS Code\u306b\u306f\u5f37\u529b\u306a\u62e1\u5f35\u6a5f\u80fd\u30a8\u30b3\u30b7\u30b9\u30c6\u30e0\u304c\u3042\u308a\u3001\u307b\u3068\u3093\u3069\u306e\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\u306e\u5b9f\u884c\u3068\u30c7\u30d0\u30c3\u30b0\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001\u300cPython Extension Pack\u300d\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u305f\u5f8c\u3001Python\u30b3\u30fc\u30c9\u3092\u30c7\u30d0\u30c3\u30b0\u3067\u304d\u307e\u3059\u3002\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u624b\u9806\u3092\u4e0b\u306e\u56f3\u306b\u793a\u3057\u307e\u3059\u3002

\u56f3 16-2 \u00a0 VS Code\u62e1\u5f35\u6a5f\u80fd\u30d1\u30c3\u30af\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb

"},{"location":"chapter_appendix/installation/#1612","title":"16.1.2 \u00a0 \u8a00\u8a9e\u74b0\u5883\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb","text":""},{"location":"chapter_appendix/installation/#1-python","title":"1. \u00a0 Python\u74b0\u5883","text":"
  1. Miniconda3\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u3002Python 3.10\u4ee5\u964d\u304c\u5fc5\u8981\u3067\u3059\u3002
  2. VS Code\u62e1\u5f35\u6a5f\u80fd\u30de\u30fc\u30b1\u30c3\u30c8\u30d7\u30ec\u30a4\u30b9\u3067python\u3092\u691c\u7d22\u3057\u3001Python Extension Pack\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u3002
  3. \uff08\u30aa\u30d7\u30b7\u30e7\u30f3\uff09\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u3067pip install black\u3092\u5165\u529b\u3057\u3066\u3001\u30b3\u30fc\u30c9\u30d5\u30a9\u30fc\u30de\u30c3\u30c6\u30a3\u30f3\u30b0\u30c4\u30fc\u30eb\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u3002
"},{"location":"chapter_appendix/installation/#2-cc","title":"2. \u00a0 C/C++\u74b0\u5883","text":"
  1. Windows\u30b7\u30b9\u30c6\u30e0\u3067\u306fMinGW\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\uff08\u8a2d\u5b9a\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\uff09\u3002MacOS\u306b\u306fClang\u304c\u4ed8\u5c5e\u3057\u3066\u3044\u308b\u305f\u3081\u3001\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u306f\u4e0d\u8981\u3067\u3059\u3002
  2. VS Code\u62e1\u5f35\u6a5f\u80fd\u30de\u30fc\u30b1\u30c3\u30c8\u30d7\u30ec\u30a4\u30b9\u3067c++\u3092\u691c\u7d22\u3057\u3001C/C++ Extension Pack\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u3002
  3. \uff08\u30aa\u30d7\u30b7\u30e7\u30f3\uff09\u8a2d\u5b9a\u30da\u30fc\u30b8\u3092\u958b\u304d\u3001Clang_format_fallback Style\u30b3\u30fc\u30c9\u30d5\u30a9\u30fc\u30de\u30c3\u30c6\u30a3\u30f3\u30b0\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u691c\u7d22\u3057\u3001{ BasedOnStyle: Microsoft, BreakBeforeBraces: Attach }\u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002
"},{"location":"chapter_appendix/installation/#3-java","title":"3. \u00a0 Java\u74b0\u5883","text":"
  1. OpenJDK\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\uff08\u30d0\u30fc\u30b8\u30e7\u30f3\u306fJDK 9\u3088\u308a\u65b0\u3057\u3044\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\uff09\u3002
  2. VS Code\u62e1\u5f35\u6a5f\u80fd\u30de\u30fc\u30b1\u30c3\u30c8\u30d7\u30ec\u30a4\u30b9\u3067java\u3092\u691c\u7d22\u3057\u3001Extension Pack for Java\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u3002
"},{"location":"chapter_appendix/installation/#4-c","title":"4. \u00a0 C#\u74b0\u5883","text":"
  1. .Net 8.0\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u3002
  2. VS Code\u62e1\u5f35\u6a5f\u80fd\u30de\u30fc\u30b1\u30c3\u30c8\u30d7\u30ec\u30a4\u30b9\u3067C# Dev Kit\u3092\u691c\u7d22\u3057\u3001C# Dev Kit\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\uff08\u8a2d\u5b9a\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\uff09\u3002
  3. Visual Studio\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\uff08\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\uff09\u3002
"},{"location":"chapter_appendix/installation/#5-go","title":"5. \u00a0 Go\u74b0\u5883","text":"
  1. go\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u3002
  2. VS Code\u62e1\u5f35\u6a5f\u80fd\u30de\u30fc\u30b1\u30c3\u30c8\u30d7\u30ec\u30a4\u30b9\u3067go\u3092\u691c\u7d22\u3057\u3001Go\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u3002
  3. Ctrl + Shift + P\u3092\u62bc\u3057\u3066\u30b3\u30de\u30f3\u30c9\u30d0\u30fc\u3092\u547c\u3073\u51fa\u3057\u3001go\u3068\u5165\u529b\u3057\u3001Go: Install/Update Tools\u3092\u9078\u629e\u3057\u3001\u3059\u3079\u3066\u3092\u9078\u629e\u3057\u3066\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u3002
"},{"location":"chapter_appendix/installation/#6-swift","title":"6. \u00a0 Swift\u74b0\u5883","text":"
  1. Swift\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u3002
  2. VS Code\u62e1\u5f35\u6a5f\u80fd\u30de\u30fc\u30b1\u30c3\u30c8\u30d7\u30ec\u30a4\u30b9\u3067swift\u3092\u691c\u7d22\u3057\u3001Swift for Visual Studio Code\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u3002
"},{"location":"chapter_appendix/installation/#7-javascript","title":"7. \u00a0 JavaScript\u74b0\u5883","text":"
  1. Node.js\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u3002
  2. \uff08\u30aa\u30d7\u30b7\u30e7\u30f3\uff09VS Code\u62e1\u5f35\u6a5f\u80fd\u30de\u30fc\u30b1\u30c3\u30c8\u30d7\u30ec\u30a4\u30b9\u3067Prettier\u3092\u691c\u7d22\u3057\u3001\u30b3\u30fc\u30c9\u30d5\u30a9\u30fc\u30de\u30c3\u30c6\u30a3\u30f3\u30b0\u30c4\u30fc\u30eb\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u3002
"},{"location":"chapter_appendix/installation/#8-typescript","title":"8. \u00a0 TypeScript\u74b0\u5883","text":"
  1. JavaScript\u74b0\u5883\u3068\u540c\u3058\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u624b\u9806\u306b\u5f93\u3044\u307e\u3059\u3002
  2. TypeScript Execute (tsx)\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u3002
  3. VS Code\u62e1\u5f35\u6a5f\u80fd\u30de\u30fc\u30b1\u30c3\u30c8\u30d7\u30ec\u30a4\u30b9\u3067typescript\u3092\u691c\u7d22\u3057\u3001Pretty TypeScript Errors\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u3002
"},{"location":"chapter_appendix/installation/#9-dart","title":"9. \u00a0 Dart\u74b0\u5883","text":"
  1. Dart\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u3002
  2. VS Code\u62e1\u5f35\u6a5f\u80fd\u30de\u30fc\u30b1\u30c3\u30c8\u30d7\u30ec\u30a4\u30b9\u3067dart\u3092\u691c\u7d22\u3057\u3001Dart\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u3002
"},{"location":"chapter_appendix/installation/#10-rust","title":"10. \u00a0 Rust\u74b0\u5883","text":"
  1. Rust\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u3002
  2. VS Code\u62e1\u5f35\u6a5f\u80fd\u30de\u30fc\u30b1\u30c3\u30c8\u30d7\u30ec\u30a4\u30b9\u3067rust\u3092\u691c\u7d22\u3057\u3001rust-analyzer\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u3002
"},{"location":"chapter_appendix/terminology/","title":"16.3 \u00a0 \u7528\u8a9e\u96c6","text":"

\u4e0b\u306e\u8868\u306f\u672c\u66f8\u306b\u767b\u5834\u3059\u308b\u91cd\u8981\u306a\u7528\u8a9e\u3092\u30ea\u30b9\u30c8\u30a2\u30c3\u30d7\u3057\u3066\u304a\u308a\u3001\u4ee5\u4e0b\u306e\u70b9\u306b\u6ce8\u610f\u3059\u308b\u4fa1\u5024\u304c\u3042\u308a\u307e\u3059\u3002

\u8868 16-1 \u00a0 \u30c7\u30fc\u30bf\u69cb\u9020\u3068\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u91cd\u8981\u7528\u8a9e

English \u65e5\u672c\u8a9e \u7b80\u4f53\u4e2d\u6587 \u7e41\u4f53\u4e2d\u6587 algorithm \u30a2\u30eb\u30b4\u30ea\u30ba\u30e0 \u7b97\u6cd5 \u6f14\u7b97\u6cd5 data structure \u30c7\u30fc\u30bf\u69cb\u9020 \u6570\u636e\u7ed3\u6784 \u8cc7\u6599\u7d50\u69cb code \u30b3\u30fc\u30c9 \u4ee3\u7801 \u7a0b\u5f0f\u78bc file \u30d5\u30a1\u30a4\u30eb \u6587\u4ef6 \u6a94\u6848 function \u95a2\u6570 \u51fd\u6570 \u51fd\u5f0f method \u30e1\u30bd\u30c3\u30c9 \u65b9\u6cd5 \u65b9\u6cd5 variable \u5909\u6570 \u53d8\u91cf \u8b8a\u6578 asymptotic complexity analysis \u6f38\u8fd1\u8a08\u7b97\u91cf\u89e3\u6790 \u6e10\u8fd1\u590d\u6742\u5ea6\u5206\u6790 \u6f38\u8fd1\u8907\u96dc\u5ea6\u5206\u6790 time complexity \u6642\u9593\u8a08\u7b97\u91cf \u65f6\u95f4\u590d\u6742\u5ea6 \u6642\u9593\u8907\u96dc\u5ea6 space complexity \u7a7a\u9593\u8a08\u7b97\u91cf \u7a7a\u95f4\u590d\u6742\u5ea6 \u7a7a\u9593\u8907\u96dc\u5ea6 loop \u30eb\u30fc\u30d7 \u5faa\u73af \u8ff4\u5708 iteration \u53cd\u5fa9 \u8fed\u4ee3 \u8fed\u4ee3 recursion \u518d\u5e30 \u9012\u5f52 \u905e\u8ff4 tail recursion \u672b\u5c3e\u518d\u5e30 \u5c3e\u9012\u5f52 \u5c3e\u905e\u8ff4 recursion tree \u518d\u5e30\u6728 \u9012\u5f52\u6811 \u905e\u8ff4\u6a39 big-\\(O\\) notation \u30d3\u30c3\u30b0O\u8a18\u6cd5 \u5927 \\(O\\) \u8bb0\u53f7 \u5927 \\(O\\) \u8a18\u865f asymptotic upper bound \u6f38\u8fd1\u4e0a\u754c \u6e10\u8fd1\u4e0a\u754c \u6f38\u8fd1\u4e0a\u754c sign-magnitude \u7b26\u53f7\u3068\u7d76\u5bfe\u5024 \u539f\u7801 \u539f\u78bc 1's complement 1\u306e\u88dc\u6570 \u53cd\u7801 \u4e00\u88dc\u6578 2's complement 2\u306e\u88dc\u6570 \u8865\u7801 \u4e8c\u88dc\u6578 array \u914d\u5217 \u6570\u7ec4 \u9663\u5217 index \u30a4\u30f3\u30c7\u30c3\u30af\u30b9 \u7d22\u5f15 \u7d22\u5f15 linked list \u9023\u7d50\u30ea\u30b9\u30c8 \u94fe\u8868 \u93c8\u7d50\u4e32\u5217 linked list node, list node \u9023\u7d50\u30ea\u30b9\u30c8\u30ce\u30fc\u30c9 \u94fe\u8868\u8282\u70b9 \u93c8\u7d50\u4e32\u5217\u7bc0\u9ede head node \u5148\u982d\u30ce\u30fc\u30c9 \u5934\u8282\u70b9 \u982d\u7bc0\u9ede tail node \u672b\u5c3e\u30ce\u30fc\u30c9 \u5c3e\u8282\u70b9 \u5c3e\u7bc0\u9ede list \u30ea\u30b9\u30c8 \u5217\u8868 \u4e32\u5217 dynamic array \u52d5\u7684\u914d\u5217 \u52a8\u6001\u6570\u7ec4 \u52d5\u614b\u9663\u5217 hard disk \u30cf\u30fc\u30c9\u30c7\u30a3\u30b9\u30af \u786c\u76d8 \u786c\u789f random-access memory (RAM) \u30e1\u30e2\u30ea \u5185\u5b58 \u8a18\u61b6\u9ad4 cache memory \u30ad\u30e3\u30c3\u30b7\u30e5\u30e1\u30e2\u30ea \u7f13\u5b58 \u5feb\u53d6 cache miss \u30ad\u30e3\u30c3\u30b7\u30e5\u30df\u30b9 \u7f13\u5b58\u672a\u547d\u4e2d \u5feb\u53d6\u672a\u547d\u4e2d cache hit rate \u30ad\u30e3\u30c3\u30b7\u30e5\u30d2\u30c3\u30c8\u7387 \u7f13\u5b58\u547d\u4e2d\u7387 \u5feb\u53d6\u547d\u4e2d\u7387 stack \u30b9\u30bf\u30c3\u30af \u6808 \u5806\u758a top of the stack \u30b9\u30bf\u30c3\u30af\u30c8\u30c3\u30d7 \u6808\u9876 \u5806\u758a\u9802 bottom of the stack \u30b9\u30bf\u30c3\u30af\u30dc\u30c8\u30e0 \u6808\u5e95 \u5806\u758a\u5e95 queue \u30ad\u30e5\u30fc \u961f\u5217 \u4f47\u5217 double-ended queue \u4e21\u7aef\u30ad\u30e5\u30fc \u53cc\u5411\u961f\u5217 \u96d9\u5411\u4f47\u5217 front of the queue \u30ad\u30e5\u30fc\u306e\u5148\u982d \u961f\u9996 \u4f47\u5217\u9996 rear of the queue \u30ad\u30e5\u30fc\u306e\u672b\u5c3e \u961f\u5c3e \u4f47\u5217\u5c3e hash table \u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb \u54c8\u5e0c\u8868 \u96dc\u6e4a\u8868 hash set \u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8 \u54c8\u5e0c\u96c6\u5408 \u96dc\u6e4a\u96c6\u5408 bucket \u30d0\u30b1\u30c3\u30c8 \u6876 \u6876 hash function \u30cf\u30c3\u30b7\u30e5\u95a2\u6570 \u54c8\u5e0c\u51fd\u6570 \u96dc\u6e4a\u51fd\u5f0f hash collision \u30cf\u30c3\u30b7\u30e5\u885d\u7a81 \u54c8\u5e0c\u51b2\u7a81 \u96dc\u6e4a\u885d\u7a81 load factor \u8ca0\u8377\u7387 \u8d1f\u8f7d\u56e0\u5b50 \u8ca0\u8f09\u56e0\u5b50 separate chaining \u30c1\u30a7\u30a4\u30f3\u6cd5 \u94fe\u5f0f\u5730\u5740 \u93c8\u7d50\u4f4d\u5740 open addressing \u30aa\u30fc\u30d7\u30f3\u30a2\u30c9\u30ec\u30b9\u6cd5 \u5f00\u653e\u5bfb\u5740 \u958b\u653e\u5b9a\u5740 linear probing \u7dda\u5f62\u30d7\u30ed\u30fc\u30d6\u6cd5 \u7ebf\u6027\u63a2\u6d4b \u7dda\u6027\u63a2\u67e5 lazy deletion \u9045\u5ef6\u524a\u9664 \u61d2\u5220\u9664 \u61f6\u522a\u9664 binary tree \u4e8c\u5206\u6728 \u4e8c\u53c9\u6811 \u4e8c\u5143\u6a39 tree node \u6728\u306e\u30ce\u30fc\u30c9 \u6811\u8282\u70b9 \u6a39\u7bc0\u9ede left-child node \u5de6\u306e\u5b50\u30ce\u30fc\u30c9 \u5de6\u5b50\u8282\u70b9 \u5de6\u5b50\u7bc0\u9ede right-child node \u53f3\u306e\u5b50\u30ce\u30fc\u30c9 \u53f3\u5b50\u8282\u70b9 \u53f3\u5b50\u7bc0\u9ede parent node \u89aa\u30ce\u30fc\u30c9 \u7236\u8282\u70b9 \u7236\u7bc0\u9ede left subtree \u5de6\u306e\u90e8\u5206\u6728 \u5de6\u5b50\u6811 \u5de6\u5b50\u6a39 right subtree \u53f3\u306e\u90e8\u5206\u6728 \u53f3\u5b50\u6811 \u53f3\u5b50\u6a39 root node \u30eb\u30fc\u30c8\u30ce\u30fc\u30c9 \u6839\u8282\u70b9 \u6839\u7bc0\u9ede leaf node \u8449\u30ce\u30fc\u30c9 \u53f6\u8282\u70b9 \u8449\u7bc0\u9ede edge \u30a8\u30c3\u30b8 \u8fb9 \u908a level \u30ec\u30d9\u30eb \u5c42 \u5c64 degree \u6b21\u6570 \u5ea6 \u5ea6 height \u9ad8\u3055 \u9ad8\u5ea6 \u9ad8\u5ea6 depth \u6df1\u3055 \u6df1\u5ea6 \u6df1\u5ea6 perfect binary tree \u5b8c\u5168\u4e8c\u5206\u6728 \u5b8c\u7f8e\u4e8c\u53c9\u6811 \u5b8c\u7f8e\u4e8c\u5143\u6a39 complete binary tree \u5b8c\u5168\u4e8c\u5206\u6728 \u5b8c\u5168\u4e8c\u53c9\u6811 \u5b8c\u5168\u4e8c\u5143\u6a39 full binary tree \u6e80\u4e8c\u5206\u6728 \u5b8c\u6ee1\u4e8c\u53c9\u6811 \u5b8c\u6eff\u4e8c\u5143\u6a39 balanced binary tree \u5e73\u8861\u4e8c\u5206\u6728 \u5e73\u8861\u4e8c\u53c9\u6811 \u5e73\u8861\u4e8c\u5143\u6a39 binary search tree \u4e8c\u5206\u63a2\u7d22\u6728 \u4e8c\u53c9\u641c\u7d22\u6811 \u4e8c\u5143\u641c\u5c0b\u6a39 AVL tree AVL\u6728 AVL \u6811 AVL \u6a39 red-black tree \u8d64\u9ed2\u6728 \u7ea2\u9ed1\u6811 \u7d05\u9ed1\u6a39 level-order traversal \u30ec\u30d9\u30eb\u9806\u8d70\u67fb \u5c42\u5e8f\u904d\u5386 \u5c64\u5e8f\u8d70\u8a2a breadth-first traversal \u5e45\u512a\u5148\u8d70\u67fb \u5e7f\u5ea6\u4f18\u5148\u904d\u5386 \u5ee3\u5ea6\u512a\u5148\u8d70\u8a2a depth-first traversal \u6df1\u3055\u512a\u5148\u8d70\u67fb \u6df1\u5ea6\u4f18\u5148\u904d\u5386 \u6df1\u5ea6\u512a\u5148\u8d70\u8a2a binary search tree \u4e8c\u5206\u63a2\u7d22\u6728 \u4e8c\u53c9\u641c\u7d22\u6811 \u4e8c\u5143\u641c\u5c0b\u6a39 balanced binary search tree \u5e73\u8861\u4e8c\u5206\u63a2\u7d22\u6728 \u5e73\u8861\u4e8c\u53c9\u641c\u7d22\u6811 \u5e73\u8861\u4e8c\u5143\u641c\u5c0b\u6a39 balance factor \u5e73\u8861\u56e0\u5b50 \u5e73\u8861\u56e0\u5b50 \u5e73\u8861\u56e0\u5b50 heap \u30d2\u30fc\u30d7 \u5806 \u5806\u7a4d max heap \u6700\u5927\u30d2\u30fc\u30d7 \u5927\u9876\u5806 \u5927\u9802\u5806\u7a4d min heap \u6700\u5c0f\u30d2\u30fc\u30d7 \u5c0f\u9876\u5806 \u5c0f\u9802\u5806\u7a4d priority queue \u512a\u5148\u5ea6\u30ad\u30e5\u30fc \u4f18\u5148\u961f\u5217 \u512a\u5148\u4f47\u5217 heapify \u30d2\u30fc\u30d7\u5316 \u5806\u5316 \u5806\u7a4d\u5316 top-\\(k\\) problem Top-\\(k\\) \u554f\u984c Top-\\(k\\) \u95ee\u9898 Top-\\(k\\) \u554f\u984c graph \u30b0\u30e9\u30d5 \u56fe \u5716 vertex \u9802\u70b9 \u9876\u70b9 \u9802\u9ede undirected graph \u7121\u5411\u30b0\u30e9\u30d5 \u65e0\u5411\u56fe \u7121\u5411\u5716 directed graph \u6709\u5411\u30b0\u30e9\u30d5 \u6709\u5411\u56fe \u6709\u5411\u5716 connected graph \u9023\u7d50\u30b0\u30e9\u30d5 \u8fde\u901a\u56fe \u9023\u901a\u5716 disconnected graph \u975e\u9023\u7d50\u30b0\u30e9\u30d5 \u975e\u8fde\u901a\u56fe \u975e\u9023\u901a\u5716 weighted graph \u91cd\u307f\u4ed8\u304d\u30b0\u30e9\u30d5 \u6709\u6743\u56fe \u6709\u6b0a\u5716 adjacency \u96a3\u63a5 \u90bb\u63a5 \u9130\u63a5 path \u30d1\u30b9 \u8def\u5f84 \u8def\u5f91 in-degree \u5165\u6b21\u6570 \u5165\u5ea6 \u5165\u5ea6 out-degree \u51fa\u6b21\u6570 \u51fa\u5ea6 \u51fa\u5ea6 adjacency matrix \u96a3\u63a5\u884c\u5217 \u90bb\u63a5\u77e9\u9635 \u9130\u63a5\u77e9\u9663 adjacency list \u96a3\u63a5\u30ea\u30b9\u30c8 \u90bb\u63a5\u8868 \u9130\u63a5\u8868 breadth-first search \u5e45\u512a\u5148\u63a2\u7d22 \u5e7f\u5ea6\u4f18\u5148\u641c\u7d22 \u5ee3\u5ea6\u512a\u5148\u641c\u5c0b depth-first search \u6df1\u3055\u512a\u5148\u63a2\u7d22 \u6df1\u5ea6\u4f18\u5148\u641c\u7d22 \u6df1\u5ea6\u512a\u5148\u641c\u5c0b binary search \u4e8c\u5206\u63a2\u7d22 \u4e8c\u5206\u67e5\u627e \u4e8c\u5206\u641c\u5c0b searching algorithm \u63a2\u7d22\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0 \u641c\u7d22\u7b97\u6cd5 \u641c\u5c0b\u6f14\u7b97\u6cd5 sorting algorithm \u30bd\u30fc\u30c8\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0 \u6392\u5e8f\u7b97\u6cd5 \u6392\u5e8f\u6f14\u7b97\u6cd5 selection sort \u9078\u629e\u30bd\u30fc\u30c8 \u9009\u62e9\u6392\u5e8f \u9078\u64c7\u6392\u5e8f bubble sort \u30d0\u30d6\u30eb\u30bd\u30fc\u30c8 \u5192\u6ce1\u6392\u5e8f \u6ce1\u6cab\u6392\u5e8f insertion sort \u633f\u5165\u30bd\u30fc\u30c8 \u63d2\u5165\u6392\u5e8f \u63d2\u5165\u6392\u5e8f quick sort \u30af\u30a4\u30c3\u30af\u30bd\u30fc\u30c8 \u5feb\u901f\u6392\u5e8f \u5feb\u901f\u6392\u5e8f merge sort \u30de\u30fc\u30b8\u30bd\u30fc\u30c8 \u5f52\u5e76\u6392\u5e8f \u5408\u4f75\u6392\u5e8f heap sort \u30d2\u30fc\u30d7\u30bd\u30fc\u30c8 \u5806\u6392\u5e8f \u5806\u7a4d\u6392\u5e8f bucket sort \u30d0\u30b1\u30c3\u30c8\u30bd\u30fc\u30c8 \u6876\u6392\u5e8f \u6876\u6392\u5e8f counting sort \u8a08\u6570\u30bd\u30fc\u30c8 \u8ba1\u6570\u6392\u5e8f \u8a08\u6578\u6392\u5e8f radix sort \u57fa\u6570\u30bd\u30fc\u30c8 \u57fa\u6570\u6392\u5e8f \u57fa\u6578\u6392\u5e8f divide and conquer \u5206\u5272\u7d71\u6cbb\u6cd5 \u5206\u6cbb \u5206\u6cbb hanota problem \u30cf\u30ce\u30a4\u306e\u5854\u554f\u984c \u6c49\u8bfa\u5854\u95ee\u9898 \u6cb3\u5167\u5854\u554f\u984c backtracking algorithm \u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0 \u56de\u6eaf\u7b97\u6cd5 \u56de\u6eaf\u6f14\u7b97\u6cd5 constraint \u5236\u7d04 \u7ea6\u675f \u7d04\u675f solution \u89e3 \u89e3 \u89e3 state \u72b6\u614b \u72b6\u6001 \u72c0\u614b pruning \u679d\u5208\u308a \u526a\u679d \u526a\u679d permutations problem \u9806\u5217\u554f\u984c \u5168\u6392\u5217\u95ee\u9898 \u5168\u6392\u5217\u554f\u984c subset-sum problem \u90e8\u5206\u96c6\u5408\u548c\u554f\u984c \u5b50\u96c6\u548c\u95ee\u9898 \u5b50\u96c6\u5408\u554f\u984c \\(n\\)-queens problem \\(n\\) \u30af\u30a4\u30fc\u30f3\u554f\u984c \\(n\\) \u7687\u540e\u95ee\u9898 \\(n\\) \u7687\u540e\u554f\u984c dynamic programming \u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0 \u52a8\u6001\u89c4\u5212 \u52d5\u614b\u898f\u5283 initial state \u521d\u671f\u72b6\u614b \u521d\u59cb\u72b6\u6001 \u521d\u59cb\u72c0\u614b state-transition equation \u72b6\u614b\u9077\u79fb\u65b9\u7a0b\u5f0f \u72b6\u6001\u8f6c\u79fb\u65b9\u7a0b \u72c0\u614b\u8f49\u79fb\u65b9\u7a0b knapsack problem \u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u554f\u984c \u80cc\u5305\u95ee\u9898 \u80cc\u5305\u554f\u984c edit distance problem \u7de8\u96c6\u8ddd\u96e2\u554f\u984c \u7f16\u8f91\u8ddd\u79bb\u95ee\u9898 \u7de8\u8f2f\u8ddd\u96e2\u554f\u984c greedy algorithm \u8caa\u6b32\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0 \u8d2a\u5fc3\u7b97\u6cd5 \u8caa\u5a6a\u6f14\u7b97\u6cd5"},{"location":"chapter_array_and_linkedlist/","title":"\u7b2c 4 \u7ae0 \u00a0 \u914d\u5217\u3068\u9023\u7d50\u30ea\u30b9\u30c8","text":"

Abstract

\u30c7\u30fc\u30bf\u69cb\u9020\u306e\u4e16\u754c\u306f\u9811\u4e08\u306a\u30ec\u30f3\u30ac\u306e\u58c1\u306b\u4f3c\u3066\u3044\u307e\u3059\u3002

\u914d\u5217\u3067\u306f\u3001\u30ec\u30f3\u30ac\u304c\u3074\u3063\u305f\u308a\u3068\u6574\u5217\u3057\u3001\u305d\u308c\u305e\u308c\u304c\u6b21\u306e\u3082\u306e\u3068\u7d99\u304e\u76ee\u306a\u304f\u96a3\u308a\u5408\u3063\u3066\u3001\u7d71\u4e00\u3055\u308c\u305f\u5f62\u6210\u3092\u4f5c\u3063\u3066\u3044\u308b\u59ff\u3092\u60f3\u50cf\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u4e00\u65b9\u3001\u9023\u7d50\u30ea\u30b9\u30c8\u3067\u306f\u3001\u3053\u308c\u3089\u306e\u30ec\u30f3\u30ac\u304c\u81ea\u7531\u306b\u6563\u3089\u3070\u308a\u3001\u305d\u308c\u3089\u306e\u9593\u3092\u512a\u96c5\u306b\u7de8\u307f\u8fbc\u3080\u8526\u306b\u62b1\u304b\u308c\u3066\u3044\u307e\u3059\u3002

"},{"location":"chapter_array_and_linkedlist/#_1","title":"\u7ae0\u306e\u5185\u5bb9","text":""},{"location":"chapter_array_and_linkedlist/array/","title":"4.1 \u00a0 \u914d\u5217","text":"

\u914d\u5217\u306f\u7dda\u5f62\u30c7\u30fc\u30bf\u69cb\u9020\u3067\u3001\u540c\u3058\u3088\u3046\u306a\u9805\u76ee\u304c\u4e26\u3093\u3067\u3044\u308b\u3088\u3046\u306a\u3082\u306e\u3067\u3001\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u306e\u30e1\u30e2\u30ea\u5185\u306e\u9023\u7d9a\u3057\u305f\u7a7a\u9593\u306b\u4e00\u7dd2\u306b\u683c\u7d0d\u3055\u308c\u307e\u3059\u3002\u3053\u308c\u306f\u6574\u7406\u3055\u308c\u305f\u683c\u7d0d\u3092\u7dad\u6301\u3059\u308b\u30b7\u30fc\u30b1\u30f3\u30b9\u306e\u3088\u3046\u306a\u3082\u306e\u3067\u3059\u3002\u3053\u306e\u4e26\u3073\u306e\u5404\u9805\u76ee\u306b\u306f\u3001\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3068\u3057\u3066\u77e5\u3089\u308c\u308b\u72ec\u81ea\u306e\u300c\u4f4d\u7f6e\u300d\u304c\u3042\u308a\u307e\u3059\u3002\u4ee5\u4e0b\u306e\u56f3\u3092\u53c2\u7167\u3057\u3066\u3001\u914d\u5217\u306e\u52d5\u4f5c\u3092\u89b3\u5bdf\u3057\u3001\u3053\u308c\u3089\u306e\u91cd\u8981\u306a\u7528\u8a9e\u3092\u7406\u89e3\u3057\u3066\u304f\u3060\u3055\u3044\u3002

\u56f3 4-1 \u00a0 \u914d\u5217\u306e\u5b9a\u7fa9\u3068\u683c\u7d0d\u65b9\u6cd5

"},{"location":"chapter_array_and_linkedlist/array/#411","title":"4.1.1 \u00a0 \u914d\u5217\u306e\u4e00\u822c\u7684\u306a\u64cd\u4f5c","text":""},{"location":"chapter_array_and_linkedlist/array/#1","title":"1. \u00a0 \u914d\u5217\u306e\u521d\u671f\u5316","text":"

\u914d\u5217\u306f\u5fc5\u8981\u306b\u5fdc\u3058\u30662\u3064\u306e\u65b9\u6cd5\u3067\u521d\u671f\u5316\u3067\u304d\u307e\u3059\uff1a\u521d\u671f\u5024\u306a\u3057\u307e\u305f\u306f\u6307\u5b9a\u3055\u308c\u305f\u521d\u671f\u5024\u4ed8\u304d\u3067\u3059\u3002\u521d\u671f\u5024\u304c\u6307\u5b9a\u3055\u308c\u3066\u3044\u306a\u3044\u5834\u5408\u3001\u307b\u3068\u3093\u3069\u306e\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\u306f\u914d\u5217\u8981\u7d20\u3092\\(0\\)\u306b\u8a2d\u5b9a\u3057\u307e\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlin array.py
# \u914d\u5217\u3092\u521d\u671f\u5316\narr: list[int] = [0] * 5  # [ 0, 0, 0, 0, 0 ]\nnums: list[int] = [1, 3, 2, 5, 4]\n
array.cpp
/* \u914d\u5217\u3092\u521d\u671f\u5316 */\n// \u30b9\u30bf\u30c3\u30af\u306b\u683c\u7d0d\nint arr[5];\nint nums[5] = { 1, 3, 2, 5, 4 };\n// \u30d2\u30fc\u30d7\u306b\u683c\u7d0d\uff08\u624b\u52d5\u3067\u306e\u30e1\u30e2\u30ea\u89e3\u653e\u304c\u5fc5\u8981\uff09\nint* arr1 = new int[5];\nint* nums1 = new int[5] { 1, 3, 2, 5, 4 };\n
array.java
/* \u914d\u5217\u3092\u521d\u671f\u5316 */\nint[] arr = new int[5]; // { 0, 0, 0, 0, 0 }\nint[] nums = { 1, 3, 2, 5, 4 };\n
array.cs
/* \u914d\u5217\u3092\u521d\u671f\u5316 */\nint[] arr = new int[5]; // [ 0, 0, 0, 0, 0 ]\nint[] nums = [1, 3, 2, 5, 4];\n
array.go
/* \u914d\u5217\u3092\u521d\u671f\u5316 */\nvar arr [5]int\n// Go\u3067\u306f\u3001\u9577\u3055\u3092\u6307\u5b9a\uff08[5]int\uff09\u3059\u308b\u3068\u914d\u5217\u3092\u793a\u3057\u3001\u6307\u5b9a\u3057\u306a\u3044\uff08[]int\uff09\u3068\u30b9\u30e9\u30a4\u30b9\u3092\u793a\u3057\u307e\u3059\u3002\n// Go\u306e\u914d\u5217\u306f\u30b3\u30f3\u30d1\u30a4\u30eb\u6642\u306b\u56fa\u5b9a\u9577\u3092\u6301\u3064\u3088\u3046\u8a2d\u8a08\u3055\u308c\u3066\u3044\u308b\u305f\u3081\u3001\u9577\u3055\u306e\u6307\u5b9a\u306b\u306f\u5b9a\u6570\u306e\u307f\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002\n// extend()\u30e1\u30bd\u30c3\u30c9\u306e\u5b9f\u88c5\u306e\u4fbf\u5b9c\u4e0a\u3001\u3053\u3053\u3067\u306fSlice\u3092\u914d\u5217\u3068\u3057\u3066\u6271\u3044\u307e\u3059\u3002\nnums := []int{1, 3, 2, 5, 4}\n
array.swift
/* \u914d\u5217\u3092\u521d\u671f\u5316 */\nlet arr = Array(repeating: 0, count: 5) // [0, 0, 0, 0, 0]\nlet nums = [1, 3, 2, 5, 4]\n
array.js
/* \u914d\u5217\u3092\u521d\u671f\u5316 */\nvar arr = new Array(5).fill(0);\nvar nums = [1, 3, 2, 5, 4];\n
array.ts
/* \u914d\u5217\u3092\u521d\u671f\u5316 */\nlet arr: number[] = new Array(5).fill(0);\nlet nums: number[] = [1, 3, 2, 5, 4];\n
array.dart
/* \u914d\u5217\u3092\u521d\u671f\u5316 */\nList<int> arr = List.filled(5, 0); // [0, 0, 0, 0, 0]\nList<int> nums = [1, 3, 2, 5, 4];\n
array.rs
/* \u914d\u5217\u3092\u521d\u671f\u5316 */\nlet arr: [i32; 5] = [0; 5]; // [0, 0, 0, 0, 0]\nlet slice: &[i32] = &[0; 5];\n// Rust\u3067\u306f\u3001\u9577\u3055\u3092\u6307\u5b9a\uff08[i32; 5]\uff09\u3059\u308b\u3068\u914d\u5217\u3092\u793a\u3057\u3001\u6307\u5b9a\u3057\u306a\u3044\uff08&[i32]\uff09\u3068\u30b9\u30e9\u30a4\u30b9\u3092\u793a\u3057\u307e\u3059\u3002\n// Rust\u306e\u914d\u5217\u306f\u30b3\u30f3\u30d1\u30a4\u30eb\u6642\u306b\u56fa\u5b9a\u9577\u3092\u6301\u3064\u3088\u3046\u8a2d\u8a08\u3055\u308c\u3066\u3044\u308b\u305f\u3081\u3001\u9577\u3055\u306e\u6307\u5b9a\u306b\u306f\u5b9a\u6570\u306e\u307f\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002\n// \u4e00\u822c\u7684\u306bRust\u3067\u306f\u52d5\u7684\u914d\u5217\u3068\u3057\u3066Vector\u304c\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002\n// extend()\u30e1\u30bd\u30c3\u30c9\u306e\u5b9f\u88c5\u306e\u4fbf\u5b9c\u4e0a\u3001\u3053\u3053\u3067\u306f\u30d9\u30af\u30bf\u30fc\u3092\u914d\u5217\u3068\u3057\u3066\u6271\u3044\u307e\u3059\u3002\nlet nums: Vec<i32> = vec![1, 3, 2, 5, 4];\n
array.c
/* \u914d\u5217\u3092\u521d\u671f\u5316 */\nint arr[5] = { 0 }; // { 0, 0, 0, 0, 0 }\nint nums[5] = { 1, 3, 2, 5, 4 };\n
array.kt
\n
"},{"location":"chapter_array_and_linkedlist/array/#2","title":"2. \u00a0 \u8981\u7d20\u3078\u306e\u30a2\u30af\u30bb\u30b9","text":"

\u914d\u5217\u5185\u306e\u8981\u7d20\u306f\u9023\u7d9a\u3057\u305f\u30e1\u30e2\u30ea\u7a7a\u9593\u306b\u683c\u7d0d\u3055\u308c\u308b\u305f\u3081\u3001\u5404\u8981\u7d20\u306e\u30e1\u30e2\u30ea\u30a2\u30c9\u30ec\u30b9\u3092\u8a08\u7b97\u3059\u308b\u3053\u3068\u304c\u7c21\u5358\u306b\u306a\u308a\u307e\u3059\u3002\u4ee5\u4e0b\u306e\u56f3\u306b\u793a\u3055\u308c\u3066\u3044\u308b\u516c\u5f0f\u306f\u3001\u914d\u5217\u306e\u30e1\u30e2\u30ea\u30a2\u30c9\u30ec\u30b9\uff08\u7279\u306b\u3001\u6700\u521d\u306e\u8981\u7d20\u306e\u30a2\u30c9\u30ec\u30b9\uff09\u3068\u8981\u7d20\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u5229\u7528\u3057\u3066\u3001\u8981\u7d20\u306e\u30e1\u30e2\u30ea\u30a2\u30c9\u30ec\u30b9\u3092\u6c7a\u5b9a\u3059\u308b\u306e\u306b\u5f79\u7acb\u3061\u307e\u3059\u3002\u3053\u306e\u8a08\u7b97\u306b\u3088\u308a\u3001\u76ee\u7684\u306e\u8981\u7d20\u3078\u306e\u76f4\u63a5\u30a2\u30af\u30bb\u30b9\u304c\u5408\u7406\u5316\u3055\u308c\u307e\u3059\u3002

\u56f3 4-2 \u00a0 \u914d\u5217\u8981\u7d20\u306e\u30e1\u30e2\u30ea\u30a2\u30c9\u30ec\u30b9\u8a08\u7b97

\u4e0a\u306e\u56f3\u3067\u89b3\u5bdf\u3055\u308c\u308b\u3088\u3046\u306b\u3001\u914d\u5217\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306f\u6163\u4f8b\u7684\u306b\\(0\\)\u304b\u3089\u59cb\u307e\u308a\u307e\u3059\u3002\u3053\u308c\u306f\u76f4\u611f\u306b\u53cd\u3059\u308b\u3088\u3046\u306b\u898b\u3048\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002\u6570\u3092\u6570\u3048\u308b\u306e\u306f\u901a\u5e38\\(1\\)\u304b\u3089\u59cb\u307e\u308b\u305f\u3081\u3067\u3059\u304c\u3001\u30a2\u30c9\u30ec\u30b9\u8a08\u7b97\u516c\u5f0f\u5185\u3067\u306f\u3001**\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306f\u672c\u8cea\u7684\u306b\u30e1\u30e2\u30ea\u30a2\u30c9\u30ec\u30b9\u304b\u3089\u306e\u30aa\u30d5\u30bb\u30c3\u30c8**\u3067\u3059\u3002\u6700\u521d\u306e\u8981\u7d20\u306e\u30a2\u30c9\u30ec\u30b9\u3067\u306f\u3001\u3053\u306e\u30aa\u30d5\u30bb\u30c3\u30c8\u306f\\(0\\)\u3067\u3001\u305d\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u304c\\(0\\)\u3067\u3042\u308b\u3053\u3068\u3092\u691c\u8a3c\u3057\u3066\u3044\u307e\u3059\u3002

\u914d\u5217\u5185\u306e\u8981\u7d20\u3078\u306e\u30a2\u30af\u30bb\u30b9\u306f\u975e\u5e38\u306b\u52b9\u7387\u7684\u3067\u3001\\(O(1)\\)\u6642\u9593\u3067\u4efb\u610f\u306e\u8981\u7d20\u306b\u30e9\u30f3\u30c0\u30e0\u30a2\u30af\u30bb\u30b9\u3067\u304d\u307e\u3059\u3002

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby array.py
def random_access(nums: list[int]) -> int:\n    \"\"\"\u8981\u7d20\u3078\u306e\u30e9\u30f3\u30c0\u30e0\u30a2\u30af\u30bb\u30b9\"\"\"\n    # \u533a\u9593 [0, len(nums)-1] \u304b\u3089\u6570\u5024\u3092\u30e9\u30f3\u30c0\u30e0\u306b\u9078\u629e\n    random_index = random.randint(0, len(nums) - 1)\n    # \u30e9\u30f3\u30c0\u30e0\u306a\u8981\u7d20\u3092\u53d6\u5f97\u3057\u3066\u8fd4\u3059\n    random_num = nums[random_index]\n    return random_num\n
array.cpp
/* \u8981\u7d20\u3078\u306e\u4e71\u6570\u30a2\u30af\u30bb\u30b9 */\nint randomAccess(int *nums, int size) {\n    // [0, size)\u306e\u7bc4\u56f2\u3067\u4e71\u6570\u3092\u9078\u629e\n    int randomIndex = rand() % size;\n    // \u4e71\u6570\u8981\u7d20\u3092\u53d6\u5f97\u3057\u3066\u8fd4\u5374\n    int randomNum = nums[randomIndex];\n    return randomNum;\n}\n
array.java
/* \u8981\u7d20\u3078\u306e\u30e9\u30f3\u30c0\u30e0\u30a2\u30af\u30bb\u30b9 */\nint randomAccess(int[] nums) {\n    // \u533a\u9593 [0, nums.length) \u304b\u3089\u30e9\u30f3\u30c0\u30e0\u306b\u6570\u3092\u9078\u629e\n    int randomIndex = ThreadLocalRandom.current().nextInt(0, nums.length);\n    // \u30e9\u30f3\u30c0\u30e0\u8981\u7d20\u3092\u53d6\u5f97\u3057\u3066\u8fd4\u3059\n    int randomNum = nums[randomIndex];\n    return randomNum;\n}\n
array.cs
[class]{array}-[func]{RandomAccess}\n
array.go
[class]{}-[func]{randomAccess}\n
array.swift
[class]{}-[func]{randomAccess}\n
array.js
[class]{}-[func]{randomAccess}\n
array.ts
[class]{}-[func]{randomAccess}\n
array.dart
[class]{}-[func]{randomAccess}\n
array.rs
[class]{}-[func]{random_access}\n
array.c
[class]{}-[func]{randomAccess}\n
array.kt
[class]{}-[func]{randomAccess}\n
array.rb
[class]{}-[func]{random_access}\n
"},{"location":"chapter_array_and_linkedlist/array/#3","title":"3. \u00a0 \u8981\u7d20\u306e\u633f\u5165","text":"

\u914d\u5217\u8981\u7d20\u306f\u30e1\u30e2\u30ea\u5185\u3067\u5bc6\u306b\u8a70\u307e\u3063\u3066\u304a\u308a\u3001\u305d\u308c\u3089\u306e\u9593\u306b\u8ffd\u52a0\u30c7\u30fc\u30bf\u3092\u53ce\u5bb9\u3059\u308b\u305f\u3081\u306e\u7a7a\u9593\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u4ee5\u4e0b\u306e\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u914d\u5217\u306e\u4e2d\u592e\u306b\u8981\u7d20\u3092\u633f\u5165\u3059\u308b\u306b\u306f\u3001\u5f8c\u7d9a\u306e\u3059\u3079\u3066\u306e\u8981\u7d20\u30921\u3064\u305a\u3064\u5f8c\u308d\u306b\u30b7\u30d5\u30c8\u3057\u3066\u3001\u65b0\u3057\u3044\u8981\u7d20\u306e\u305f\u3081\u306e\u7a7a\u9593\u3092\u4f5c\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

\u56f3 4-3 \u00a0 \u914d\u5217\u8981\u7d20\u633f\u5165\u306e\u4f8b

\u914d\u5217\u306e\u9577\u3055\u304c\u56fa\u5b9a\u3055\u308c\u3066\u3044\u308b\u305f\u3081\u3001\u8981\u7d20\u3092\u633f\u5165\u3059\u308b\u3068\u5fc5\u7136\u7684\u306b\u914d\u5217\u306e\u6700\u5f8c\u306e\u8981\u7d20\u304c\u5931\u308f\u308c\u308b\u3053\u3068\u306b\u6ce8\u610f\u3059\u308b\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002\u3053\u306e\u554f\u984c\u3092\u89e3\u6c7a\u3059\u308b\u65b9\u6cd5\u306f\u300c\u30ea\u30b9\u30c8\u300d\u306e\u7ae0\u3067\u63a2\u6c42\u3055\u308c\u307e\u3059\u3002

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby array.py
def insert(nums: list[int], num: int, index: int):\n    \"\"\"\u30a4\u30f3\u30c7\u30c3\u30af\u30b9 index \u306b\u8981\u7d20 num \u3092\u633f\u5165\"\"\"\n    # \u30a4\u30f3\u30c7\u30c3\u30af\u30b9 index \u3088\u308a\u5f8c\u306e\u3059\u3079\u3066\u306e\u8981\u7d20\u30921\u3064\u5f8c\u308d\u306b\u79fb\u52d5\n    for i in range(len(nums) - 1, index, -1):\n        nums[i] = nums[i - 1]\n    # num \u3092 index \u306e\u4f4d\u7f6e\u306e\u8981\u7d20\u306b\u4ee3\u5165\n    nums[index] = num\n
array.cpp
/* `index`\u306b\u8981\u7d20num\u3092\u633f\u5165 */\nvoid insert(int *nums, int size, int num, int index) {\n    // `index`\u3088\u308a\u5f8c\u306e\u3059\u3079\u3066\u306e\u8981\u7d20\u30921\u3064\u5f8c\u308d\u306b\u79fb\u52d5\n    for (int i = size - 1; i > index; i--) {\n        nums[i] = nums[i - 1];\n    }\n    // index\u306e\u4f4d\u7f6e\u306bnum\u3092\u4ee3\u5165\n    nums[index] = num;\n}\n
array.java
/* `index` \u306b\u8981\u7d20 num \u3092\u633f\u5165 */\nvoid insert(int[] nums, int num, int index) {\n    // `index` \u3088\u308a\u5f8c\u306e\u3059\u3079\u3066\u306e\u8981\u7d20\u30921\u3064\u5f8c\u308d\u306b\u79fb\u52d5\n    for (int i = nums.length - 1; i > index; i--) {\n        nums[i] = nums[i - 1];\n    }\n    // index \u306e\u8981\u7d20\u306b num \u3092\u4ee3\u5165\n    nums[index] = num;\n}\n
array.cs
[class]{array}-[func]{Insert}\n
array.go
[class]{}-[func]{insert}\n
array.swift
[class]{}-[func]{insert}\n
array.js
[class]{}-[func]{insert}\n
array.ts
[class]{}-[func]{insert}\n
array.dart
[class]{}-[func]{insert}\n
array.rs
[class]{}-[func]{insert}\n
array.c
[class]{}-[func]{insert}\n
array.kt
[class]{}-[func]{insert}\n
array.rb
[class]{}-[func]{insert}\n
"},{"location":"chapter_array_and_linkedlist/array/#4","title":"4. \u00a0 \u8981\u7d20\u306e\u524a\u9664","text":"

\u540c\u69d8\u306b\u3001\u4ee5\u4e0b\u306e\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\\(i\\)\u306e\u8981\u7d20\u3092\u524a\u9664\u3059\u308b\u306b\u306f\u3001\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\\(i\\)\u306b\u7d9a\u304f\u3059\u3079\u3066\u306e\u8981\u7d20\u30921\u3064\u305a\u3064\u524d\u306b\u79fb\u52d5\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

\u56f3 4-4 \u00a0 \u914d\u5217\u8981\u7d20\u524a\u9664\u306e\u4f8b

\u524a\u9664\u5f8c\u3001\u5143\u306e\u6700\u5f8c\u306e\u8981\u7d20\u306f\u300c\u610f\u5473\u304c\u306a\u3044\u300d\u3082\u306e\u306b\u306a\u308b\u305f\u3081\u3001\u7279\u5b9a\u306e\u4fee\u6b63\u306f\u5fc5\u8981\u306a\u3044\u3053\u3068\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby array.py
def remove(nums: list[int], index: int):\n    \"\"\"\u30a4\u30f3\u30c7\u30c3\u30af\u30b9 index \u306e\u8981\u7d20\u3092\u524a\u9664\"\"\"\n    # \u30a4\u30f3\u30c7\u30c3\u30af\u30b9 index \u3088\u308a\u5f8c\u306e\u3059\u3079\u3066\u306e\u8981\u7d20\u30921\u3064\u524d\u306b\u79fb\u52d5\n    for i in range(index, len(nums) - 1):\n        nums[i] = nums[i + 1]\n
array.cpp
/* `index`\u306e\u8981\u7d20\u3092\u524a\u9664 */\nvoid remove(int *nums, int size, int index) {\n    // `index`\u3088\u308a\u5f8c\u306e\u3059\u3079\u3066\u306e\u8981\u7d20\u30921\u3064\u524d\u306b\u79fb\u52d5\n    for (int i = index; i < size - 1; i++) {\n        nums[i] = nums[i + 1];\n    }\n}\n
array.java
/* `index` \u306e\u8981\u7d20\u3092\u524a\u9664 */\nvoid remove(int[] nums, int index) {\n    // `index` \u3088\u308a\u5f8c\u306e\u3059\u3079\u3066\u306e\u8981\u7d20\u30921\u3064\u524d\u306b\u79fb\u52d5\n    for (int i = index; i < nums.length - 1; i++) {\n        nums[i] = nums[i + 1];\n    }\n}\n
array.cs
[class]{array}-[func]{Remove}\n
array.go
[class]{}-[func]{remove}\n
array.swift
[class]{}-[func]{remove}\n
array.js
[class]{}-[func]{remove}\n
array.ts
[class]{}-[func]{remove}\n
array.dart
[class]{}-[func]{remove}\n
array.rs
[class]{}-[func]{remove}\n
array.c
[class]{}-[func]{removeItem}\n
array.kt
[class]{}-[func]{remove}\n
array.rb
[class]{}-[func]{remove}\n

\u8981\u7d04\u3059\u308b\u3068\u3001\u914d\u5217\u306e\u633f\u5165\u3068\u524a\u9664\u64cd\u4f5c\u306b\u306f\u4ee5\u4e0b\u306e\u6b20\u70b9\u304c\u3042\u308a\u307e\u3059\uff1a

"},{"location":"chapter_array_and_linkedlist/array/#5","title":"5. \u00a0 \u914d\u5217\u306e\u8d70\u67fb","text":"

\u307b\u3068\u3093\u3069\u306e\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\u3067\u306f\u3001\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u4f7f\u7528\u3059\u308b\u304b\u3001\u5404\u8981\u7d20\u3092\u76f4\u63a5\u53cd\u5fa9\u3059\u308b\u3053\u3068\u3067\u914d\u5217\u3092\u8d70\u67fb\u3067\u304d\u307e\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby array.py
def traverse(nums: list[int]):\n    \"\"\"\u914d\u5217\u306e\u8d70\u67fb\"\"\"\n    count = 0\n    # \u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306b\u3088\u308b\u914d\u5217\u306e\u8d70\u67fb\n    for i in range(len(nums)):\n        count += nums[i]\n    # \u914d\u5217\u8981\u7d20\u306e\u8d70\u67fb\n    for num in nums:\n        count += num\n    # \u30c7\u30fc\u30bf\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3068\u8981\u7d20\u306e\u4e21\u65b9\u3092\u8d70\u67fb\n    for i, num in enumerate(nums):\n        count += nums[i]\n        count += num\n
array.cpp
/* \u914d\u5217\u306e\u8d70\u67fb */\nvoid traverse(int *nums, int size) {\n    int count = 0;\n    // \u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306b\u3088\u308b\u914d\u5217\u306e\u8d70\u67fb\n    for (int i = 0; i < size; i++) {\n        count += nums[i];\n    }\n}\n
array.java
/* \u914d\u5217\u3092\u8d70\u67fb */\nvoid traverse(int[] nums) {\n    int count = 0;\n    // \u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306b\u3088\u308b\u914d\u5217\u306e\u8d70\u67fb\n    for (int i = 0; i < nums.length; i++) {\n        count += nums[i];\n    }\n    // \u914d\u5217\u8981\u7d20\u306e\u8d70\u67fb\n    for (int num : nums) {\n        count += num;\n    }\n}\n
array.cs
[class]{array}-[func]{Traverse}\n
array.go
[class]{}-[func]{traverse}\n
array.swift
[class]{}-[func]{traverse}\n
array.js
[class]{}-[func]{traverse}\n
array.ts
[class]{}-[func]{traverse}\n
array.dart
[class]{}-[func]{traverse}\n
array.rs
[class]{}-[func]{traverse}\n
array.c
[class]{}-[func]{traverse}\n
array.kt
[class]{}-[func]{traverse}\n
array.rb
[class]{}-[func]{traverse}\n
"},{"location":"chapter_array_and_linkedlist/array/#6","title":"6. \u00a0 \u8981\u7d20\u306e\u691c\u7d22","text":"

\u914d\u5217\u5185\u306e\u7279\u5b9a\u306e\u8981\u7d20\u3092\u898b\u3064\u3051\u308b\u3053\u3068\u306f\u3001\u914d\u5217\u3092\u53cd\u5fa9\u3057\u3001\u5404\u8981\u7d20\u3092\u30c1\u30a7\u30c3\u30af\u3057\u3066\u76ee\u7684\u306e\u5024\u3068\u4e00\u81f4\u3059\u308b\u304b\u3069\u3046\u304b\u3092\u6c7a\u5b9a\u3059\u308b\u3053\u3068\u3092\u542b\u307f\u307e\u3059\u3002

\u914d\u5217\u306f\u7dda\u5f62\u30c7\u30fc\u30bf\u69cb\u9020\u3067\u3042\u308b\u305f\u3081\u3001\u3053\u306e\u64cd\u4f5c\u306f\u4e00\u822c\u7684\u306b\u300c\u7dda\u5f62\u63a2\u7d22\u300d\u3068\u547c\u3070\u308c\u307e\u3059\u3002

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby array.py
def find(nums: list[int], target: int) -> int:\n    \"\"\"\u914d\u5217\u5185\u306e\u6307\u5b9a\u3055\u308c\u305f\u8981\u7d20\u3092\u691c\u7d22\"\"\"\n    for i in range(len(nums)):\n        if nums[i] == target:\n            return i\n    return -1\n
array.cpp
/* \u914d\u5217\u5185\u306e\u6307\u5b9a\u8981\u7d20\u3092\u691c\u7d22 */\nint find(int *nums, int size, int target) {\n    for (int i = 0; i < size; i++) {\n        if (nums[i] == target)\n            return i;\n    }\n    return -1;\n}\n
array.java
/* \u914d\u5217\u5185\u3067\u6307\u5b9a\u3055\u308c\u305f\u8981\u7d20\u3092\u691c\u7d22 */\nint find(int[] nums, int target) {\n    for (int i = 0; i < nums.length; i++) {\n        if (nums[i] == target)\n            return i;\n    }\n    return -1;\n}\n
array.cs
[class]{array}-[func]{Find}\n
array.go
[class]{}-[func]{find}\n
array.swift
[class]{}-[func]{find}\n
array.js
[class]{}-[func]{find}\n
array.ts
[class]{}-[func]{find}\n
array.dart
[class]{}-[func]{find}\n
array.rs
[class]{}-[func]{find}\n
array.c
[class]{}-[func]{find}\n
array.kt
[class]{}-[func]{find}\n
array.rb
[class]{}-[func]{find}\n
"},{"location":"chapter_array_and_linkedlist/array/#7","title":"7. \u00a0 \u914d\u5217\u306e\u62e1\u5f35","text":"

\u8907\u96d1\u306a\u30b7\u30b9\u30c6\u30e0\u74b0\u5883\u3067\u306f\u3001\u5b89\u5168\u306a\u5bb9\u91cf\u62e1\u5f35\u306e\u305f\u3081\u306b\u914d\u5217\u306e\u5f8c\u306b\u30e1\u30e2\u30ea\u7a7a\u9593\u306e\u53ef\u7528\u6027\u3092\u78ba\u4fdd\u3059\u308b\u3053\u3068\u304c\u56f0\u96e3\u306b\u306a\u308a\u307e\u3059\u3002\u305d\u306e\u7d50\u679c\u3001\u307b\u3068\u3093\u3069\u306e\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\u3067\u306f\u3001**\u914d\u5217\u306e\u9577\u3055\u306f\u4e0d\u5909**\u3067\u3059\u3002

\u914d\u5217\u3092\u62e1\u5f35\u3059\u308b\u306b\u306f\u3001\u3088\u308a\u5927\u304d\u306a\u914d\u5217\u3092\u4f5c\u6210\u3057\u3001\u5143\u306e\u914d\u5217\u304b\u3089\u8981\u7d20\u3092\u30b3\u30d4\u30fc\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u306e\u64cd\u4f5c\u306e\u6642\u9593\u8a08\u7b97\u91cf\u306f\\(O(n)\\)\u3067\u3001\u5927\u304d\u306a\u914d\u5217\u3067\u306f\u6642\u9593\u304c\u304b\u304b\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002\u30b3\u30fc\u30c9\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby array.py
def extend(nums: list[int], enlarge: int) -> list[int]:\n    \"\"\"\u914d\u5217\u306e\u9577\u3055\u3092\u62e1\u5f35\"\"\"\n    # \u62e1\u5f35\u3055\u308c\u305f\u9577\u3055\u306e\u914d\u5217\u3092\u521d\u671f\u5316\n    res = [0] * (len(nums) + enlarge)\n    # \u5143\u306e\u914d\u5217\u306e\u3059\u3079\u3066\u306e\u8981\u7d20\u3092\u65b0\u3057\u3044\u914d\u5217\u306b\u30b3\u30d4\u30fc\n    for i in range(len(nums)):\n        res[i] = nums[i]\n    # \u62e1\u5f35\u5f8c\u306e\u65b0\u3057\u3044\u914d\u5217\u3092\u8fd4\u3059\n    return res\n
array.cpp
/* \u914d\u5217\u9577\u306e\u62e1\u5f35 */\nint *extend(int *nums, int size, int enlarge) {\n    // \u62e1\u5f35\u3055\u308c\u305f\u9577\u3055\u306e\u914d\u5217\u3092\u521d\u671f\u5316\n    int *res = new int[size + enlarge];\n    // \u5143\u306e\u914d\u5217\u306e\u5168\u8981\u7d20\u3092\u65b0\u3057\u3044\u914d\u5217\u306b\u30b3\u30d4\u30fc\n    for (int i = 0; i < size; i++) {\n        res[i] = nums[i];\n    }\n    // \u30e1\u30e2\u30ea\u3092\u89e3\u653e\n    delete[] nums;\n    // \u62e1\u5f35\u5f8c\u306e\u65b0\u3057\u3044\u914d\u5217\u3092\u8fd4\u5374\n    return res;\n}\n
array.java
/* \u914d\u5217\u9577\u306e\u62e1\u5f35 */\nint[] extend(int[] nums, int enlarge) {\n    // \u62e1\u5f35\u3055\u308c\u305f\u9577\u3055\u306e\u914d\u5217\u3092\u521d\u671f\u5316\n    int[] res = new int[nums.length + enlarge];\n    // \u5143\u306e\u914d\u5217\u306e\u3059\u3079\u3066\u306e\u8981\u7d20\u3092\u65b0\u3057\u3044\u914d\u5217\u306b\u30b3\u30d4\u30fc\n    for (int i = 0; i < nums.length; i++) {\n        res[i] = nums[i];\n    }\n    // \u62e1\u5f35\u5f8c\u306e\u65b0\u3057\u3044\u914d\u5217\u3092\u8fd4\u3059\n    return res;\n}\n
array.cs
[class]{array}-[func]{Extend}\n
array.go
[class]{}-[func]{extend}\n
array.swift
[class]{}-[func]{extend}\n
array.js
[class]{}-[func]{extend}\n
array.ts
[class]{}-[func]{extend}\n
array.dart
[class]{}-[func]{extend}\n
array.rs
[class]{}-[func]{extend}\n
array.c
[class]{}-[func]{extend}\n
array.kt
[class]{}-[func]{extend}\n
array.rb
[class]{}-[func]{extend}\n
"},{"location":"chapter_array_and_linkedlist/array/#412","title":"4.1.2 \u00a0 \u914d\u5217\u306e\u5229\u70b9\u3068\u5236\u9650","text":"

\u914d\u5217\u306f\u9023\u7d9a\u3057\u305f\u30e1\u30e2\u30ea\u7a7a\u9593\u306b\u683c\u7d0d\u3055\u308c\u3001\u540c\u3058\u578b\u306e\u8981\u7d20\u3067\u69cb\u6210\u3055\u308c\u307e\u3059\u3002\u3053\u306e\u30a2\u30d7\u30ed\u30fc\u30c1\u306f\u3001\u30b7\u30b9\u30c6\u30e0\u304c\u30c7\u30fc\u30bf\u69cb\u9020\u64cd\u4f5c\u306e\u52b9\u7387\u3092\u6700\u9069\u5316\u3059\u308b\u305f\u3081\u306b\u6d3b\u7528\u3067\u304d\u308b\u5b9f\u8cea\u7684\u306a\u4e8b\u524d\u60c5\u5831\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002

\u3057\u304b\u3057\u3001\u9023\u7d9a\u7a7a\u9593\u683c\u7d0d\u306f\u8af8\u5203\u306e\u5263\u3067\u3001\u4ee5\u4e0b\u306e\u5236\u9650\u304c\u3042\u308a\u307e\u3059\uff1a

"},{"location":"chapter_array_and_linkedlist/array/#413","title":"4.1.3 \u00a0 \u914d\u5217\u306e\u5178\u578b\u7684\u306a\u5fdc\u7528","text":"

\u914d\u5217\u306f\u57fa\u672c\u7684\u3067\u5e83\u304f\u4f7f\u7528\u3055\u308c\u308b\u30c7\u30fc\u30bf\u69cb\u9020\u3067\u3059\u3002\u69d8\u3005\u306a\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3067\u983b\u7e41\u306b\u5fdc\u7528\u3055\u308c\u3001\u8907\u96d1\u306a\u30c7\u30fc\u30bf\u69cb\u9020\u306e\u5b9f\u88c5\u306b\u5f79\u7acb\u3061\u307e\u3059\u3002

"},{"location":"chapter_array_and_linkedlist/linked_list/","title":"4.2 \u00a0 \u9023\u7d50\u30ea\u30b9\u30c8","text":"

\u30e1\u30e2\u30ea\u7a7a\u9593\u306f\u3001\u3059\u3079\u3066\u306e\u30d7\u30ed\u30b0\u30e9\u30e0\u9593\u3067\u5171\u6709\u3055\u308c\u308b\u30ea\u30bd\u30fc\u30b9\u3067\u3059\u3002\u8907\u96d1\u306a\u30b7\u30b9\u30c6\u30e0\u74b0\u5883\u3067\u306f\u3001\u4f7f\u7528\u53ef\u80fd\u306a\u30e1\u30e2\u30ea\u304c\u30e1\u30e2\u30ea\u7a7a\u9593\u5168\u4f53\u306b\u5206\u6563\u3057\u3066\u3044\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002\u914d\u5217\u306b\u5272\u308a\u5f53\u3066\u3089\u308c\u308b\u30e1\u30e2\u30ea\u306f\u9023\u7d9a\u3057\u3066\u3044\u308b\u5fc5\u8981\u304c\u3042\u308b\u3053\u3068\u3092\u7406\u89e3\u3057\u3066\u3044\u307e\u3059\u304c\u3001\u975e\u5e38\u306b\u5927\u304d\u306a\u914d\u5217\u306e\u5834\u5408\u3001\u5341\u5206\u306a\u5927\u304d\u3055\u306e\u9023\u7d9a\u30e1\u30e2\u30ea\u7a7a\u9593\u3092\u898b\u3064\u3051\u308b\u306e\u306f\u56f0\u96e3\u306a\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u3053\u3067\u3001\u9023\u7d50\u30ea\u30b9\u30c8\u306e\u67d4\u8edf\u306a\u5229\u70b9\u304c\u660e\u3089\u304b\u306b\u306a\u308a\u307e\u3059\u3002

\u9023\u7d50\u30ea\u30b9\u30c8\u306f\u7dda\u5f62\u30c7\u30fc\u30bf\u69cb\u9020\u3067\u3042\u308a\u3001\u5404\u8981\u7d20\u306f\u30ce\u30fc\u30c9\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3067\u3001\u30ce\u30fc\u30c9\u306f\u300c\u53c2\u7167\u300d\u3092\u901a\u3058\u3066\u76f8\u4e92\u63a5\u7d9a\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u53c2\u7167\u306f\u5f8c\u7d9a\u30ce\u30fc\u30c9\u306e\u30e1\u30e2\u30ea\u30a2\u30c9\u30ec\u30b9\u3092\u4fdd\u6301\u3057\u30011\u3064\u306e\u30ce\u30fc\u30c9\u304b\u3089\u6b21\u306e\u30ce\u30fc\u30c9\u3078\u306e\u30ca\u30d3\u30b2\u30fc\u30b7\u30e7\u30f3\u3092\u53ef\u80fd\u306b\u3057\u307e\u3059\u3002

\u9023\u7d50\u30ea\u30b9\u30c8\u306e\u8a2d\u8a08\u3067\u306f\u3001\u30ce\u30fc\u30c9\u3092\u9023\u7d9a\u3059\u308b\u30e1\u30e2\u30ea\u30a2\u30c9\u30ec\u30b9\u3092\u5fc5\u8981\u3068\u305b\u305a\u306b\u3001\u30e1\u30e2\u30ea\u4f4d\u7f6e\u5168\u4f53\u306b\u5206\u6563\u914d\u7f6e\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

\u56f3 4-5 \u00a0 \u9023\u7d50\u30ea\u30b9\u30c8\u306e\u5b9a\u7fa9\u3068\u683c\u7d0d\u65b9\u6cd5

\u4e0a\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u9023\u7d50\u30ea\u30b9\u30c8\u306e\u57fa\u672c\u7684\u306a\u69cb\u6210\u8981\u7d20\u306f\u30ce\u30fc\u30c9\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3067\u3059\u3002\u5404\u30ce\u30fc\u30c9\u306f2\u3064\u306e\u4e3b\u8981\u306a\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3067\u69cb\u6210\u3055\u308c\u3066\u3044\u307e\u3059\uff1a\u30ce\u30fc\u30c9\u306e\u300c\u5024\u300d\u3068\u6b21\u306e\u30ce\u30fc\u30c9\u3078\u306e\u300c\u53c2\u7167\u300d\u3067\u3059\u3002

\u4ee5\u4e0b\u306e\u30b3\u30fc\u30c9\u304c\u793a\u3059\u3088\u3046\u306b\u3001\u9023\u7d50\u30ea\u30b9\u30c8\u306eListNode\u306f\u5024\u3092\u4fdd\u6301\u3059\u308b\u3060\u3051\u3067\u306a\u304f\u3001\u8ffd\u52a0\u306e\u53c2\u7167\uff08\u307e\u305f\u306f\u30dd\u30a4\u30f3\u30bf\uff09\u3082\u7dad\u6301\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u3057\u305f\u304c\u3063\u3066\u3001\u9023\u7d50\u30ea\u30b9\u30c8\u306f\u540c\u3058\u91cf\u306e\u30c7\u30fc\u30bf\u3092\u683c\u7d0d\u3059\u308b\u5834\u5408\u3001\u914d\u5217\u3088\u308a\u3082\u591a\u304f\u306e\u30e1\u30e2\u30ea\u7a7a\u9593\u3092\u5360\u6709\u3057\u307e\u3059\u3002

PythonC++JavaC#GoSwiftJSTSDartRustCKotlin
class ListNode:\n    \"\"\"\u9023\u7d50\u30ea\u30b9\u30c8\u30ce\u30fc\u30c9\u30af\u30e9\u30b9\"\"\"\n    def __init__(self, val: int):\n        self.val: int = val               # \u30ce\u30fc\u30c9\u5024\n        self.next: ListNode | None = None # \u6b21\u306e\u30ce\u30fc\u30c9\u3078\u306e\u53c2\u7167\n
/* \u9023\u7d50\u30ea\u30b9\u30c8\u30ce\u30fc\u30c9\u69cb\u9020\u4f53 */\nstruct ListNode {\n    int val;         // \u30ce\u30fc\u30c9\u5024\n    ListNode *next;  // \u6b21\u306e\u30ce\u30fc\u30c9\u3078\u306e\u30dd\u30a4\u30f3\u30bf\n    ListNode(int x) : val(x), next(nullptr) {}  // \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\n};\n
/* \u9023\u7d50\u30ea\u30b9\u30c8\u30ce\u30fc\u30c9\u30af\u30e9\u30b9 */\nclass ListNode {\n    int val;        // \u30ce\u30fc\u30c9\u5024\n    ListNode next;  // \u6b21\u306e\u30ce\u30fc\u30c9\u3078\u306e\u53c2\u7167\n    ListNode(int x) { val = x; }  // \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\n}\n
/* \u9023\u7d50\u30ea\u30b9\u30c8\u30ce\u30fc\u30c9\u30af\u30e9\u30b9 */\nclass ListNode(int x) {  // \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\n    int val = x;         // \u30ce\u30fc\u30c9\u5024\n    ListNode? next;      // \u6b21\u306e\u30ce\u30fc\u30c9\u3078\u306e\u53c2\u7167\n}\n
/* \u9023\u7d50\u30ea\u30b9\u30c8\u30ce\u30fc\u30c9\u69cb\u9020\u4f53 */\ntype ListNode struct {\n    Val  int       // \u30ce\u30fc\u30c9\u5024\n    Next *ListNode // \u6b21\u306e\u30ce\u30fc\u30c9\u3078\u306e\u30dd\u30a4\u30f3\u30bf\n}\n\n// NewListNode \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u3001\u65b0\u3057\u3044\u9023\u7d50\u30ea\u30b9\u30c8\u3092\u4f5c\u6210\nfunc NewListNode(val int) *ListNode {\n    return &ListNode{\n        Val:  val,\n        Next: nil,\n    }\n}\n
/* \u9023\u7d50\u30ea\u30b9\u30c8\u30ce\u30fc\u30c9\u30af\u30e9\u30b9 */\nclass ListNode {\n    var val: Int // \u30ce\u30fc\u30c9\u5024\n    var next: ListNode? // \u6b21\u306e\u30ce\u30fc\u30c9\u3078\u306e\u53c2\u7167\n\n    init(x: Int) { // \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\n        val = x\n    }\n}\n
/* \u9023\u7d50\u30ea\u30b9\u30c8\u30ce\u30fc\u30c9\u30af\u30e9\u30b9 */\nclass ListNode {\n    constructor(val, next) {\n        this.val = (val === undefined ? 0 : val);       // \u30ce\u30fc\u30c9\u5024\n        this.next = (next === undefined ? null : next); // \u6b21\u306e\u30ce\u30fc\u30c9\u3078\u306e\u53c2\u7167\n    }\n}\n
/* \u9023\u7d50\u30ea\u30b9\u30c8\u30ce\u30fc\u30c9\u30af\u30e9\u30b9 */\nclass ListNode {\n    val: number;\n    next: ListNode | null;\n    constructor(val?: number, next?: ListNode | null) {\n        this.val = val === undefined ? 0 : val;        // \u30ce\u30fc\u30c9\u5024\n        this.next = next === undefined ? null : next;  // \u6b21\u306e\u30ce\u30fc\u30c9\u3078\u306e\u53c2\u7167\n    }\n}\n
/* \u9023\u7d50\u30ea\u30b9\u30c8\u30ce\u30fc\u30c9\u30af\u30e9\u30b9 */\nclass ListNode {\n  int val; // \u30ce\u30fc\u30c9\u5024\n  ListNode? next; // \u6b21\u306e\u30ce\u30fc\u30c9\u3078\u306e\u53c2\u7167\n  ListNode(this.val, [this.next]); // \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\n}\n
use std::rc::Rc;\nuse std::cell::RefCell;\n/* \u9023\u7d50\u30ea\u30b9\u30c8\u30ce\u30fc\u30c9\u30af\u30e9\u30b9 */\n#[derive(Debug)]\nstruct ListNode {\n    val: i32, // \u30ce\u30fc\u30c9\u5024\n    next: Option<Rc<RefCell<ListNode>>>, // \u6b21\u306e\u30ce\u30fc\u30c9\u3078\u306e\u30dd\u30a4\u30f3\u30bf\n}\n
/* \u9023\u7d50\u30ea\u30b9\u30c8\u30ce\u30fc\u30c9\u69cb\u9020\u4f53 */\ntypedef struct ListNode {\n    int val;               // \u30ce\u30fc\u30c9\u5024\n    struct ListNode *next; // \u6b21\u306e\u30ce\u30fc\u30c9\u3078\u306e\u30dd\u30a4\u30f3\u30bf\n} ListNode;\n\n/* \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf */\nListNode *newListNode(int val) {\n    ListNode *node;\n    node = (ListNode *) malloc(sizeof(ListNode));\n    node->val = val;\n    node->next = NULL;\n    return node;\n}\n
\n
"},{"location":"chapter_array_and_linkedlist/linked_list/#421","title":"4.2.1 \u00a0 \u9023\u7d50\u30ea\u30b9\u30c8\u306e\u4e00\u822c\u7684\u306a\u64cd\u4f5c","text":""},{"location":"chapter_array_and_linkedlist/linked_list/#1","title":"1. \u00a0 \u9023\u7d50\u30ea\u30b9\u30c8\u306e\u521d\u671f\u5316","text":"

\u9023\u7d50\u30ea\u30b9\u30c8\u306e\u69cb\u7bc9\u306f2\u6bb5\u968e\u306e\u30d7\u30ed\u30bb\u30b9\u3067\u3059\uff1a\u307e\u305a\u5404\u30ce\u30fc\u30c9\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u521d\u671f\u5316\u3057\u3001\u6b21\u306b\u30ce\u30fc\u30c9\u9593\u306e\u53c2\u7167\u30ea\u30f3\u30af\u3092\u5f62\u6210\u3057\u307e\u3059\u3002\u521d\u671f\u5316\u5f8c\u3001\u30d8\u30c3\u30c9\u30ce\u30fc\u30c9\u304b\u3089next\u53c2\u7167\u3092\u305f\u3069\u3063\u3066\u3059\u3079\u3066\u306e\u30ce\u30fc\u30c9\u3092\u9806\u6b21\u5de1\u56de\u3067\u304d\u307e\u3059\u3002

PythonC++JavaC#GoSwiftJSTSDartRustCKotlin linked_list.py
# \u9023\u7d50\u30ea\u30b9\u30c8\u3092\u521d\u671f\u5316: 1 -> 3 -> 2 -> 5 -> 4\n# \u5404\u30ce\u30fc\u30c9\u3092\u521d\u671f\u5316\nn0 = ListNode(1)\nn1 = ListNode(3)\nn2 = ListNode(2)\nn3 = ListNode(5)\nn4 = ListNode(4)\n# \u30ce\u30fc\u30c9\u9593\u306e\u53c2\u7167\u3092\u69cb\u7bc9\nn0.next = n1\nn1.next = n2\nn2.next = n3\nn3.next = n4\n
linked_list.cpp
/* \u9023\u7d50\u30ea\u30b9\u30c8\u3092\u521d\u671f\u5316: 1 -> 3 -> 2 -> 5 -> 4 */\n// \u5404\u30ce\u30fc\u30c9\u3092\u521d\u671f\u5316\nListNode* n0 = new ListNode(1);\nListNode* n1 = new ListNode(3);\nListNode* n2 = new ListNode(2);\nListNode* n3 = new ListNode(5);\nListNode* n4 = new ListNode(4);\n// \u30ce\u30fc\u30c9\u9593\u306e\u53c2\u7167\u3092\u69cb\u7bc9\nn0->next = n1;\nn1->next = n2;\nn2->next = n3;\nn3->next = n4;\n
linked_list.java
/* \u9023\u7d50\u30ea\u30b9\u30c8\u3092\u521d\u671f\u5316: 1 -> 3 -> 2 -> 5 -> 4 */\n// \u5404\u30ce\u30fc\u30c9\u3092\u521d\u671f\u5316\nListNode n0 = new ListNode(1);\nListNode n1 = new ListNode(3);\nListNode n2 = new ListNode(2);\nListNode n3 = new ListNode(5);\nListNode n4 = new ListNode(4);\n// \u30ce\u30fc\u30c9\u9593\u306e\u53c2\u7167\u3092\u69cb\u7bc9\nn0.next = n1;\nn1.next = n2;\nn2.next = n3;\nn3.next = n4;\n
linked_list.cs
/* \u9023\u7d50\u30ea\u30b9\u30c8\u3092\u521d\u671f\u5316: 1 -> 3 -> 2 -> 5 -> 4 */\n// \u5404\u30ce\u30fc\u30c9\u3092\u521d\u671f\u5316\nListNode n0 = new(1);\nListNode n1 = new(3);\nListNode n2 = new(2);\nListNode n3 = new(5);\nListNode n4 = new(4);\n// \u30ce\u30fc\u30c9\u9593\u306e\u53c2\u7167\u3092\u69cb\u7bc9\nn0.next = n1;\nn1.next = n2;\nn2.next = n3;\nn3.next = n4;\n
linked_list.go
/* \u9023\u7d50\u30ea\u30b9\u30c8\u3092\u521d\u671f\u5316: 1 -> 3 -> 2 -> 5 -> 4 */\n// \u5404\u30ce\u30fc\u30c9\u3092\u521d\u671f\u5316\nn0 := NewListNode(1)\nn1 := NewListNode(3)\nn2 := NewListNode(2)\nn3 := NewListNode(5)\nn4 := NewListNode(4)\n// \u30ce\u30fc\u30c9\u9593\u306e\u53c2\u7167\u3092\u69cb\u7bc9\nn0.Next = n1\nn1.Next = n2\nn2.Next = n3\nn3.Next = n4\n
linked_list.swift
/* \u9023\u7d50\u30ea\u30b9\u30c8\u3092\u521d\u671f\u5316: 1 -> 3 -> 2 -> 5 -> 4 */\n// \u5404\u30ce\u30fc\u30c9\u3092\u521d\u671f\u5316\nlet n0 = ListNode(x: 1)\nlet n1 = ListNode(x: 3)\nlet n2 = ListNode(x: 2)\nlet n3 = ListNode(x: 5)\nlet n4 = ListNode(x: 4)\n// \u30ce\u30fc\u30c9\u9593\u306e\u53c2\u7167\u3092\u69cb\u7bc9\nn0.next = n1\nn1.next = n2\nn2.next = n3\nn3.next = n4\n
linked_list.js
/* \u9023\u7d50\u30ea\u30b9\u30c8\u3092\u521d\u671f\u5316: 1 -> 3 -> 2 -> 5 -> 4 */\n// \u5404\u30ce\u30fc\u30c9\u3092\u521d\u671f\u5316\nconst n0 = new ListNode(1);\nconst n1 = new ListNode(3);\nconst n2 = new ListNode(2);\nconst n3 = new ListNode(5);\nconst n4 = new ListNode(4);\n// \u30ce\u30fc\u30c9\u9593\u306e\u53c2\u7167\u3092\u69cb\u7bc9\nn0.next = n1;\nn1.next = n2;\nn2.next = n3;\nn3.next = n4;\n
linked_list.ts
/* \u9023\u7d50\u30ea\u30b9\u30c8\u3092\u521d\u671f\u5316: 1 -> 3 -> 2 -> 5 -> 4 */\n// \u5404\u30ce\u30fc\u30c9\u3092\u521d\u671f\u5316\nconst n0 = new ListNode(1);\nconst n1 = new ListNode(3);\nconst n2 = new ListNode(2);\nconst n3 = new ListNode(5);\nconst n4 = new ListNode(4);\n// \u30ce\u30fc\u30c9\u9593\u306e\u53c2\u7167\u3092\u69cb\u7bc9\nn0.next = n1;\nn1.next = n2;\nn2.next = n3;\nn3.next = n4;\n
linked_list.dart
/* \u9023\u7d50\u30ea\u30b9\u30c8\u3092\u521d\u671f\u5316: 1 -> 3 -> 2 -> 5 -> 4 */\n// \u5404\u30ce\u30fc\u30c9\u3092\u521d\u671f\u5316\nListNode n0 = ListNode(1);\nListNode n1 = ListNode(3);\nListNode n2 = ListNode(2);\nListNode n3 = ListNode(5);\nListNode n4 = ListNode(4);\n// \u30ce\u30fc\u30c9\u9593\u306e\u53c2\u7167\u3092\u69cb\u7bc9\nn0.next = n1;\nn1.next = n2;\nn2.next = n3;\nn3.next = n4;\n
linked_list.rs
/* \u9023\u7d50\u30ea\u30b9\u30c8\u3092\u521d\u671f\u5316: 1 -> 3 -> 2 -> 5 -> 4 */\n// \u5404\u30ce\u30fc\u30c9\u3092\u521d\u671f\u5316\nlet n0 = Rc::new(RefCell::new(ListNode { val: 1, next: None }));\nlet n1 = Rc::new(RefCell::new(ListNode { val: 3, next: None }));\nlet n2 = Rc::new(RefCell::new(ListNode { val: 2, next: None }));\nlet n3 = Rc::new(RefCell::new(ListNode { val: 5, next: None }));\nlet n4 = Rc::new(RefCell::new(ListNode { val: 4, next: None }));\n\n// \u30ce\u30fc\u30c9\u9593\u306e\u53c2\u7167\u3092\u69cb\u7bc9\nn0.borrow_mut().next = Some(n1.clone());\nn1.borrow_mut().next = Some(n2.clone());\nn2.borrow_mut().next = Some(n3.clone());\nn3.borrow_mut().next = Some(n4.clone());\n
linked_list.c
/* \u9023\u7d50\u30ea\u30b9\u30c8\u3092\u521d\u671f\u5316: 1 -> 3 -> 2 -> 5 -> 4 */\n// \u5404\u30ce\u30fc\u30c9\u3092\u521d\u671f\u5316\nListNode* n0 = newListNode(1);\nListNode* n1 = newListNode(3);\nListNode* n2 = newListNode(2);\nListNode* n3 = newListNode(5);\nListNode* n4 = newListNode(4);\n// \u30ce\u30fc\u30c9\u9593\u306e\u53c2\u7167\u3092\u69cb\u7bc9\nn0->next = n1;\nn1->next = n2;\nn2->next = n3;\nn3->next = n4;\n
linked_list.kt
\n

\u914d\u5217\u5168\u4f53\u306f1\u3064\u306e\u5909\u6570\u3067\u3059\u3002\u4f8b\u3048\u3070\u3001\u914d\u5217nums\u306b\u306fnums[0]\u3001nums[1]\u306a\u3069\u306e\u8981\u7d20\u304c\u542b\u307e\u308c\u307e\u3059\u304c\u3001\u9023\u7d50\u30ea\u30b9\u30c8\u306f\u8907\u6570\u306e\u7570\u306a\u308b\u30ce\u30fc\u30c9\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3067\u69cb\u6210\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u901a\u5e38\u3001\u9023\u7d50\u30ea\u30b9\u30c8\u306f\u305d\u306e\u30d8\u30c3\u30c9\u30ce\u30fc\u30c9\u3067\u53c2\u7167\u3055\u308c\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001\u524d\u306e\u30b3\u30fc\u30c9\u30b9\u30cb\u30da\u30c3\u30c8\u306e\u9023\u7d50\u30ea\u30b9\u30c8\u306fn0\u3068\u3057\u3066\u53c2\u7167\u3055\u308c\u307e\u3059\u3002

"},{"location":"chapter_array_and_linkedlist/linked_list/#2","title":"2. \u00a0 \u30ce\u30fc\u30c9\u306e\u633f\u5165","text":"

\u9023\u7d50\u30ea\u30b9\u30c8\u306b\u30ce\u30fc\u30c9\u3092\u633f\u5165\u3059\u308b\u306e\u306f\u975e\u5e38\u306b\u7c21\u5358\u3067\u3059\u3002\u4e0b\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u96a3\u63a5\u3059\u308b2\u3064\u306e\u30ce\u30fc\u30c9n0\u3068n1\u306e\u9593\u306b\u65b0\u3057\u3044\u30ce\u30fc\u30c9P\u3092\u633f\u5165\u3059\u308b\u3053\u3068\u3092\u76ee\u6307\u3059\u3068\u3057\u307e\u3059\u3002\u3053\u308c\u306f2\u3064\u306e\u30ce\u30fc\u30c9\u53c2\u7167\uff08\u30dd\u30a4\u30f3\u30bf\uff09\u3092\u5909\u66f4\u3059\u308b\u3060\u3051\u3067\u5b9f\u73fe\u3067\u304d\u3001\u6642\u9593\u8a08\u7b97\u91cf\u306f\\(O(1)\\)\u3067\u3059\u3002

\u6bd4\u8f03\u3059\u308b\u3068\u3001\u914d\u5217\u306b\u8981\u7d20\u3092\u633f\u5165\u3059\u308b\u6642\u9593\u8a08\u7b97\u91cf\u306f\\(O(n)\\)\u3067\u3042\u308a\u3001\u5927\u91cf\u306e\u30c7\u30fc\u30bf\u3092\u6271\u3046\u5834\u5408\u306b\u306f\u52b9\u7387\u304c\u60aa\u304f\u306a\u308a\u307e\u3059\u3002

\u56f3 4-6 \u00a0 \u9023\u7d50\u30ea\u30b9\u30c8\u30ce\u30fc\u30c9\u633f\u5165\u306e\u4f8b

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby linked_list.py
def insert(n0: ListNode, P: ListNode):\n    \"\"\"\u9023\u7d50\u30ea\u30b9\u30c8\u306e\u30ce\u30fc\u30c9 n0 \u306e\u5f8c\u306b\u30ce\u30fc\u30c9 P \u3092\u633f\u5165\"\"\"\n    n1 = n0.next\n    P.next = n1\n    n0.next = P\n
linked_list.cpp
/* \u9023\u7d50\u30ea\u30b9\u30c8\u306e\u30ce\u30fc\u30c9n0\u306e\u5f8c\u306b\u30ce\u30fc\u30c9P\u3092\u633f\u5165 */\nvoid insert(ListNode *n0, ListNode *P) {\n    ListNode *n1 = n0->next;\n    P->next = n1;\n    n0->next = P;\n}\n
linked_list.java
/* \u9023\u7d50\u30ea\u30b9\u30c8\u3067\u30ce\u30fc\u30c9 n0 \u306e\u5f8c\u306b\u30ce\u30fc\u30c9 P \u3092\u633f\u5165 */\nvoid insert(ListNode n0, ListNode P) {\n    ListNode n1 = n0.next;\n    P.next = n1;\n    n0.next = P;\n}\n
linked_list.cs
[class]{linked_list}-[func]{Insert}\n
linked_list.go
[class]{}-[func]{insertNode}\n
linked_list.swift
[class]{}-[func]{insert}\n
linked_list.js
[class]{}-[func]{insert}\n
linked_list.ts
[class]{}-[func]{insert}\n
linked_list.dart
[class]{}-[func]{insert}\n
linked_list.rs
[class]{}-[func]{insert}\n
linked_list.c
[class]{}-[func]{insert}\n
linked_list.kt
[class]{}-[func]{insert}\n
linked_list.rb
[class]{}-[func]{insert}\n
"},{"location":"chapter_array_and_linkedlist/linked_list/#3","title":"3. \u00a0 \u30ce\u30fc\u30c9\u306e\u524a\u9664","text":"

\u4e0b\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u9023\u7d50\u30ea\u30b9\u30c8\u304b\u3089\u30ce\u30fc\u30c9\u3092\u524a\u9664\u3059\u308b\u3053\u3068\u3082\u975e\u5e38\u306b\u7c21\u5358\u3067\u30011\u3064\u306e\u30ce\u30fc\u30c9\u306e\u53c2\u7167\uff08\u30dd\u30a4\u30f3\u30bf\uff09\u3092\u5909\u66f4\u3059\u308b\u3060\u3051\u3067\u3059\u3002

\u91cd\u8981\u306a\u70b9\u306f\u3001\u30ce\u30fc\u30c9P\u304c\u524a\u9664\u3055\u308c\u305f\u5f8c\u3082n1\u3092\u6307\u3057\u7d9a\u3051\u3066\u3044\u308b\u3053\u3068\u3067\u3059\u304c\u3001\u9023\u7d50\u30ea\u30b9\u30c8\u306e\u5de1\u56de\u4e2d\u306b\u306f\u30a2\u30af\u30bb\u30b9\u3067\u304d\u306a\u304f\u306a\u308b\u3053\u3068\u3067\u3059\u3002\u3053\u308c\u306f\u4e8b\u5b9f\u4e0a\u3001P\u304c\u9023\u7d50\u30ea\u30b9\u30c8\u306e\u4e00\u90e8\u3067\u306f\u306a\u304f\u306a\u3063\u305f\u3053\u3068\u3092\u610f\u5473\u3057\u307e\u3059\u3002

\u56f3 4-7 \u00a0 \u9023\u7d50\u30ea\u30b9\u30c8\u30ce\u30fc\u30c9\u306e\u524a\u9664

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby linked_list.py
def remove(n0: ListNode):\n    \"\"\"\u9023\u7d50\u30ea\u30b9\u30c8\u306e\u30ce\u30fc\u30c9 n0 \u306e\u5f8c\u306e\u6700\u521d\u306e\u30ce\u30fc\u30c9\u3092\u524a\u9664\"\"\"\n    if not n0.next:\n        return\n    # n0 -> P -> n1\n    P = n0.next\n    n1 = P.next\n    n0.next = n1\n
linked_list.cpp
/* \u9023\u7d50\u30ea\u30b9\u30c8\u306e\u30ce\u30fc\u30c9n0\u306e\u5f8c\u306e\u6700\u521d\u306e\u30ce\u30fc\u30c9\u3092\u524a\u9664 */\nvoid remove(ListNode *n0) {\n    if (n0->next == nullptr)\n        return;\n    // n0 -> P -> n1\n    ListNode *P = n0->next;\n    ListNode *n1 = P->next;\n    n0->next = n1;\n    // \u30e1\u30e2\u30ea\u3092\u89e3\u653e\n    delete P;\n}\n
linked_list.java
/* \u9023\u7d50\u30ea\u30b9\u30c8\u3067\u30ce\u30fc\u30c9 n0 \u306e\u5f8c\u306e\u6700\u521d\u306e\u30ce\u30fc\u30c9\u3092\u524a\u9664 */\nvoid remove(ListNode n0) {\n    if (n0.next == null)\n        return;\n    // n0 -> P -> n1\n    ListNode P = n0.next;\n    ListNode n1 = P.next;\n    n0.next = n1;\n}\n
linked_list.cs
[class]{linked_list}-[func]{Remove}\n
linked_list.go
[class]{}-[func]{removeItem}\n
linked_list.swift
[class]{}-[func]{remove}\n
linked_list.js
[class]{}-[func]{remove}\n
linked_list.ts
[class]{}-[func]{remove}\n
linked_list.dart
[class]{}-[func]{remove}\n
linked_list.rs
[class]{}-[func]{remove}\n
linked_list.c
[class]{}-[func]{removeItem}\n
linked_list.kt
[class]{}-[func]{remove}\n
linked_list.rb
[class]{}-[func]{remove}\n
"},{"location":"chapter_array_and_linkedlist/linked_list/#4","title":"4. \u00a0 \u30ce\u30fc\u30c9\u3078\u306e\u30a2\u30af\u30bb\u30b9","text":"

\u9023\u7d50\u30ea\u30b9\u30c8\u3067\u306e\u30ce\u30fc\u30c9\u3078\u306e\u30a2\u30af\u30bb\u30b9\u306f\u52b9\u7387\u304c\u60aa\u3044\u3067\u3059\u3002\u524d\u8ff0\u3057\u305f\u3088\u3046\u306b\u3001\u914d\u5217\u306e\u4efb\u610f\u306e\u8981\u7d20\u306b\u306f\\(O(1)\\)\u6642\u9593\u3067\u30a2\u30af\u30bb\u30b9\u3067\u304d\u307e\u3059\u3002\u5bfe\u7167\u7684\u306b\u3001\u9023\u7d50\u30ea\u30b9\u30c8\u3067\u306f\u3001\u30d7\u30ed\u30b0\u30e9\u30e0\u306f\u30d8\u30c3\u30c9\u30ce\u30fc\u30c9\u304b\u3089\u958b\u59cb\u3057\u3066\u76ee\u7684\u306e\u30ce\u30fc\u30c9\u304c\u898b\u3064\u304b\u308b\u307e\u3067\u9806\u6b21\u30ce\u30fc\u30c9\u3092\u5de1\u56de\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u3064\u307e\u308a\u3001\u9023\u7d50\u30ea\u30b9\u30c8\u306e\\(i\\)\u756a\u76ee\u306e\u30ce\u30fc\u30c9\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u306b\u306f\u3001\u30d7\u30ed\u30b0\u30e9\u30e0\u306f\\(i - 1\\)\u500b\u306e\u30ce\u30fc\u30c9\u3092\u53cd\u5fa9\u51e6\u7406\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u3001\u6642\u9593\u8a08\u7b97\u91cf\u306f\\(O(n)\\)\u306b\u306a\u308a\u307e\u3059\u3002

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby linked_list.py
def access(head: ListNode, index: int) -> ListNode | None:\n    \"\"\"\u9023\u7d50\u30ea\u30b9\u30c8\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9 index \u306e\u30ce\u30fc\u30c9\u306b\u30a2\u30af\u30bb\u30b9\"\"\"\n    for _ in range(index):\n        if not head:\n            return None\n        head = head.next\n    return head\n
linked_list.cpp
/* \u9023\u7d50\u30ea\u30b9\u30c8\u306e`index`\u756a\u76ee\u306e\u30ce\u30fc\u30c9\u306b\u30a2\u30af\u30bb\u30b9 */\nListNode *access(ListNode *head, int index) {\n    for (int i = 0; i < index; i++) {\n        if (head == nullptr)\n            return nullptr;\n        head = head->next;\n    }\n    return head;\n}\n
linked_list.java
/* \u9023\u7d50\u30ea\u30b9\u30c8\u306e `index` \u306e\u30ce\u30fc\u30c9\u306b\u30a2\u30af\u30bb\u30b9 */\nListNode access(ListNode head, int index) {\n    for (int i = 0; i < index; i++) {\n        if (head == null)\n            return null;\n        head = head.next;\n    }\n    return head;\n}\n
linked_list.cs
[class]{linked_list}-[func]{Access}\n
linked_list.go
[class]{}-[func]{access}\n
linked_list.swift
[class]{}-[func]{access}\n
linked_list.js
[class]{}-[func]{access}\n
linked_list.ts
[class]{}-[func]{access}\n
linked_list.dart
[class]{}-[func]{access}\n
linked_list.rs
[class]{}-[func]{access}\n
linked_list.c
[class]{}-[func]{access}\n
linked_list.kt
[class]{}-[func]{access}\n
linked_list.rb
[class]{}-[func]{access}\n
"},{"location":"chapter_array_and_linkedlist/linked_list/#5","title":"5. \u00a0 \u30ce\u30fc\u30c9\u306e\u691c\u7d22","text":"

\u9023\u7d50\u30ea\u30b9\u30c8\u3092\u5de1\u56de\u3057\u3066\u3001\u5024\u304ctarget\u306b\u4e00\u81f4\u3059\u308b\u30ce\u30fc\u30c9\u3092\u898b\u3064\u3051\u3001\u9023\u7d50\u30ea\u30b9\u30c8\u5185\u3067\u306e\u305d\u306e\u30ce\u30fc\u30c9\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u51fa\u529b\u3057\u307e\u3059\u3002\u3053\u306e\u624b\u9806\u3082\u7dda\u5f62\u691c\u7d22\u306e\u4f8b\u3067\u3059\u3002\u5bfe\u5fdc\u3059\u308b\u30b3\u30fc\u30c9\u306f\u4ee5\u4e0b\u306e\u3068\u304a\u308a\u3067\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby linked_list.py
def find(head: ListNode, target: int) -> int:\n    \"\"\"\u9023\u7d50\u30ea\u30b9\u30c8\u3067\u5024 target \u3092\u6301\u3064\u6700\u521d\u306e\u30ce\u30fc\u30c9\u3092\u691c\u7d22\"\"\"\n    index = 0\n    while head:\n        if head.val == target:\n            return index\n        head = head.next\n        index += 1\n    return -1\n
linked_list.cpp
/* \u9023\u7d50\u30ea\u30b9\u30c8\u3067\u5024\u304ctarget\u306e\u6700\u521d\u306e\u30ce\u30fc\u30c9\u3092\u691c\u7d22 */\nint find(ListNode *head, int target) {\n    int index = 0;\n    while (head != nullptr) {\n        if (head->val == target)\n            return index;\n        head = head->next;\n        index++;\n    }\n    return -1;\n}\n
linked_list.java
/* \u9023\u7d50\u30ea\u30b9\u30c8\u3067\u5024 target \u3092\u6301\u3064\u6700\u521d\u306e\u30ce\u30fc\u30c9\u3092\u691c\u7d22 */\nint find(ListNode head, int target) {\n    int index = 0;\n    while (head != null) {\n        if (head.val == target)\n            return index;\n        head = head.next;\n        index++;\n    }\n    return -1;\n}\n
linked_list.cs
[class]{linked_list}-[func]{Find}\n
linked_list.go
[class]{}-[func]{findNode}\n
linked_list.swift
[class]{}-[func]{find}\n
linked_list.js
[class]{}-[func]{find}\n
linked_list.ts
[class]{}-[func]{find}\n
linked_list.dart
[class]{}-[func]{find}\n
linked_list.rs
[class]{}-[func]{find}\n
linked_list.c
[class]{}-[func]{find}\n
linked_list.kt
[class]{}-[func]{find}\n
linked_list.rb
[class]{}-[func]{find}\n
"},{"location":"chapter_array_and_linkedlist/linked_list/#422-vs","title":"4.2.2 \u00a0 \u914d\u5217 vs. \u9023\u7d50\u30ea\u30b9\u30c8","text":"

\u4e0b\u8868\u306f\u914d\u5217\u3068\u9023\u7d50\u30ea\u30b9\u30c8\u306e\u7279\u6027\u3092\u307e\u3068\u3081\u3001\u69d8\u3005\u306a\u64cd\u4f5c\u306b\u304a\u3051\u308b\u52b9\u7387\u3082\u6bd4\u8f03\u3057\u3066\u3044\u307e\u3059\u3002\u305d\u308c\u305e\u308c\u304c\u5bfe\u7167\u7684\u306a\u683c\u7d0d\u6226\u7565\u3092\u4f7f\u7528\u3059\u308b\u305f\u3081\u3001\u305d\u308c\u305e\u308c\u306e\u7279\u6027\u3068\u64cd\u4f5c\u52b9\u7387\u306f\u660e\u78ba\u306b\u5bfe\u6bd4\u3055\u308c\u3066\u3044\u307e\u3059\u3002

\u8868 4-1 \u00a0 \u914d\u5217\u3068\u9023\u7d50\u30ea\u30b9\u30c8\u306e\u52b9\u7387\u6bd4\u8f03

\u914d\u5217 \u9023\u7d50\u30ea\u30b9\u30c8 \u683c\u7d0d\u65b9\u5f0f \u9023\u7d9a\u30e1\u30e2\u30ea\u7a7a\u9593 \u5206\u6563\u30e1\u30e2\u30ea\u7a7a\u9593 \u5bb9\u91cf\u62e1\u5f35 \u56fa\u5b9a\u9577 \u67d4\u8edf\u306a\u62e1\u5f35 \u30e1\u30e2\u30ea\u52b9\u7387 \u8981\u7d20\u3042\u305f\u308a\u306e\u30e1\u30e2\u30ea\u5c11\u3001\u6f5c\u5728\u7684\u306a\u7a7a\u9593\u306e\u7121\u99c4 \u8981\u7d20\u3042\u305f\u308a\u306e\u30e1\u30e2\u30ea\u591a \u8981\u7d20\u3078\u306e\u30a2\u30af\u30bb\u30b9 \\(O(1)\\) \\(O(n)\\) \u8981\u7d20\u306e\u8ffd\u52a0 \\(O(n)\\) \\(O(1)\\) \u8981\u7d20\u306e\u524a\u9664 \\(O(n)\\) \\(O(1)\\)"},{"location":"chapter_array_and_linkedlist/linked_list/#423","title":"4.2.3 \u00a0 \u9023\u7d50\u30ea\u30b9\u30c8\u306e\u4e00\u822c\u7684\u306a\u7a2e\u985e","text":"

\u4e0b\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u9023\u7d50\u30ea\u30b9\u30c8\u306b\u306f3\u3064\u306e\u4e00\u822c\u7684\u306a\u7a2e\u985e\u304c\u3042\u308a\u307e\u3059\u3002

PythonC++JavaC#GoSwiftJSTSDartRustCKotlin
class ListNode:\n    \"\"\"\u53cc\u65b9\u5411\u9023\u7d50\u30ea\u30b9\u30c8\u30ce\u30fc\u30c9\u30af\u30e9\u30b9\"\"\"\n    def __init__(self, val: int):\n        self.val: int = val                # \u30ce\u30fc\u30c9\u5024\n        self.next: ListNode | None = None  # \u5f8c\u7d9a\u30ce\u30fc\u30c9\u3078\u306e\u53c2\u7167\n        self.prev: ListNode | None = None  # \u524d\u4efb\u30ce\u30fc\u30c9\u3078\u306e\u53c2\u7167\n
/* \u53cc\u65b9\u5411\u9023\u7d50\u30ea\u30b9\u30c8\u30ce\u30fc\u30c9\u69cb\u9020\u4f53 */\nstruct ListNode {\n    int val;         // \u30ce\u30fc\u30c9\u5024\n    ListNode *next;  // \u5f8c\u7d9a\u30ce\u30fc\u30c9\u3078\u306e\u30dd\u30a4\u30f3\u30bf\n    ListNode *prev;  // \u524d\u4efb\u30ce\u30fc\u30c9\u3078\u306e\u30dd\u30a4\u30f3\u30bf\n    ListNode(int x) : val(x), next(nullptr), prev(nullptr) {}  // \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\n};\n
/* \u53cc\u65b9\u5411\u9023\u7d50\u30ea\u30b9\u30c8\u30ce\u30fc\u30c9\u30af\u30e9\u30b9 */\nclass ListNode {\n    int val;        // \u30ce\u30fc\u30c9\u5024\n    ListNode next;  // \u6b21\u306e\u30ce\u30fc\u30c9\u3078\u306e\u53c2\u7167\n    ListNode prev;  // \u524d\u4efb\u30ce\u30fc\u30c9\u3078\u306e\u53c2\u7167\n    ListNode(int x) { val = x; }  // \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\n}\n
/* \u53cc\u65b9\u5411\u9023\u7d50\u30ea\u30b9\u30c8\u30ce\u30fc\u30c9\u30af\u30e9\u30b9 */\nclass ListNode(int x) {  // \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\n    int val = x;    // \u30ce\u30fc\u30c9\u5024\n    ListNode next;  // \u6b21\u306e\u30ce\u30fc\u30c9\u3078\u306e\u53c2\u7167\n    ListNode prev;  // \u524d\u4efb\u30ce\u30fc\u30c9\u3078\u306e\u53c2\u7167\n}\n
/* \u53cc\u65b9\u5411\u9023\u7d50\u30ea\u30b9\u30c8\u30ce\u30fc\u30c9\u69cb\u9020\u4f53 */\ntype DoublyListNode struct {\n    Val  int             // \u30ce\u30fc\u30c9\u5024\n    Next *DoublyListNode // \u5f8c\u7d9a\u30ce\u30fc\u30c9\u3078\u306e\u30dd\u30a4\u30f3\u30bf\n    Prev *DoublyListNode // \u524d\u4efb\u30ce\u30fc\u30c9\u3078\u306e\u30dd\u30a4\u30f3\u30bf\n}\n\n// NewDoublyListNode \u521d\u671f\u5316\nfunc NewDoublyListNode(val int) *DoublyListNode {\n    return &DoublyListNode{\n        Val:  val,\n        Next: nil,\n        Prev: nil,\n    }\n}\n
/* \u53cc\u65b9\u5411\u9023\u7d50\u30ea\u30b9\u30c8\u30ce\u30fc\u30c9\u30af\u30e9\u30b9 */\nclass ListNode {\n    var val: Int // \u30ce\u30fc\u30c9\u5024\n    var next: ListNode? // \u6b21\u306e\u30ce\u30fc\u30c9\u3078\u306e\u53c2\u7167\n    var prev: ListNode? // \u524d\u4efb\u30ce\u30fc\u30c9\u3078\u306e\u53c2\u7167\n\n    init(x: Int) { // \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\n        val = x\n    }\n}\n
/* \u53cc\u65b9\u5411\u9023\u7d50\u30ea\u30b9\u30c8\u30ce\u30fc\u30c9\u30af\u30e9\u30b9 */\nclass ListNode {\n    constructor(val, next, prev) {\n        this.val = val  ===  undefined ? 0 : val;        // \u30ce\u30fc\u30c9\u5024\n        this.next = next  ===  undefined ? null : next;  // \u5f8c\u7d9a\u30ce\u30fc\u30c9\u3078\u306e\u53c2\u7167\n        this.prev = prev  ===  undefined ? null : prev;  // \u524d\u4efb\u30ce\u30fc\u30c9\u3078\u306e\u53c2\u7167\n    }\n}\n
/* \u53cc\u65b9\u5411\u9023\u7d50\u30ea\u30b9\u30c8\u30ce\u30fc\u30c9\u30af\u30e9\u30b9 */\nclass ListNode {\n    val: number;\n    next: ListNode | null;\n    prev: ListNode | null;\n    constructor(val?: number, next?: ListNode | null, prev?: ListNode | null) {\n        this.val = val  ===  undefined ? 0 : val;        // \u30ce\u30fc\u30c9\u5024\n        this.next = next  ===  undefined ? null : next;  // \u5f8c\u7d9a\u30ce\u30fc\u30c9\u3078\u306e\u53c2\u7167\n        this.prev = prev  ===  undefined ? null : prev;  // \u524d\u4efb\u30ce\u30fc\u30c9\u3078\u306e\u53c2\u7167\n    }\n}\n
/* \u53cc\u65b9\u5411\u9023\u7d50\u30ea\u30b9\u30c8\u30ce\u30fc\u30c9\u30af\u30e9\u30b9 */\nclass ListNode {\n    int val;        // \u30ce\u30fc\u30c9\u5024\n    ListNode next;  // \u6b21\u306e\u30ce\u30fc\u30c9\u3078\u306e\u53c2\u7167\n    ListNode prev;  // \u524d\u4efb\u30ce\u30fc\u30c9\u3078\u306e\u53c2\u7167\n    ListNode(this.val, [this.next, this.prev]);  // \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\n}\n
use std::rc::Rc;\nuse std::cell::RefCell;\n\n/* \u53cc\u65b9\u5411\u9023\u7d50\u30ea\u30b9\u30c8\u30ce\u30fc\u30c9\u578b */\n#[derive(Debug)]\nstruct ListNode {\n    val: i32, // \u30ce\u30fc\u30c9\u5024\n    next: Option<Rc<RefCell<ListNode>>>, // \u5f8c\u7d9a\u30ce\u30fc\u30c9\u3078\u306e\u30dd\u30a4\u30f3\u30bf\n    prev: Option<Rc<RefCell<ListNode>>>, // \u524d\u4efb\u30ce\u30fc\u30c9\u3078\u306e\u30dd\u30a4\u30f3\u30bf\n}\n\n/* \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf */\nimpl ListNode {\n    fn new(val: i32) -> Self {\n        ListNode {\n            val,\n            next: None,\n            prev: None,\n        }\n    }\n}\n
/* \u53cc\u65b9\u5411\u9023\u7d50\u30ea\u30b9\u30c8\u30ce\u30fc\u30c9\u69cb\u9020\u4f53 */\ntypedef struct ListNode {\n    int val;               // \u30ce\u30fc\u30c9\u5024\n    struct ListNode *next; // \u5f8c\u7d9a\u30ce\u30fc\u30c9\u3078\u306e\u30dd\u30a4\u30f3\u30bf\n    struct ListNode *prev; // \u524d\u4efb\u30ce\u30fc\u30c9\u3078\u306e\u30dd\u30a4\u30f3\u30bf\n} ListNode;\n\n/* \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf */\nListNode *newListNode(int val) {\n    ListNode *node, *next;\n    node = (ListNode *) malloc(sizeof(ListNode));\n    node->val = val;\n    node->next = NULL;\n    node->prev = NULL;\n    return node;\n}\n
\n

\u56f3 4-8 \u00a0 \u9023\u7d50\u30ea\u30b9\u30c8\u306e\u4e00\u822c\u7684\u306a\u7a2e\u985e

"},{"location":"chapter_array_and_linkedlist/linked_list/#424","title":"4.2.4 \u00a0 \u9023\u7d50\u30ea\u30b9\u30c8\u306e\u5178\u578b\u7684\u306a\u5fdc\u7528","text":"

\u5358\u65b9\u5411\u9023\u7d50\u30ea\u30b9\u30c8\u306f\u3001\u30b9\u30bf\u30c3\u30af\u3001\u30ad\u30e5\u30fc\u3001\u30cf\u30c3\u30b7\u30e5\u8868\u3001\u30b0\u30e9\u30d5\u306e\u5b9f\u88c5\u306b\u3088\u304f\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002

\u53cc\u65b9\u5411\u9023\u7d50\u30ea\u30b9\u30c8\u306f\u3001\u524d\u5f8c\u306e\u8981\u7d20\u3078\u306e\u9ad8\u901f\u30a2\u30af\u30bb\u30b9\u304c\u5fc5\u8981\u306a\u30b7\u30ca\u30ea\u30aa\u306b\u6700\u9069\u3067\u3059\u3002

\u5faa\u74b0\u9023\u7d50\u30ea\u30b9\u30c8\u306f\u3001\u30aa\u30da\u30ec\u30fc\u30c6\u30a3\u30f3\u30b0\u30b7\u30b9\u30c6\u30e0\u3067\u306e\u30ea\u30bd\u30fc\u30b9\u30b9\u30b1\u30b8\u30e5\u30fc\u30ea\u30f3\u30b0\u306a\u3069\u3001\u5468\u671f\u7684\u306a\u64cd\u4f5c\u304c\u5fc5\u8981\u306a\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u6700\u9069\u3067\u3059\u3002

"},{"location":"chapter_array_and_linkedlist/list/","title":"4.3 \u00a0 \u30ea\u30b9\u30c8","text":"

\u30ea\u30b9\u30c8\u306f\u3001\u8981\u7d20\u3078\u306e\u30a2\u30af\u30bb\u30b9\u3001\u5909\u66f4\u3001\u8ffd\u52a0\u3001\u524a\u9664\u3001\u8d70\u67fb\u306a\u3069\u306e\u64cd\u4f5c\u3092\u30b5\u30dd\u30fc\u30c8\u3059\u308b\u3001\u9806\u5e8f\u4ed8\u3051\u3089\u308c\u305f\u8981\u7d20\u306e\u30b3\u30ec\u30af\u30b7\u30e7\u30f3\u3092\u8868\u3059\u62bd\u8c61\u7684\u306a\u30c7\u30fc\u30bf\u69cb\u9020\u306e\u6982\u5ff5\u3067\u3042\u308a\u3001\u30e6\u30fc\u30b6\u30fc\u304c\u5bb9\u91cf\u5236\u9650\u3092\u8003\u616e\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u305b\u3093\u3002\u30ea\u30b9\u30c8\u306f\u9023\u7d50\u30ea\u30b9\u30c8\u307e\u305f\u306f\u914d\u5217\u306b\u57fa\u3065\u3044\u3066\u5b9f\u88c5\u3067\u304d\u307e\u3059\u3002

\u914d\u5217\u3092\u4f7f\u7528\u3057\u3066\u30ea\u30b9\u30c8\u3092\u5b9f\u88c5\u3059\u308b\u5834\u5408\u3001\u9577\u3055\u306e\u4e0d\u5909\u6027\u306b\u3088\u308a\u30ea\u30b9\u30c8\u306e\u5b9f\u7528\u6027\u304c\u4f4e\u4e0b\u3057\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u4e8b\u524d\u306b\u683c\u7d0d\u3059\u308b\u30c7\u30fc\u30bf\u91cf\u3092\u4e88\u6e2c\u3059\u308b\u3053\u3068\u304c\u56f0\u96e3\u306a\u5834\u5408\u304c\u591a\u304f\u3001\u9069\u5207\u306a\u30ea\u30b9\u30c8\u9577\u3092\u9078\u629e\u3059\u308b\u3053\u3068\u304c\u56f0\u96e3\u3067\u3042\u308b\u305f\u3081\u3067\u3059\u3002\u9577\u3055\u304c\u5c0f\u3055\u3059\u304e\u308b\u3068\u8981\u4ef6\u3092\u6e80\u305f\u3055\u306a\u3044\u53ef\u80fd\u6027\u304c\u3042\u308a\u3001\u5927\u304d\u3059\u304e\u308b\u3068\u30e1\u30e2\u30ea\u7a7a\u9593\u3092\u7121\u99c4\u306b\u3059\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002

\u3053\u306e\u554f\u984c\u3092\u89e3\u6c7a\u3059\u308b\u305f\u3081\u306b\u3001\u52d5\u7684\u914d\u5217\u3092\u4f7f\u7528\u3057\u3066\u30ea\u30b9\u30c8\u3092\u5b9f\u88c5\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306f\u914d\u5217\u306e\u5229\u70b9\u3092\u7d99\u627f\u3057\u3001\u30d7\u30ed\u30b0\u30e9\u30e0\u5b9f\u884c\u4e2d\u306b\u52d5\u7684\u306b\u62e1\u5f35\u3067\u304d\u307e\u3059\u3002

\u5b9f\u969b\u3001\u591a\u304f\u306e\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\u306e\u6a19\u6e96\u30e9\u30a4\u30d6\u30e9\u30ea\u306f\u52d5\u7684\u914d\u5217\u3092\u4f7f\u7528\u3057\u3066\u30ea\u30b9\u30c8\u3092\u5b9f\u88c5\u3057\u3066\u3044\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001Python\u306elist\u3001Java\u306eArrayList\u3001C++\u306evector\u3001C#\u306eList\u306a\u3069\u3067\u3059\u3002\u4ee5\u4e0b\u306e\u8b70\u8ad6\u3067\u306f\u3001\u300c\u30ea\u30b9\u30c8\u300d\u3068\u300c\u52d5\u7684\u914d\u5217\u300d\u3092\u540c\u7fa9\u306e\u6982\u5ff5\u3068\u3057\u3066\u6271\u3044\u307e\u3059\u3002

"},{"location":"chapter_array_and_linkedlist/list/#431","title":"4.3.1 \u00a0 \u30ea\u30b9\u30c8\u306e\u4e00\u822c\u7684\u306a\u64cd\u4f5c","text":""},{"location":"chapter_array_and_linkedlist/list/#1","title":"1. \u00a0 \u30ea\u30b9\u30c8\u306e\u521d\u671f\u5316","text":"

\u901a\u5e38\u3001\u300c\u521d\u671f\u5024\u306a\u3057\u300d\u3068\u300c\u521d\u671f\u5024\u3042\u308a\u300d\u306e2\u3064\u306e\u521d\u671f\u5316\u65b9\u6cd5\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002

PythonC++JavaC#GoSwiftJSTSDartRustCKotlin list.py
# \u30ea\u30b9\u30c8\u3092\u521d\u671f\u5316\n# \u521d\u671f\u5024\u306a\u3057\nnums1: list[int] = []\n# \u521d\u671f\u5024\u3042\u308a\nnums: list[int] = [1, 3, 2, 5, 4]\n
list.cpp
/* \u30ea\u30b9\u30c8\u3092\u521d\u671f\u5316 */\n// \u6ce8\u610f: C++\u3067\u306f\u3001vector\u304c\u3053\u3053\u3067\u8aac\u660e\u3055\u308c\u3066\u3044\u308bnums\u306b\u76f8\u5f53\u3057\u307e\u3059\n// \u521d\u671f\u5024\u306a\u3057\nvector<int> nums1;\n// \u521d\u671f\u5024\u3042\u308a\nvector<int> nums = { 1, 3, 2, 5, 4 };\n
list.java
/* \u30ea\u30b9\u30c8\u3092\u521d\u671f\u5316 */\n// \u521d\u671f\u5024\u306a\u3057\nList<Integer> nums1 = new ArrayList<>();\n// \u521d\u671f\u5024\u3042\u308a\uff08\u8981\u7d20\u578b\u306fint[]\u306e\u30e9\u30c3\u30d1\u30fc\u30af\u30e9\u30b9Integer[]\u3067\u3042\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\uff09\nInteger[] numbers = new Integer[] { 1, 3, 2, 5, 4 };\nList<Integer> nums = new ArrayList<>(Arrays.asList(numbers));\n
list.cs
/* \u30ea\u30b9\u30c8\u3092\u521d\u671f\u5316 */\n// \u521d\u671f\u5024\u306a\u3057\nList<int> nums1 = [];\n// \u521d\u671f\u5024\u3042\u308a\nint[] numbers = [1, 3, 2, 5, 4];\nList<int> nums = [.. numbers];\n
list_test.go
/* \u30ea\u30b9\u30c8\u3092\u521d\u671f\u5316 */\n// \u521d\u671f\u5024\u306a\u3057\nnums1 := []int{}\n// \u521d\u671f\u5024\u3042\u308a\nnums := []int{1, 3, 2, 5, 4}\n
list.swift
/* \u30ea\u30b9\u30c8\u3092\u521d\u671f\u5316 */\n// \u521d\u671f\u5024\u306a\u3057\nlet nums1: [Int] = []\n// \u521d\u671f\u5024\u3042\u308a\nvar nums = [1, 3, 2, 5, 4]\n
list.js
/* \u30ea\u30b9\u30c8\u3092\u521d\u671f\u5316 */\n// \u521d\u671f\u5024\u306a\u3057\nconst nums1 = [];\n// \u521d\u671f\u5024\u3042\u308a\nconst nums = [1, 3, 2, 5, 4];\n
list.ts
/* \u30ea\u30b9\u30c8\u3092\u521d\u671f\u5316 */\n// \u521d\u671f\u5024\u306a\u3057\nconst nums1: number[] = [];\n// \u521d\u671f\u5024\u3042\u308a\nconst nums: number[] = [1, 3, 2, 5, 4];\n
list.dart
/* \u30ea\u30b9\u30c8\u3092\u521d\u671f\u5316 */\n// \u521d\u671f\u5024\u306a\u3057\nList<int> nums1 = [];\n// \u521d\u671f\u5024\u3042\u308a\nList<int> nums = [1, 3, 2, 5, 4];\n
list.rs
/* \u30ea\u30b9\u30c8\u3092\u521d\u671f\u5316 */\n// \u521d\u671f\u5024\u306a\u3057\nlet nums1: Vec<i32> = Vec::new();\n// \u521d\u671f\u5024\u3042\u308a\nlet nums: Vec<i32> = vec![1, 3, 2, 5, 4];\n
list.c
// C\u306f\u7d44\u307f\u8fbc\u307f\u306e\u52d5\u7684\u914d\u5217\u3092\u63d0\u4f9b\u3057\u3066\u3044\u307e\u305b\u3093\n
list.kt
\n
"},{"location":"chapter_array_and_linkedlist/list/#2","title":"2. \u00a0 \u8981\u7d20\u3078\u306e\u30a2\u30af\u30bb\u30b9","text":"

\u30ea\u30b9\u30c8\u306f\u672c\u8cea\u7684\u306b\u914d\u5217\u3067\u3042\u308b\u305f\u3081\u3001\\(O(1)\\)\u6642\u9593\u3067\u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9\u3057\u66f4\u65b0\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u3001\u975e\u5e38\u306b\u52b9\u7387\u7684\u3067\u3059\u3002

PythonC++JavaC#GoSwiftJSTSDartRustCKotlin list.py
# \u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9\nnum: int = nums[1]  # \u30a4\u30f3\u30c7\u30c3\u30af\u30b91\u306e\u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9\n\n# \u8981\u7d20\u3092\u66f4\u65b0\nnums[1] = 0    # \u30a4\u30f3\u30c7\u30c3\u30af\u30b91\u306e\u8981\u7d20\u30920\u306b\u66f4\u65b0\n
list.cpp
/* \u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9 */\nint num = nums[1];  // \u30a4\u30f3\u30c7\u30c3\u30af\u30b91\u306e\u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9\n\n/* \u8981\u7d20\u3092\u66f4\u65b0 */\nnums[1] = 0;  // \u30a4\u30f3\u30c7\u30c3\u30af\u30b91\u306e\u8981\u7d20\u30920\u306b\u66f4\u65b0\n
list.java
/* \u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9 */\nint num = nums.get(1);  // \u30a4\u30f3\u30c7\u30c3\u30af\u30b91\u306e\u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9\n\n/* \u8981\u7d20\u3092\u66f4\u65b0 */\nnums.set(1, 0);  // \u30a4\u30f3\u30c7\u30c3\u30af\u30b91\u306e\u8981\u7d20\u30920\u306b\u66f4\u65b0\n
list.cs
/* \u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9 */\nint num = nums[1];  // \u30a4\u30f3\u30c7\u30c3\u30af\u30b91\u306e\u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9\n\n/* \u8981\u7d20\u3092\u66f4\u65b0 */\nnums[1] = 0;  // \u30a4\u30f3\u30c7\u30c3\u30af\u30b91\u306e\u8981\u7d20\u30920\u306b\u66f4\u65b0\n
list_test.go
/* \u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9 */\nnum := nums[1]  // \u30a4\u30f3\u30c7\u30c3\u30af\u30b91\u306e\u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9\n\n/* \u8981\u7d20\u3092\u66f4\u65b0 */\nnums[1] = 0     // \u30a4\u30f3\u30c7\u30c3\u30af\u30b91\u306e\u8981\u7d20\u30920\u306b\u66f4\u65b0\n
list.swift
/* \u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9 */\nlet num = nums[1] // \u30a4\u30f3\u30c7\u30c3\u30af\u30b91\u306e\u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9\n\n/* \u8981\u7d20\u3092\u66f4\u65b0 */\nnums[1] = 0 // \u30a4\u30f3\u30c7\u30c3\u30af\u30b91\u306e\u8981\u7d20\u30920\u306b\u66f4\u65b0\n
list.js
/* \u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9 */\nconst num = nums[1];  // \u30a4\u30f3\u30c7\u30c3\u30af\u30b91\u306e\u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9\n\n/* \u8981\u7d20\u3092\u66f4\u65b0 */\nnums[1] = 0;  // \u30a4\u30f3\u30c7\u30c3\u30af\u30b91\u306e\u8981\u7d20\u30920\u306b\u66f4\u65b0\n
list.ts
/* \u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9 */\nconst num: number = nums[1];  // \u30a4\u30f3\u30c7\u30c3\u30af\u30b91\u306e\u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9\n\n/* \u8981\u7d20\u3092\u66f4\u65b0 */\nnums[1] = 0;  // \u30a4\u30f3\u30c7\u30c3\u30af\u30b91\u306e\u8981\u7d20\u30920\u306b\u66f4\u65b0\n
list.dart
/* \u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9 */\nint num = nums[1];  // \u30a4\u30f3\u30c7\u30c3\u30af\u30b91\u306e\u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9\n\n/* \u8981\u7d20\u3092\u66f4\u65b0 */\nnums[1] = 0;  // \u30a4\u30f3\u30c7\u30c3\u30af\u30b91\u306e\u8981\u7d20\u30920\u306b\u66f4\u65b0\n
list.rs
/* \u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9 */\nlet num: i32 = nums[1];  // \u30a4\u30f3\u30c7\u30c3\u30af\u30b91\u306e\u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9\n/* \u8981\u7d20\u3092\u66f4\u65b0 */\nnums[1] = 0;             // \u30a4\u30f3\u30c7\u30c3\u30af\u30b91\u306e\u8981\u7d20\u30920\u306b\u66f4\u65b0\n
list.c
// C\u306f\u7d44\u307f\u8fbc\u307f\u306e\u52d5\u7684\u914d\u5217\u3092\u63d0\u4f9b\u3057\u3066\u3044\u307e\u305b\u3093\n
list.kt
\n
"},{"location":"chapter_array_and_linkedlist/list/#3","title":"3. \u00a0 \u8981\u7d20\u306e\u633f\u5165\u3068\u524a\u9664","text":"

\u914d\u5217\u3068\u6bd4\u8f03\u3057\u3066\u3001\u30ea\u30b9\u30c8\u306f\u8981\u7d20\u306e\u8ffd\u52a0\u3068\u524a\u9664\u306b\u304a\u3044\u3066\u3088\u308a\u67d4\u8edf\u6027\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002\u30ea\u30b9\u30c8\u306e\u672b\u5c3e\u3078\u306e\u8981\u7d20\u8ffd\u52a0\u306f\\(O(1)\\)\u64cd\u4f5c\u3067\u3059\u304c\u3001\u30ea\u30b9\u30c8\u306e\u4ed6\u306e\u5834\u6240\u3067\u306e\u8981\u7d20\u306e\u633f\u5165\u3068\u524a\u9664\u306e\u52b9\u7387\u306f\u914d\u5217\u3068\u540c\u3058\u307e\u307e\u3067\u3001\u6642\u9593\u8a08\u7b97\u91cf\u306f\\(O(n)\\)\u3067\u3059\u3002

PythonC++JavaC#GoSwiftJSTSDartRustCKotlin list.py
# \u30ea\u30b9\u30c8\u3092\u30af\u30ea\u30a2\nnums.clear()\n\n# \u672b\u5c3e\u306b\u8981\u7d20\u3092\u8ffd\u52a0\nnums.append(1)\nnums.append(3)\nnums.append(2)\nnums.append(5)\nnums.append(4)\n\n# \u4e2d\u9593\u306b\u8981\u7d20\u3092\u633f\u5165\nnums.insert(3, 6)  # \u30a4\u30f3\u30c7\u30c3\u30af\u30b93\u306b\u6570\u50246\u3092\u633f\u5165\n\n# \u8981\u7d20\u3092\u524a\u9664\nnums.pop(3)        # \u30a4\u30f3\u30c7\u30c3\u30af\u30b93\u306e\u8981\u7d20\u3092\u524a\u9664\n
list.cpp
/* \u30ea\u30b9\u30c8\u3092\u30af\u30ea\u30a2 */\nnums.clear();\n\n/* \u672b\u5c3e\u306b\u8981\u7d20\u3092\u8ffd\u52a0 */\nnums.push_back(1);\nnums.push_back(3);\nnums.push_back(2);\nnums.push_back(5);\nnums.push_back(4);\n\n/* \u4e2d\u9593\u306b\u8981\u7d20\u3092\u633f\u5165 */\nnums.insert(nums.begin() + 3, 6);  // \u30a4\u30f3\u30c7\u30c3\u30af\u30b93\u306b\u6570\u50246\u3092\u633f\u5165\n\n/* \u8981\u7d20\u3092\u524a\u9664 */\nnums.erase(nums.begin() + 3);      // \u30a4\u30f3\u30c7\u30c3\u30af\u30b93\u306e\u8981\u7d20\u3092\u524a\u9664\n
list.java
/* \u30ea\u30b9\u30c8\u3092\u30af\u30ea\u30a2 */\nnums.clear();\n\n/* \u672b\u5c3e\u306b\u8981\u7d20\u3092\u8ffd\u52a0 */\nnums.add(1);\nnums.add(3);\nnums.add(2);\nnums.add(5);\nnums.add(4);\n\n/* \u4e2d\u9593\u306b\u8981\u7d20\u3092\u633f\u5165 */\nnums.add(3, 6);  // \u30a4\u30f3\u30c7\u30c3\u30af\u30b93\u306b\u6570\u50246\u3092\u633f\u5165\n\n/* \u8981\u7d20\u3092\u524a\u9664 */\nnums.remove(3);  // \u30a4\u30f3\u30c7\u30c3\u30af\u30b93\u306e\u8981\u7d20\u3092\u524a\u9664\n
list.cs
/* \u30ea\u30b9\u30c8\u3092\u30af\u30ea\u30a2 */\nnums.Clear();\n\n/* \u672b\u5c3e\u306b\u8981\u7d20\u3092\u8ffd\u52a0 */\nnums.Add(1);\nnums.Add(3);\nnums.Add(2);\nnums.Add(5);\nnums.Add(4);\n\n/* \u4e2d\u9593\u306b\u8981\u7d20\u3092\u633f\u5165 */\nnums.Insert(3, 6);\n\n/* \u8981\u7d20\u3092\u524a\u9664 */\nnums.RemoveAt(3);\n
list_test.go
/* \u30ea\u30b9\u30c8\u3092\u30af\u30ea\u30a2 */\nnums = nil\n\n/* \u672b\u5c3e\u306b\u8981\u7d20\u3092\u8ffd\u52a0 */\nnums = append(nums, 1)\nnums = append(nums, 3)\nnums = append(nums, 2)\nnums = append(nums, 5)\nnums = append(nums, 4)\n\n/* \u4e2d\u9593\u306b\u8981\u7d20\u3092\u633f\u5165 */\nnums = append(nums[:3], append([]int{6}, nums[3:]...)...) // \u30a4\u30f3\u30c7\u30c3\u30af\u30b93\u306b\u6570\u50246\u3092\u633f\u5165\n\n/* \u8981\u7d20\u3092\u524a\u9664 */\nnums = append(nums[:3], nums[4:]...) // \u30a4\u30f3\u30c7\u30c3\u30af\u30b93\u306e\u8981\u7d20\u3092\u524a\u9664\n
list.swift
/* \u30ea\u30b9\u30c8\u3092\u30af\u30ea\u30a2 */\nnums.removeAll()\n\n/* \u672b\u5c3e\u306b\u8981\u7d20\u3092\u8ffd\u52a0 */\nnums.append(1)\nnums.append(3)\nnums.append(2)\nnums.append(5)\nnums.append(4)\n\n/* \u4e2d\u9593\u306b\u8981\u7d20\u3092\u633f\u5165 */\nnums.insert(6, at: 3) // \u30a4\u30f3\u30c7\u30c3\u30af\u30b93\u306b\u6570\u50246\u3092\u633f\u5165\n\n/* \u8981\u7d20\u3092\u524a\u9664 */\nnums.remove(at: 3) // \u30a4\u30f3\u30c7\u30c3\u30af\u30b93\u306e\u8981\u7d20\u3092\u524a\u9664\n
list.js
/* \u30ea\u30b9\u30c8\u3092\u30af\u30ea\u30a2 */\nnums.length = 0;\n\n/* \u672b\u5c3e\u306b\u8981\u7d20\u3092\u8ffd\u52a0 */\nnums.push(1);\nnums.push(3);\nnums.push(2);\nnums.push(5);\nnums.push(4);\n\n/* \u4e2d\u9593\u306b\u8981\u7d20\u3092\u633f\u5165 */\nnums.splice(3, 0, 6);\n\n/* \u8981\u7d20\u3092\u524a\u9664 */\nnums.splice(3, 1);\n
list.ts
/* \u30ea\u30b9\u30c8\u3092\u30af\u30ea\u30a2 */\nnums.length = 0;\n\n/* \u672b\u5c3e\u306b\u8981\u7d20\u3092\u8ffd\u52a0 */\nnums.push(1);\nnums.push(3);\nnums.push(2);\nnums.push(5);\nnums.push(4);\n\n/* \u4e2d\u9593\u306b\u8981\u7d20\u3092\u633f\u5165 */\nnums.splice(3, 0, 6);\n\n/* \u8981\u7d20\u3092\u524a\u9664 */\nnums.splice(3, 1);\n
list.dart
/* \u30ea\u30b9\u30c8\u3092\u30af\u30ea\u30a2 */\nnums.clear();\n\n/* \u672b\u5c3e\u306b\u8981\u7d20\u3092\u8ffd\u52a0 */\nnums.add(1);\nnums.add(3);\nnums.add(2);\nnums.add(5);\nnums.add(4);\n\n/* \u4e2d\u9593\u306b\u8981\u7d20\u3092\u633f\u5165 */\nnums.insert(3, 6); // \u30a4\u30f3\u30c7\u30c3\u30af\u30b93\u306b\u6570\u50246\u3092\u633f\u5165\n\n/* \u8981\u7d20\u3092\u524a\u9664 */\nnums.removeAt(3); // \u30a4\u30f3\u30c7\u30c3\u30af\u30b93\u306e\u8981\u7d20\u3092\u524a\u9664\n
list.rs
/* \u30ea\u30b9\u30c8\u3092\u30af\u30ea\u30a2 */\nnums.clear();\n\n/* \u672b\u5c3e\u306b\u8981\u7d20\u3092\u8ffd\u52a0 */\nnums.push(1);\nnums.push(3);\nnums.push(2);\nnums.push(5);\nnums.push(4);\n\n/* \u4e2d\u9593\u306b\u8981\u7d20\u3092\u633f\u5165 */\nnums.insert(3, 6);  // \u30a4\u30f3\u30c7\u30c3\u30af\u30b93\u306b\u6570\u50246\u3092\u633f\u5165\n\n/* \u8981\u7d20\u3092\u524a\u9664 */\nnums.remove(3);    // \u30a4\u30f3\u30c7\u30c3\u30af\u30b93\u306e\u8981\u7d20\u3092\u524a\u9664\n
list.c
// C\u306f\u7d44\u307f\u8fbc\u307f\u306e\u52d5\u7684\u914d\u5217\u3092\u63d0\u4f9b\u3057\u3066\u3044\u307e\u305b\u3093\n
list.kt
\n
"},{"location":"chapter_array_and_linkedlist/list/#4","title":"4. \u00a0 \u30ea\u30b9\u30c8\u306e\u53cd\u5fa9","text":"

\u914d\u5217\u3068\u540c\u69d8\u306b\u3001\u30ea\u30b9\u30c8\u306f\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u4f7f\u7528\u3057\u3066\u53cd\u5fa9\u3059\u308b\u3053\u3068\u3082\u3001\u5404\u8981\u7d20\u3092\u76f4\u63a5\u53cd\u5fa9\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002

PythonC++JavaC#GoSwiftJSTSDartRustCKotlin list.py
# \u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3067\u30ea\u30b9\u30c8\u3092\u53cd\u5fa9\ncount = 0\nfor i in range(len(nums)):\n    count += nums[i]\n\n# \u30ea\u30b9\u30c8\u8981\u7d20\u3092\u76f4\u63a5\u53cd\u5fa9\nfor num in nums:\n    count += num\n
list.cpp
/* \u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3067\u30ea\u30b9\u30c8\u3092\u53cd\u5fa9 */\nint count = 0;\nfor (int i = 0; i < nums.size(); i++) {\n    count += nums[i];\n}\n\n/* \u30ea\u30b9\u30c8\u8981\u7d20\u3092\u76f4\u63a5\u53cd\u5fa9 */\ncount = 0;\nfor (int num : nums) {\n    count += num;\n}\n
list.java
/* \u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3067\u30ea\u30b9\u30c8\u3092\u53cd\u5fa9 */\nint count = 0;\nfor (int i = 0; i < nums.size(); i++) {\n    count += nums.get(i);\n}\n\n/* \u30ea\u30b9\u30c8\u8981\u7d20\u3092\u76f4\u63a5\u53cd\u5fa9 */\nfor (int num : nums) {\n    count += num;\n}\n
list.cs
/* \u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3067\u30ea\u30b9\u30c8\u3092\u53cd\u5fa9 */\nint count = 0;\nfor (int i = 0; i < nums.Count; i++) {\n    count += nums[i];\n}\n\n/* \u30ea\u30b9\u30c8\u8981\u7d20\u3092\u76f4\u63a5\u53cd\u5fa9 */\ncount = 0;\nforeach (int num in nums) {\n    count += num;\n}\n
list_test.go
/* \u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3067\u30ea\u30b9\u30c8\u3092\u53cd\u5fa9 */\ncount := 0\nfor i := 0; i < len(nums); i++ {\n    count += nums[i]\n}\n\n/* \u30ea\u30b9\u30c8\u8981\u7d20\u3092\u76f4\u63a5\u53cd\u5fa9 */\ncount = 0\nfor _, num := range nums {\n    count += num\n}\n
list.swift
/* \u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3067\u30ea\u30b9\u30c8\u3092\u53cd\u5fa9 */\nvar count = 0\nfor i in nums.indices {\n    count += nums[i]\n}\n\n/* \u30ea\u30b9\u30c8\u8981\u7d20\u3092\u76f4\u63a5\u53cd\u5fa9 */\ncount = 0\nfor num in nums {\n    count += num\n}\n
list.js
/* \u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3067\u30ea\u30b9\u30c8\u3092\u53cd\u5fa9 */\nlet count = 0;\nfor (let i = 0; i < nums.length; i++) {\n    count += nums[i];\n}\n\n/* \u30ea\u30b9\u30c8\u8981\u7d20\u3092\u76f4\u63a5\u53cd\u5fa9 */\ncount = 0;\nfor (const num of nums) {\n    count += num;\n}\n
list.ts
/* \u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3067\u30ea\u30b9\u30c8\u3092\u53cd\u5fa9 */\nlet count = 0;\nfor (let i = 0; i < nums.length; i++) {\n    count += nums[i];\n}\n\n/* \u30ea\u30b9\u30c8\u8981\u7d20\u3092\u76f4\u63a5\u53cd\u5fa9 */\ncount = 0;\nfor (const num of nums) {\n    count += num;\n}\n
list.dart
/* \u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3067\u30ea\u30b9\u30c8\u3092\u53cd\u5fa9 */\nint count = 0;\nfor (var i = 0; i < nums.length; i++) {\n    count += nums[i];\n}\n\n/* \u30ea\u30b9\u30c8\u8981\u7d20\u3092\u76f4\u63a5\u53cd\u5fa9 */\ncount = 0;\nfor (var num in nums) {\n    count += num;\n}\n
list.rs
// \u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3067\u30ea\u30b9\u30c8\u3092\u53cd\u5fa9\nlet mut _count = 0;\nfor i in 0..nums.len() {\n    _count += nums[i];\n}\n\n// \u30ea\u30b9\u30c8\u8981\u7d20\u3092\u76f4\u63a5\u53cd\u5fa9\n_count = 0;\nfor num in &nums {\n    _count += num;\n}\n
list.c
// C\u306f\u7d44\u307f\u8fbc\u307f\u306e\u52d5\u7684\u914d\u5217\u3092\u63d0\u4f9b\u3057\u3066\u3044\u307e\u305b\u3093\n
list.kt
\n
"},{"location":"chapter_array_and_linkedlist/list/#5","title":"5. \u00a0 \u30ea\u30b9\u30c8\u306e\u9023\u7d50","text":"

\u65b0\u3057\u3044\u30ea\u30b9\u30c8nums1\u304c\u4e0e\u3048\u3089\u308c\u305f\u3068\u304d\u3001\u305d\u308c\u3092\u5143\u306e\u30ea\u30b9\u30c8\u306e\u672b\u5c3e\u306b\u8ffd\u52a0\u3067\u304d\u307e\u3059\u3002

PythonC++JavaC#GoSwiftJSTSDartRustCKotlin list.py
# 2\u3064\u306e\u30ea\u30b9\u30c8\u3092\u9023\u7d50\nnums1: list[int] = [6, 8, 7, 10, 9]\nnums += nums1  # nums1\u3092nums\u306e\u672b\u5c3e\u306b\u9023\u7d50\n
list.cpp
/* 2\u3064\u306e\u30ea\u30b9\u30c8\u3092\u9023\u7d50 */\nvector<int> nums1 = { 6, 8, 7, 10, 9 };\n// nums1\u3092nums\u306e\u672b\u5c3e\u306b\u9023\u7d50\nnums.insert(nums.end(), nums1.begin(), nums1.end());\n
list.java
/* 2\u3064\u306e\u30ea\u30b9\u30c8\u3092\u9023\u7d50 */\nList<Integer> nums1 = new ArrayList<>(Arrays.asList(new Integer[] { 6, 8, 7, 10, 9 }));\nnums.addAll(nums1);  // nums1\u3092nums\u306e\u672b\u5c3e\u306b\u9023\u7d50\n
list.cs
/* 2\u3064\u306e\u30ea\u30b9\u30c8\u3092\u9023\u7d50 */\nList<int> nums1 = [6, 8, 7, 10, 9];\nnums.AddRange(nums1);  // nums1\u3092nums\u306e\u672b\u5c3e\u306b\u9023\u7d50\n
list_test.go
/* 2\u3064\u306e\u30ea\u30b9\u30c8\u3092\u9023\u7d50 */\nnums1 := []int{6, 8, 7, 10, 9}\nnums = append(nums, nums1...)  // nums1\u3092nums\u306e\u672b\u5c3e\u306b\u9023\u7d50\n
list.swift
/* 2\u3064\u306e\u30ea\u30b9\u30c8\u3092\u9023\u7d50 */\nlet nums1 = [6, 8, 7, 10, 9]\nnums.append(contentsOf: nums1) // nums1\u3092nums\u306e\u672b\u5c3e\u306b\u9023\u7d50\n
list.js
/* 2\u3064\u306e\u30ea\u30b9\u30c8\u3092\u9023\u7d50 */\nconst nums1 = [6, 8, 7, 10, 9];\nnums.push(...nums1);  // nums1\u3092nums\u306e\u672b\u5c3e\u306b\u9023\u7d50\n
list.ts
/* 2\u3064\u306e\u30ea\u30b9\u30c8\u3092\u9023\u7d50 */\nconst nums1: number[] = [6, 8, 7, 10, 9];\nnums.push(...nums1);  // nums1\u3092nums\u306e\u672b\u5c3e\u306b\u9023\u7d50\n
list.dart
/* 2\u3064\u306e\u30ea\u30b9\u30c8\u3092\u9023\u7d50 */\nList<int> nums1 = [6, 8, 7, 10, 9];\nnums.addAll(nums1);  // nums1\u3092nums\u306e\u672b\u5c3e\u306b\u9023\u7d50\n
list.rs
/* 2\u3064\u306e\u30ea\u30b9\u30c8\u3092\u9023\u7d50 */\nlet nums1: Vec<i32> = vec![6, 8, 7, 10, 9];\nnums.extend(nums1);\n
list.c
// C\u306f\u7d44\u307f\u8fbc\u307f\u306e\u52d5\u7684\u914d\u5217\u3092\u63d0\u4f9b\u3057\u3066\u3044\u307e\u305b\u3093\n
list.kt
\n
"},{"location":"chapter_array_and_linkedlist/list/#6","title":"6. \u00a0 \u30ea\u30b9\u30c8\u306e\u30bd\u30fc\u30c8","text":"

\u30ea\u30b9\u30c8\u304c\u30bd\u30fc\u30c8\u3055\u308c\u308b\u3068\u3001\u300c\u4e8c\u5206\u63a2\u7d22\u300d\u3084\u300c\u53cc\u30dd\u30a4\u30f3\u30bf\u300d\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306a\u3069\u3001\u914d\u5217\u95a2\u9023\u306e\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u554f\u984c\u3067\u3088\u304f\u4f7f\u7528\u3055\u308c\u308b\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3092\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002

PythonC++JavaC#GoSwiftJSTSDartRustCKotlin list.py
# \u30ea\u30b9\u30c8\u3092\u30bd\u30fc\u30c8\nnums.sort()  # \u30bd\u30fc\u30c8\u5f8c\u3001\u30ea\u30b9\u30c8\u8981\u7d20\u306f\u6607\u9806\u306b\u306a\u308a\u307e\u3059\n
list.cpp
/* \u30ea\u30b9\u30c8\u3092\u30bd\u30fc\u30c8 */\nsort(nums.begin(), nums.end());  // \u30bd\u30fc\u30c8\u5f8c\u3001\u30ea\u30b9\u30c8\u8981\u7d20\u306f\u6607\u9806\u306b\u306a\u308a\u307e\u3059\n
list.java
/* \u30ea\u30b9\u30c8\u3092\u30bd\u30fc\u30c8 */\nCollections.sort(nums);  // \u30bd\u30fc\u30c8\u5f8c\u3001\u30ea\u30b9\u30c8\u8981\u7d20\u306f\u6607\u9806\u306b\u306a\u308a\u307e\u3059\n
list.cs
/* \u30ea\u30b9\u30c8\u3092\u30bd\u30fc\u30c8 */\nnums.Sort(); // \u30bd\u30fc\u30c8\u5f8c\u3001\u30ea\u30b9\u30c8\u8981\u7d20\u306f\u6607\u9806\u306b\u306a\u308a\u307e\u3059\n
list_test.go
/* \u30ea\u30b9\u30c8\u3092\u30bd\u30fc\u30c8 */\nsort.Ints(nums)  // \u30bd\u30fc\u30c8\u5f8c\u3001\u30ea\u30b9\u30c8\u8981\u7d20\u306f\u6607\u9806\u306b\u306a\u308a\u307e\u3059\n
list.swift
/* \u30ea\u30b9\u30c8\u3092\u30bd\u30fc\u30c8 */\nnums.sort() // \u30bd\u30fc\u30c8\u5f8c\u3001\u30ea\u30b9\u30c8\u8981\u7d20\u306f\u6607\u9806\u306b\u306a\u308a\u307e\u3059\n
list.js
/* \u30ea\u30b9\u30c8\u3092\u30bd\u30fc\u30c8 */\nnums.sort((a, b) => a - b);  // \u30bd\u30fc\u30c8\u5f8c\u3001\u30ea\u30b9\u30c8\u8981\u7d20\u306f\u6607\u9806\u306b\u306a\u308a\u307e\u3059\n
list.ts
/* \u30ea\u30b9\u30c8\u3092\u30bd\u30fc\u30c8 */\nnums.sort((a, b) => a - b);  // \u30bd\u30fc\u30c8\u5f8c\u3001\u30ea\u30b9\u30c8\u8981\u7d20\u306f\u6607\u9806\u306b\u306a\u308a\u307e\u3059\n
list.dart
/* \u30ea\u30b9\u30c8\u3092\u30bd\u30fc\u30c8 */\nnums.sort(); // \u30bd\u30fc\u30c8\u5f8c\u3001\u30ea\u30b9\u30c8\u8981\u7d20\u306f\u6607\u9806\u306b\u306a\u308a\u307e\u3059\n
list.rs
/* \u30ea\u30b9\u30c8\u3092\u30bd\u30fc\u30c8 */\nnums.sort(); // \u30bd\u30fc\u30c8\u5f8c\u3001\u30ea\u30b9\u30c8\u8981\u7d20\u306f\u6607\u9806\u306b\u306a\u308a\u307e\u3059\n
list.c
// C\u306f\u7d44\u307f\u8fbc\u307f\u306e\u52d5\u7684\u914d\u5217\u3092\u63d0\u4f9b\u3057\u3066\u3044\u307e\u305b\u3093\n
list.kt
\n
"},{"location":"chapter_array_and_linkedlist/list/#432","title":"4.3.2 \u00a0 \u30ea\u30b9\u30c8\u306e\u5b9f\u88c5","text":"

\u591a\u304f\u306e\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\u306b\u306f\u3001Java\u3001C++\u3001Python\u306a\u3069\u3092\u542b\u3080\u7d44\u307f\u8fbc\u307f\u30ea\u30b9\u30c8\u304c\u4ed8\u5c5e\u3057\u3066\u3044\u307e\u3059\u3002\u305d\u308c\u3089\u306e\u5b9f\u88c5\u306f\u3001\u521d\u671f\u5bb9\u91cf\u3084\u62e1\u5f35\u4fc2\u6570\u306a\u3069\u306e\u69d8\u3005\u306a\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u614e\u91cd\u306b\u8003\u616e\u3057\u305f\u8a2d\u5b9a\u3067\u3001\u8907\u96d1\u306b\u306a\u308a\u304c\u3061\u3067\u3059\u3002\u8208\u5473\u306e\u3042\u308b\u8aad\u8005\u306f\u3001\u3055\u3089\u306a\u308b\u5b66\u7fd2\u306e\u305f\u3081\u306b\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u3092\u8abf\u3079\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

\u30ea\u30b9\u30c8\u304c\u3069\u306e\u3088\u3046\u306b\u52d5\u4f5c\u3059\u308b\u304b\u306e\u7406\u89e3\u3092\u6df1\u3081\u308b\u305f\u3081\u306b\u30013\u3064\u306e\u91cd\u8981\u306a\u8a2d\u8a08\u5074\u9762\u306b\u7126\u70b9\u3092\u5f53\u3066\u3066\u3001\u7c21\u7565\u5316\u3055\u308c\u305f\u30ea\u30b9\u30c8\u306e\u5b9f\u88c5\u3092\u8a66\u307f\u307e\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby my_list.py
class MyList:\n    \"\"\"\u30ea\u30b9\u30c8\u30af\u30e9\u30b9\"\"\"\n\n    def __init__(self):\n        \"\"\"\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\"\"\"\n        self._capacity: int = 10  # \u30ea\u30b9\u30c8\u306e\u5bb9\u91cf\n        self._arr: list[int] = [0] * self._capacity  # \u914d\u5217\uff08\u30ea\u30b9\u30c8\u8981\u7d20\u3092\u683c\u7d0d\uff09\n        self._size: int = 0  # \u30ea\u30b9\u30c8\u306e\u9577\u3055\uff08\u73fe\u5728\u306e\u8981\u7d20\u6570\uff09\n        self._extend_ratio: int = 2  # \u5404\u30ea\u30b9\u30c8\u62e1\u5f35\u306e\u500d\u6570\n\n    def size(self) -> int:\n        \"\"\"\u30ea\u30b9\u30c8\u306e\u9577\u3055\uff08\u73fe\u5728\u306e\u8981\u7d20\u6570\uff09\u3092\u53d6\u5f97\"\"\"\n        return self._size\n\n    def capacity(self) -> int:\n        \"\"\"\u30ea\u30b9\u30c8\u306e\u5bb9\u91cf\u3092\u53d6\u5f97\"\"\"\n        return self._capacity\n\n    def get(self, index: int) -> int:\n        \"\"\"\u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9\"\"\"\n        # \u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u304c\u7bc4\u56f2\u5916\u306e\u5834\u5408\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u4f8b\u5916\u3092\u30b9\u30ed\u30fc\n        if index < 0 or index >= self._size:\n            raise IndexError(\"Index out of bounds\")\n        return self._arr[index]\n\n    def set(self, num: int, index: int):\n        \"\"\"\u8981\u7d20\u3092\u66f4\u65b0\"\"\"\n        if index < 0 or index >= self._size:\n            raise IndexError(\"Index out of bounds\")\n        self._arr[index] = num\n\n    def add(self, num: int):\n        \"\"\"\u672b\u5c3e\u306b\u8981\u7d20\u3092\u8ffd\u52a0\"\"\"\n        # \u8981\u7d20\u6570\u304c\u5bb9\u91cf\u3092\u8d85\u3048\u308b\u5834\u5408\u3001\u62e1\u5f35\u30e1\u30ab\u30cb\u30ba\u30e0\u3092\u30c8\u30ea\u30ac\u30fc\n        if self.size() == self.capacity():\n            self.extend_capacity()\n        self._arr[self._size] = num\n        self._size += 1\n\n    def insert(self, num: int, index: int):\n        \"\"\"\u4e2d\u9593\u306b\u8981\u7d20\u3092\u633f\u5165\"\"\"\n        if index < 0 or index >= self._size:\n            raise IndexError(\"Index out of bounds\")\n        # \u8981\u7d20\u6570\u304c\u5bb9\u91cf\u3092\u8d85\u3048\u308b\u5834\u5408\u3001\u62e1\u5f35\u30e1\u30ab\u30cb\u30ba\u30e0\u3092\u30c8\u30ea\u30ac\u30fc\n        if self._size == self.capacity():\n            self.extend_capacity()\n        # \u30a4\u30f3\u30c7\u30c3\u30af\u30b9 index \u3088\u308a\u5f8c\u306e\u3059\u3079\u3066\u306e\u8981\u7d20\u30921\u3064\u5f8c\u308d\u306b\u79fb\u52d5\n        for j in range(self._size - 1, index - 1, -1):\n            self._arr[j + 1] = self._arr[j]\n        self._arr[index] = num\n        # \u8981\u7d20\u6570\u3092\u66f4\u65b0\n        self._size += 1\n\n    def remove(self, index: int) -> int:\n        \"\"\"\u8981\u7d20\u3092\u524a\u9664\"\"\"\n        if index < 0 or index >= self._size:\n            raise IndexError(\"Index out of bounds\")\n        num = self._arr[index]\n        # \u30a4\u30f3\u30c7\u30c3\u30af\u30b9 index \u3088\u308a\u5f8c\u306e\u3059\u3079\u3066\u306e\u8981\u7d20\u30921\u3064\u524d\u306b\u79fb\u52d5\n        for j in range(index, self._size - 1):\n            self._arr[j] = self._arr[j + 1]\n        # \u8981\u7d20\u6570\u3092\u66f4\u65b0\n        self._size -= 1\n        # \u524a\u9664\u3055\u308c\u305f\u8981\u7d20\u3092\u8fd4\u3059\n        return num\n\n    def extend_capacity(self):\n        \"\"\"\u30ea\u30b9\u30c8\u3092\u62e1\u5f35\"\"\"\n        # \u5143\u306e\u914d\u5217\u306e _extend_ratio \u500d\u306e\u9577\u3055\u306e\u65b0\u3057\u3044\u914d\u5217\u3092\u4f5c\u6210\u3057\u3001\u5143\u306e\u914d\u5217\u3092\u65b0\u3057\u3044\u914d\u5217\u306b\u30b3\u30d4\u30fc\n        self._arr = self._arr + [0] * self.capacity() * (self._extend_ratio - 1)\n        # \u30ea\u30b9\u30c8\u306e\u5bb9\u91cf\u3092\u66f4\u65b0\n        self._capacity = len(self._arr)\n\n    def to_array(self) -> list[int]:\n        \"\"\"\u6709\u52b9\u306a\u9577\u3055\u306e\u30ea\u30b9\u30c8\u3092\u8fd4\u3059\"\"\"\n        return self._arr[: self._size]\n
my_list.cpp
/* \u30ea\u30b9\u30c8\u30af\u30e9\u30b9 */\nclass MyList {\n  private:\n    int *arr;             // \u914d\u5217\uff08\u30ea\u30b9\u30c8\u8981\u7d20\u3092\u683c\u7d0d\uff09\n    int arrCapacity = 10; // \u30ea\u30b9\u30c8\u306e\u5bb9\u91cf\n    int arrSize = 0;      // \u30ea\u30b9\u30c8\u306e\u9577\u3055\uff08\u73fe\u5728\u306e\u8981\u7d20\u6570\uff09\n    int extendRatio = 2;   // \u30ea\u30b9\u30c8\u62e1\u5f35\u6642\u306e\u500d\u7387\n\n  public:\n    /* \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf */\n    MyList() {\n        arr = new int[arrCapacity];\n    }\n\n    /* \u30c7\u30b9\u30c8\u30e9\u30af\u30bf */\n    ~MyList() {\n        delete[] arr;\n    }\n\n    /* \u30ea\u30b9\u30c8\u306e\u9577\u3055\u3092\u53d6\u5f97\uff08\u73fe\u5728\u306e\u8981\u7d20\u6570\uff09*/\n    int size() {\n        return arrSize;\n    }\n\n    /* \u30ea\u30b9\u30c8\u306e\u5bb9\u91cf\u3092\u53d6\u5f97 */\n    int capacity() {\n        return arrCapacity;\n    }\n\n    /* \u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9 */\n    int get(int index) {\n        // \u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u304c\u7bc4\u56f2\u5916\u306e\u5834\u5408\u3001\u4f8b\u5916\u3092\u30b9\u30ed\u30fc\uff08\u4ee5\u4e0b\u540c\u69d8\uff09\n        if (index < 0 || index >= size())\n            throw out_of_range(\"Index out of bounds\");\n        return arr[index];\n    }\n\n    /* \u8981\u7d20\u3092\u66f4\u65b0 */\n    void set(int index, int num) {\n        if (index < 0 || index >= size())\n            throw out_of_range(\"Index out of bounds\");\n        arr[index] = num;\n    }\n\n    /* \u672b\u5c3e\u306b\u8981\u7d20\u3092\u8ffd\u52a0 */\n    void add(int num) {\n        // \u8981\u7d20\u6570\u304c\u5bb9\u91cf\u3092\u8d85\u3048\u305f\u5834\u5408\u3001\u62e1\u5f35\u30e1\u30ab\u30cb\u30ba\u30e0\u3092\u30c8\u30ea\u30ac\u30fc\n        if (size() == capacity())\n            extendCapacity();\n        arr[size()] = num;\n        // \u8981\u7d20\u6570\u3092\u66f4\u65b0\n        arrSize++;\n    }\n\n    /* \u4e2d\u9593\u306b\u8981\u7d20\u3092\u633f\u5165 */\n    void insert(int index, int num) {\n        if (index < 0 || index >= size())\n            throw out_of_range(\"Index out of bounds\");\n        // \u8981\u7d20\u6570\u304c\u5bb9\u91cf\u3092\u8d85\u3048\u305f\u5834\u5408\u3001\u62e1\u5f35\u30e1\u30ab\u30cb\u30ba\u30e0\u3092\u30c8\u30ea\u30ac\u30fc\n        if (size() == capacity())\n            extendCapacity();\n        // `index`\u3088\u308a\u5f8c\u306e\u3059\u3079\u3066\u306e\u8981\u7d20\u30921\u3064\u5f8c\u308d\u306b\u79fb\u52d5\n        for (int j = size() - 1; j >= index; j--) {\n            arr[j + 1] = arr[j];\n        }\n        arr[index] = num;\n        // \u8981\u7d20\u6570\u3092\u66f4\u65b0\n        arrSize++;\n    }\n\n    /* \u8981\u7d20\u3092\u524a\u9664 */\n    int remove(int index) {\n        if (index < 0 || index >= size())\n            throw out_of_range(\"Index out of bounds\");\n        int num = arr[index];\n        // `index`\u3088\u308a\u5f8c\u306e\u3059\u3079\u3066\u306e\u8981\u7d20\u30921\u3064\u524d\u306b\u79fb\u52d5\n        for (int j = index; j < size() - 1; j++) {\n            arr[j] = arr[j + 1];\n        }\n        // \u8981\u7d20\u6570\u3092\u66f4\u65b0\n        arrSize--;\n        // \u524a\u9664\u3055\u308c\u305f\u8981\u7d20\u3092\u8fd4\u5374\n        return num;\n    }\n\n    /* \u30ea\u30b9\u30c8\u3092\u62e1\u5f35 */\n    void extendCapacity() {\n        // \u5143\u306e\u914d\u5217\u306eextendRatio\u500d\u306e\u9577\u3055\u3067\u65b0\u3057\u3044\u914d\u5217\u3092\u4f5c\u6210\n        int newCapacity = capacity() * extendRatio;\n        int *tmp = arr;\n        arr = new int[newCapacity];\n        // \u5143\u306e\u914d\u5217\u306e\u3059\u3079\u3066\u306e\u8981\u7d20\u3092\u65b0\u3057\u3044\u914d\u5217\u306b\u30b3\u30d4\u30fc\n        for (int i = 0; i < size(); i++) {\n            arr[i] = tmp[i];\n        }\n        // \u30e1\u30e2\u30ea\u3092\u89e3\u653e\n        delete[] tmp;\n        arrCapacity = newCapacity;\n    }\n\n    /* \u30ea\u30b9\u30c8\u3092Vector\u306b\u5909\u63db\u3057\u3066\u5370\u5237\u7528\u306b\u4f7f\u7528 */\n    vector<int> toVector() {\n        // \u6709\u52b9\u306a\u9577\u3055\u7bc4\u56f2\u5185\u306e\u8981\u7d20\u306e\u307f\u3092\u5909\u63db\n        vector<int> vec(size());\n        for (int i = 0; i < size(); i++) {\n            vec[i] = arr[i];\n        }\n        return vec;\n    }\n};\n
my_list.java
/* \u30ea\u30b9\u30c8\u30af\u30e9\u30b9 */\nclass MyList {\n    private int[] arr; // \u914d\u5217\uff08\u30ea\u30b9\u30c8\u8981\u7d20\u3092\u683c\u7d0d\uff09\n    private int capacity = 10; // \u30ea\u30b9\u30c8\u5bb9\u91cf\n    private int size = 0; // \u30ea\u30b9\u30c8\u9577\uff08\u73fe\u5728\u306e\u8981\u7d20\u6570\uff09\n    private int extendRatio = 2; // \u30ea\u30b9\u30c8\u306e\u5404\u62e1\u5f35\u500d\u7387\n\n    /* \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf */\n    public MyList() {\n        arr = new int[capacity];\n    }\n\n    /* \u30ea\u30b9\u30c8\u9577\u3092\u53d6\u5f97\uff08\u73fe\u5728\u306e\u8981\u7d20\u6570\uff09 */\n    public int size() {\n        return size;\n    }\n\n    /* \u30ea\u30b9\u30c8\u5bb9\u91cf\u3092\u53d6\u5f97 */\n    public int capacity() {\n        return capacity;\n    }\n\n    /* \u8981\u7d20\u3078\u306e\u30a2\u30af\u30bb\u30b9 */\n    public int get(int index) {\n        // \u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u304c\u7bc4\u56f2\u5916\u306e\u5834\u5408\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u4f8b\u5916\u3092\u30b9\u30ed\u30fc\n        if (index < 0 || index >= size)\n            throw new IndexOutOfBoundsException(\"\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u304c\u7bc4\u56f2\u5916\u3067\u3059\");\n        return arr[index];\n    }\n\n    /* \u8981\u7d20\u306e\u66f4\u65b0 */\n    public void set(int index, int num) {\n        if (index < 0 || index >= size)\n            throw new IndexOutOfBoundsException(\"\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u304c\u7bc4\u56f2\u5916\u3067\u3059\");\n        arr[index] = num;\n    }\n\n    /* \u672b\u5c3e\u306b\u8981\u7d20\u3092\u8ffd\u52a0 */\n    public void add(int num) {\n        // \u8981\u7d20\u6570\u304c\u5bb9\u91cf\u3092\u8d85\u3048\u308b\u5834\u5408\u3001\u62e1\u5f35\u30e1\u30ab\u30cb\u30ba\u30e0\u3092\u5b9f\u884c\n        if (size == capacity())\n            extendCapacity();\n        arr[size] = num;\n        // \u8981\u7d20\u6570\u3092\u66f4\u65b0\n        size++;\n    }\n\n    /* \u4e2d\u9593\u306b\u8981\u7d20\u3092\u633f\u5165 */\n    public void insert(int index, int num) {\n        if (index < 0 || index >= size)\n            throw new IndexOutOfBoundsException(\"\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u304c\u7bc4\u56f2\u5916\u3067\u3059\");\n        // \u8981\u7d20\u6570\u304c\u5bb9\u91cf\u3092\u8d85\u3048\u308b\u5834\u5408\u3001\u62e1\u5f35\u30e1\u30ab\u30cb\u30ba\u30e0\u3092\u5b9f\u884c\n        if (size == capacity())\n            extendCapacity();\n        // `index` \u3088\u308a\u5f8c\u306e\u3059\u3079\u3066\u306e\u8981\u7d20\u30921\u3064\u5f8c\u308d\u306b\u79fb\u52d5\n        for (int j = size - 1; j >= index; j--) {\n            arr[j + 1] = arr[j];\n        }\n        arr[index] = num;\n        // \u8981\u7d20\u6570\u3092\u66f4\u65b0\n        size++;\n    }\n\n    /* \u8981\u7d20\u306e\u524a\u9664 */\n    public int remove(int index) {\n        if (index < 0 || index >= size)\n            throw new IndexOutOfBoundsException(\"\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u304c\u7bc4\u56f2\u5916\u3067\u3059\");\n        int num = arr[index];\n        // `index` \u3088\u308a\u5f8c\u306e\u3059\u3079\u3066\u306e\u8981\u7d20\u30921\u3064\u524d\u306b\u79fb\u52d5\n        for (int j = index; j < size - 1; j++) {\n            arr[j] = arr[j + 1];\n        }\n        // \u8981\u7d20\u6570\u3092\u66f4\u65b0\n        size--;\n        // \u524a\u9664\u3055\u308c\u305f\u8981\u7d20\u3092\u8fd4\u3059\n        return num;\n    }\n\n    /* \u30ea\u30b9\u30c8\u3092\u62e1\u5f35 */\n    public void extendCapacity() {\n        // \u5143\u306e\u914d\u5217\u306e\u9577\u3055\u3092 extendRatio \u500d\u3057\u305f\u65b0\u3057\u3044\u914d\u5217\u3092\u4f5c\u6210\u3057\u3001\u5143\u306e\u914d\u5217\u3092\u65b0\u3057\u3044\u914d\u5217\u306b\u30b3\u30d4\u30fc\n        arr = Arrays.copyOf(arr, capacity() * extendRatio);\n        // \u30ea\u30b9\u30c8\u5bb9\u91cf\u3092\u66f4\u65b0\n        capacity = arr.length;\n    }\n\n    /* \u30ea\u30b9\u30c8\u3092\u914d\u5217\u306b\u5909\u63db */\n    public int[] toArray() {\n        int size = size();\n        // \u6709\u52b9\u306a\u9577\u3055\u7bc4\u56f2\u5185\u306e\u8981\u7d20\u306e\u307f\u3092\u5909\u63db\n        int[] arr = new int[size];\n        for (int i = 0; i < size; i++) {\n            arr[i] = get(i);\n        }\n        return arr;\n    }\n}\n
my_list.cs
[class]{MyList}-[func]{}\n
my_list.go
[class]{myList}-[func]{}\n
my_list.swift
[class]{MyList}-[func]{}\n
my_list.js
[class]{MyList}-[func]{}\n
my_list.ts
[class]{MyList}-[func]{}\n
my_list.dart
[class]{MyList}-[func]{}\n
my_list.rs
[class]{MyList}-[func]{}\n
my_list.c
[class]{MyList}-[func]{}\n
my_list.kt
[class]{MyList}-[func]{}\n
my_list.rb
[class]{MyList}-[func]{}\n
"},{"location":"chapter_array_and_linkedlist/ram_and_cache/","title":"4.4 \u00a0 \u30e1\u30e2\u30ea\u3068\u30ad\u30e3\u30c3\u30b7\u30e5 *","text":"

\u3053\u306e\u7ae0\u306e\u6700\u521d\u306e2\u3064\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u300c\u9023\u7d9a\u683c\u7d0d\u300d\u3068\u300c\u5206\u6563\u683c\u7d0d\u300d\u3092\u305d\u308c\u305e\u308c\u8868\u73fe\u3059\u308b2\u3064\u306e\u57fa\u672c\u7684\u306a\u30c7\u30fc\u30bf\u69cb\u9020\u3067\u3042\u308b\u914d\u5217\u3068\u9023\u7d50\u30ea\u30b9\u30c8\u3092\u63a2\u7a76\u3057\u307e\u3057\u305f\u3002

\u5b9f\u969b\u3001\u7269\u7406\u69cb\u9020\u306f\u30d7\u30ed\u30b0\u30e9\u30e0\u304c\u30e1\u30e2\u30ea\u3068\u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u3069\u306e\u7a0b\u5ea6\u52b9\u7387\u7684\u306b\u5229\u7528\u3059\u308b\u304b\u3092\u5927\u304d\u304f\u6c7a\u5b9a\u3057\u3001\u3053\u308c\u304c\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u5168\u4f53\u7684\u306a\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306b\u5f71\u97ff\u3092\u4e0e\u3048\u307e\u3059\u3002

"},{"location":"chapter_array_and_linkedlist/ram_and_cache/#441","title":"4.4.1 \u00a0 \u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u8a18\u61b6\u88c5\u7f6e","text":"

\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u306b\u306f3\u7a2e\u985e\u306e\u8a18\u61b6\u88c5\u7f6e\u304c\u3042\u308a\u307e\u3059\uff1a\u30cf\u30fc\u30c9\u30c7\u30a3\u30b9\u30af\u3001\u30e9\u30f3\u30c0\u30e0\u30a2\u30af\u30bb\u30b9\u30e1\u30e2\u30ea\uff08RAM\uff09\u3001\u304a\u3088\u3073\u30ad\u30e3\u30c3\u30b7\u30e5\u30e1\u30e2\u30ea\u3067\u3059\u3002\u4ee5\u4e0b\u306e\u8868\u306f\u3001\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u30b7\u30b9\u30c6\u30e0\u306b\u304a\u3051\u308b\u305d\u308c\u305e\u308c\u306e\u5f79\u5272\u3068\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u7279\u6027\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002

\u8868 4-2 \u00a0 \u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u8a18\u61b6\u88c5\u7f6e

\u30cf\u30fc\u30c9\u30c7\u30a3\u30b9\u30af \u30e1\u30e2\u30ea \u30ad\u30e3\u30c3\u30b7\u30e5 \u7528\u9014 OS\u3001\u30d7\u30ed\u30b0\u30e9\u30e0\u3001\u30d5\u30a1\u30a4\u30eb\u306a\u3069\u306e\u30c7\u30fc\u30bf\u306e\u9577\u671f\u4fdd\u5b58 \u73fe\u5728\u5b9f\u884c\u4e2d\u306e\u30d7\u30ed\u30b0\u30e9\u30e0\u3068\u51e6\u7406\u4e2d\u306e\u30c7\u30fc\u30bf\u306e\u4e00\u6642\u4fdd\u5b58 \u983b\u7e41\u306b\u30a2\u30af\u30bb\u30b9\u3055\u308c\u308b\u30c7\u30fc\u30bf\u3068\u547d\u4ee4\u3092\u4fdd\u5b58\u3057\u3001CPU\u306e\u30e1\u30e2\u30ea\u3078\u306e\u30a2\u30af\u30bb\u30b9\u6570\u3092\u524a\u6e1b \u63ee\u767a\u6027 \u96fb\u6e90\u30aa\u30d5\u5f8c\u3082\u30c7\u30fc\u30bf\u306f\u5931\u308f\u308c\u306a\u3044 \u96fb\u6e90\u30aa\u30d5\u5f8c\u306b\u30c7\u30fc\u30bf\u306f\u5931\u308f\u308c\u308b \u96fb\u6e90\u30aa\u30d5\u5f8c\u306b\u30c7\u30fc\u30bf\u306f\u5931\u308f\u308c\u308b \u5bb9\u91cf \u3088\u308a\u5927\u304d\u3044\u3001TB\u30ec\u30d9\u30eb \u3088\u308a\u5c0f\u3055\u3044\u3001GB\u30ec\u30d9\u30eb \u975e\u5e38\u306b\u5c0f\u3055\u3044\u3001MB\u30ec\u30d9\u30eb \u901f\u5ea6 \u3088\u308a\u9045\u3044\u3001\u6570\u767e\u304b\u3089\u6570\u5343MB/s \u3088\u308a\u9ad8\u901f\u3001\u6570\u5341GB/s \u975e\u5e38\u306b\u9ad8\u901f\u3001\u6570\u5341\u304b\u3089\u6570\u767eGB/s \u4fa1\u683c\uff08USD\uff09 \u3088\u308a\u5b89\u4fa1\u3001\u6570\u30bb\u30f3\u30c8/GB \u3088\u308a\u9ad8\u4fa1\u3001\u6570\u30c9\u30eb/GB \u975e\u5e38\u306b\u9ad8\u4fa1\u3001CPU\u3068\u4e00\u7dd2\u306b\u4fa1\u683c\u8a2d\u5b9a

\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u8a18\u61b6\u30b7\u30b9\u30c6\u30e0\u306f\u3001\u4e0b\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u30d4\u30e9\u30df\u30c3\u30c9\u3068\u3057\u3066\u8996\u899a\u5316\u3067\u304d\u307e\u3059\u3002\u30d4\u30e9\u30df\u30c3\u30c9\u306e\u4e0a\u90e8\u306b\u3042\u308b\u8a18\u61b6\u88c5\u7f6e\u307b\u3069\u9ad8\u901f\u3067\u3001\u5bb9\u91cf\u304c\u5c0f\u3055\u304f\u3001\u3088\u308a\u9ad8\u4fa1\u3067\u3059\u3002\u3053\u306e\u30de\u30eb\u30c1\u30ec\u30d9\u30eb\u8a2d\u8a08\u306f\u5076\u7136\u3067\u306f\u306a\u304f\u3001\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u79d1\u5b66\u8005\u3068\u30a8\u30f3\u30b8\u30cb\u30a2\u306b\u3088\u308b\u614e\u91cd\u306a\u691c\u8a0e\u306e\u7d50\u679c\u3067\u3059\u3002

\u56f3 4-9 \u00a0 \u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u8a18\u61b6\u30b7\u30b9\u30c6\u30e0

Tip

\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u306e\u8a18\u61b6\u968e\u5c64\u306f\u3001\u901f\u5ea6\u3001\u5bb9\u91cf\u3001\u30b3\u30b9\u30c8\u306e\u9593\u306e\u614e\u91cd\u306a\u30d0\u30e9\u30f3\u30b9\u3092\u53cd\u6620\u3057\u3066\u3044\u307e\u3059\u3002\u3053\u306e\u30bf\u30a4\u30d7\u306e\u30c8\u30ec\u30fc\u30c9\u30aa\u30d5\u306f\u69d8\u3005\u306a\u696d\u754c\u3067\u4e00\u822c\u7684\u3067\u3042\u308a\u3001\u5229\u76ca\u3068\u5236\u9650\u306e\u9593\u306e\u6700\u9069\u306a\u30d0\u30e9\u30f3\u30b9\u3092\u898b\u3064\u3051\u308b\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002

\u5168\u4f53\u7684\u306b\u3001\u30cf\u30fc\u30c9\u30c7\u30a3\u30b9\u30af\u306f\u5927\u91cf\u306e\u30c7\u30fc\u30bf\u306e\u9577\u671f\u4fdd\u5b58\u3092\u63d0\u4f9b\u3057\u3001\u30e1\u30e2\u30ea\u306f\u30d7\u30ed\u30b0\u30e9\u30e0\u5b9f\u884c\u4e2d\u306b\u51e6\u7406\u3055\u308c\u308b\u30c7\u30fc\u30bf\u306e\u4e00\u6642\u4fdd\u5b58\u3068\u3057\u3066\u6a5f\u80fd\u3057\u3001\u30ad\u30e3\u30c3\u30b7\u30e5\u306f\u983b\u7e41\u306b\u30a2\u30af\u30bb\u30b9\u3055\u308c\u308b\u30c7\u30fc\u30bf\u3068\u547d\u4ee4\u3092\u4fdd\u5b58\u3057\u3066\u5b9f\u884c\u52b9\u7387\u3092\u5411\u4e0a\u3055\u305b\u307e\u3059\u3002\u305d\u308c\u3089\u306f\u4e00\u7dd2\u306b\u306a\u3063\u3066\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u30b7\u30b9\u30c6\u30e0\u306e\u52b9\u7387\u7684\u306a\u52d5\u4f5c\u3092\u4fdd\u8a3c\u3057\u307e\u3059\u3002

\u4e0b\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u30d7\u30ed\u30b0\u30e9\u30e0\u5b9f\u884c\u4e2d\u3001\u30c7\u30fc\u30bf\u306f\u30cf\u30fc\u30c9\u30c7\u30a3\u30b9\u30af\u304b\u3089\u30e1\u30e2\u30ea\u306b\u8aad\u307f\u8fbc\u307e\u308c\u3001CPU\u8a08\u7b97\u304c\u884c\u308f\u308c\u307e\u3059\u3002CPU\u306e\u62e1\u5f35\u3068\u3057\u3066\u6a5f\u80fd\u3059\u308b\u30ad\u30e3\u30c3\u30b7\u30e5\u306f\u3001**\u30e1\u30e2\u30ea\u304b\u3089\u30a4\u30f3\u30c6\u30ea\u30b8\u30a7\u30f3\u30c8\u306b\u30c7\u30fc\u30bf\u3092\u5148\u8aad\u307f**\u3057\u3001CPU\u306e\u3088\u308a\u9ad8\u901f\u306a\u30c7\u30fc\u30bf\u30a2\u30af\u30bb\u30b9\u3092\u53ef\u80fd\u306b\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u30d7\u30ed\u30b0\u30e9\u30e0\u5b9f\u884c\u52b9\u7387\u304c\u5927\u5e45\u306b\u5411\u4e0a\u3057\u3001\u4f4e\u901f\u306a\u30e1\u30e2\u30ea\u3078\u306e\u4f9d\u5b58\u304c\u6e1b\u5c11\u3057\u307e\u3059\u3002

\u56f3 4-10 \u00a0 \u30cf\u30fc\u30c9\u30c7\u30a3\u30b9\u30af\u3001\u30e1\u30e2\u30ea\u3001\u30ad\u30e3\u30c3\u30b7\u30e5\u9593\u306e\u30c7\u30fc\u30bf\u30d5\u30ed\u30fc

"},{"location":"chapter_array_and_linkedlist/ram_and_cache/#442","title":"4.4.2 \u00a0 \u30c7\u30fc\u30bf\u69cb\u9020\u306e\u30e1\u30e2\u30ea\u52b9\u7387","text":"

\u30e1\u30e2\u30ea\u7a7a\u9593\u5229\u7528\u306e\u89b3\u70b9\u304b\u3089\u3001\u914d\u5217\u3068\u9023\u7d50\u30ea\u30b9\u30c8\u306b\u306f\u305d\u308c\u305e\u308c\u5229\u70b9\u3068\u5236\u9650\u304c\u3042\u308a\u307e\u3059\u3002

\u4e00\u65b9\u3067\u3001**\u30e1\u30e2\u30ea\u306f\u9650\u3089\u308c\u3066\u304a\u308a\u3001\u8907\u6570\u306e\u30d7\u30ed\u30b0\u30e9\u30e0\u9593\u3067\u5171\u6709\u3067\u304d\u306a\u3044**\u305f\u3081\u3001\u30c7\u30fc\u30bf\u69cb\u9020\u3067\u306e\u7a7a\u9593\u4f7f\u7528\u306e\u6700\u9069\u5316\u306f\u91cd\u8981\u3067\u3059\u3002\u914d\u5217\u306f\u8981\u7d20\u304c\u5bc6\u63a5\u306b\u30d1\u30c3\u30af\u3055\u308c\u3066\u304a\u308a\u3001\u9023\u7d50\u30ea\u30b9\u30c8\u306e\u3088\u3046\u306b\u53c2\u7167\uff08\u30dd\u30a4\u30f3\u30bf\uff09\u306e\u305f\u3081\u306e\u8ffd\u52a0\u30e1\u30e2\u30ea\u3092\u5fc5\u8981\u3068\u3057\u306a\u3044\u305f\u3081\u3001\u7a7a\u9593\u52b9\u7387\u7684\u3067\u3059\u3002\u3057\u304b\u3057\u3001\u914d\u5217\u306f\u9023\u7d9a\u3057\u305f\u30e1\u30e2\u30ea\u30d6\u30ed\u30c3\u30af\u3092\u4e8b\u524d\u306b\u5272\u308a\u5f53\u3066\u308b\u5fc5\u8981\u304c\u3042\u308a\u3001\u5272\u308a\u5f53\u3066\u3089\u308c\u305f\u7a7a\u9593\u304c\u5b9f\u969b\u306e\u5fc5\u8981\u91cf\u3092\u8d85\u3048\u308b\u5834\u5408\u3001\u7121\u99c4\u306b\u3064\u306a\u304c\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002\u914d\u5217\u306e\u62e1\u5f35\u3082\u8ffd\u52a0\u306e\u6642\u9593\u3068\u7a7a\u9593\u306e\u30aa\u30fc\u30d0\u30fc\u30d8\u30c3\u30c9\u3092\u4f34\u3044\u307e\u3059\u3002\u5bfe\u7167\u7684\u306b\u3001\u9023\u7d50\u30ea\u30b9\u30c8\u306f\u5404\u30ce\u30fc\u30c9\u306b\u5bfe\u3057\u3066\u30e1\u30e2\u30ea\u3092\u52d5\u7684\u306b\u5272\u308a\u5f53\u3066\u30fb\u89e3\u653e\u3057\u3001\u30dd\u30a4\u30f3\u30bf\u306e\u305f\u3081\u306e\u8ffd\u52a0\u30e1\u30e2\u30ea\u306e\u30b3\u30b9\u30c8\u3067\u3088\u308a\u5927\u304d\u306a\u67d4\u8edf\u6027\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002

\u4e00\u65b9\u3067\u3001\u30d7\u30ed\u30b0\u30e9\u30e0\u5b9f\u884c\u4e2d\u3001\u7e70\u308a\u8fd4\u3055\u308c\u308b\u30e1\u30e2\u30ea\u306e\u5272\u308a\u5f53\u3066\u3068\u89e3\u653e\u306f\u30e1\u30e2\u30ea\u306e\u65ad\u7247\u5316\u3092\u5897\u52a0\u3055\u305b\u3001\u30e1\u30e2\u30ea\u5229\u7528\u52b9\u7387\u3092\u4f4e\u4e0b\u3055\u305b\u307e\u3059\u3002\u914d\u5217\u306f\u9023\u7d9a\u8a18\u61b6\u65b9\u5f0f\u306b\u3088\u308a\u3001\u30e1\u30e2\u30ea\u65ad\u7247\u5316\u3092\u5f15\u304d\u8d77\u3053\u3059\u53ef\u80fd\u6027\u304c\u6bd4\u8f03\u7684\u4f4e\u3044\u3067\u3059\u3002\u5bfe\u7167\u7684\u306b\u3001\u9023\u7d50\u30ea\u30b9\u30c8\u306f\u8981\u7d20\u3092\u975e\u9023\u7d9a\u306e\u5834\u6240\u306b\u4fdd\u5b58\u3057\u3001\u983b\u7e41\u306a\u633f\u5165\u3068\u524a\u9664\u306f\u30e1\u30e2\u30ea\u65ad\u7247\u5316\u3092\u60aa\u5316\u3055\u305b\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002

"},{"location":"chapter_array_and_linkedlist/ram_and_cache/#443","title":"4.4.3 \u00a0 \u30c7\u30fc\u30bf\u69cb\u9020\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\u52b9\u7387","text":"

\u30ad\u30e3\u30c3\u30b7\u30e5\u306f\u30e1\u30e2\u30ea\u3088\u308a\u3082\u7a7a\u9593\u5bb9\u91cf\u304c\u306f\u308b\u304b\u306b\u5c0f\u3055\u3044\u3067\u3059\u304c\u3001\u306f\u308b\u304b\u306b\u9ad8\u901f\u3067\u3001\u30d7\u30ed\u30b0\u30e9\u30e0\u5b9f\u884c\u901f\u5ea6\u306b\u304a\u3044\u3066\u91cd\u8981\u306a\u5f79\u5272\u3092\u679c\u305f\u3057\u307e\u3059\u3002\u9650\u3089\u308c\u305f\u5bb9\u91cf\u306e\u305f\u3081\u3001\u30ad\u30e3\u30c3\u30b7\u30e5\u306f\u983b\u7e41\u306b\u30a2\u30af\u30bb\u30b9\u3055\u308c\u308b\u30c7\u30fc\u30bf\u306e\u30b5\u30d6\u30bb\u30c3\u30c8\u306e\u307f\u3092\u4fdd\u5b58\u3067\u304d\u307e\u3059\u3002CPU\u304c\u30ad\u30e3\u30c3\u30b7\u30e5\u306b\u5b58\u5728\u3057\u306a\u3044\u30c7\u30fc\u30bf\u306b\u30a2\u30af\u30bb\u30b9\u3057\u3088\u3046\u3068\u3059\u308b\u3068\u3001\u30ad\u30e3\u30c3\u30b7\u30e5\u30df\u30b9\u304c\u767a\u751f\u3057\u3001CPU\u306f\u4f4e\u901f\u306a\u30e1\u30e2\u30ea\u304b\u3089\u5fc5\u8981\u306a\u30c7\u30fc\u30bf\u3092\u53d6\u5f97\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u3001\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306b\u5f71\u97ff\u3092\u4e0e\u3048\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002

\u660e\u3089\u304b\u306b\u3001\u30ad\u30e3\u30c3\u30b7\u30e5\u30df\u30b9\u304c\u5c11\u306a\u3044\u307b\u3069\u3001CPU\u306e\u30c7\u30fc\u30bf\u8aad\u307f\u66f8\u304d\u52b9\u7387\u304c\u9ad8\u304f\u3001\u30d7\u30ed\u30b0\u30e9\u30e0\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u304c\u5411\u4e0a\u3057\u307e\u3059\u3002CPU\u304c\u30ad\u30e3\u30c3\u30b7\u30e5\u304b\u3089\u30c7\u30fc\u30bf\u3092\u6b63\u5e38\u306b\u53d6\u5f97\u3059\u308b\u5272\u5408\u306f\u30ad\u30e3\u30c3\u30b7\u30e5\u30d2\u30c3\u30c8\u7387\u3068\u547c\u3070\u308c\u3001\u30ad\u30e3\u30c3\u30b7\u30e5\u52b9\u7387\u3092\u6e2c\u5b9a\u3059\u308b\u305f\u3081\u306b\u3088\u304f\u4f7f\u7528\u3055\u308c\u308b\u6307\u6a19\u3067\u3059\u3002

\u3088\u308a\u9ad8\u3044\u52b9\u7387\u3092\u9054\u6210\u3059\u308b\u305f\u3081\u306b\u3001\u30ad\u30e3\u30c3\u30b7\u30e5\u306f\u4ee5\u4e0b\u306e\u30c7\u30fc\u30bf\u30ed\u30fc\u30c9\u30e1\u30ab\u30cb\u30ba\u30e0\u3092\u63a1\u7528\u3057\u307e\u3059\u3002

\u5b9f\u969b\u3001\u914d\u5217\u3068\u9023\u7d50\u30ea\u30b9\u30c8\u306f\u7570\u306a\u308b\u30ad\u30e3\u30c3\u30b7\u30e5\u5229\u7528\u52b9\u7387\u3092\u6301\u3061\u3001\u3053\u308c\u306f\u4e3b\u306b\u4ee5\u4e0b\u306e\u5074\u9762\u306b\u53cd\u6620\u3055\u308c\u307e\u3059\u3002

\u5168\u4f53\u7684\u306b\u3001\u914d\u5217\u306f\u3088\u308a\u9ad8\u3044\u30ad\u30e3\u30c3\u30b7\u30e5\u30d2\u30c3\u30c8\u7387\u3092\u6301\u3061\u3001\u4e00\u822c\u7684\u306b\u9023\u7d50\u30ea\u30b9\u30c8\u3088\u308a\u3082\u64cd\u4f5c\u52b9\u7387\u304c\u9ad8\u3044\u3067\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u914d\u5217\u306b\u57fa\u3065\u304f\u30c7\u30fc\u30bf\u69cb\u9020\u306f\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u554f\u984c\u306e\u89e3\u6c7a\u306b\u304a\u3044\u3066\u4eba\u6c17\u304c\u3042\u308a\u307e\u3059\u3002

**\u9ad8\u3044\u30ad\u30e3\u30c3\u30b7\u30e5\u52b9\u7387\u304c\u914d\u5217\u304c\u5e38\u306b\u9023\u7d50\u30ea\u30b9\u30c8\u3088\u308a\u512a\u308c\u3066\u3044\u308b\u3068\u3044\u3046\u610f\u5473\u3067\u306f\u306a\u3044**\u3053\u3068\u306b\u6ce8\u610f\u3059\u3079\u304d\u3067\u3059\u3002\u30c7\u30fc\u30bf\u69cb\u9020\u306e\u9078\u629e\u306f\u7279\u5b9a\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u8981\u4ef6\u306b\u4f9d\u5b58\u3059\u3079\u304d\u3067\u3059\u3002\u4f8b\u3048\u3070\u3001\u914d\u5217\u3068\u9023\u7d50\u30ea\u30b9\u30c8\u306e\u4e21\u65b9\u304c\u300c\u30b9\u30bf\u30c3\u30af\u300d\u30c7\u30fc\u30bf\u69cb\u9020\u3092\u5b9f\u88c5\u3067\u304d\u307e\u3059\u304c\uff08\u6b21\u7ae0\u3067\u8a73\u7d30\u8aac\u660e\uff09\u3001\u305d\u308c\u3089\u306f\u7570\u306a\u308b\u30b7\u30ca\u30ea\u30aa\u306b\u9069\u3057\u3066\u3044\u307e\u3059\u3002

"},{"location":"chapter_array_and_linkedlist/summary/","title":"4.5 \u00a0 \u307e\u3068\u3081","text":""},{"location":"chapter_array_and_linkedlist/summary/#1","title":"1. \u00a0 \u91cd\u8981\u306a\u5fa9\u7fd2","text":""},{"location":"chapter_array_and_linkedlist/summary/#2-q-a","title":"2. \u00a0 Q & A","text":"

Q\uff1a\u914d\u5217\u3092\u30b9\u30bf\u30c3\u30af\u306b\u683c\u7d0d\u3059\u308b\u304b\u30d2\u30fc\u30d7\u306b\u683c\u7d0d\u3059\u308b\u304b\u306f\u3001\u6642\u9593\u3068\u7a7a\u9593\u52b9\u7387\u306b\u5f71\u97ff\u3057\u307e\u3059\u304b\uff1f

\u30b9\u30bf\u30c3\u30af\u3068\u30d2\u30fc\u30d7\u306e\u4e21\u65b9\u306b\u683c\u7d0d\u3055\u308c\u308b\u914d\u5217\u306f\u9023\u7d9a\u3057\u305f\u30e1\u30e2\u30ea\u7a7a\u9593\u306b\u683c\u7d0d\u3055\u308c\u3001\u30c7\u30fc\u30bf\u64cd\u4f5c\u52b9\u7387\u306f\u672c\u8cea\u7684\u306b\u540c\u3058\u3067\u3059\u3002\u3057\u304b\u3057\u3001\u30b9\u30bf\u30c3\u30af\u3068\u30d2\u30fc\u30d7\u306b\u306f\u72ec\u81ea\u306e\u7279\u6027\u304c\u3042\u308a\u3001\u4ee5\u4e0b\u306e\u9055\u3044\u304c\u751f\u3058\u307e\u3059\u3002

  1. \u5272\u308a\u5f53\u3066\u3068\u89e3\u653e\u52b9\u7387\uff1a\u30b9\u30bf\u30c3\u30af\u306f\u3088\u308a\u5c0f\u3055\u306a\u30e1\u30e2\u30ea\u30d6\u30ed\u30c3\u30af\u3067\u3001\u30b3\u30f3\u30d1\u30a4\u30e9\u306b\u3088\u3063\u3066\u81ea\u52d5\u7684\u306b\u5272\u308a\u5f53\u3066\u3089\u308c\u307e\u3059\u3002\u30d2\u30fc\u30d7\u30e1\u30e2\u30ea\u306f\u6bd4\u8f03\u7684\u5927\u304d\u304f\u3001\u30b3\u30fc\u30c9\u3067\u52d5\u7684\u306b\u5272\u308a\u5f53\u3066\u308b\u3053\u3068\u304c\u3067\u304d\u3001\u65ad\u7247\u5316\u3057\u3084\u3059\u3044\u3067\u3059\u3002\u3057\u305f\u304c\u3063\u3066\u3001\u30d2\u30fc\u30d7\u3067\u306e\u5272\u308a\u5f53\u3066\u3068\u89e3\u653e\u64cd\u4f5c\u306f\u4e00\u822c\u7684\u306b\u30b9\u30bf\u30c3\u30af\u3088\u308a\u3082\u9045\u304f\u306a\u308a\u307e\u3059\u3002
  2. \u30b5\u30a4\u30ba\u5236\u9650\uff1a\u30b9\u30bf\u30c3\u30af\u30e1\u30e2\u30ea\u306f\u6bd4\u8f03\u7684\u5c0f\u3055\u304f\u3001\u30d2\u30fc\u30d7\u30b5\u30a4\u30ba\u306f\u4e00\u822c\u7684\u306b\u5229\u7528\u53ef\u80fd\u306a\u30e1\u30e2\u30ea\u306b\u3088\u3063\u3066\u5236\u9650\u3055\u308c\u307e\u3059\u3002\u3057\u305f\u304c\u3063\u3066\u3001\u30d2\u30fc\u30d7\u306f\u5927\u304d\u306a\u914d\u5217\u306e\u683c\u7d0d\u306b\u3088\u308a\u9069\u3057\u3066\u3044\u307e\u3059\u3002
  3. \u67d4\u8edf\u6027\uff1a\u30b9\u30bf\u30c3\u30af\u4e0a\u306e\u914d\u5217\u306e\u30b5\u30a4\u30ba\u306f\u30b3\u30f3\u30d1\u30a4\u30eb\u6642\u306b\u6c7a\u5b9a\u3055\u308c\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u304c\u3001\u30d2\u30fc\u30d7\u4e0a\u306e\u914d\u5217\u306e\u30b5\u30a4\u30ba\u306f\u5b9f\u884c\u6642\u306b\u52d5\u7684\u306b\u6c7a\u5b9a\u3067\u304d\u307e\u3059\u3002

Q\uff1a\u306a\u305c\u914d\u5217\u306f\u540c\u3058\u578b\u306e\u8981\u7d20\u3092\u5fc5\u8981\u3068\u3057\u3001\u9023\u7d50\u30ea\u30b9\u30c8\u306f\u540c\u3058\u578b\u306e\u8981\u7d20\u3092\u5f37\u8abf\u3057\u306a\u3044\u306e\u3067\u3059\u304b\uff1f

\u9023\u7d50\u30ea\u30b9\u30c8\u306f\u53c2\u7167\uff08\u30dd\u30a4\u30f3\u30bf\uff09\u306b\u3088\u3063\u3066\u63a5\u7d9a\u3055\u308c\u305f\u30ce\u30fc\u30c9\u3067\u69cb\u6210\u3055\u308c\u3001\u5404\u30ce\u30fc\u30c9\u306fint\u3001double\u3001string\u3001object\u306a\u3069\u3001\u7570\u306a\u308b\u578b\u306e\u30c7\u30fc\u30bf\u3092\u683c\u7d0d\u3067\u304d\u307e\u3059\u3002

\u5bfe\u7167\u7684\u306b\u3001\u914d\u5217\u8981\u7d20\u306f\u540c\u3058\u578b\u3067\u3042\u308b\u5fc5\u8981\u304c\u3042\u308a\u3001\u3053\u308c\u306b\u3088\u308a\u5bfe\u5fdc\u3059\u308b\u8981\u7d20\u4f4d\u7f6e\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u305f\u3081\u306e\u30aa\u30d5\u30bb\u30c3\u30c8\u3092\u8a08\u7b97\u3067\u304d\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001int\u3068long\u578b\u306e\u4e21\u65b9\u3092\u542b\u3080\u914d\u5217\u3067\u3001\u5358\u4e00\u8981\u7d20\u304c\u305d\u308c\u305e\u308c4\u30d0\u30a4\u30c8\u30688\u30d0\u30a4\u30c8\u3092\u5360\u6709\u3059\u308b\u5834\u5408\u3001\u914d\u5217\u306b2\u3064\u306e\u7570\u306a\u308b\u9577\u3055\u306e\u8981\u7d20\u304c\u542b\u307e\u308c\u3066\u3044\u308b\u305f\u3081\u3001\u4ee5\u4e0b\u306e\u5f0f\u3092\u4f7f\u7528\u3057\u3066\u30aa\u30d5\u30bb\u30c3\u30c8\u3092\u8a08\u7b97\u3067\u304d\u307e\u305b\u3093\u3002

# \u8981\u7d20\u30e1\u30e2\u30ea\u30a2\u30c9\u30ec\u30b9 = \u914d\u5217\u30e1\u30e2\u30ea\u30a2\u30c9\u30ec\u30b9 + \u8981\u7d20\u9577 * \u8981\u7d20\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\n

Q\uff1a\u30ce\u30fc\u30c9\u3092\u524a\u9664\u3057\u305f\u5f8c\u3001P.next\u3092None\u306b\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u304b\uff1f

P.next\u3092\u5909\u66f4\u3057\u306a\u304f\u3066\u3082\u554f\u984c\u3042\u308a\u307e\u305b\u3093\u3002\u9023\u7d50\u30ea\u30b9\u30c8\u306e\u89b3\u70b9\u304b\u3089\u3001\u30d8\u30c3\u30c9\u30ce\u30fc\u30c9\u304b\u3089\u30c6\u30fc\u30eb\u30ce\u30fc\u30c9\u307e\u3067\u306e\u5de1\u56de\u3067P\u306b\u906d\u9047\u3059\u308b\u3053\u3068\u306f\u3082\u3046\u3042\u308a\u307e\u305b\u3093\u3002\u3053\u308c\u306f\u3001\u30ce\u30fc\u30c9P\u304c\u30ea\u30b9\u30c8\u304b\u3089\u52b9\u679c\u7684\u306b\u524a\u9664\u3055\u308c\u305f\u3053\u3068\u3092\u610f\u5473\u3057\u3001P\u304c\u6307\u3059\u5834\u6240\u306f\u3082\u306f\u3084\u30ea\u30b9\u30c8\u306b\u5f71\u97ff\u3057\u307e\u305b\u3093\u3002

\u30ac\u30d9\u30fc\u30b8\u30b3\u30ec\u30af\u30b7\u30e7\u30f3\u306e\u89b3\u70b9\u304b\u3089\u3001Java\u3001Python\u3001Go\u306a\u3069\u306e\u81ea\u52d5\u30ac\u30d9\u30fc\u30b8\u30b3\u30ec\u30af\u30b7\u30e7\u30f3\u30e1\u30ab\u30cb\u30ba\u30e0\u3092\u6301\u3064\u8a00\u8a9e\u3067\u306f\u3001\u30ce\u30fc\u30c9P\u304c\u53ce\u96c6\u3055\u308c\u308b\u304b\u3069\u3046\u304b\u306f\u3001\u305d\u308c\u3092\u6307\u3059\u53c2\u7167\u304c\u307e\u3060\u3042\u308b\u304b\u3069\u3046\u304b\u306b\u4f9d\u5b58\u3057\u3001P.next\u306e\u5024\u306b\u306f\u4f9d\u5b58\u3057\u307e\u305b\u3093\u3002C\u3084C++\u306a\u3069\u306e\u8a00\u8a9e\u3067\u306f\u3001\u30ce\u30fc\u30c9\u306e\u30e1\u30e2\u30ea\u3092\u624b\u52d5\u3067\u89e3\u653e\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

Q\uff1a\u9023\u7d50\u30ea\u30b9\u30c8\u3067\u306f\u3001\u633f\u5165\u3068\u524a\u9664\u64cd\u4f5c\u306e\u6642\u9593\u8a08\u7b97\u91cf\u306fO(1)\u3067\u3059\u3002\u3057\u304b\u3057\u3001\u633f\u5165\u3084\u524a\u9664\u524d\u306e\u8981\u7d20\u691c\u7d22\u306b\u306fO(n)\u6642\u9593\u304c\u304b\u304b\u308b\u306e\u3067\u3001\u306a\u305c\u6642\u9593\u8a08\u7b97\u91cf\u306fO(n)\u3067\u306f\u306a\u3044\u306e\u3067\u3059\u304b\uff1f

\u8981\u7d20\u3092\u6700\u521d\u306b\u691c\u7d22\u3057\u3066\u304b\u3089\u524a\u9664\u3059\u308b\u5834\u5408\u3001\u6642\u9593\u8a08\u7b97\u91cf\u306f\u78ba\u304b\u306bO(n)\u3067\u3059\u3002\u3057\u304b\u3057\u3001\u9023\u7d50\u30ea\u30b9\u30c8\u306e\u633f\u5165\u3068\u524a\u9664\u306b\u304a\u3051\u308bO(1)\u306e\u5229\u70b9\u306f\u4ed6\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001\u9023\u7d50\u30ea\u30b9\u30c8\u3092\u4f7f\u7528\u3057\u305f\u4e21\u7aef\u30ad\u30e5\u30fc\u306e\u5b9f\u88c5\u3067\u306f\u3001\u5e38\u306b\u30d8\u30c3\u30c9\u3068\u30c6\u30fc\u30eb\u30ce\u30fc\u30c9\u3092\u6307\u3059\u30dd\u30a4\u30f3\u30bf\u3092\u7dad\u6301\u3057\u3001\u5404\u633f\u5165\u3068\u524a\u9664\u64cd\u4f5c\u3092O(1)\u306b\u3057\u307e\u3059\u3002

Q\uff1a\u300c\u9023\u7d50\u30ea\u30b9\u30c8\u306e\u5b9a\u7fa9\u3068\u683c\u7d0d\u65b9\u6cd5\u300d\u306e\u56f3\u3067\u3001\u8584\u9752\u8272\u306e\u683c\u7d0d\u30ce\u30fc\u30c9\u306f\u5358\u4e00\u306e\u30e1\u30e2\u30ea\u30a2\u30c9\u30ec\u30b9\u3092\u5360\u6709\u3057\u307e\u3059\u304b\u3001\u305d\u308c\u3068\u3082\u30ce\u30fc\u30c9\u5024\u3068\u534a\u5206\u3092\u5171\u6709\u3057\u307e\u3059\u304b\uff1f

\u56f3\u306f\u5358\u306a\u308b\u5b9a\u6027\u7684\u306a\u8868\u73fe\u3067\u3042\u308a\u3001\u5b9a\u91cf\u7684\u5206\u6790\u306f\u7279\u5b9a\u306e\u72b6\u6cc1\u306b\u4f9d\u5b58\u3057\u307e\u3059\u3002

Q\uff1a\u30ea\u30b9\u30c8\u306e\u672b\u5c3e\u3078\u306e\u8981\u7d20\u8ffd\u52a0\u306f\u5e38\u306bO(1)\u3067\u3059\u304b\uff1f

\u8981\u7d20\u3092\u8ffd\u52a0\u3059\u308b\u3053\u3068\u3067\u30ea\u30b9\u30c8\u9577\u3092\u8d85\u3048\u308b\u5834\u5408\u3001\u30ea\u30b9\u30c8\u306f\u6700\u521d\u306b\u62e1\u5f35\u3055\u308c\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u30b7\u30b9\u30c6\u30e0\u306f\u65b0\u3057\u3044\u30e1\u30e2\u30ea\u30d6\u30ed\u30c3\u30af\u3092\u8981\u6c42\u3057\u3001\u5143\u306e\u30ea\u30b9\u30c8\u306e\u3059\u3079\u3066\u306e\u8981\u7d20\u3092\u79fb\u52d5\u3059\u308b\u305f\u3081\u3001\u3053\u306e\u5834\u5408\u306e\u6642\u9593\u8a08\u7b97\u91cf\u306fO(n)\u306b\u306a\u308a\u307e\u3059\u3002

Q\uff1a\u300c\u30ea\u30b9\u30c8\u306e\u51fa\u73fe\u306b\u3088\u308a\u914d\u5217\u306e\u5b9f\u7528\u6027\u304c\u5927\u5e45\u306b\u5411\u4e0a\u3057\u307e\u3057\u305f\u304c\u3001\u4e00\u90e8\u306e\u30e1\u30e2\u30ea\u7a7a\u9593\u306e\u7121\u99c4\u306b\u3064\u306a\u304c\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u300d\u3068\u3044\u3046\u6587\u306f\u3001\u5bb9\u91cf\u3001\u9577\u3055\u3001\u62e1\u5f35\u4fc2\u6570\u306a\u3069\u306e\u8ffd\u52a0\u5909\u6570\u306b\u3088\u3063\u3066\u5360\u6709\u3055\u308c\u308b\u30e1\u30e2\u30ea\u3092\u6307\u3057\u3066\u3044\u307e\u3059\u304b\uff1f

\u3053\u3053\u3067\u306e\u7a7a\u9593\u306e\u7121\u99c4\u306f\u4e3b\u306b2\u3064\u306e\u5074\u9762\u3092\u6307\u3057\u307e\u3059\uff1a\u4e00\u65b9\u3067\u3001\u30ea\u30b9\u30c8\u306f\u521d\u671f\u9577\u3067\u8a2d\u5b9a\u3055\u308c\u307e\u3059\u304c\u3001\u5e38\u306b\u5fc5\u8981\u3068\u306f\u9650\u308a\u307e\u305b\u3093\u3002\u4ed6\u65b9\u3067\u3001\u983b\u7e41\u306a\u62e1\u5f35\u3092\u9632\u3050\u305f\u3081\u3001\u62e1\u5f35\u306f\u901a\u5e38\\(\\times 1.5\\)\u306a\u3069\u306e\u4fc2\u6570\u3067\u4e57\u7b97\u3055\u308c\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u591a\u304f\u306e\u7a7a\u304d\u30b9\u30ed\u30c3\u30c8\u304c\u751f\u307e\u308c\u3001\u901a\u5e38\u306f\u5b8c\u5168\u306b\u57cb\u3081\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3002

Q\uff1aPython\u3067n = [1, 2, 3]\u3092\u521d\u671f\u5316\u3057\u305f\u5f8c\u3001\u3053\u308c\u30893\u3064\u306e\u8981\u7d20\u306e\u30a2\u30c9\u30ec\u30b9\u306f\u9023\u7d9a\u3057\u3066\u3044\u307e\u3059\u304c\u3001m = [2, 1, 3]\u3092\u521d\u671f\u5316\u3059\u308b\u3068\u3001\u5404\u8981\u7d20\u306eid\u306f\u9023\u7d9a\u3057\u3066\u3044\u306a\u3044\u304cn\u306e\u3082\u306e\u3068\u540c\u4e00\u3067\u3059\u3002\u3053\u308c\u3089\u306e\u8981\u7d20\u306e\u30a2\u30c9\u30ec\u30b9\u304c\u9023\u7d9a\u3057\u3066\u3044\u306a\u3044\u5834\u5408\u3001m\u306f\u307e\u3060\u914d\u5217\u3067\u3059\u304b\uff1f

\u30ea\u30b9\u30c8\u8981\u7d20\u3092\u9023\u7d50\u30ea\u30b9\u30c8\u30ce\u30fc\u30c9n = [n1, n2, n3, n4, n5]\u306b\u7f6e\u304d\u63db\u3048\u308b\u5834\u5408\u3001\u3053\u308c\u30895\u3064\u306e\u30ce\u30fc\u30c9\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3082\u901a\u5e38\u30e1\u30e2\u30ea\u5168\u4f53\u306b\u5206\u6563\u3057\u3066\u3044\u307e\u3059\u3002\u3057\u304b\u3057\u3001\u30ea\u30b9\u30c8\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u304c\u4e0e\u3048\u3089\u308c\u308c\u3070\u3001O(1)\u6642\u9593\u3067\u30ce\u30fc\u30c9\u306e\u30e1\u30e2\u30ea\u30a2\u30c9\u30ec\u30b9\u306b\u30a2\u30af\u30bb\u30b9\u3067\u304d\u3001\u5bfe\u5fdc\u3059\u308b\u30ce\u30fc\u30c9\u306b\u30a2\u30af\u30bb\u30b9\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u914d\u5217\u304c\u30ce\u30fc\u30c9\u81ea\u4f53\u3067\u306f\u306a\u304f\u3001\u30ce\u30fc\u30c9\u3078\u306e\u53c2\u7167\u3092\u683c\u7d0d\u3059\u308b\u305f\u3081\u3067\u3059\u3002

\u591a\u304f\u306e\u8a00\u8a9e\u3068\u306f\u7570\u306a\u308a\u3001Python\u3067\u306f\u6570\u5024\u3082\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3068\u3057\u3066\u30e9\u30c3\u30d7\u3055\u308c\u3001\u30ea\u30b9\u30c8\u306f\u6570\u5024\u81ea\u4f53\u3067\u306f\u306a\u304f\u3001\u3053\u308c\u3089\u306e\u6570\u5024\u3078\u306e\u53c2\u7167\u3092\u683c\u7d0d\u3057\u307e\u3059\u3002\u3057\u305f\u304c\u3063\u3066\u30012\u3064\u306e\u914d\u5217\u306e\u540c\u3058\u6570\u5024\u304c\u540c\u3058id\u3092\u6301\u3061\u3001\u3053\u308c\u3089\u306e\u6570\u5024\u306e\u30e1\u30e2\u30ea\u30a2\u30c9\u30ec\u30b9\u306f\u9023\u7d9a\u3067\u3042\u308b\u5fc5\u8981\u304c\u306a\u3044\u3053\u3068\u304c\u308f\u304b\u308a\u307e\u3059\u3002

Q\uff1aC++ STL\u306estd::list\u306f\u3059\u3067\u306b\u53cc\u65b9\u5411\u9023\u7d50\u30ea\u30b9\u30c8\u3092\u5b9f\u88c5\u3057\u3066\u3044\u307e\u3059\u304c\u3001\u4e00\u90e8\u306e\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u66f8\u7c4d\u3067\u306f\u76f4\u63a5\u4f7f\u7528\u3057\u3066\u3044\u306a\u3044\u3088\u3046\u3067\u3059\u3002\u4f55\u304b\u5236\u9650\u304c\u3042\u308a\u307e\u3059\u304b\uff1f

\u4e00\u65b9\u3067\u3001\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3092\u5b9f\u88c5\u3059\u308b\u969b\u306f\u914d\u5217\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3092\u597d\u307f\u3001\u5fc5\u8981\u306a\u5834\u5408\u306e\u307f\u9023\u7d50\u30ea\u30b9\u30c8\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002\u4e3b\u306b2\u3064\u306e\u7406\u7531\u304c\u3042\u308a\u307e\u3059\u3002

\u4ed6\u65b9\u3067\u3001\u9023\u7d50\u30ea\u30b9\u30c8\u306f\u4e3b\u306b\u4e8c\u5206\u6728\u3068\u30b0\u30e9\u30d5\u306b\u5fc5\u8981\u3067\u3059\u3002\u30b9\u30bf\u30c3\u30af\u3068\u30ad\u30e5\u30fc\u306f\u3001\u9023\u7d50\u30ea\u30b9\u30c8\u3067\u306f\u306a\u304f\u3001\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\u306estack\u3068queue\u30af\u30e9\u30b9\u3092\u4f7f\u7528\u3057\u3066\u5b9f\u88c5\u3055\u308c\u308b\u3053\u3068\u304c\u591a\u3044\u3067\u3059\u3002

Q\uff1a\u30ea\u30b9\u30c8res = [0] * self.size()\u3092\u521d\u671f\u5316\u3059\u308b\u3068\u3001res\u306e\u5404\u8981\u7d20\u306f\u540c\u3058\u30a2\u30c9\u30ec\u30b9\u3092\u53c2\u7167\u3057\u307e\u3059\u304b\uff1f

\u3044\u3044\u3048\u3002\u3057\u304b\u3057\u3001\u3053\u306e\u554f\u984c\u306f\u4e8c\u6b21\u5143\u914d\u5217\u3067\u767a\u751f\u3057\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001\u4e8c\u6b21\u5143\u30ea\u30b9\u30c8res = [[0]] * self.size()\u3092\u521d\u671f\u5316\u3059\u308b\u3068\u3001\u540c\u3058\u30ea\u30b9\u30c8[0]\u3092\u8907\u6570\u56de\u53c2\u7167\u3059\u308b\u3053\u3068\u306b\u306a\u308a\u307e\u3059\u3002

Q\uff1a\u30ce\u30fc\u30c9\u3092\u524a\u9664\u3059\u308b\u969b\u3001\u305d\u306e\u5f8c\u7d9a\u30ce\u30fc\u30c9\u3078\u306e\u53c2\u7167\u3092\u65ad\u3064\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u304b\uff1f

\u30c7\u30fc\u30bf\u69cb\u9020\u3068\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\uff08\u554f\u984c\u89e3\u6c7a\uff09\u306e\u89b3\u70b9\u304b\u3089\u3001\u30d7\u30ed\u30b0\u30e9\u30e0\u306e\u30ed\u30b8\u30c3\u30af\u304c\u6b63\u3057\u3044\u9650\u308a\u3001\u30ea\u30f3\u30af\u3092\u65ad\u305f\u306a\u304f\u3066\u3082\u554f\u984c\u3042\u308a\u307e\u305b\u3093\u3002\u6a19\u6e96\u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u89b3\u70b9\u304b\u3089\u3001\u30ea\u30f3\u30af\u3092\u65ad\u3064\u65b9\u304c\u5b89\u5168\u3067\u8ad6\u7406\u7684\u306b\u660e\u78ba\u3067\u3059\u3002\u30ea\u30f3\u30af\u3092\u65ad\u305f\u305a\u3001\u524a\u9664\u3055\u308c\u305f\u30ce\u30fc\u30c9\u304c\u9069\u5207\u306b\u30ea\u30b5\u30a4\u30af\u30eb\u3055\u308c\u306a\u3044\u5834\u5408\u3001\u5f8c\u7d9a\u30ce\u30fc\u30c9\u306e\u30e1\u30e2\u30ea\u306e\u30ea\u30b5\u30a4\u30af\u30eb\u306b\u5f71\u97ff\u3092\u4e0e\u3048\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002

"},{"location":"chapter_backtracking/","title":"\u7b2c 13 \u7ae0 \u00a0 \u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0","text":"

Abstract

\u8ff7\u8def\u306e\u63a2\u691c\u5bb6\u306e\u3088\u3046\u306b\u3001\u79c1\u305f\u3061\u306f\u524d\u9032\u3059\u308b\u9053\u3067\u969c\u5bb3\u306b\u906d\u9047\u3059\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002

\u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u306e\u529b\u306f\u3001\u79c1\u305f\u3061\u306b\u65b0\u3057\u304f\u59cb\u3081\u308b\u3053\u3068\u3001\u8a66\u3057\u7d9a\u3051\u308b\u3053\u3068\u3001\u305d\u3057\u3066\u6700\u7d42\u7684\u306b\u5149\u3078\u306e\u51fa\u53e3\u3092\u898b\u3064\u3051\u308b\u3053\u3068\u3092\u53ef\u80fd\u306b\u3057\u307e\u3059\u3002

"},{"location":"chapter_backtracking/#_1","title":"\u7ae0\u306e\u5185\u5bb9","text":""},{"location":"chapter_backtracking/backtracking_algorithm/","title":"13.1 \u00a0 \u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0","text":"

\u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306f\u5168\u6570\u63a2\u7d22\u306b\u3088\u3063\u3066\u554f\u984c\u3092\u89e3\u6c7a\u3059\u308b\u65b9\u6cd5\u3067\u3059\u3002\u305d\u306e\u6838\u5fc3\u6982\u5ff5\u306f\u3001\u521d\u671f\u72b6\u614b\u304b\u3089\u958b\u59cb\u3057\u3066\u3059\u3079\u3066\u306e\u53ef\u80fd\u306a\u89e3\u3092\u7dcf\u5f53\u305f\u308a\u3067\u63a2\u7d22\u3059\u308b\u3053\u3068\u3067\u3059\u3002\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306f\u6b63\u3057\u3044\u3082\u306e\u3092\u8a18\u9332\u3057\u3001\u89e3\u304c\u898b\u3064\u304b\u308b\u304b\u3001\u3059\u3079\u3066\u306e\u53ef\u80fd\u306a\u89e3\u304c\u8a66\u3055\u308c\u305f\u304c\u89e3\u304c\u898b\u3064\u304b\u3089\u306a\u3044\u307e\u3067\u7d9a\u3051\u307e\u3059\u3002

\u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u306f\u901a\u5e38\u300c\u6df1\u3055\u512a\u5148\u63a2\u7d22\u300d\u3092\u4f7f\u7528\u3057\u3066\u89e3\u7a7a\u9593\u3092\u8d70\u67fb\u3057\u307e\u3059\u3002\u300c\u4e8c\u5206\u6728\u300d\u306e\u7ae0\u3067\u3001\u524d\u9806\u3001\u4e2d\u9806\u3001\u5f8c\u9806\u8d70\u67fb\u306f\u3059\u3079\u3066\u6df1\u3055\u512a\u5148\u63a2\u7d22\u3067\u3042\u308b\u3053\u3068\u3092\u8ff0\u3079\u307e\u3057\u305f\u3002\u6b21\u306b\u3001\u524d\u9806\u8d70\u67fb\u3092\u4f7f\u7528\u3057\u3066\u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u554f\u984c\u3092\u89e3\u6c7a\u3057\u3001\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u52d5\u4f5c\u3092\u6bb5\u968e\u7684\u306b\u7406\u89e3\u3057\u3066\u3044\u304d\u307e\u3059\u3002

\u4f8b1

\u4e8c\u5206\u6728\u304c\u4e0e\u3048\u3089\u308c\u305f\u5834\u5408\u3001\u5024\u304c \\(7\\) \u306e\u3059\u3079\u3066\u306e\u30ce\u30fc\u30c9\u3092\u691c\u7d22\u3057\u3066\u8a18\u9332\u3057\u3001\u30ea\u30b9\u30c8\u3067\u8fd4\u3057\u3066\u304f\u3060\u3055\u3044\u3002

\u3053\u306e\u554f\u984c\u3092\u89e3\u6c7a\u3059\u308b\u305f\u3081\u306b\u3001\u3053\u306e\u6728\u3092\u524d\u9806\u3067\u8d70\u67fb\u3057\u3001\u73fe\u5728\u306e\u30ce\u30fc\u30c9\u306e\u5024\u304c \\(7\\) \u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002\u305d\u3046\u3067\u3042\u308c\u3070\u3001\u30ce\u30fc\u30c9\u306e\u5024\u3092\u7d50\u679c\u30ea\u30b9\u30c8 res \u306b\u8ffd\u52a0\u3057\u307e\u3059\u3002\u30d7\u30ed\u30bb\u30b9\u306f\u4ee5\u4e0b\u306e\u56f3\u306b\u793a\u3055\u308c\u3066\u3044\u307e\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby preorder_traversal_i_compact.py
def pre_order(root: TreeNode):\n    \"\"\"\u524d\u9806\u8d70\u67fb\uff1a\u4f8b\u4e00\"\"\"\n    if root is None:\n        return\n    if root.val == 7:\n        # \u89e3\u3092\u8a18\u9332\n        res.append(root)\n    pre_order(root.left)\n    pre_order(root.right)\n
preorder_traversal_i_compact.cpp
/* \u524d\u9806\u8d70\u67fb\uff1a\u4f8b\uff11 */\nvoid preOrder(TreeNode *root) {\n    if (root == nullptr) {\n        return;\n    }\n    if (root->val == 7) {\n        // \u89e3\u3092\u8a18\u9332\n        res.push_back(root);\n    }\n    preOrder(root->left);\n    preOrder(root->right);\n}\n
preorder_traversal_i_compact.java
/* \u524d\u9806\u8d70\u67fb\uff1a\u4f8b\uff11 */\nvoid preOrder(TreeNode root) {\n    if (root == null) {\n        return;\n    }\n    if (root.val == 7) {\n        // \u89e3\u3092\u8a18\u9332\n        res.add(root);\n    }\n    preOrder(root.left);\n    preOrder(root.right);\n}\n
preorder_traversal_i_compact.cs
[class]{preorder_traversal_i_compact}-[func]{PreOrder}\n
preorder_traversal_i_compact.go
[class]{}-[func]{preOrderI}\n
preorder_traversal_i_compact.swift
[class]{}-[func]{preOrder}\n
preorder_traversal_i_compact.js
[class]{}-[func]{preOrder}\n
preorder_traversal_i_compact.ts
[class]{}-[func]{preOrder}\n
preorder_traversal_i_compact.dart
[class]{}-[func]{preOrder}\n
preorder_traversal_i_compact.rs
[class]{}-[func]{pre_order}\n
preorder_traversal_i_compact.c
[class]{}-[func]{preOrder}\n
preorder_traversal_i_compact.kt
[class]{}-[func]{preOrder}\n
preorder_traversal_i_compact.rb
[class]{}-[func]{pre_order}\n

\u56f3 13-1 \u00a0 \u524d\u9806\u8d70\u67fb\u3067\u306e\u30ce\u30fc\u30c9\u691c\u7d22

"},{"location":"chapter_backtracking/backtracking_algorithm/#1311","title":"13.1.1 \u00a0 \u8a66\u884c\u3068\u5f8c\u9000","text":"

\u89e3\u7a7a\u9593\u3092\u63a2\u7d22\u3059\u308b\u969b\u306b\u300c\u8a66\u884c\u300d\u3068\u300c\u5f8c\u9000\u300d\u6226\u7565\u3092\u4f7f\u7528\u3059\u308b\u305f\u3081\u3001\u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3068\u547c\u3070\u308c\u307e\u3059\u3002\u63a2\u7d22\u4e2d\u3001\u6e80\u8db3\u306e\u3044\u304f\u89e3\u3092\u5f97\u308b\u305f\u3081\u306b\u3082\u306f\u3084\u9032\u3081\u306a\u3044\u72b6\u614b\u306b\u906d\u9047\u3059\u308b\u305f\u3073\u306b\u3001\u524d\u306e\u9078\u629e\u3092\u53d6\u308a\u6d88\u3057\u3066\u524d\u306e\u72b6\u614b\u306b\u623b\u308a\u3001\u6b21\u306e\u8a66\u884c\u306e\u305f\u3081\u306b\u4ed6\u306e\u53ef\u80fd\u306a\u9078\u629e\u3092\u9078\u629e\u3067\u304d\u308b\u3088\u3046\u306b\u3057\u307e\u3059\u3002

\u4f8b1\u3067\u306f\u3001\u5404\u30ce\u30fc\u30c9\u306e\u8a2a\u554f\u304c\u300c\u8a66\u884c\u300d\u3092\u958b\u59cb\u3057\u307e\u3059\u3002\u305d\u3057\u3066\u8449\u30ce\u30fc\u30c9\u3092\u901a\u904e\u3059\u308b\u304b\u3001return \u6587\u3067\u89aa\u30ce\u30fc\u30c9\u306b\u623b\u308b\u3053\u3068\u304c\u300c\u5f8c\u9000\u300d\u3092\u793a\u5506\u3057\u307e\u3059\u3002

\u5f8c\u9000\u306f\u5358\u306b\u95a2\u6570\u306e\u623b\u308a\u5024\u3067\u306f\u306a\u3044\u3053\u3068\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u4f8b1\u306e\u554f\u984c\u3092\u5c11\u3057\u62e1\u5f35\u3057\u3066\u3001\u305d\u308c\u304c\u4f55\u3092\u610f\u5473\u3059\u308b\u304b\u3092\u8aac\u660e\u3057\u307e\u3059\u3002

\u4f8b2

\u4e8c\u5206\u6728\u3067\u3001\u5024\u304c \\(7\\) \u306e\u3059\u3079\u3066\u306e\u30ce\u30fc\u30c9\u3092\u691c\u7d22\u3057\u3001\u3059\u3079\u3066\u306e\u30de\u30c3\u30c1\u30f3\u30b0\u30ce\u30fc\u30c9\u306b\u3064\u3044\u3066\u3001\u30eb\u30fc\u30c8\u30ce\u30fc\u30c9\u304b\u3089\u305d\u306e\u30ce\u30fc\u30c9\u307e\u3067\u306e\u30d1\u30b9\u3092\u8fd4\u3057\u3066\u304f\u3060\u3055\u3044\u3002

\u4f8b1\u306e\u30b3\u30fc\u30c9\u306b\u57fa\u3065\u3044\u3066\u3001\u8a2a\u554f\u3057\u305f\u30ce\u30fc\u30c9\u30d1\u30b9\u3092\u8a18\u9332\u3059\u308b\u305f\u3081\u306b path \u3068\u3044\u3046\u30ea\u30b9\u30c8\u3092\u4f7f\u7528\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u5024\u304c \\(7\\) \u306e\u30ce\u30fc\u30c9\u306b\u5230\u9054\u3059\u308b\u3068\u3001path \u3092\u30b3\u30d4\u30fc\u3057\u3066\u7d50\u679c\u30ea\u30b9\u30c8 res \u306b\u8ffd\u52a0\u3057\u307e\u3059\u3002\u8d70\u67fb\u5f8c\u3001res \u306b\u306f\u3059\u3079\u3066\u306e\u89e3\u304c\u4fdd\u6301\u3055\u308c\u307e\u3059\u3002\u30b3\u30fc\u30c9\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby preorder_traversal_ii_compact.py
def pre_order(root: TreeNode):\n    \"\"\"\u524d\u9806\u8d70\u67fb\uff1a\u4f8b\u4e8c\"\"\"\n    if root is None:\n        return\n    # \u8a66\u884c\n    path.append(root)\n    if root.val == 7:\n        # \u89e3\u3092\u8a18\u9332\n        res.append(list(path))\n    pre_order(root.left)\n    pre_order(root.right)\n    # \u64a4\u56de\n    path.pop()\n
preorder_traversal_ii_compact.cpp
/* \u524d\u9806\u8d70\u67fb\uff1a\u4f8b\uff12 */\nvoid preOrder(TreeNode *root) {\n    if (root == nullptr) {\n        return;\n    }\n    // \u8a66\u884c\n    path.push_back(root);\n    if (root->val == 7) {\n        // \u89e3\u3092\u8a18\u9332\n        res.push_back(path);\n    }\n    preOrder(root->left);\n    preOrder(root->right);\n    // \u56de\u9000\n    path.pop_back();\n}\n
preorder_traversal_ii_compact.java
/* \u524d\u9806\u8d70\u67fb\uff1a\u4f8b\uff12 */\nvoid preOrder(TreeNode root) {\n    if (root == null) {\n        return;\n    }\n    // \u8a66\u884c\n    path.add(root);\n    if (root.val == 7) {\n        // \u89e3\u3092\u8a18\u9332\n        res.add(new ArrayList<>(path));\n    }\n    preOrder(root.left);\n    preOrder(root.right);\n    // \u56de\u9000\n    path.remove(path.size() - 1);\n}\n
preorder_traversal_ii_compact.cs
[class]{preorder_traversal_ii_compact}-[func]{PreOrder}\n
preorder_traversal_ii_compact.go
[class]{}-[func]{preOrderII}\n
preorder_traversal_ii_compact.swift
[class]{}-[func]{preOrder}\n
preorder_traversal_ii_compact.js
[class]{}-[func]{preOrder}\n
preorder_traversal_ii_compact.ts
[class]{}-[func]{preOrder}\n
preorder_traversal_ii_compact.dart
[class]{}-[func]{preOrder}\n
preorder_traversal_ii_compact.rs
[class]{}-[func]{pre_order}\n
preorder_traversal_ii_compact.c
[class]{}-[func]{preOrder}\n
preorder_traversal_ii_compact.kt
[class]{}-[func]{preOrder}\n
preorder_traversal_ii_compact.rb
[class]{}-[func]{pre_order}\n

\u5404\u300c\u8a66\u884c\u300d\u3067\u3001\u73fe\u5728\u306e\u30ce\u30fc\u30c9\u3092 path \u306b\u8ffd\u52a0\u3059\u308b\u3053\u3068\u3067\u30d1\u30b9\u3092\u8a18\u9332\u3057\u307e\u3059\u3002\u300c\u5f8c\u9000\u300d\u304c\u5fc5\u8981\u306a\u3068\u304d\u306f\u3044\u3064\u3067\u3082\u3001path \u304b\u3089\u30ce\u30fc\u30c9\u3092\u30dd\u30c3\u30d7\u3057\u3066**\u3053\u306e\u5931\u6557\u3057\u305f\u8a66\u884c\u524d\u306e\u72b6\u614b\u3092\u5fa9\u5143\u3057\u307e\u3059**\u3002

\u4ee5\u4e0b\u306e\u56f3\u306b\u793a\u3059\u30d7\u30ed\u30bb\u30b9\u3092\u89b3\u5bdf\u3059\u308b\u3053\u3068\u3067\u3001\u8a66\u884c\u306f\u300c\u524d\u9032\u300d\u306e\u3088\u3046\u3067\u3001\u5f8c\u9000\u306f\u300c\u5143\u306b\u623b\u3059\u300d\u306e\u3088\u3046\u3067\u3059\u3002\u5f8c\u8005\u306e\u30da\u30a2\u306f\u3001\u5bfe\u5fdc\u3059\u308b\u3082\u306e\u306b\u5bfe\u3059\u308b\u9006\u64cd\u4f5c\u3068\u898b\u306a\u3059\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

<1><2><3><4><5><6><7><8><9><10><11>

\u56f3 13-2 \u00a0 \u8a66\u884c\u3068\u5f8c\u9000

"},{"location":"chapter_backtracking/backtracking_algorithm/#1312","title":"13.1.2 \u00a0 \u526a\u5b9a","text":"

\u8907\u96d1\u306a\u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u554f\u984c\u306f\u901a\u5e381\u3064\u4ee5\u4e0a\u306e\u5236\u7d04\u3092\u542b\u307f\u3001\u3053\u308c\u3089\u306f\u300c\u526a\u5b9a\u300d\u306b\u3088\u304f\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002

\u4f8b3

\u4e8c\u5206\u6728\u3067\u3001\u5024\u304c \\(7\\) \u306e\u3059\u3079\u3066\u306e\u30ce\u30fc\u30c9\u3092\u691c\u7d22\u3057\u3001\u30eb\u30fc\u30c8\u304b\u3089\u3053\u308c\u3089\u306e\u30ce\u30fc\u30c9\u307e\u3067\u306e\u30d1\u30b9\u3092\u8fd4\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u305f\u3060\u3057\u3001\u30d1\u30b9\u306b\u306f\u5024\u304c \\(3\\) \u306e\u30ce\u30fc\u30c9\u3092\u542b\u307e\u306a\u3044\u3068\u3044\u3046\u5236\u9650\u304c\u3042\u308a\u307e\u3059\u3002

\u4e0a\u8a18\u306e\u5236\u7d04\u3092\u6e80\u305f\u3059\u305f\u3081\u306b\u3001\u526a\u5b9a\u64cd\u4f5c\u3092\u8ffd\u52a0\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\uff1a\u691c\u7d22\u30d7\u30ed\u30bb\u30b9\u4e2d\u306b\u3001\u5024\u304c \\(3\\) \u306e\u30ce\u30fc\u30c9\u306b\u906d\u9047\u3057\u305f\u5834\u5408\u3001\u305d\u306e\u30d1\u30b9\u3092\u901a\u3058\u3066\u3055\u3089\u306b\u691c\u7d22\u3059\u308b\u3053\u3068\u3092\u5373\u5ea7\u306b\u4e2d\u6b62\u3057\u307e\u3059\u3002\u30b3\u30fc\u30c9\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby preorder_traversal_iii_compact.py
def pre_order(root: TreeNode):\n    \"\"\"\u524d\u9806\u8d70\u67fb\uff1a\u4f8b\u4e09\"\"\"\n    # \u679d\u5208\u308a\n    if root is None or root.val == 3:\n        return\n    # \u8a66\u884c\n    path.append(root)\n    if root.val == 7:\n        # \u89e3\u3092\u8a18\u9332\n        res.append(list(path))\n    pre_order(root.left)\n    pre_order(root.right)\n    # \u64a4\u56de\n    path.pop()\n
preorder_traversal_iii_compact.cpp
/* \u524d\u9806\u8d70\u67fb\uff1a\u4f8b\uff13 */\nvoid preOrder(TreeNode *root) {\n    // \u526a\u5b9a\n    if (root == nullptr || root->val == 3) {\n        return;\n    }\n    // \u8a66\u884c\n    path.push_back(root);\n    if (root->val == 7) {\n        // \u89e3\u3092\u8a18\u9332\n        res.push_back(path);\n    }\n    preOrder(root->left);\n    preOrder(root->right);\n    // \u56de\u9000\n    path.pop_back();\n}\n
preorder_traversal_iii_compact.java
/* \u524d\u9806\u8d70\u67fb\uff1a\u4f8b\uff13 */\nvoid preOrder(TreeNode root) {\n    // \u526a\u5b9a\n    if (root == null || root.val == 3) {\n        return;\n    }\n    // \u8a66\u884c\n    path.add(root);\n    if (root.val == 7) {\n        // \u89e3\u3092\u8a18\u9332\n        res.add(new ArrayList<>(path));\n    }\n    preOrder(root.left);\n    preOrder(root.right);\n    // \u56de\u9000\n    path.remove(path.size() - 1);\n}\n
preorder_traversal_iii_compact.cs
[class]{preorder_traversal_iii_compact}-[func]{PreOrder}\n
preorder_traversal_iii_compact.go
[class]{}-[func]{preOrderIII}\n
preorder_traversal_iii_compact.swift
[class]{}-[func]{preOrder}\n
preorder_traversal_iii_compact.js
[class]{}-[func]{preOrder}\n
preorder_traversal_iii_compact.ts
[class]{}-[func]{preOrder}\n
preorder_traversal_iii_compact.dart
[class]{}-[func]{preOrder}\n
preorder_traversal_iii_compact.rs
[class]{}-[func]{pre_order}\n
preorder_traversal_iii_compact.c
[class]{}-[func]{preOrder}\n
preorder_traversal_iii_compact.kt
[class]{}-[func]{preOrder}\n
preorder_traversal_iii_compact.rb
[class]{}-[func]{pre_order}\n

\u300c\u526a\u5b9a\u300d\u306f\u975e\u5e38\u306b\u751f\u304d\u751f\u304d\u3068\u3057\u305f\u540d\u8a5e\u3067\u3059\u3002\u4ee5\u4e0b\u306e\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u691c\u7d22\u30d7\u30ed\u30bb\u30b9\u3067\u3001\u5236\u7d04\u3092\u6e80\u305f\u3055\u306a\u3044\u691c\u7d22\u5206\u5c90\u3092\u300c\u5207\u308a\u53d6\u308a\u300d\u307e\u3059\u3002\u3055\u3089\u306a\u308b\u4e0d\u8981\u306a\u8a66\u884c\u3092\u907f\u3051\u3001\u691c\u7d22\u52b9\u7387\u3092\u5411\u4e0a\u3055\u305b\u307e\u3059\u3002

\u56f3 13-3 \u00a0 \u5236\u7d04\u306b\u57fa\u3065\u304f\u526a\u5b9a

"},{"location":"chapter_backtracking/backtracking_algorithm/#1313","title":"13.1.3 \u00a0 \u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u30b3\u30fc\u30c9","text":"

\u4eca\u5ea6\u306f\u3001\u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u304b\u3089\u300c\u8a66\u884c\u3001\u5f8c\u9000\u3001\u526a\u5b9a\u300d\u306e\u4e3b\u8981\u306a\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3092\u62bd\u51fa\u3057\u3066\u3001\u30b3\u30fc\u30c9\u306e\u6c4e\u7528\u6027\u3092\u5411\u4e0a\u3055\u305b\u3066\u307f\u307e\u3057\u3087\u3046\u3002

\u4ee5\u4e0b\u306e\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u30b3\u30fc\u30c9\u3067\u306f\u3001state \u306f\u554f\u984c\u306e\u73fe\u5728\u306e\u72b6\u614b\u3092\u8868\u3057\u3001choices \u306f\u73fe\u5728\u306e\u72b6\u614b\u3067\u5229\u7528\u53ef\u80fd\u306a\u9078\u629e\u80a2\u3092\u8868\u3057\u307e\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby
def backtrack(state: State, choices: list[choice], res: list[state]):\n    \"\"\"\u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\"\"\"\n    # \u89e3\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\n    if is_solution(state):\n        # \u89e3\u3092\u8a18\u9332\n        record_solution(state, res)\n        # \u691c\u7d22\u3092\u505c\u6b62\n        return\n    # \u3059\u3079\u3066\u306e\u9078\u629e\u80a2\u3092\u53cd\u5fa9\n    for choice in choices:\n        # \u526a\u5b9a\uff1a\u9078\u629e\u80a2\u304c\u6709\u52b9\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\n        if is_valid(state, choice):\n            # \u8a66\u884c\uff1a\u9078\u629e\u3092\u884c\u3044\u3001\u72b6\u614b\u3092\u66f4\u65b0\n            make_choice(state, choice)\n            backtrack(state, choices, res)\n            # \u5f8c\u9000\uff1a\u9078\u629e\u3092\u53d6\u308a\u6d88\u3057\u3001\u524d\u306e\u72b6\u614b\u306b\u623b\u3059\n            undo_choice(state, choice)\n
/* \u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af */\nvoid backtrack(State *state, vector<Choice *> &choices, vector<State *> &res) {\n    // \u89e3\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\n    if (isSolution(state)) {\n        // \u89e3\u3092\u8a18\u9332\n        recordSolution(state, res);\n        // \u691c\u7d22\u3092\u505c\u6b62\n        return;\n    }\n    // \u3059\u3079\u3066\u306e\u9078\u629e\u80a2\u3092\u53cd\u5fa9\n    for (Choice choice : choices) {\n        // \u526a\u5b9a\uff1a\u9078\u629e\u80a2\u304c\u6709\u52b9\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\n        if (isValid(state, choice)) {\n            // \u8a66\u884c\uff1a\u9078\u629e\u3092\u884c\u3044\u3001\u72b6\u614b\u3092\u66f4\u65b0\n            makeChoice(state, choice);\n            backtrack(state, choices, res);\n            // \u5f8c\u9000\uff1a\u9078\u629e\u3092\u53d6\u308a\u6d88\u3057\u3001\u524d\u306e\u72b6\u614b\u306b\u623b\u3059\n            undoChoice(state, choice);\n        }\n    }\n}\n
/* \u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af */\nvoid backtrack(State state, List<Choice> choices, List<State> res) {\n    // \u89e3\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\n    if (isSolution(state)) {\n        // \u89e3\u3092\u8a18\u9332\n        recordSolution(state, res);\n        // \u691c\u7d22\u3092\u505c\u6b62\n        return;\n    }\n    // \u3059\u3079\u3066\u306e\u9078\u629e\u80a2\u3092\u53cd\u5fa9\n    for (Choice choice : choices) {\n        // \u526a\u5b9a\uff1a\u9078\u629e\u80a2\u304c\u6709\u52b9\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\n        if (isValid(state, choice)) {\n            // \u8a66\u884c\uff1a\u9078\u629e\u3092\u884c\u3044\u3001\u72b6\u614b\u3092\u66f4\u65b0\n            makeChoice(state, choice);\n            backtrack(state, choices, res);\n            // \u5f8c\u9000\uff1a\u9078\u629e\u3092\u53d6\u308a\u6d88\u3057\u3001\u524d\u306e\u72b6\u614b\u306b\u623b\u3059\n            undoChoice(state, choice);\n        }\n    }\n}\n
/* \u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af */\nvoid Backtrack(State state, List<Choice> choices, List<State> res) {\n    // \u89e3\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\n    if (IsSolution(state)) {\n        // \u89e3\u3092\u8a18\u9332\n        RecordSolution(state, res);\n        // \u691c\u7d22\u3092\u505c\u6b62\n        return;\n    }\n    // \u3059\u3079\u3066\u306e\u9078\u629e\u80a2\u3092\u53cd\u5fa9\n    foreach (Choice choice in choices) {\n        // \u526a\u5b9a\uff1a\u9078\u629e\u80a2\u304c\u6709\u52b9\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\n        if (IsValid(state, choice)) {\n            // \u8a66\u884c\uff1a\u9078\u629e\u3092\u884c\u3044\u3001\u72b6\u614b\u3092\u66f4\u65b0\n            MakeChoice(state, choice);\n            Backtrack(state, choices, res);\n            // \u5f8c\u9000\uff1a\u9078\u629e\u3092\u53d6\u308a\u6d88\u3057\u3001\u524d\u306e\u72b6\u614b\u306b\u623b\u3059\n            UndoChoice(state, choice);\n        }\n    }\n}\n
/* \u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af */\nfunc backtrack(state *State, choices []Choice, res *[]State) {\n    // \u89e3\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\n    if isSolution(state) {\n        // \u89e3\u3092\u8a18\u9332\n        recordSolution(state, res)\n        // \u691c\u7d22\u3092\u505c\u6b62\n        return\n    }\n    // \u3059\u3079\u3066\u306e\u9078\u629e\u80a2\u3092\u53cd\u5fa9\n    for _, choice := range choices {\n        // \u526a\u5b9a\uff1a\u9078\u629e\u80a2\u304c\u6709\u52b9\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\n        if isValid(state, choice) {\n            // \u8a66\u884c\uff1a\u9078\u629e\u3092\u884c\u3044\u3001\u72b6\u614b\u3092\u66f4\u65b0\n            makeChoice(state, choice)\n            backtrack(state, choices, res)\n            // \u5f8c\u9000\uff1a\u9078\u629e\u3092\u53d6\u308a\u6d88\u3057\u3001\u524d\u306e\u72b6\u614b\u306b\u623b\u3059\n            undoChoice(state, choice)\n        }\n    }\n}\n
/* \u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af */\nfunc backtrack(state: inout State, choices: [Choice], res: inout [State]) {\n    // \u89e3\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\n    if isSolution(state: state) {\n        // \u89e3\u3092\u8a18\u9332\n        recordSolution(state: state, res: &res)\n        // \u691c\u7d22\u3092\u505c\u6b62\n        return\n    }\n    // \u3059\u3079\u3066\u306e\u9078\u629e\u80a2\u3092\u53cd\u5fa9\n    for choice in choices {\n        // \u526a\u5b9a\uff1a\u9078\u629e\u80a2\u304c\u6709\u52b9\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\n        if isValid(state: state, choice: choice) {\n            // \u8a66\u884c\uff1a\u9078\u629e\u3092\u884c\u3044\u3001\u72b6\u614b\u3092\u66f4\u65b0\n            makeChoice(state: &state, choice: choice)\n            backtrack(state: &state, choices: choices, res: &res)\n            // \u5f8c\u9000\uff1a\u9078\u629e\u3092\u53d6\u308a\u6d88\u3057\u3001\u524d\u306e\u72b6\u614b\u306b\u623b\u3059\n            undoChoice(state: &state, choice: choice)\n        }\n    }\n}\n
/* \u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af */\nfunction backtrack(state, choices, res) {\n    // \u89e3\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\n    if (isSolution(state)) {\n        // \u89e3\u3092\u8a18\u9332\n        recordSolution(state, res);\n        // \u691c\u7d22\u3092\u505c\u6b62\n        return;\n    }\n    // \u3059\u3079\u3066\u306e\u9078\u629e\u80a2\u3092\u53cd\u5fa9\n    for (let choice of choices) {\n        // \u526a\u5b9a\uff1a\u9078\u629e\u80a2\u304c\u6709\u52b9\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\n        if (isValid(state, choice)) {\n            // \u8a66\u884c\uff1a\u9078\u629e\u3092\u884c\u3044\u3001\u72b6\u614b\u3092\u66f4\u65b0\n            makeChoice(state, choice);\n            backtrack(state, choices, res);\n            // \u5f8c\u9000\uff1a\u9078\u629e\u3092\u53d6\u308a\u6d88\u3057\u3001\u524d\u306e\u72b6\u614b\u306b\u623b\u3059\n            undoChoice(state, choice);\n        }\n    }\n}\n
/* \u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af */\nfunction backtrack(state: State, choices: Choice[], res: State[]): void {\n    // \u89e3\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\n    if (isSolution(state)) {\n        // \u89e3\u3092\u8a18\u9332\n        recordSolution(state, res);\n        // \u691c\u7d22\u3092\u505c\u6b62\n        return;\n    }\n    // \u3059\u3079\u3066\u306e\u9078\u629e\u80a2\u3092\u53cd\u5fa9\n    for (let choice of choices) {\n        // \u526a\u5b9a\uff1a\u9078\u629e\u80a2\u304c\u6709\u52b9\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\n        if (isValid(state, choice)) {\n            // \u8a66\u884c\uff1a\u9078\u629e\u3092\u884c\u3044\u3001\u72b6\u614b\u3092\u66f4\u65b0\n            makeChoice(state, choice);\n            backtrack(state, choices, res);\n            // \u5f8c\u9000\uff1a\u9078\u629e\u3092\u53d6\u308a\u6d88\u3057\u3001\u524d\u306e\u72b6\u614b\u306b\u623b\u3059\n            undoChoice(state, choice);\n        }\n    }\n}\n
/* \u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af */\nvoid backtrack(State state, List<Choice>, List<State> res) {\n  // \u89e3\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\n  if (isSolution(state)) {\n    // \u89e3\u3092\u8a18\u9332\n    recordSolution(state, res);\n    // \u691c\u7d22\u3092\u505c\u6b62\n    return;\n  }\n  // \u3059\u3079\u3066\u306e\u9078\u629e\u80a2\u3092\u53cd\u5fa9\n  for (Choice choice in choices) {\n    // \u526a\u5b9a\uff1a\u9078\u629e\u80a2\u304c\u6709\u52b9\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\n    if (isValid(state, choice)) {\n      // \u8a66\u884c\uff1a\u9078\u629e\u3092\u884c\u3044\u3001\u72b6\u614b\u3092\u66f4\u65b0\n      makeChoice(state, choice);\n      backtrack(state, choices, res);\n      // \u5f8c\u9000\uff1a\u9078\u629e\u3092\u53d6\u308a\u6d88\u3057\u3001\u524d\u306e\u72b6\u614b\u306b\u623b\u3059\n      undoChoice(state, choice);\n    }\n  }\n}\n
/* \u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af */\nfn backtrack(state: &mut State, choices: &Vec<Choice>, res: &mut Vec<State>) {\n    // \u89e3\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\n    if is_solution(state) {\n        // \u89e3\u3092\u8a18\u9332\n        record_solution(state, res);\n        // \u691c\u7d22\u3092\u505c\u6b62\n        return;\n    }\n    // \u3059\u3079\u3066\u306e\u9078\u629e\u80a2\u3092\u53cd\u5fa9\n    for choice in choices {\n        // \u526a\u5b9a\uff1a\u9078\u629e\u80a2\u304c\u6709\u52b9\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\n        if is_valid(state, choice) {\n            // \u8a66\u884c\uff1a\u9078\u629e\u3092\u884c\u3044\u3001\u72b6\u614b\u3092\u66f4\u65b0\n            make_choice(state, choice);\n            backtrack(state, choices, res);\n            // \u5f8c\u9000\uff1a\u9078\u629e\u3092\u53d6\u308a\u6d88\u3057\u3001\u524d\u306e\u72b6\u614b\u306b\u623b\u3059\n            undo_choice(state, choice);\n        }\n    }\n}\n
/* \u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af */\nvoid backtrack(State *state, Choice *choices, int numChoices, State *res, int numRes) {\n    // \u89e3\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\n    if (isSolution(state)) {\n        // \u89e3\u3092\u8a18\u9332\n        recordSolution(state, res, numRes);\n        // \u691c\u7d22\u3092\u505c\u6b62\n        return;\n    }\n    // \u3059\u3079\u3066\u306e\u9078\u629e\u80a2\u3092\u53cd\u5fa9\n    for (int i = 0; i < numChoices; i++) {\n        // \u526a\u5b9a\uff1a\u9078\u629e\u80a2\u304c\u6709\u52b9\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\n        if (isValid(state, &choices[i])) {\n            // \u8a66\u884c\uff1a\u9078\u629e\u3092\u884c\u3044\u3001\u72b6\u614b\u3092\u66f4\u65b0\n            makeChoice(state, &choices[i]);\n            backtrack(state, choices, numChoices, res, numRes);\n            // \u5f8c\u9000\uff1a\u9078\u629e\u3092\u53d6\u308a\u6d88\u3057\u3001\u524d\u306e\u72b6\u614b\u306b\u623b\u3059\n            undoChoice(state, &choices[i]);\n        }\n    }\n}\n
/* \u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af */\nfun backtrack(state: State?, choices: List<Choice?>, res: List<State?>?) {\n    // \u89e3\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\n    if (isSolution(state)) {\n        // \u89e3\u3092\u8a18\u9332\n        recordSolution(state, res)\n        // \u691c\u7d22\u3092\u505c\u6b62\n        return\n    }\n    // \u3059\u3079\u3066\u306e\u9078\u629e\u80a2\u3092\u53cd\u5fa9\n    for (choice in choices) {\n        // \u526a\u5b9a\uff1a\u9078\u629e\u80a2\u304c\u6709\u52b9\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\n        if (isValid(state, choice)) {\n            // \u8a66\u884c\uff1a\u9078\u629e\u3092\u884c\u3044\u3001\u72b6\u614b\u3092\u66f4\u65b0\n            makeChoice(state, choice)\n            backtrack(state, choices, res)\n            // \u5f8c\u9000\uff1a\u9078\u629e\u3092\u53d6\u308a\u6d88\u3057\u3001\u524d\u306e\u72b6\u614b\u306b\u623b\u3059\n            undoChoice(state, choice)\n        }\n    }\n}\n
### \u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af ###\ndef backtrack(state, choices, res)\n    # \u89e3\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\n    if is_solution?(state)\n        # \u89e3\u3092\u8a18\u9332\n        record_solution(state, res)\n        return\n    end\n\n    # \u3059\u3079\u3066\u306e\u9078\u629e\u80a2\u3092\u53cd\u5fa9\n    for choice in choices\n        # \u526a\u5b9a\uff1a\u9078\u629e\u80a2\u304c\u6709\u52b9\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\n        if is_valid?(state, choice)\n            # \u8a66\u884c\uff1a\u9078\u629e\u3092\u884c\u3044\u3001\u72b6\u614b\u3092\u66f4\u65b0\n            make_choice(state, choice)\n            backtrack(state, choices, res)\n            # \u5f8c\u9000\uff1a\u9078\u629e\u3092\u53d6\u308a\u6d88\u3057\u3001\u524d\u306e\u72b6\u614b\u306b\u623b\u3059\n            undo_choice(state, choice)\n        end\n    end\nend\n

\u6b21\u306b\u3001\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u30b3\u30fc\u30c9\u306b\u57fa\u3065\u3044\u3066\u4f8b\u984c 3 \u3092\u89e3\u304d\u307e\u3059\u3002\u72b6\u614b state \u306f\u30ce\u30fc\u30c9\u306e\u8d70\u67fb\u7d4c\u8def\u3092\u8868\u3057\u3001\u9078\u629e\u80a2 choices \u306f\u73fe\u5728\u30ce\u30fc\u30c9\u306e\u5de6\u5b50\u30ce\u30fc\u30c9\u3068\u53f3\u5b50\u30ce\u30fc\u30c9\u3001\u7d50\u679c res \u306f\u7d4c\u8def\u30ea\u30b9\u30c8\u3067\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby preorder_traversal_iii_template.py
def is_solution(state: list[TreeNode]) -> bool:\n    \"\"\"\u73fe\u5728\u306e\u72b6\u614b\u304c\u89e3\u304b\u3069\u3046\u304b\u3092\u5224\u5b9a\"\"\"\n    return state and state[-1].val == 7\n\ndef record_solution(state: list[TreeNode], res: list[list[TreeNode]]):\n    \"\"\"\u89e3\u3092\u8a18\u9332\"\"\"\n    res.append(list(state))\n\ndef is_valid(state: list[TreeNode], choice: TreeNode) -> bool:\n    \"\"\"\u73fe\u5728\u306e\u72b6\u614b\u4e0b\u3067\u9078\u629e\u304c\u5408\u6cd5\u304b\u3069\u3046\u304b\u3092\u5224\u5b9a\"\"\"\n    return choice is not None and choice.val != 3\n\ndef make_choice(state: list[TreeNode], choice: TreeNode):\n    \"\"\"\u72b6\u614b\u3092\u66f4\u65b0\"\"\"\n    state.append(choice)\n\ndef undo_choice(state: list[TreeNode], choice: TreeNode):\n    \"\"\"\u72b6\u614b\u3092\u5fa9\u5143\"\"\"\n    state.pop()\n\ndef backtrack(\n    state: list[TreeNode], choices: list[TreeNode], res: list[list[TreeNode]]\n):\n    \"\"\"\u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\uff1a\u4f8b\u4e09\"\"\"\n    # \u89e3\u304b\u3069\u3046\u304b\u3092\u30c1\u30a7\u30c3\u30af\n    if is_solution(state):\n        # \u89e3\u3092\u8a18\u9332\n        record_solution(state, res)\n    # \u3059\u3079\u3066\u306e\u9078\u629e\u80a2\u3092\u8d70\u67fb\n    for choice in choices:\n        # \u679d\u5208\u308a\uff1a\u9078\u629e\u304c\u5408\u6cd5\u304b\u3069\u3046\u304b\u3092\u30c1\u30a7\u30c3\u30af\n        if is_valid(state, choice):\n            # \u8a66\u884c\uff1a\u9078\u629e\u3092\u884c\u3044\u3001\u72b6\u614b\u3092\u66f4\u65b0\n            make_choice(state, choice)\n            # \u6b21\u306e\u9078\u629e\u30e9\u30a6\u30f3\u30c9\u306b\u9032\u3080\n            backtrack(state, [choice.left, choice.right], res)\n            # \u64a4\u56de\uff1a\u9078\u629e\u3092\u53d6\u308a\u6d88\u3057\u3001\u524d\u306e\u72b6\u614b\u306b\u5fa9\u5143\n            undo_choice(state, choice)\n
preorder_traversal_iii_template.cpp
/* \u73fe\u5728\u306e\u72b6\u614b\u304c\u89e3\u304b\u3069\u3046\u304b\u3092\u5224\u5b9a */\nbool isSolution(vector<TreeNode *> &state) {\n    return !state.empty() && state.back()->val == 7;\n}\n\n/* \u89e3\u3092\u8a18\u9332 */\nvoid recordSolution(vector<TreeNode *> &state, vector<vector<TreeNode *>> &res) {\n    res.push_back(state);\n}\n\n/* \u73fe\u5728\u306e\u72b6\u614b\u4e0b\u3067\u9078\u629e\u304c\u5408\u6cd5\u304b\u3069\u3046\u304b\u3092\u5224\u5b9a */\nbool isValid(vector<TreeNode *> &state, TreeNode *choice) {\n    return choice != nullptr && choice->val != 3;\n}\n\n/* \u72b6\u614b\u3092\u66f4\u65b0 */\nvoid makeChoice(vector<TreeNode *> &state, TreeNode *choice) {\n    state.push_back(choice);\n}\n\n/* \u72b6\u614b\u3092\u5fa9\u5143 */\nvoid undoChoice(vector<TreeNode *> &state, TreeNode *choice) {\n    state.pop_back();\n}\n\n/* \u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\uff1a\u4f8b\uff13 */\nvoid backtrack(vector<TreeNode *> &state, vector<TreeNode *> &choices, vector<vector<TreeNode *>> &res) {\n    // \u89e3\u304b\u3069\u3046\u304b\u3092\u30c1\u30a7\u30c3\u30af\n    if (isSolution(state)) {\n        // \u89e3\u3092\u8a18\u9332\n        recordSolution(state, res);\n    }\n    // \u3059\u3079\u3066\u306e\u9078\u629e\u80a2\u3092\u8d70\u67fb\n    for (TreeNode *choice : choices) {\n        // \u526a\u5b9a\uff1a\u9078\u629e\u304c\u5408\u6cd5\u304b\u3069\u3046\u304b\u3092\u30c1\u30a7\u30c3\u30af\n        if (isValid(state, choice)) {\n            // \u8a66\u884c\uff1a\u9078\u629e\u3092\u884c\u3044\u3001\u72b6\u614b\u3092\u66f4\u65b0\n            makeChoice(state, choice);\n            // \u6b21\u306e\u30e9\u30a6\u30f3\u30c9\u306e\u9078\u629e\u306b\u9032\u3080\n            vector<TreeNode *> nextChoices{choice->left, choice->right};\n            backtrack(state, nextChoices, res);\n            // \u56de\u9000\uff1a\u9078\u629e\u3092\u53d6\u308a\u6d88\u3057\u3001\u524d\u306e\u72b6\u614b\u306b\u5fa9\u5143\n            undoChoice(state, choice);\n        }\n    }\n}\n
preorder_traversal_iii_template.java
/* \u73fe\u5728\u306e\u72b6\u614b\u304c\u89e3\u304b\u3069\u3046\u304b\u3092\u5224\u5b9a */\nboolean isSolution(List<TreeNode> state) {\n    return !state.isEmpty() && state.get(state.size() - 1).val == 7;\n}\n\n/* \u89e3\u3092\u8a18\u9332 */\nvoid recordSolution(List<TreeNode> state, List<List<TreeNode>> res) {\n    res.add(new ArrayList<>(state));\n}\n\n/* \u73fe\u5728\u306e\u72b6\u614b\u4e0b\u3067\u9078\u629e\u304c\u5408\u6cd5\u304b\u3069\u3046\u304b\u3092\u5224\u5b9a */\nboolean isValid(List<TreeNode> state, TreeNode choice) {\n    return choice != null && choice.val != 3;\n}\n\n/* \u72b6\u614b\u3092\u66f4\u65b0 */\nvoid makeChoice(List<TreeNode> state, TreeNode choice) {\n    state.add(choice);\n}\n\n/* \u72b6\u614b\u3092\u5fa9\u5143 */\nvoid undoChoice(List<TreeNode> state, TreeNode choice) {\n    state.remove(state.size() - 1);\n}\n\n/* \u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\uff1a\u4f8b\uff13 */\nvoid backtrack(List<TreeNode> state, List<TreeNode> choices, List<List<TreeNode>> res) {\n    // \u89e3\u304b\u3069\u3046\u304b\u3092\u30c1\u30a7\u30c3\u30af\n    if (isSolution(state)) {\n        // \u89e3\u3092\u8a18\u9332\n        recordSolution(state, res);\n    }\n    // \u3059\u3079\u3066\u306e\u9078\u629e\u80a2\u3092\u8d70\u67fb\n    for (TreeNode choice : choices) {\n        // \u526a\u5b9a\uff1a\u9078\u629e\u304c\u5408\u6cd5\u304b\u3069\u3046\u304b\u3092\u30c1\u30a7\u30c3\u30af\n        if (isValid(state, choice)) {\n            // \u8a66\u884c\uff1a\u9078\u629e\u3092\u884c\u3044\u3001\u72b6\u614b\u3092\u66f4\u65b0\n            makeChoice(state, choice);\n            // \u6b21\u306e\u30e9\u30a6\u30f3\u30c9\u306e\u9078\u629e\u306b\u9032\u3080\n            backtrack(state, Arrays.asList(choice.left, choice.right), res);\n            // \u56de\u9000\uff1a\u9078\u629e\u3092\u53d6\u308a\u6d88\u3057\u3001\u524d\u306e\u72b6\u614b\u306b\u5fa9\u5143\n            undoChoice(state, choice);\n        }\n    }\n}\n
preorder_traversal_iii_template.cs
[class]{preorder_traversal_iii_template}-[func]{IsSolution}\n\n[class]{preorder_traversal_iii_template}-[func]{RecordSolution}\n\n[class]{preorder_traversal_iii_template}-[func]{IsValid}\n\n[class]{preorder_traversal_iii_template}-[func]{MakeChoice}\n\n[class]{preorder_traversal_iii_template}-[func]{UndoChoice}\n\n[class]{preorder_traversal_iii_template}-[func]{Backtrack}\n
preorder_traversal_iii_template.go
[class]{}-[func]{isSolution}\n\n[class]{}-[func]{recordSolution}\n\n[class]{}-[func]{isValid}\n\n[class]{}-[func]{makeChoice}\n\n[class]{}-[func]{undoChoice}\n\n[class]{}-[func]{backtrackIII}\n
preorder_traversal_iii_template.swift
[class]{}-[func]{isSolution}\n\n[class]{}-[func]{recordSolution}\n\n[class]{}-[func]{isValid}\n\n[class]{}-[func]{makeChoice}\n\n[class]{}-[func]{undoChoice}\n\n[class]{}-[func]{backtrack}\n
preorder_traversal_iii_template.js
[class]{}-[func]{isSolution}\n\n[class]{}-[func]{recordSolution}\n\n[class]{}-[func]{isValid}\n\n[class]{}-[func]{makeChoice}\n\n[class]{}-[func]{undoChoice}\n\n[class]{}-[func]{backtrack}\n
preorder_traversal_iii_template.ts
[class]{}-[func]{isSolution}\n\n[class]{}-[func]{recordSolution}\n\n[class]{}-[func]{isValid}\n\n[class]{}-[func]{makeChoice}\n\n[class]{}-[func]{undoChoice}\n\n[class]{}-[func]{backtrack}\n
preorder_traversal_iii_template.dart
[class]{}-[func]{isSolution}\n\n[class]{}-[func]{recordSolution}\n\n[class]{}-[func]{isValid}\n\n[class]{}-[func]{makeChoice}\n\n[class]{}-[func]{undoChoice}\n\n[class]{}-[func]{backtrack}\n
preorder_traversal_iii_template.rs
[class]{}-[func]{is_solution}\n\n[class]{}-[func]{record_solution}\n\n[class]{}-[func]{is_valid}\n\n[class]{}-[func]{make_choice}\n\n[class]{}-[func]{undo_choice}\n\n[class]{}-[func]{backtrack}\n
preorder_traversal_iii_template.c
[class]{}-[func]{isSolution}\n\n[class]{}-[func]{recordSolution}\n\n[class]{}-[func]{isValid}\n\n[class]{}-[func]{makeChoice}\n\n[class]{}-[func]{undoChoice}\n\n[class]{}-[func]{backtrack}\n
preorder_traversal_iii_template.kt
[class]{}-[func]{isSolution}\n\n[class]{}-[func]{recordSolution}\n\n[class]{}-[func]{isValid}\n\n[class]{}-[func]{makeChoice}\n\n[class]{}-[func]{undoChoice}\n\n[class]{}-[func]{backtrack}\n
preorder_traversal_iii_template.rb
[class]{}-[func]{is_solution}\n\n[class]{}-[func]{record_solution}\n\n[class]{}-[func]{is_valid}\n\n[class]{}-[func]{make_choice}\n\n[class]{}-[func]{undo_choice}\n\n[class]{}-[func]{backtrack}\n

\u554f\u984c\u6587\u306e\u610f\u5473\u306b\u5f93\u3044\u3001\u5024\u304c \\(7\\) \u306e\u30ce\u30fc\u30c9\u3092\u898b\u3064\u3051\u305f\u5f8c\u3082\u63a2\u7d22\u3092\u7d9a\u3051\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u3057\u305f\u304c\u3063\u3066\u3001\u89e3\u3092\u8a18\u9332\u3057\u305f\u5f8c\u306e return \u6587\u3092\u524a\u9664\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u6b21\u306e\u56f3\u306f\u3001return \u6587\u3092\u4fdd\u6301\u3059\u308b\u5834\u5408\u3068\u524a\u9664\u3059\u308b\u5834\u5408\u306e\u63a2\u7d22\u904e\u7a0b\u306e\u6bd4\u8f03\u3067\u3059\u3002

\u56f3 13-4 \u00a0 return\u3092\u4fdd\u6301\u3059\u308b\u5834\u5408\u3068\u524a\u9664\u3059\u308b\u5834\u5408\u306e\u63a2\u7d22\u904e\u7a0b\u306e\u6bd4\u8f03

\u524d\u9806\u8d70\u67fb\u306b\u57fa\u3065\u304f\u30b3\u30fc\u30c9\u5b9f\u88c5\u3068\u6bd4\u3079\u308b\u3068\u3001\u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306b\u57fa\u3065\u304f\u5b9f\u88c5\u306f\u3084\u3084\u5197\u9577\u306b\u898b\u3048\u307e\u3059\u304c\u3001\u6c4e\u7528\u6027\u306f\u3088\u308a\u9ad8\u3044\u3067\u3059\u3002\u5b9f\u969b\u3001\u591a\u304f\u306e\u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u554f\u984c\u306f\u3053\u306e\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u4e0b\u3067\u89e3\u304f\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u5177\u4f53\u7684\u306a\u554f\u984c\u306b\u5fdc\u3058\u3066 state \u3068 choices \u3092\u5b9a\u7fa9\u3057\u3001\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u5185\u306e\u5404\u30e1\u30bd\u30c3\u30c9\u3092\u5b9f\u88c5\u3059\u308c\u3070\u3088\u3044\u306e\u3067\u3059\u3002

"},{"location":"chapter_backtracking/backtracking_algorithm/#1314","title":"13.1.4 \u00a0 \u3088\u304f\u4f7f\u308f\u308c\u308b\u7528\u8a9e","text":"

\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u554f\u984c\u3092\u3088\u308a\u660e\u78ba\u306b\u5206\u6790\u3059\u308b\u305f\u3081\u306b\u3001\u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3067\u3088\u304f\u4f7f\u308f\u308c\u308b\u7528\u8a9e\u306e\u610f\u5473\u3092\u307e\u3068\u3081\u3001\u4f8b\u984c 3 \u306e\u5bfe\u5fdc\u4f8b\u3092\u4ee5\u4e0b\u306e\u8868\u306b\u793a\u3057\u307e\u3059\u3002

\u8868 13-1 \u00a0 \u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3067\u3088\u304f\u4f7f\u308f\u308c\u308b\u7528\u8a9e

\u540d\u79f0 \u5b9a\u7fa9 \u4f8b\u984c 3 \u89e3\uff08solution\uff09 \u89e3\u306f\u554f\u984c\u306e\u7279\u5b9a\u6761\u4ef6\u3092\u6e80\u305f\u3059\u7b54\u3048\u3067\u3042\u308a\u30011 \u3064\u307e\u305f\u306f\u8907\u6570\u5b58\u5728\u3059\u308b\u53ef\u80fd\u6027\u304c\u3042\u308b \u6839\u30ce\u30fc\u30c9\u304b\u3089\u30ce\u30fc\u30c9 \\(7\\) \u307e\u3067\u306e\u5236\u7d04\u6761\u4ef6\u3092\u6e80\u305f\u3059\u3059\u3079\u3066\u306e\u7d4c\u8def \u5236\u7d04\u6761\u4ef6\uff08constraint\uff09 \u5236\u7d04\u6761\u4ef6\u306f\u3001\u89e3\u306e\u5b9f\u73fe\u53ef\u80fd\u6027\u3092\u5236\u9650\u3059\u308b\u6761\u4ef6\u3067\u3042\u308a\u3001\u901a\u5e38\u306f\u679d\u5208\u308a\u306b\u4f7f\u7528\u3055\u308c\u308b \u7d4c\u8def\u306b\u30ce\u30fc\u30c9 \\(3\\) \u3092\u542b\u307e\u306a\u3044 \u72b6\u614b\uff08state\uff09 \u72b6\u614b\u306f\u3001\u3042\u308b\u6642\u70b9\u3067\u306e\u554f\u984c\u306e\u72b6\u6cc1\u3092\u8868\u3057\u3001\u3053\u308c\u307e\u3067\u306b\u884c\u3063\u305f\u9078\u629e\u3092\u542b\u3080 \u73fe\u5728\u8a2a\u554f\u3057\u305f\u30ce\u30fc\u30c9\u7d4c\u8def\u3001\u3059\u306a\u308f\u3061 path \u30ce\u30fc\u30c9\u30ea\u30b9\u30c8 \u8a66\u884c\uff08attempt\uff09 \u8a66\u884c\u306f\u3001\u5229\u7528\u53ef\u80fd\u306a\u9078\u629e\u80a2\u306b\u57fa\u3065\u3044\u3066\u89e3\u7a7a\u9593\u3092\u63a2\u7d22\u3059\u308b\u904e\u7a0b\u3067\u3042\u308a\u3001\u9078\u629e\u3092\u884c\u3044\u3001\u72b6\u614b\u3092\u66f4\u65b0\u3057\u3001\u89e3\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\u3059\u308b \u5de6\uff08\u53f3\uff09\u5b50\u30ce\u30fc\u30c9\u3092\u518d\u5e30\u7684\u306b\u8a2a\u554f\u3057\u3001\u30ce\u30fc\u30c9\u3092 path \u306b\u8ffd\u52a0\u3057\u3001\u30ce\u30fc\u30c9\u306e\u5024\u304c \\(7\\) \u304b\u3092\u78ba\u8a8d\u3059\u308b \u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30af\uff08backtracking\uff09 \u5236\u7d04\u6761\u4ef6\u3092\u6e80\u305f\u3055\u306a\u3044\u72b6\u614b\u306b\u906d\u9047\u3057\u305f\u5834\u5408\u3001\u4ee5\u524d\u306e\u9078\u629e\u3092\u53d6\u308a\u6d88\u3057\u3066\u524d\u306e\u72b6\u614b\u306b\u623b\u308b\u3053\u3068 \u8449\u30ce\u30fc\u30c9\u3092\u8d8a\u3048\u305f\u3068\u304d\u3001\u63a2\u7d22\u7d42\u4e86\u3001\u5024\u304c \\(3\\) \u306e\u30ce\u30fc\u30c9\u306b\u906d\u9047\u3057\u305f\u3068\u304d\u63a2\u7d22\u3092\u7d42\u4e86\u3057\u3001\u95a2\u6570\u304c\u623b\u308b \u679d\u5208\u308a\uff08pruning\uff09 \u554f\u984c\u306e\u7279\u6027\u3084\u5236\u7d04\u6761\u4ef6\u306b\u57fa\u3065\u304d\u3001\u7121\u610f\u5473\u306a\u63a2\u7d22\u7d4c\u8def\u3092\u907f\u3051\u308b\u65b9\u6cd5\u3067\u3042\u308a\u3001\u63a2\u7d22\u52b9\u7387\u3092\u5411\u4e0a\u3055\u305b\u308b \u5024\u304c \\(3\\) \u306e\u30ce\u30fc\u30c9\u306b\u906d\u9047\u3057\u305f\u5834\u5408\u3001\u305d\u308c\u4ee5\u4e0a\u63a2\u7d22\u3057\u306a\u3044

Tip

\u554f\u984c\u3001\u89e3\u3001\u72b6\u614b\u306a\u3069\u306e\u6982\u5ff5\u306f\u4e00\u822c\u7684\u306a\u3082\u306e\u3067\u3042\u308a\u3001\u5206\u5272\u7d71\u6cbb\u3001\u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u3001\u52d5\u7684\u8a08\u753b\u6cd5\u3001\u8caa\u6b32\u6cd5\u306a\u3069\u306e\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306b\u3082\u95a2\u4fc2\u3057\u307e\u3059\u3002

"},{"location":"chapter_backtracking/backtracking_algorithm/#1315","title":"13.1.5 \u00a0 \u9577\u6240\u3068\u9650\u754c","text":"

\u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306f\u672c\u8cea\u7684\u306b\u6df1\u3055\u512a\u5148\u63a2\u7d22\uff08DFS\uff09\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u4e00\u7a2e\u3067\u3042\u308a\u3001\u6761\u4ef6\u3092\u6e80\u305f\u3059\u89e3\u3092\u898b\u3064\u3051\u308b\u307e\u3067\u3042\u3089\u3086\u308b\u53ef\u80fd\u306a\u89e3\u3092\u8a66\u307f\u307e\u3059\u3002\u3053\u306e\u65b9\u6cd5\u306e\u5229\u70b9\u306f\u3001\u3059\u3079\u3066\u306e\u53ef\u80fd\u306a\u89e3\u3092\u898b\u3064\u3051\u3089\u308c\u308b\u70b9\u3067\u3042\u308a\u3001\u9069\u5207\u306a\u679d\u5208\u308a\u3092\u884c\u3048\u3070\u52b9\u7387\u304c\u9ad8\u3044\u3053\u3068\u3067\u3059\u3002

\u3057\u304b\u3057\u3001\u5927\u898f\u6a21\u307e\u305f\u306f\u8907\u96d1\u306a\u554f\u984c\u3092\u6271\u3046\u5834\u5408\u3001\u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u5b9f\u884c\u52b9\u7387\u306f\u8a31\u5bb9\u3067\u304d\u306a\u3044\u307b\u3069\u4f4e\u4e0b\u3059\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002

\u305d\u308c\u3067\u3082\u306a\u304a\u3001\u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306f\u7279\u5b9a\u306e\u63a2\u7d22\u554f\u984c\u3084\u5236\u7d04\u6e80\u8db3\u554f\u984c\u306e\u6700\u826f\u306e\u89e3\u6cd5\u3067\u3042\u308b\u3053\u3068\u304c\u591a\u3044\u3067\u3059\u3002\u3053\u308c\u3089\u306e\u554f\u984c\u3067\u306f\u3001\u3069\u306e\u9078\u629e\u304c\u6709\u52b9\u306a\u89e3\u3092\u751f\u6210\u3059\u308b\u304b\u3092\u4e88\u6e2c\u3067\u304d\u306a\u3044\u305f\u3081\u3001\u3059\u3079\u3066\u306e\u53ef\u80fd\u306a\u9078\u629e\u3092\u8a66\u3059\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u306e\u3088\u3046\u306a\u5834\u5408\u3001**\u52b9\u7387\u306e\u6700\u9069\u5316\u304c\u9375**\u3068\u306a\u308a\u307e\u3059\u3002\u4e00\u822c\u7684\u306a\u6700\u9069\u5316\u624b\u6cd5\u306f\u6b21\u306e 2 \u3064\u3067\u3059\u3002

"},{"location":"chapter_backtracking/backtracking_algorithm/#1316","title":"13.1.6 \u00a0 \u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u306e\u5178\u578b\u7684\u306a\u4f8b\u984c","text":"

\u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306f\u3001\u591a\u304f\u306e\u63a2\u7d22\u554f\u984c\u3001\u5236\u7d04\u6e80\u8db3\u554f\u984c\u3001\u7d44\u5408\u305b\u6700\u9069\u5316\u554f\u984c\u3092\u89e3\u304f\u306e\u306b\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002

\u63a2\u7d22\u554f\u984c\uff1a\u3053\u306e\u7a2e\u306e\u554f\u984c\u306e\u76ee\u6a19\u306f\u3001\u7279\u5b9a\u306e\u6761\u4ef6\u3092\u6e80\u305f\u3059\u89e3\u3092\u898b\u3064\u3051\u308b\u3053\u3068\u3067\u3059\u3002

\u5236\u7d04\u6e80\u8db3\u554f\u984c\uff1a\u3053\u306e\u7a2e\u306e\u554f\u984c\u306e\u76ee\u6a19\u306f\u3001\u3059\u3079\u3066\u306e\u5236\u7d04\u6761\u4ef6\u3092\u6e80\u305f\u3059\u89e3\u3092\u898b\u3064\u3051\u308b\u3053\u3068\u3067\u3059\u3002

\u7d44\u5408\u305b\u6700\u9069\u5316\u554f\u984c\uff1a\u3053\u306e\u7a2e\u306e\u554f\u984c\u306e\u76ee\u6a19\u306f\u3001\u7d44\u5408\u305b\u7a7a\u9593\u5185\u3067\u7279\u5b9a\u306e\u6761\u4ef6\u3092\u6e80\u305f\u3059\u6700\u9069\u89e3\u3092\u898b\u3064\u3051\u308b\u3053\u3068\u3067\u3059\u3002

\u6ce8\u610f\u3059\u3079\u304d\u306f\u3001\u591a\u304f\u306e\u7d44\u5408\u305b\u6700\u9069\u5316\u554f\u984c\u306b\u5bfe\u3057\u3066\u3001\u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u304c\u6700\u9069\u89e3\u6cd5\u3067\u306f\u306a\u3044\u3068\u3044\u3046\u3053\u3068\u3067\u3059\u3002

"},{"location":"chapter_backtracking/n_queens_problem/","title":"13.4 \u00a0 N\u30af\u30a4\u30fc\u30f3\u554f\u984c","text":"

Question

\u30c1\u30a7\u30b9\u306e\u30eb\u30fc\u30eb\u306b\u3088\u308b\u3068\u3001\u30af\u30a4\u30fc\u30f3\u306f\u540c\u3058\u884c\u3001\u5217\u3001\u307e\u305f\u306f\u5bfe\u89d2\u7dda\u4e0a\u306e\u99d2\u3092\u653b\u6483\u3067\u304d\u307e\u3059\u3002\\(n\\) \u500b\u306e\u30af\u30a4\u30fc\u30f3\u3068 \\(n \\times n\\) \u306e\u30c1\u30a7\u30b9\u30dc\u30fc\u30c9\u304c\u4e0e\u3048\u3089\u308c\u305f\u5834\u5408\u30012\u3064\u306e\u30af\u30a4\u30fc\u30f3\u304c\u4e92\u3044\u306b\u653b\u6483\u3067\u304d\u306a\u3044\u914d\u7f6e\u3092\u898b\u3064\u3051\u3066\u304f\u3060\u3055\u3044\u3002

\u4ee5\u4e0b\u306e\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\\(n = 4\\) \u306e\u5834\u5408\u30012\u3064\u306e\u89e3\u304c\u3042\u308a\u307e\u3059\u3002\u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u89b3\u70b9\u304b\u3089\u3001\\(n \\times n\\) \u306e\u30c1\u30a7\u30b9\u30dc\u30fc\u30c9\u306b\u306f \\(n^2\\) \u500b\u306e\u30de\u30b9\u304c\u3042\u308a\u3001\u3059\u3079\u3066\u306e\u53ef\u80fd\u306a\u9078\u629e\u80a2 choices \u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002\u30c1\u30a7\u30b9\u30dc\u30fc\u30c9\u306e\u72b6\u614b state \u306f\u3001\u5404\u30af\u30a4\u30fc\u30f3\u304c\u914d\u7f6e\u3055\u308c\u308b\u306b\u3064\u308c\u3066\u7d99\u7d9a\u7684\u306b\u5909\u5316\u3057\u307e\u3059\u3002

\u56f3 13-15 \u00a0 4\u30af\u30a4\u30fc\u30f3\u554f\u984c\u306e\u89e3

\u4ee5\u4e0b\u306e\u56f3\u306f\u3001\u3053\u306e\u554f\u984c\u306e3\u3064\u306e\u5236\u7d04\u3092\u793a\u3057\u3066\u3044\u307e\u3059\uff1a\u8907\u6570\u306e\u30af\u30a4\u30fc\u30f3\u306f\u540c\u3058\u884c\u3001\u5217\u3001\u307e\u305f\u306f\u5bfe\u89d2\u7dda\u3092\u5360\u6709\u3067\u304d\u307e\u305b\u3093\u3002\u5bfe\u89d2\u7dda\u306f\u4e3b\u5bfe\u89d2\u7dda \\ \u3068\u526f\u5bfe\u89d2\u7dda / \u306b\u5206\u304b\u308c\u308b\u3053\u3068\u306b\u6ce8\u610f\u3059\u308b\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002

\u56f3 13-16 \u00a0 N\u30af\u30a4\u30fc\u30f3\u554f\u984c\u306e\u5236\u7d04

"},{"location":"chapter_backtracking/n_queens_problem/#1","title":"1. \u00a0 \u884c\u3054\u3068\u306e\u914d\u7f6e\u6226\u7565","text":"

\u30af\u30a4\u30fc\u30f3\u306e\u6570\u304c\u30c1\u30a7\u30b9\u30dc\u30fc\u30c9\u306e\u884c\u6570\u3068\u7b49\u3057\u304f\u3001\u3069\u3061\u3089\u3082 \\(n\\) \u3067\u3042\u308b\u305f\u3081\u3001**\u30c1\u30a7\u30b9\u30dc\u30fc\u30c9\u306e\u5404\u884c\u306b\u306f1\u3064\u306e\u30af\u30a4\u30fc\u30f3\u306e\u307f\u304c\u914d\u7f6e\u3067\u304d\u308b\u3053\u3068\u304c**\u5bb9\u6613\u306b\u7d50\u8ad6\u4ed8\u3051\u3089\u308c\u307e\u3059\u3002

\u3053\u308c\u306f\u3001\u884c\u3054\u3068\u306e\u914d\u7f6e\u6226\u7565\u3092\u63a1\u7528\u3067\u304d\u308b\u3053\u3068\u3092\u610f\u5473\u3057\u307e\u3059\uff1a\u6700\u521d\u306e\u884c\u304b\u3089\u958b\u59cb\u3057\u3066\u3001\u6700\u5f8c\u306e\u884c\u306b\u5230\u9054\u3059\u308b\u307e\u3067\u884c\u3054\u3068\u306b1\u3064\u306e\u30af\u30a4\u30fc\u30f3\u3092\u914d\u7f6e\u3057\u307e\u3059\u3002

\u4ee5\u4e0b\u306e\u56f3\u306f\u30014\u30af\u30a4\u30fc\u30f3\u554f\u984c\u306e\u884c\u3054\u3068\u306e\u914d\u7f6e\u30d7\u30ed\u30bb\u30b9\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002\u30b9\u30da\u30fc\u30b9\u306e\u5236\u9650\u306b\u3088\u308a\u3001\u56f3\u306f\u6700\u521d\u306e\u884c\u306e1\u3064\u306e\u691c\u7d22\u5206\u5c90\u306e\u307f\u3092\u5c55\u958b\u3057\u3001\u5217\u3068\u5bfe\u89d2\u7dda\u306e\u5236\u7d04\u3092\u6e80\u305f\u3055\u306a\u3044\u914d\u7f6e\u3092\u526a\u5b9a\u3057\u307e\u3059\u3002

\u56f3 13-17 \u00a0 \u884c\u3054\u3068\u306e\u914d\u7f6e\u6226\u7565

\u672c\u8cea\u7684\u306b\u3001\u884c\u3054\u3068\u306e\u914d\u7f6e\u6226\u7565\u306f\u526a\u5b9a\u95a2\u6570\u3068\u3057\u3066\u6a5f\u80fd\u3057\u3001\u540c\u3058\u884c\u306b\u8907\u6570\u306e\u30af\u30a4\u30fc\u30f3\u3092\u914d\u7f6e\u3059\u308b\u3059\u3079\u3066\u306e\u691c\u7d22\u5206\u5c90\u3092\u9664\u53bb\u3057\u307e\u3059\u3002

"},{"location":"chapter_backtracking/n_queens_problem/#2","title":"2. \u00a0 \u5217\u3068\u5bfe\u89d2\u7dda\u306e\u526a\u5b9a","text":"

\u5217\u306e\u5236\u7d04\u3092\u6e80\u305f\u3059\u305f\u3081\u306b\u3001\u9577\u3055 \\(n\\) \u306e\u30d6\u30fc\u30eb\u914d\u5217 cols \u3092\u4f7f\u7528\u3057\u3066\u3001\u5404\u5217\u306b\u30af\u30a4\u30fc\u30f3\u304c\u5360\u6709\u3055\u308c\u3066\u3044\u308b\u304b\u3069\u3046\u304b\u3092\u8ffd\u8de1\u3067\u304d\u307e\u3059\u3002\u5404\u914d\u7f6e\u6c7a\u5b9a\u306e\u524d\u306b\u3001cols \u3092\u4f7f\u7528\u3057\u3066\u3059\u3067\u306b\u30af\u30a4\u30fc\u30f3\u304c\u3042\u308b\u5217\u3092\u526a\u5b9a\u3057\u3001\u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u4e2d\u306b\u52d5\u7684\u306b\u66f4\u65b0\u3055\u308c\u307e\u3059\u3002

Tip

\u884c\u5217\u306e\u539f\u70b9\u306f\u5de6\u4e0a\u9685\u306b\u3042\u308a\u3001\u884c\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306f\u4e0a\u304b\u3089\u4e0b\u306b\u5897\u52a0\u3057\u3001\u5217\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306f\u5de6\u304b\u3089\u53f3\u306b\u5897\u52a0\u3059\u308b\u3053\u3068\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002

\u5bfe\u89d2\u7dda\u306e\u5236\u7d04\u306f\u3069\u3046\u3067\u3057\u3087\u3046\u304b\uff1f\u30c1\u30a7\u30b9\u30dc\u30fc\u30c9\u4e0a\u306e\u7279\u5b9a\u306e\u30bb\u30eb\u306e\u884c\u3068\u5217\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092 \\((row, col)\\) \u3068\u3057\u307e\u3059\u3002\u7279\u5b9a\u306e\u4e3b\u5bfe\u89d2\u7dda\u3092\u9078\u629e\u3059\u308b\u3053\u3068\u3067\u3001\u305d\u306e\u5bfe\u89d2\u7dda\u4e0a\u306e\u3059\u3079\u3066\u306e\u30bb\u30eb\u3067\u5dee \\(row - col\\) \u304c\u540c\u3058\u3067\u3042\u308b\u3053\u3068\u306b\u6c17\u4ed8\u304d\u307e\u3059\u3002\u3064\u307e\u308a\u3001\\(row - col\\) \u306f\u4e3b\u5bfe\u89d2\u7dda\u4e0a\u3067\u5b9a\u6570\u5024\u3067\u3059\u3002

\u8a00\u3044\u63db\u3048\u308b\u3068\u30012\u3064\u306e\u30bb\u30eb\u304c \\(row_1 - col_1 = row_2 - col_2\\) \u3092\u6e80\u305f\u3059\u5834\u5408\u3001\u305d\u308c\u3089\u306f\u78ba\u5b9f\u306b\u540c\u3058\u4e3b\u5bfe\u89d2\u7dda\u4e0a\u306b\u3042\u308a\u307e\u3059\u3002\u3053\u306e\u30d1\u30bf\u30fc\u30f3\u3092\u4f7f\u7528\u3057\u3066\u3001\u4ee5\u4e0b\u306e\u56f3\u306b\u793a\u3059\u914d\u5217 diags1 \u3092\u5229\u7528\u3057\u3066\u3001\u30af\u30a4\u30fc\u30f3\u304c\u4e3b\u5bfe\u89d2\u7dda\u4e0a\u306b\u3042\u308b\u304b\u3069\u3046\u304b\u3092\u8ffd\u8de1\u3067\u304d\u307e\u3059\u3002

\u540c\u69d8\u306b\u3001\\(row + col\\) \u306e\u548c\u306f\u526f\u5bfe\u89d2\u7dda\u4e0a\u306e\u3059\u3079\u3066\u306e\u30bb\u30eb\u3067\u5b9a\u6570\u5024\u3067\u3059\u3002\u914d\u5217 diags2 \u3092\u4f7f\u7528\u3057\u3066\u526f\u5bfe\u89d2\u7dda\u306e\u5236\u7d04\u3082\u51e6\u7406\u3067\u304d\u307e\u3059\u3002

\u56f3 13-18 \u00a0 \u5217\u3068\u5bfe\u89d2\u7dda\u306e\u5236\u7d04\u306e\u51e6\u7406

"},{"location":"chapter_backtracking/n_queens_problem/#3","title":"3. \u00a0 \u30b3\u30fc\u30c9\u5b9f\u88c5","text":"

\\(n\\) \u6b21\u5143\u306e\u6b63\u65b9\u884c\u5217\u3067\u306f\u3001\\(row - col\\) \u306e\u7bc4\u56f2\u306f \\([-n + 1, n - 1]\\) \u3067\u3001\\(row + col\\) \u306e\u7bc4\u56f2\u306f \\([0, 2n - 2]\\) \u3067\u3042\u308b\u3053\u3068\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3057\u305f\u304c\u3063\u3066\u3001\u4e3b\u5bfe\u89d2\u7dda\u3068\u526f\u5bfe\u89d2\u7dda\u306e\u6570\u306f\u3069\u3061\u3089\u3082 \\(2n - 1\\) \u3067\u3001\u914d\u5217 diags1 \u3068 diags2 \u306e\u9577\u3055\u306f \\(2n - 1\\) \u3067\u3059\u3002

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby n_queens.py
def backtrack(\n    row: int,\n    n: int,\n    state: list[list[str]],\n    res: list[list[list[str]]],\n    cols: list[bool],\n    diags1: list[bool],\n    diags2: list[bool],\n):\n    \"\"\"\u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\uff1an \u30af\u30a4\u30fc\u30f3\"\"\"\n    # \u3059\u3079\u3066\u306e\u884c\u304c\u914d\u7f6e\u3055\u308c\u305f\u3089\u3001\u89e3\u3092\u8a18\u9332\n    if row == n:\n        res.append([list(row) for row in state])\n        return\n    # \u3059\u3079\u3066\u306e\u5217\u3092\u8d70\u67fb\n    for col in range(n):\n        # \u30bb\u30eb\u306b\u5bfe\u5fdc\u3059\u308b\u4e3b\u5bfe\u89d2\u7dda\u3068\u526f\u5bfe\u89d2\u7dda\u3092\u8a08\u7b97\n        diag1 = row - col + n - 1\n        diag2 = row + col\n        # \u679d\u5208\u308a\uff1a\u30bb\u30eb\u306e\u5217\u3001\u4e3b\u5bfe\u89d2\u7dda\u3001\u526f\u5bfe\u89d2\u7dda\u306b\u30af\u30a4\u30fc\u30f3\u3092\u914d\u7f6e\u3057\u306a\u3044\n        if not cols[col] and not diags1[diag1] and not diags2[diag2]:\n            # \u8a66\u884c\uff1a\u30bb\u30eb\u306b\u30af\u30a4\u30fc\u30f3\u3092\u914d\u7f6e\n            state[row][col] = \"Q\"\n            cols[col] = diags1[diag1] = diags2[diag2] = True\n            # \u6b21\u306e\u884c\u3092\u914d\u7f6e\n            backtrack(row + 1, n, state, res, cols, diags1, diags2)\n            # \u64a4\u56de\uff1a\u30bb\u30eb\u3092\u7a7a\u306e\u30b9\u30dd\u30c3\u30c8\u306b\u5fa9\u5143\n            state[row][col] = \"#\"\n            cols[col] = diags1[diag1] = diags2[diag2] = False\n\ndef n_queens(n: int) -> list[list[list[str]]]:\n    \"\"\"n \u30af\u30a4\u30fc\u30f3\u3092\u89e3\u304f\"\"\"\n    # n*n \u30b5\u30a4\u30ba\u306e\u30c1\u30a7\u30b9\u30dc\u30fc\u30c9\u3092\u521d\u671f\u5316\u3001'Q' \u306f\u30af\u30a4\u30fc\u30f3\u3092\u8868\u3057\u3001'#' \u306f\u7a7a\u306e\u30b9\u30dd\u30c3\u30c8\u3092\u8868\u3059\n    state = [[\"#\" for _ in range(n)] for _ in range(n)]\n    cols = [False] * n  # \u30af\u30a4\u30fc\u30f3\u304c\u3042\u308b\u5217\u3092\u8a18\u9332\n    diags1 = [False] * (2 * n - 1)  # \u30af\u30a4\u30fc\u30f3\u304c\u3042\u308b\u4e3b\u5bfe\u89d2\u7dda\u3092\u8a18\u9332\n    diags2 = [False] * (2 * n - 1)  # \u30af\u30a4\u30fc\u30f3\u304c\u3042\u308b\u526f\u5bfe\u89d2\u7dda\u3092\u8a18\u9332\n    res = []\n    backtrack(0, n, state, res, cols, diags1, diags2)\n\n    return res\n
n_queens.cpp
/* \u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\uff1an \u30af\u30a4\u30fc\u30f3 */\nvoid backtrack(int row, int n, vector<vector<string>> &state, vector<vector<vector<string>>> &res, vector<bool> &cols,\n               vector<bool> &diags1, vector<bool> &diags2) {\n    // \u3059\u3079\u3066\u306e\u884c\u304c\u914d\u7f6e\u3055\u308c\u305f\u3089\u3001\u89e3\u3092\u8a18\u9332\n    if (row == n) {\n        res.push_back(state);\n        return;\n    }\n    // \u3059\u3079\u3066\u306e\u5217\u3092\u8d70\u67fb\n    for (int col = 0; col < n; col++) {\n        // \u30bb\u30eb\u306b\u5bfe\u5fdc\u3059\u308b\u4e3b\u5bfe\u89d2\u7dda\u3068\u526f\u5bfe\u89d2\u7dda\u3092\u8a08\u7b97\n        int diag1 = row - col + n - 1;\n        int diag2 = row + col;\n        // \u526a\u5b9a\uff1a\u30bb\u30eb\u306e\u5217\u3001\u4e3b\u5bfe\u89d2\u7dda\u3001\u526f\u5bfe\u89d2\u7dda\u306b\u30af\u30a4\u30fc\u30f3\u3092\u914d\u7f6e\u3059\u308b\u3053\u3068\u3092\u8a31\u53ef\u3057\u306a\u3044\n        if (!cols[col] && !diags1[diag1] && !diags2[diag2]) {\n            // \u8a66\u884c\uff1a\u30bb\u30eb\u306b\u30af\u30a4\u30fc\u30f3\u3092\u914d\u7f6e\n            state[row][col] = \"Q\";\n            cols[col] = diags1[diag1] = diags2[diag2] = true;\n            // \u6b21\u306e\u884c\u3092\u914d\u7f6e\n            backtrack(row + 1, n, state, res, cols, diags1, diags2);\n            // \u56de\u9000\uff1a\u30bb\u30eb\u3092\u7a7a\u306e\u30b9\u30dd\u30c3\u30c8\u306b\u5fa9\u5143\n            state[row][col] = \"#\";\n            cols[col] = diags1[diag1] = diags2[diag2] = false;\n        }\n    }\n}\n\n/* n \u30af\u30a4\u30fc\u30f3\u3092\u89e3\u304f */\nvector<vector<vector<string>>> nQueens(int n) {\n    // n*n \u30b5\u30a4\u30ba\u306e\u30c1\u30a7\u30b9\u30dc\u30fc\u30c9\u3092\u521d\u671f\u5316\u3001'Q' \u306f\u30af\u30a4\u30fc\u30f3\u3092\u8868\u3057\u3001'#' \u306f\u7a7a\u306e\u30b9\u30dd\u30c3\u30c8\u3092\u8868\u3059\n    vector<vector<string>> state(n, vector<string>(n, \"#\"));\n    vector<bool> cols(n, false);           // \u30af\u30a4\u30fc\u30f3\u306e\u3042\u308b\u5217\u3092\u8a18\u9332\n    vector<bool> diags1(2 * n - 1, false); // \u30af\u30a4\u30fc\u30f3\u306e\u3042\u308b\u4e3b\u5bfe\u89d2\u7dda\u3092\u8a18\u9332\n    vector<bool> diags2(2 * n - 1, false); // \u30af\u30a4\u30fc\u30f3\u306e\u3042\u308b\u526f\u5bfe\u89d2\u7dda\u3092\u8a18\u9332\n    vector<vector<vector<string>>> res;\n\n    backtrack(0, n, state, res, cols, diags1, diags2);\n\n    return res;\n}\n
n_queens.java
/* \u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\uff1an \u30af\u30a4\u30fc\u30f3 */\nvoid backtrack(int row, int n, List<List<String>> state, List<List<List<String>>> res,\n        boolean[] cols, boolean[] diags1, boolean[] diags2) {\n    // \u3059\u3079\u3066\u306e\u884c\u304c\u914d\u7f6e\u3055\u308c\u305f\u3089\u3001\u89e3\u3092\u8a18\u9332\n    if (row == n) {\n        List<List<String>> copyState = new ArrayList<>();\n        for (List<String> sRow : state) {\n            copyState.add(new ArrayList<>(sRow));\n        }\n        res.add(copyState);\n        return;\n    }\n    // \u3059\u3079\u3066\u306e\u5217\u3092\u8d70\u67fb\n    for (int col = 0; col < n; col++) {\n        // \u30bb\u30eb\u306b\u5bfe\u5fdc\u3059\u308b\u4e3b\u5bfe\u89d2\u7dda\u3068\u526f\u5bfe\u89d2\u7dda\u3092\u8a08\u7b97\n        int diag1 = row - col + n - 1;\n        int diag2 = row + col;\n        // \u526a\u5b9a\uff1a\u30bb\u30eb\u306e\u5217\u3001\u4e3b\u5bfe\u89d2\u7dda\u3001\u526f\u5bfe\u89d2\u7dda\u306b\u30af\u30a4\u30fc\u30f3\u3092\u914d\u7f6e\u3059\u308b\u3053\u3068\u3092\u8a31\u53ef\u3057\u306a\u3044\n        if (!cols[col] && !diags1[diag1] && !diags2[diag2]) {\n            // \u8a66\u884c\uff1a\u30bb\u30eb\u306b\u30af\u30a4\u30fc\u30f3\u3092\u914d\u7f6e\n            state.get(row).set(col, \"Q\");\n            cols[col] = diags1[diag1] = diags2[diag2] = true;\n            // \u6b21\u306e\u884c\u3092\u914d\u7f6e\n            backtrack(row + 1, n, state, res, cols, diags1, diags2);\n            // \u56de\u9000\uff1a\u30bb\u30eb\u3092\u7a7a\u306e\u30b9\u30dd\u30c3\u30c8\u306b\u5fa9\u5143\n            state.get(row).set(col, \"#\");\n            cols[col] = diags1[diag1] = diags2[diag2] = false;\n        }\n    }\n}\n\n/* n \u30af\u30a4\u30fc\u30f3\u3092\u89e3\u304f */\nList<List<List<String>>> nQueens(int n) {\n    // n*n \u30b5\u30a4\u30ba\u306e\u30c1\u30a7\u30b9\u30dc\u30fc\u30c9\u3092\u521d\u671f\u5316\u3001'Q' \u306f\u30af\u30a4\u30fc\u30f3\u3092\u8868\u3057\u3001'#' \u306f\u7a7a\u306e\u30b9\u30dd\u30c3\u30c8\u3092\u8868\u3059\n    List<List<String>> state = new ArrayList<>();\n    for (int i = 0; i < n; i++) {\n        List<String> row = new ArrayList<>();\n        for (int j = 0; j < n; j++) {\n            row.add(\"#\");\n        }\n        state.add(row);\n    }\n    boolean[] cols = new boolean[n]; // \u30af\u30a4\u30fc\u30f3\u306e\u3042\u308b\u5217\u3092\u8a18\u9332\n    boolean[] diags1 = new boolean[2 * n - 1]; // \u30af\u30a4\u30fc\u30f3\u306e\u3042\u308b\u4e3b\u5bfe\u89d2\u7dda\u3092\u8a18\u9332\n    boolean[] diags2 = new boolean[2 * n - 1]; // \u30af\u30a4\u30fc\u30f3\u306e\u3042\u308b\u526f\u5bfe\u89d2\u7dda\u3092\u8a18\u9332\n    List<List<List<String>>> res = new ArrayList<>();\n\n    backtrack(0, n, state, res, cols, diags1, diags2);\n\n    return res;\n}\n
n_queens.cs
[class]{n_queens}-[func]{Backtrack}\n\n[class]{n_queens}-[func]{NQueens}\n
n_queens.go
[class]{}-[func]{backtrack}\n\n[class]{}-[func]{nQueens}\n
n_queens.swift
[class]{}-[func]{backtrack}\n\n[class]{}-[func]{nQueens}\n
n_queens.js
[class]{}-[func]{backtrack}\n\n[class]{}-[func]{nQueens}\n
n_queens.ts
[class]{}-[func]{backtrack}\n\n[class]{}-[func]{nQueens}\n
n_queens.dart
[class]{}-[func]{backtrack}\n\n[class]{}-[func]{nQueens}\n
n_queens.rs
[class]{}-[func]{backtrack}\n\n[class]{}-[func]{n_queens}\n
n_queens.c
[class]{}-[func]{backtrack}\n\n[class]{}-[func]{nQueens}\n
n_queens.kt
[class]{}-[func]{backtrack}\n\n[class]{}-[func]{nQueens}\n
n_queens.rb
[class]{}-[func]{backtrack}\n\n[class]{}-[func]{n_queens}\n

\\(n\\) \u500b\u306e\u30af\u30a4\u30fc\u30f3\u3092\u884c\u3054\u3068\u306b\u914d\u7f6e\u3057\u3001\u5217\u306e\u5236\u7d04\u3092\u8003\u616e\u3057\u3066\u3001\u6700\u521d\u306e\u884c\u304b\u3089\u6700\u5f8c\u306e\u884c\u307e\u3067\u3001\\(n\\)\u3001\\(n-1\\)\u3001\\(\\dots\\)\u3001\\(2\\)\u3001\\(1\\) \u306e\u9078\u629e\u80a2\u304c\u3042\u308a\u3001\\(O(n!)\\) \u6642\u9593\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002\u89e3\u3092\u8a18\u9332\u3059\u308b\u969b\u3001\u884c\u5217 state \u3092\u30b3\u30d4\u30fc\u3057\u3066 res \u306b\u8ffd\u52a0\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u3001\u30b3\u30d4\u30fc\u64cd\u4f5c\u306f \\(O(n^2)\\) \u6642\u9593\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002\u3057\u305f\u304c\u3063\u3066\u3001\u5168\u4f53\u306e\u6642\u9593\u8a08\u7b97\u91cf\u306f \\(O(n! \\cdot n^2)\\) \u3067\u3059\u3002\u5b9f\u969b\u306b\u306f\u3001\u5bfe\u89d2\u7dda\u5236\u7d04\u306b\u57fa\u3065\u304f\u526a\u5b9a\u306b\u3088\u308a\u691c\u7d22\u7a7a\u9593\u3092\u5927\u5e45\u306b\u524a\u6e1b\u3067\u304d\u308b\u305f\u3081\u3001\u591a\u304f\u306e\u5834\u5408\u3001\u691c\u7d22\u52b9\u7387\u306f\u4e0a\u8a18\u306e\u6642\u9593\u8a08\u7b97\u91cf\u3088\u308a\u3082\u512a\u308c\u3066\u3044\u307e\u3059\u3002

\u914d\u5217 state \u306f \\(O(n^2)\\) \u7a7a\u9593\u3092\u4f7f\u7528\u3057\u3001\u914d\u5217 cols\u3001diags1\u3001diags2 \u306f\u305d\u308c\u305e\u308c \\(O(n)\\) \u7a7a\u9593\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002\u6700\u5927\u518d\u5e30\u6df1\u5ea6\u306f \\(n\\) \u3067\u3001\\(O(n)\\) \u306e\u30b9\u30bf\u30c3\u30af\u30d5\u30ec\u30fc\u30e0\u7a7a\u9593\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002\u3057\u305f\u304c\u3063\u3066\u3001\u7a7a\u9593\u8a08\u7b97\u91cf\u306f \\(O(n^2)\\) \u3067\u3059\u3002

"},{"location":"chapter_backtracking/permutations_problem/","title":"13.2 \u00a0 \u9806\u5217\u554f\u984c","text":"

\u9806\u5217\u554f\u984c\u306f\u3001\u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u5178\u578b\u7684\u306a\u5fdc\u7528\u3067\u3059\u3002\u3053\u308c\u306f\u3001\u914d\u5217\u3084\u6587\u5b57\u5217\u306a\u3069\u306e\u4e0e\u3048\u3089\u308c\u305f\u96c6\u5408\u304b\u3089\u8981\u7d20\u306e\u3059\u3079\u3066\u306e\u53ef\u80fd\u306a\u914d\u7f6e\uff08\u9806\u5217\uff09\u3092\u898b\u3064\u3051\u308b\u3053\u3068\u3092\u542b\u307f\u307e\u3059\u3002

\u4ee5\u4e0b\u306e\u8868\u306f\u3001\u5165\u529b\u914d\u5217\u3068\u305d\u306e\u5bfe\u5fdc\u3059\u308b\u9806\u5217\u3092\u542b\u3080\u3044\u304f\u3064\u304b\u306e\u4f8b\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002

\u8868 13-2 \u00a0 \u9806\u5217\u306e\u4f8b

\u5165\u529b\u914d\u5217 \u9806\u5217 \\([1]\\) \\([1]\\) \\([1, 2]\\) \\([1, 2], [2, 1]\\) \\([1, 2, 3]\\) \\([1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1]\\)"},{"location":"chapter_backtracking/permutations_problem/#1321","title":"13.2.1 \u00a0 \u91cd\u8907\u8981\u7d20\u304c\u306a\u3044\u5834\u5408","text":"

Question

\u91cd\u8907\u8981\u7d20\u306e\u306a\u3044\u6574\u6570\u914d\u5217\u304c\u4e0e\u3048\u3089\u308c\u305f\u5834\u5408\u3001\u3059\u3079\u3066\u306e\u53ef\u80fd\u306a\u9806\u5217\u3092\u8fd4\u3057\u3066\u304f\u3060\u3055\u3044\u3002

\u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u306e\u89b3\u70b9\u304b\u3089\u3001\u9806\u5217\u3092\u751f\u6210\u3059\u308b\u30d7\u30ed\u30bb\u30b9\u3092\u4e00\u9023\u306e\u9078\u629e\u3068\u3057\u3066\u898b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002 \u5165\u529b\u914d\u5217\u304c \\([1, 2, 3]\\) \u3060\u3068\u3057\u307e\u3059\u3002\u6700\u521d\u306b \\(1\\) \u3092\u9078\u629e\u3057\u3001\u6b21\u306b \\(3\\)\u3001\u6700\u5f8c\u306b \\(2\\) \u3092\u9078\u629e\u3059\u308b\u3068\u3001\u9806\u5217 \\([1, 3, 2]\\) \u304c\u5f97\u3089\u308c\u307e\u3059\u3002\u300c\u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u300d\u306f\u524d\u306e\u9078\u629e\u3092\u53d6\u308a\u6d88\u3057\u3066\u3001\u4ee3\u66ff\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u63a2\u7d22\u3059\u308b\u3053\u3068\u3092\u610f\u5473\u3057\u307e\u3059\u3002

\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u306e\u89b3\u70b9\u304b\u3089\u3001\u5019\u88dc\u96c6\u5408 choices \u306f\u5165\u529b\u914d\u5217\u306e\u3059\u3079\u3066\u306e\u8981\u7d20\u3067\u69cb\u6210\u3055\u308c\u3001state \u306f\u3053\u308c\u307e\u3067\u306b\u9078\u629e\u3055\u308c\u305f\u8981\u7d20\u3092\u4fdd\u6301\u3057\u307e\u3059\u3002\u5404\u8981\u7d20\u306f\u4e00\u5ea6\u3060\u3051\u9078\u629e\u3067\u304d\u308b\u305f\u3081\u3001state \u306e\u3059\u3079\u3066\u306e\u8981\u7d20\u306f\u4e00\u610f\u3067\u3042\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

\u4ee5\u4e0b\u306e\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u691c\u7d22\u30d7\u30ed\u30bb\u30b9\u3092\u518d\u5e30\u6728\u306b\u5c55\u958b\u3067\u304d\u307e\u3059\u3002\u5404\u30ce\u30fc\u30c9\u306f\u73fe\u5728\u306e state \u3092\u8868\u3057\u307e\u3059\u3002\u30eb\u30fc\u30c8\u30ce\u30fc\u30c9\u304b\u3089\u958b\u59cb\u3057\u3066\u30013\u56de\u306e\u9078\u629e\u306e\u5f8c\u3001\u8449\u30ce\u30fc\u30c9\u306b\u5230\u9054\u3057\u307e\u3059\u2014\u305d\u308c\u305e\u308c\u304c\u9806\u5217\u306b\u5bfe\u5fdc\u3057\u307e\u3059\u3002

\u56f3 13-5 \u00a0 \u9806\u5217\u306e\u518d\u5e30\u6728

"},{"location":"chapter_backtracking/permutations_problem/#1","title":"1. \u00a0 \u91cd\u8907\u9078\u629e\u306e\u526a\u5b9a","text":"

\u5404\u8981\u7d20\u304c\u4e00\u5ea6\u3060\u3051\u9078\u629e\u3055\u308c\u308b\u3053\u3068\u3092\u4fdd\u8a3c\u3059\u308b\u305f\u3081\u306b\u3001\u30d6\u30fc\u30eb\u914d\u5217 selected \u3092\u5c0e\u5165\u3057\u307e\u3059\u3002\u3053\u3053\u3067 selected[i] \u306f choices[i] \u304c\u9078\u629e\u3055\u308c\u305f\u304b\u3069\u3046\u304b\u3092\u793a\u3057\u307e\u3059\u3002\u6b21\u306b\u3001\u3053\u306e\u914d\u5217\u306b\u57fa\u3065\u3044\u3066\u526a\u5b9a\u30b9\u30c6\u30c3\u30d7\u3092\u5b9f\u884c\u3057\u307e\u3059\uff1a

\u4ee5\u4e0b\u306e\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u6700\u521d\u306e\u30e9\u30a6\u30f3\u30c9\u30671\u3092\u9078\u629e\u3057\u30012\u756a\u76ee\u306e\u30e9\u30a6\u30f3\u30c9\u30673\u3092\u9078\u629e\u3057\u3001\u6700\u5f8c\u306e\u30e9\u30a6\u30f3\u30c9\u30672\u3092\u9078\u629e\u3059\u308b\u3068\u3057\u307e\u3059\u30022\u756a\u76ee\u306e\u30e9\u30a6\u30f3\u30c9\u3067\u8981\u7d201\u306e\u5206\u5c90\u3068\u30013\u756a\u76ee\u306e\u30e9\u30a6\u30f3\u30c9\u3067\u8981\u7d201\u30683\u306e\u5206\u5c90\u3092\u526a\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

\u56f3 13-6 \u00a0 \u9806\u5217\u306e\u526a\u5b9a\u4f8b

\u56f3\u304b\u3089\u3001\u3053\u306e\u526a\u5b9a\u30d7\u30ed\u30bb\u30b9\u304c\u691c\u7d22\u7a7a\u9593\u3092 \\(O(n^n)\\) \u304b\u3089 \\(O(n!)\\) \u306b\u524a\u6e1b\u3059\u308b\u3053\u3068\u304c\u308f\u304b\u308a\u307e\u3059\u3002

"},{"location":"chapter_backtracking/permutations_problem/#2","title":"2. \u00a0 \u30b3\u30fc\u30c9\u5b9f\u88c5","text":"

\u3053\u306e\u7406\u89e3\u306b\u3088\u308a\u3001\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u30b3\u30fc\u30c9\u306e\u300c\u7a7a\u6b04\u3092\u57cb\u3081\u308b\u300d\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u5168\u4f53\u306e\u30b3\u30fc\u30c9\u3092\u7c21\u6f54\u306b\u4fdd\u3064\u305f\u3081\u3001\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u5404\u90e8\u5206\u3092\u500b\u5225\u306b\u5b9f\u88c5\u305b\u305a\u3001\u4ee3\u308f\u308a\u306b backtrack() \u95a2\u6570\u3067\u3059\u3079\u3066\u3092\u5c55\u958b\u3057\u307e\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby permutations_i.py
def backtrack(\n    state: list[int], choices: list[int], selected: list[bool], res: list[list[int]]\n):\n    \"\"\"\u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\uff1a\u9806\u5217 I\"\"\"\n    # \u72b6\u614b\u306e\u9577\u3055\u304c\u8981\u7d20\u6570\u3068\u7b49\u3057\u3044\u3068\u304d\u3001\u89e3\u3092\u8a18\u9332\n    if len(state) == len(choices):\n        res.append(list(state))\n        return\n    # \u3059\u3079\u3066\u306e\u9078\u629e\u80a2\u3092\u8d70\u67fb\n    for i, choice in enumerate(choices):\n        # \u679d\u5208\u308a\uff1a\u8981\u7d20\u306e\u91cd\u8907\u9078\u629e\u3092\u8a31\u53ef\u3057\u306a\u3044\n        if not selected[i]:\n            # \u8a66\u884c\uff1a\u9078\u629e\u3092\u884c\u3044\u3001\u72b6\u614b\u3092\u66f4\u65b0\n            selected[i] = True\n            state.append(choice)\n            # \u6b21\u306e\u9078\u629e\u30e9\u30a6\u30f3\u30c9\u306b\u9032\u3080\n            backtrack(state, choices, selected, res)\n            # \u64a4\u56de\uff1a\u9078\u629e\u3092\u53d6\u308a\u6d88\u3057\u3001\u524d\u306e\u72b6\u614b\u306b\u5fa9\u5143\n            selected[i] = False\n            state.pop()\n\ndef permutations_i(nums: list[int]) -> list[list[int]]:\n    \"\"\"\u9806\u5217 I\"\"\"\n    res = []\n    backtrack(state=[], choices=nums, selected=[False] * len(nums), res=res)\n    return res\n
permutations_i.cpp
/* \u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\uff1a\u9806\u5217 I */\nvoid backtrack(vector<int> &state, const vector<int> &choices, vector<bool> &selected, vector<vector<int>> &res) {\n    // \u72b6\u614b\u306e\u9577\u3055\u304c\u8981\u7d20\u6570\u3068\u7b49\u3057\u304f\u306a\u3063\u305f\u3089\u3001\u89e3\u3092\u8a18\u9332\n    if (state.size() == choices.size()) {\n        res.push_back(state);\n        return;\n    }\n    // \u3059\u3079\u3066\u306e\u9078\u629e\u80a2\u3092\u8d70\u67fb\n    for (int i = 0; i < choices.size(); i++) {\n        int choice = choices[i];\n        // \u526a\u5b9a\uff1a\u8981\u7d20\u306e\u91cd\u8907\u9078\u629e\u3092\u8a31\u53ef\u3057\u306a\u3044\n        if (!selected[i]) {\n            // \u8a66\u884c\uff1a\u9078\u629e\u3092\u884c\u3044\u3001\u72b6\u614b\u3092\u66f4\u65b0\n            selected[i] = true;\n            state.push_back(choice);\n            // \u6b21\u306e\u30e9\u30a6\u30f3\u30c9\u306e\u9078\u629e\u306b\u9032\u3080\n            backtrack(state, choices, selected, res);\n            // \u56de\u9000\uff1a\u9078\u629e\u3092\u53d6\u308a\u6d88\u3057\u3001\u524d\u306e\u72b6\u614b\u306b\u5fa9\u5143\n            selected[i] = false;\n            state.pop_back();\n        }\n    }\n}\n\n/* \u9806\u5217 I */\nvector<vector<int>> permutationsI(vector<int> nums) {\n    vector<int> state;\n    vector<bool> selected(nums.size(), false);\n    vector<vector<int>> res;\n    backtrack(state, nums, selected, res);\n    return res;\n}\n
permutations_i.java
/* \u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\uff1a\u9806\u5217 I */\nvoid backtrack(List<Integer> state, int[] choices, boolean[] selected, List<List<Integer>> res) {\n    // \u72b6\u614b\u306e\u9577\u3055\u304c\u8981\u7d20\u6570\u3068\u7b49\u3057\u304f\u306a\u3063\u305f\u3089\u3001\u89e3\u3092\u8a18\u9332\n    if (state.size() == choices.length) {\n        res.add(new ArrayList<Integer>(state));\n        return;\n    }\n    // \u3059\u3079\u3066\u306e\u9078\u629e\u80a2\u3092\u8d70\u67fb\n    for (int i = 0; i < choices.length; i++) {\n        int choice = choices[i];\n        // \u526a\u5b9a\uff1a\u8981\u7d20\u306e\u91cd\u8907\u9078\u629e\u3092\u8a31\u53ef\u3057\u306a\u3044\n        if (!selected[i]) {\n            // \u8a66\u884c\uff1a\u9078\u629e\u3092\u884c\u3044\u3001\u72b6\u614b\u3092\u66f4\u65b0\n            selected[i] = true;\n            state.add(choice);\n            // \u6b21\u306e\u30e9\u30a6\u30f3\u30c9\u306e\u9078\u629e\u306b\u9032\u3080\n            backtrack(state, choices, selected, res);\n            // \u56de\u9000\uff1a\u9078\u629e\u3092\u53d6\u308a\u6d88\u3057\u3001\u524d\u306e\u72b6\u614b\u306b\u5fa9\u5143\n            selected[i] = false;\n            state.remove(state.size() - 1);\n        }\n    }\n}\n\n/* \u9806\u5217 I */\nList<List<Integer>> permutationsI(int[] nums) {\n    List<List<Integer>> res = new ArrayList<List<Integer>>();\n    backtrack(new ArrayList<Integer>(), nums, new boolean[nums.length], res);\n    return res;\n}\n
permutations_i.cs
[class]{permutations_i}-[func]{Backtrack}\n\n[class]{permutations_i}-[func]{PermutationsI}\n
permutations_i.go
[class]{}-[func]{backtrackI}\n\n[class]{}-[func]{permutationsI}\n
permutations_i.swift
[class]{}-[func]{backtrack}\n\n[class]{}-[func]{permutationsI}\n
permutations_i.js
[class]{}-[func]{backtrack}\n\n[class]{}-[func]{permutationsI}\n
permutations_i.ts
[class]{}-[func]{backtrack}\n\n[class]{}-[func]{permutationsI}\n
permutations_i.dart
[class]{}-[func]{backtrack}\n\n[class]{}-[func]{permutationsI}\n
permutations_i.rs
[class]{}-[func]{backtrack}\n\n[class]{}-[func]{permutations_i}\n
permutations_i.c
[class]{}-[func]{backtrack}\n\n[class]{}-[func]{permutationsI}\n
permutations_i.kt
[class]{}-[func]{backtrack}\n\n[class]{}-[func]{permutationsI}\n
permutations_i.rb
[class]{}-[func]{backtrack}\n\n[class]{}-[func]{permutations_i}\n
"},{"location":"chapter_backtracking/permutations_problem/#1322","title":"13.2.2 \u00a0 \u91cd\u8907\u8981\u7d20\u3092\u8003\u616e\u3059\u308b\u5834\u5408","text":"

Question

**\u91cd\u8907\u8981\u7d20\u3092\u542b\u3080\u53ef\u80fd\u6027\u306e\u3042\u308b**\u6574\u6570\u914d\u5217\u304c\u4e0e\u3048\u3089\u308c\u305f\u5834\u5408\u3001\u3059\u3079\u3066\u306e\u4e00\u610f\u306e\u9806\u5217\u3092\u8fd4\u3057\u3066\u304f\u3060\u3055\u3044\u3002

\u5165\u529b\u914d\u5217\u304c \\([1, 1, 2]\\) \u3060\u3068\u3057\u307e\u3059\u30022\u3064\u306e\u540c\u4e00\u8981\u7d20 \\(1\\) \u3092\u533a\u5225\u3059\u308b\u305f\u3081\u306b\u30012\u756a\u76ee\u3092 \\(\\hat{1}\\) \u3068\u30e9\u30d9\u30eb\u4ed8\u3051\u3057\u307e\u3059\u3002

\u4ee5\u4e0b\u306e\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u3053\u306e\u65b9\u6cd5\u3067\u751f\u6210\u3055\u308c\u308b\u9806\u5217\u306e\u534a\u5206\u306f\u91cd\u8907\u3067\u3059\uff1a

\u56f3 13-7 \u00a0 \u91cd\u8907\u9806\u5217

\u3067\u306f\u3001\u3053\u308c\u3089\u306e\u91cd\u8907\u9806\u5217\u3092\u3069\u306e\u3088\u3046\u306b\u9664\u53bb\u3067\u304d\u308b\u3067\u3057\u3087\u3046\u304b\uff1f\u4e00\u3064\u306e\u76f4\u63a5\u7684\u306a\u30a2\u30d7\u30ed\u30fc\u30c1\u306f\u3001\u3059\u3079\u3066\u306e\u9806\u5217\u3092\u751f\u6210\u3057\u305f\u5f8c\u306b\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u3092\u4f7f\u7528\u3057\u3066\u91cd\u8907\u3092\u9664\u53bb\u3059\u308b\u3053\u3068\u3067\u3059\u3002\u3057\u304b\u3057\u3001\u3053\u308c\u306f\u3042\u307e\u308a\u512a\u96c5\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u91cd\u8907\u3092\u751f\u6210\u3059\u308b\u5206\u5c90\u306f\u672c\u6765\u4e0d\u8981\u3067\u3042\u308a\u3001\u4e8b\u524d\u306b\u526a\u5b9a\u3055\u308c\u308b\u3079\u304d\u3060\u304b\u3089\u3067\u3059\u3001\u3053\u308c\u306b\u3088\u308a\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u52b9\u7387\u304c\u5411\u4e0a\u3057\u307e\u3059\u3002

"},{"location":"chapter_backtracking/permutations_problem/#1_1","title":"1. \u00a0 \u7b49\u5024\u8981\u7d20\u306e\u526a\u5b9a","text":"

\u4ee5\u4e0b\u306e\u56f3\u3092\u898b\u308b\u3068\u3001\u6700\u521d\u306e\u30e9\u30a6\u30f3\u30c9\u3067 \\(1\\) \u307e\u305f\u306f \\(\\hat{1}\\) \u3092\u9078\u629e\u3059\u308b\u3068\u540c\u3058\u9806\u5217\u306b\u3064\u306a\u304c\u308b\u305f\u3081\u3001\\(\\hat{1}\\) \u3092\u526a\u5b9a\u3057\u307e\u3059\u3002

\u540c\u69d8\u306b\u3001\u6700\u521d\u306e\u30e9\u30a6\u30f3\u30c9\u3067 \\(2\\) \u3092\u9078\u629e\u3057\u305f\u5f8c\u30012\u756a\u76ee\u306e\u30e9\u30a6\u30f3\u30c9\u3067 \\(1\\) \u307e\u305f\u306f \\(\\hat{1}\\) \u3092\u9078\u629e\u3057\u3066\u3082\u91cd\u8907\u5206\u5c90\u306b\u3064\u306a\u304c\u308b\u305f\u3081\u3001\u305d\u306e\u6642\u3082 \\(\\hat{1}\\) \u3092\u526a\u5b9a\u3057\u307e\u3059\u3002

\u672c\u8cea\u7684\u306b\u3001\u79c1\u305f\u3061\u306e\u76ee\u6a19\u306f\u3001\u8907\u6570\u306e\u540c\u4e00\u8981\u7d20\u304c\u9078\u629e\u306e\u5404\u30e9\u30a6\u30f3\u30c9\u3067\u4e00\u5ea6\u3060\u3051\u9078\u629e\u3055\u308c\u308b\u3053\u3068\u3092\u4fdd\u8a3c\u3059\u308b\u3053\u3068\u3067\u3059\u3002

\u56f3 13-8 \u00a0 \u91cd\u8907\u9806\u5217\u306e\u526a\u5b9a

"},{"location":"chapter_backtracking/permutations_problem/#2_1","title":"2. \u00a0 \u30b3\u30fc\u30c9\u5b9f\u88c5","text":"

\u524d\u306e\u554f\u984c\u306e\u30b3\u30fc\u30c9\u306b\u57fa\u3065\u3044\u3066\u3001\u5404\u30e9\u30a6\u30f3\u30c9\u3067\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8 duplicated \u3092\u5c0e\u5165\u3057\u307e\u3059\u3002\u3053\u306e\u30bb\u30c3\u30c8\u306f\u3001\u3059\u3067\u306b\u8a66\u884c\u3057\u305f\u8981\u7d20\u3092\u8ffd\u8de1\u3057\u3001\u91cd\u8907\u3092\u526a\u5b9a\u3067\u304d\u308b\u3088\u3046\u306b\u3057\u307e\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby permutations_ii.py
def backtrack(\n    state: list[int], choices: list[int], selected: list[bool], res: list[list[int]]\n):\n    \"\"\"\u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\uff1a\u9806\u5217 II\"\"\"\n    # \u72b6\u614b\u306e\u9577\u3055\u304c\u8981\u7d20\u6570\u3068\u7b49\u3057\u3044\u3068\u304d\u3001\u89e3\u3092\u8a18\u9332\n    if len(state) == len(choices):\n        res.append(list(state))\n        return\n    # \u3059\u3079\u3066\u306e\u9078\u629e\u80a2\u3092\u8d70\u67fb\n    duplicated = set[int]()\n    for i, choice in enumerate(choices):\n        # \u679d\u5208\u308a\uff1a\u8981\u7d20\u306e\u91cd\u8907\u9078\u629e\u3092\u8a31\u53ef\u305b\u305a\u3001\u7b49\u3057\u3044\u8981\u7d20\u306e\u91cd\u8907\u9078\u629e\u3082\u8a31\u53ef\u3057\u306a\u3044\n        if not selected[i] and choice not in duplicated:\n            # \u8a66\u884c\uff1a\u9078\u629e\u3092\u884c\u3044\u3001\u72b6\u614b\u3092\u66f4\u65b0\n            duplicated.add(choice)  # \u9078\u629e\u3055\u308c\u305f\u8981\u7d20\u5024\u3092\u8a18\u9332\n            selected[i] = True\n            state.append(choice)\n            # \u6b21\u306e\u9078\u629e\u30e9\u30a6\u30f3\u30c9\u306b\u9032\u3080\n            backtrack(state, choices, selected, res)\n            # \u64a4\u56de\uff1a\u9078\u629e\u3092\u53d6\u308a\u6d88\u3057\u3001\u524d\u306e\u72b6\u614b\u306b\u5fa9\u5143\n            selected[i] = False\n            state.pop()\n\ndef permutations_ii(nums: list[int]) -> list[list[int]]:\n    \"\"\"\u9806\u5217 II\"\"\"\n    res = []\n    backtrack(state=[], choices=nums, selected=[False] * len(nums), res=res)\n    return res\n
permutations_ii.cpp
/* \u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\uff1a\u9806\u5217 II */\nvoid backtrack(vector<int> &state, const vector<int> &choices, vector<bool> &selected, vector<vector<int>> &res) {\n    // \u72b6\u614b\u306e\u9577\u3055\u304c\u8981\u7d20\u6570\u3068\u7b49\u3057\u304f\u306a\u3063\u305f\u3089\u3001\u89e3\u3092\u8a18\u9332\n    if (state.size() == choices.size()) {\n        res.push_back(state);\n        return;\n    }\n    // \u3059\u3079\u3066\u306e\u9078\u629e\u80a2\u3092\u8d70\u67fb\n    unordered_set<int> duplicated;\n    for (int i = 0; i < choices.size(); i++) {\n        int choice = choices[i];\n        // \u526a\u5b9a\uff1a\u8981\u7d20\u306e\u91cd\u8907\u9078\u629e\u3092\u8a31\u53ef\u305b\u305a\u3001\u7b49\u3057\u3044\u8981\u7d20\u306e\u91cd\u8907\u9078\u629e\u3082\u8a31\u53ef\u3057\u306a\u3044\n        if (!selected[i] && duplicated.find(choice) == duplicated.end()) {\n            // \u8a66\u884c\uff1a\u9078\u629e\u3092\u884c\u3044\u3001\u72b6\u614b\u3092\u66f4\u65b0\n            duplicated.emplace(choice); // \u9078\u629e\u3055\u308c\u305f\u8981\u7d20\u5024\u3092\u8a18\u9332\n            selected[i] = true;\n            state.push_back(choice);\n            // \u6b21\u306e\u30e9\u30a6\u30f3\u30c9\u306e\u9078\u629e\u306b\u9032\u3080\n            backtrack(state, choices, selected, res);\n            // \u56de\u9000\uff1a\u9078\u629e\u3092\u53d6\u308a\u6d88\u3057\u3001\u524d\u306e\u72b6\u614b\u306b\u5fa9\u5143\n            selected[i] = false;\n            state.pop_back();\n        }\n    }\n}\n\n/* \u9806\u5217 II */\nvector<vector<int>> permutationsII(vector<int> nums) {\n    vector<int> state;\n    vector<bool> selected(nums.size(), false);\n    vector<vector<int>> res;\n    backtrack(state, nums, selected, res);\n    return res;\n}\n
permutations_ii.java
/* \u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\uff1a\u9806\u5217 II */\nvoid backtrack(List<Integer> state, int[] choices, boolean[] selected, List<List<Integer>> res) {\n    // \u72b6\u614b\u306e\u9577\u3055\u304c\u8981\u7d20\u6570\u3068\u7b49\u3057\u304f\u306a\u3063\u305f\u3089\u3001\u89e3\u3092\u8a18\u9332\n    if (state.size() == choices.length) {\n        res.add(new ArrayList<Integer>(state));\n        return;\n    }\n    // \u3059\u3079\u3066\u306e\u9078\u629e\u80a2\u3092\u8d70\u67fb\n    Set<Integer> duplicated = new HashSet<Integer>();\n    for (int i = 0; i < choices.length; i++) {\n        int choice = choices[i];\n        // \u526a\u5b9a\uff1a\u8981\u7d20\u306e\u91cd\u8907\u9078\u629e\u3092\u8a31\u53ef\u305b\u305a\u3001\u7b49\u3057\u3044\u8981\u7d20\u306e\u91cd\u8907\u9078\u629e\u3082\u8a31\u53ef\u3057\u306a\u3044\n        if (!selected[i] && !duplicated.contains(choice)) {\n            // \u8a66\u884c\uff1a\u9078\u629e\u3092\u884c\u3044\u3001\u72b6\u614b\u3092\u66f4\u65b0\n            duplicated.add(choice); // \u9078\u629e\u3055\u308c\u305f\u8981\u7d20\u5024\u3092\u8a18\u9332\n            selected[i] = true;\n            state.add(choice);\n            // \u6b21\u306e\u30e9\u30a6\u30f3\u30c9\u306e\u9078\u629e\u306b\u9032\u3080\n            backtrack(state, choices, selected, res);\n            // \u56de\u9000\uff1a\u9078\u629e\u3092\u53d6\u308a\u6d88\u3057\u3001\u524d\u306e\u72b6\u614b\u306b\u5fa9\u5143\n            selected[i] = false;\n            state.remove(state.size() - 1);\n        }\n    }\n}\n\n/* \u9806\u5217 II */\nList<List<Integer>> permutationsII(int[] nums) {\n    List<List<Integer>> res = new ArrayList<List<Integer>>();\n    backtrack(new ArrayList<Integer>(), nums, new boolean[nums.length], res);\n    return res;\n}\n
permutations_ii.cs
[class]{permutations_ii}-[func]{Backtrack}\n\n[class]{permutations_ii}-[func]{PermutationsII}\n
permutations_ii.go
[class]{}-[func]{backtrackII}\n\n[class]{}-[func]{permutationsII}\n
permutations_ii.swift
[class]{}-[func]{backtrack}\n\n[class]{}-[func]{permutationsII}\n
permutations_ii.js
[class]{}-[func]{backtrack}\n\n[class]{}-[func]{permutationsII}\n
permutations_ii.ts
[class]{}-[func]{backtrack}\n\n[class]{}-[func]{permutationsII}\n
permutations_ii.dart
[class]{}-[func]{backtrack}\n\n[class]{}-[func]{permutationsII}\n
permutations_ii.rs
[class]{}-[func]{backtrack}\n\n[class]{}-[func]{permutations_ii}\n
permutations_ii.c
[class]{}-[func]{backtrack}\n\n[class]{}-[func]{permutationsII}\n
permutations_ii.kt
[class]{}-[func]{backtrack}\n\n[class]{}-[func]{permutationsII}\n
permutations_ii.rb
[class]{}-[func]{backtrack}\n\n[class]{}-[func]{permutations_ii}\n

\u3059\u3079\u3066\u306e\u8981\u7d20\u304c\u7570\u306a\u308b\u3068\u4eee\u5b9a\u3059\u308b\u3068\u3001\\(n\\) \u500b\u306e\u8981\u7d20\u306e\u9806\u5217\u306f \\(n!\\) \uff08\u968e\u4e57\uff09\u500b\u3042\u308a\u307e\u3059\u3002\u5404\u7d50\u679c\u3092\u8a18\u9332\u3059\u308b\u306b\u306f\u9577\u3055 \\(n\\) \u306e\u30ea\u30b9\u30c8\u3092\u30b3\u30d4\u30fc\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u3001\u3053\u308c\u306b\u306f \\(O(n)\\) \u6642\u9593\u304c\u304b\u304b\u308a\u307e\u3059\u3002\u3057\u305f\u304c\u3063\u3066\u3001\u7dcf\u6642\u9593\u8a08\u7b97\u91cf\u306f \\(O(n!n)\\) \u3067\u3059\u3002

\u6700\u5927\u518d\u5e30\u6df1\u5ea6\u306f \\(n\\) \u3067\u3001\\(O(n)\\) \u306e\u30b9\u30bf\u30c3\u30af\u7a7a\u9593\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002selected \u914d\u5217\u3082 \\(O(n)\\) \u7a7a\u9593\u304c\u5fc5\u8981\u3067\u3059\u3002\u4e00\u5ea6\u306b\u6700\u5927 \\(n\\) \u500b\u306e\u500b\u5225\u306e duplicated \u30bb\u30c3\u30c8\u304c\u5b58\u5728\u3059\u308b\u53ef\u80fd\u6027\u304c\u3042\u308b\u305f\u3081\u3001\u305d\u308c\u3089\u306f\u96c6\u5408\u7684\u306b \\(O(n^2)\\) \u7a7a\u9593\u3092\u5360\u6709\u3057\u307e\u3059\u3002\u3057\u305f\u304c\u3063\u3066\u3001\u7a7a\u9593\u8a08\u7b97\u91cf\u306f \\(O(n^2)\\) \u3067\u3059\u3002

"},{"location":"chapter_backtracking/permutations_problem/#3-2","title":"3. \u00a0 2\u3064\u306e\u526a\u5b9a\u65b9\u6cd5\u306e\u6bd4\u8f03","text":"

selected \u3068 duplicated \u306f\u3069\u3061\u3089\u3082\u526a\u5b9a\u30e1\u30ab\u30cb\u30ba\u30e0\u3068\u3057\u3066\u6a5f\u80fd\u3057\u307e\u3059\u304c\u3001\u7570\u306a\u308b\u554f\u984c\u3092\u30bf\u30fc\u30b2\u30c3\u30c8\u306b\u3057\u3066\u3044\u307e\u3059\uff1a

\u4ee5\u4e0b\u306e\u56f3\u306f\u3001\u3053\u308c\u30892\u3064\u306e\u526a\u5b9a\u6226\u7565\u306e\u7bc4\u56f2\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002\u6728\u306e\u5404\u30ce\u30fc\u30c9\u306f\u9078\u629e\u3092\u8868\u3057\u307e\u3059\u3002\u30eb\u30fc\u30c8\u304b\u3089\u4efb\u610f\u306e\u8449\u3078\u306e\u7d4c\u8def\u306f\u30011\u3064\u306e\u5b8c\u5168\u306a\u9806\u5217\u306b\u5bfe\u5fdc\u3057\u307e\u3059\u3002

\u56f3 13-9 \u00a0 2\u3064\u306e\u526a\u5b9a\u6761\u4ef6\u306e\u7bc4\u56f2

"},{"location":"chapter_backtracking/subset_sum_problem/","title":"13.3 \u00a0 \u90e8\u5206\u96c6\u5408\u548c\u554f\u984c","text":""},{"location":"chapter_backtracking/subset_sum_problem/#1331","title":"13.3.1 \u00a0 \u91cd\u8907\u8981\u7d20\u304c\u306a\u3044\u5834\u5408","text":"

Question

\u6b63\u306e\u6574\u6570\u306e\u914d\u5217 nums \u3068\u30bf\u30fc\u30b2\u30c3\u30c8\u6b63\u6574\u6570 target \u304c\u4e0e\u3048\u3089\u308c\u305f\u5834\u5408\u3001\u7d44\u307f\u5408\u308f\u305b\u5185\u306e\u8981\u7d20\u306e\u548c\u304c target \u306b\u7b49\u3057\u304f\u306a\u308b\u3088\u3046\u306a\u3059\u3079\u3066\u306e\u53ef\u80fd\u306a\u7d44\u307f\u5408\u308f\u305b\u3092\u898b\u3064\u3051\u3066\u304f\u3060\u3055\u3044\u3002\u4e0e\u3048\u3089\u308c\u305f\u914d\u5217\u306b\u306f\u91cd\u8907\u8981\u7d20\u304c\u306a\u304f\u3001\u5404\u8981\u7d20\u306f\u8907\u6570\u56de\u9078\u629e\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u7d44\u307f\u5408\u308f\u305b\u3092\u91cd\u8907\u3059\u308b\u7d44\u307f\u5408\u308f\u305b\u3092\u542b\u307e\u306a\u3044\u30ea\u30b9\u30c8\u3068\u3057\u3066\u8fd4\u3057\u3066\u304f\u3060\u3055\u3044\u3002

\u4f8b\u3048\u3070\u3001\u5165\u529b\u96c6\u5408 \\(\\{3, 4, 5\\}\\) \u3068\u30bf\u30fc\u30b2\u30c3\u30c8\u6574\u6570 \\(9\\) \u306e\u5834\u5408\u3001\u89e3\u306f \\(\\{3, 3, 3\\}, \\{4, 5\\}\\) \u3067\u3059\u3002\u4ee5\u4e0b\u306e2\u70b9\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002

"},{"location":"chapter_backtracking/subset_sum_problem/#1","title":"1. \u00a0 \u9806\u5217\u89e3\u6cd5\u306e\u53c2\u8003","text":"

\u9806\u5217\u554f\u984c\u3068\u540c\u69d8\u306b\u3001\u90e8\u5206\u96c6\u5408\u306e\u751f\u6210\u3092\u4e00\u9023\u306e\u9078\u629e\u3068\u3057\u3066\u60f3\u50cf\u3067\u304d\u3001\u9078\u629e\u30d7\u30ed\u30bb\u30b9\u4e2d\u306b\u300c\u8981\u7d20\u548c\u300d\u3092\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u3067\u66f4\u65b0\u3067\u304d\u307e\u3059\u3002\u8981\u7d20\u548c\u304c target \u306b\u7b49\u3057\u304f\u306a\u3063\u305f\u3068\u304d\u3001\u90e8\u5206\u96c6\u5408\u3092\u7d50\u679c\u30ea\u30b9\u30c8\u306b\u8a18\u9332\u3057\u307e\u3059\u3002

\u9806\u5217\u554f\u984c\u3068\u306f\u7570\u306a\u308a\u3001\u3053\u306e\u554f\u984c\u3067\u306f\u8981\u7d20\u306f\u7121\u5236\u9650\u306b\u9078\u629e\u3067\u304d\u308b\u305f\u3081\u3001\u8981\u7d20\u304c\u9078\u629e\u3055\u308c\u305f\u304b\u3069\u3046\u304b\u3092\u8a18\u9332\u3059\u308b\u305f\u3081\u306e selected \u30d6\u30fc\u30eb\u914d\u5217\u3092\u4f7f\u7528\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u305b\u3093\u3002\u9806\u5217\u30b3\u30fc\u30c9\u306b\u8efd\u5fae\u306a\u4fee\u6b63\u3092\u52a0\u3048\u3066\u3001\u6700\u521d\u306b\u554f\u984c\u3092\u89e3\u6c7a\u3067\u304d\u307e\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby subset_sum_i_naive.py
def backtrack(\n    state: list[int],\n    target: int,\n    total: int,\n    choices: list[int],\n    res: list[list[int]],\n):\n    \"\"\"\u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\uff1a\u90e8\u5206\u96c6\u5408\u306e\u548c I\"\"\"\n    # \u90e8\u5206\u96c6\u5408\u306e\u548c\u304c target \u3068\u7b49\u3057\u3044\u3068\u304d\u3001\u89e3\u3092\u8a18\u9332\n    if total == target:\n        res.append(list(state))\n        return\n    # \u3059\u3079\u3066\u306e\u9078\u629e\u80a2\u3092\u8d70\u67fb\n    for i in range(len(choices)):\n        # \u679d\u5208\u308a\uff1a\u90e8\u5206\u96c6\u5408\u306e\u548c\u304c target \u3092\u8d85\u3048\u308b\u5834\u5408\u3001\u305d\u306e\u9078\u629e\u3092\u30b9\u30ad\u30c3\u30d7\n        if total + choices[i] > target:\n            continue\n        # \u8a66\u884c\uff1a\u9078\u629e\u3092\u884c\u3044\u3001\u8981\u7d20\u3068 total \u3092\u66f4\u65b0\n        state.append(choices[i])\n        # \u6b21\u306e\u9078\u629e\u30e9\u30a6\u30f3\u30c9\u306b\u9032\u3080\n        backtrack(state, target, total + choices[i], choices, res)\n        # \u64a4\u56de\uff1a\u9078\u629e\u3092\u53d6\u308a\u6d88\u3057\u3001\u524d\u306e\u72b6\u614b\u306b\u5fa9\u5143\n        state.pop()\n\ndef subset_sum_i_naive(nums: list[int], target: int) -> list[list[int]]:\n    \"\"\"\u90e8\u5206\u96c6\u5408\u306e\u548c I \u3092\u89e3\u304f\uff08\u91cd\u8907\u3059\u308b\u90e8\u5206\u96c6\u5408\u3092\u542b\u3080\uff09\"\"\"\n    state = []  # \u72b6\u614b\uff08\u90e8\u5206\u96c6\u5408\uff09\n    total = 0  # \u90e8\u5206\u96c6\u5408\u306e\u548c\n    res = []  # \u7d50\u679c\u30ea\u30b9\u30c8\uff08\u90e8\u5206\u96c6\u5408\u30ea\u30b9\u30c8\uff09\n    backtrack(state, target, total, nums, res)\n    return res\n
subset_sum_i_naive.cpp
/* \u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\uff1a\u90e8\u5206\u96c6\u5408\u548c I */\nvoid backtrack(vector<int> &state, int target, int total, vector<int> &choices, vector<vector<int>> &res) {\n    // \u90e8\u5206\u96c6\u5408\u306e\u548c\u304ctarget\u3068\u7b49\u3057\u3044\u3068\u304d\u3001\u89e3\u3092\u8a18\u9332\n    if (total == target) {\n        res.push_back(state);\n        return;\n    }\n    // \u3059\u3079\u3066\u306e\u9078\u629e\u80a2\u3092\u8d70\u67fb\n    for (int i = 0; i < choices.size(); i++) {\n        // \u526a\u5b9a\uff1a\u90e8\u5206\u96c6\u5408\u306e\u548c\u304ctarget\u3092\u8d85\u3048\u305f\u5834\u5408\u3001\u305d\u306e\u9078\u629e\u3092\u30b9\u30ad\u30c3\u30d7\n        if (total + choices[i] > target) {\n            continue;\n        }\n        // \u8a66\u884c\uff1a\u9078\u629e\u3092\u884c\u3044\u3001\u8981\u7d20\u3068total\u3092\u66f4\u65b0\n        state.push_back(choices[i]);\n        // \u6b21\u306e\u30e9\u30a6\u30f3\u30c9\u306e\u9078\u629e\u306b\u9032\u3080\n        backtrack(state, target, total + choices[i], choices, res);\n        // \u56de\u9000\uff1a\u9078\u629e\u3092\u53d6\u308a\u6d88\u3057\u3001\u524d\u306e\u72b6\u614b\u306b\u5fa9\u5143\n        state.pop_back();\n    }\n}\n\n/* \u90e8\u5206\u96c6\u5408\u548c I \u3092\u89e3\u304f\uff08\u91cd\u8907\u3059\u308b\u90e8\u5206\u96c6\u5408\u3092\u542b\u3080\uff09 */\nvector<vector<int>> subsetSumINaive(vector<int> nums, int target) {\n    vector<int> state;       // \u72b6\u614b\uff08\u90e8\u5206\u96c6\u5408\uff09\n    int total = 0;           // \u90e8\u5206\u96c6\u5408\u306e\u548c\n    vector<vector<int>> res; // \u7d50\u679c\u30ea\u30b9\u30c8\uff08\u90e8\u5206\u96c6\u5408\u30ea\u30b9\u30c8\uff09\n    backtrack(state, target, total, nums, res);\n    return res;\n}\n
subset_sum_i_naive.java
/* \u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\uff1a\u90e8\u5206\u96c6\u5408\u548c I */\nvoid backtrack(List<Integer> state, int target, int total, int[] choices, List<List<Integer>> res) {\n    // \u90e8\u5206\u96c6\u5408\u306e\u548c\u304ctarget\u3068\u7b49\u3057\u3044\u3068\u304d\u3001\u89e3\u3092\u8a18\u9332\n    if (total == target) {\n        res.add(new ArrayList<>(state));\n        return;\n    }\n    // \u3059\u3079\u3066\u306e\u9078\u629e\u80a2\u3092\u8d70\u67fb\n    for (int i = 0; i < choices.length; i++) {\n        // \u526a\u5b9a\uff1a\u90e8\u5206\u96c6\u5408\u306e\u548c\u304ctarget\u3092\u8d85\u3048\u305f\u5834\u5408\u3001\u305d\u306e\u9078\u629e\u3092\u30b9\u30ad\u30c3\u30d7\n        if (total + choices[i] > target) {\n            continue;\n        }\n        // \u8a66\u884c\uff1a\u9078\u629e\u3092\u884c\u3044\u3001\u8981\u7d20\u3068total\u3092\u66f4\u65b0\n        state.add(choices[i]);\n        // \u6b21\u306e\u30e9\u30a6\u30f3\u30c9\u306e\u9078\u629e\u306b\u9032\u3080\n        backtrack(state, target, total + choices[i], choices, res);\n        // \u56de\u9000\uff1a\u9078\u629e\u3092\u53d6\u308a\u6d88\u3057\u3001\u524d\u306e\u72b6\u614b\u306b\u5fa9\u5143\n        state.remove(state.size() - 1);\n    }\n}\n\n/* \u90e8\u5206\u96c6\u5408\u548c I \u3092\u89e3\u304f\uff08\u91cd\u8907\u3059\u308b\u90e8\u5206\u96c6\u5408\u3092\u542b\u3080\uff09 */\nList<List<Integer>> subsetSumINaive(int[] nums, int target) {\n    List<Integer> state = new ArrayList<>(); // \u72b6\u614b\uff08\u90e8\u5206\u96c6\u5408\uff09\n    int total = 0; // \u90e8\u5206\u96c6\u5408\u306e\u548c\n    List<List<Integer>> res = new ArrayList<>(); // \u7d50\u679c\u30ea\u30b9\u30c8\uff08\u90e8\u5206\u96c6\u5408\u30ea\u30b9\u30c8\uff09\n    backtrack(state, target, total, nums, res);\n    return res;\n}\n
subset_sum_i_naive.cs
[class]{subset_sum_i_naive}-[func]{Backtrack}\n\n[class]{subset_sum_i_naive}-[func]{SubsetSumINaive}\n
subset_sum_i_naive.go
[class]{}-[func]{backtrackSubsetSumINaive}\n\n[class]{}-[func]{subsetSumINaive}\n
subset_sum_i_naive.swift
[class]{}-[func]{backtrack}\n\n[class]{}-[func]{subsetSumINaive}\n
subset_sum_i_naive.js
[class]{}-[func]{backtrack}\n\n[class]{}-[func]{subsetSumINaive}\n
subset_sum_i_naive.ts
[class]{}-[func]{backtrack}\n\n[class]{}-[func]{subsetSumINaive}\n
subset_sum_i_naive.dart
[class]{}-[func]{backtrack}\n\n[class]{}-[func]{subsetSumINaive}\n
subset_sum_i_naive.rs
[class]{}-[func]{backtrack}\n\n[class]{}-[func]{subset_sum_i_naive}\n
subset_sum_i_naive.c
[class]{}-[func]{backtrack}\n\n[class]{}-[func]{subsetSumINaive}\n
subset_sum_i_naive.kt
[class]{}-[func]{backtrack}\n\n[class]{}-[func]{subsetSumINaive}\n
subset_sum_i_naive.rb
[class]{}-[func]{backtrack}\n\n[class]{}-[func]{subset_sum_i_naive}\n

\u914d\u5217 \\([3, 4, 5]\\) \u3068\u30bf\u30fc\u30b2\u30c3\u30c8\u8981\u7d20 \\(9\\) \u3092\u4e0a\u8a18\u306e\u30b3\u30fc\u30c9\u306b\u5165\u529b\u3059\u308b\u3068\u3001\u7d50\u679c \\([3, 3, 3], [4, 5], [5, 4]\\) \u304c\u5f97\u3089\u308c\u307e\u3059\u3002\u548c\u304c \\(9\\) \u306e\u3059\u3079\u3066\u306e\u90e8\u5206\u96c6\u5408\u3092\u6b63\u5e38\u306b\u898b\u3064\u3051\u307e\u3057\u305f\u304c\u3001\u91cd\u8907\u3059\u308b\u90e8\u5206\u96c6\u5408 \\([4, 5]\\) \u3068 \\([5, 4]\\) \u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002

\u3053\u308c\u306f\u3001\u691c\u7d22\u30d7\u30ed\u30bb\u30b9\u304c\u9078\u629e\u306e\u9806\u5e8f\u3092\u533a\u5225\u3059\u308b\u305f\u3081\u3067\u3059\u304c\u3001\u90e8\u5206\u96c6\u5408\u306f\u9078\u629e\u9806\u5e8f\u3092\u533a\u5225\u3057\u307e\u305b\u3093\u3002\u4ee5\u4e0b\u306e\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\\(5\\) \u306e\u524d\u306b \\(4\\) \u3092\u9078\u629e\u3059\u308b\u3053\u3068\u3068 \\(4\\) \u306e\u524d\u306b \\(5\\) \u3092\u9078\u629e\u3059\u308b\u3053\u3068\u306f\u7570\u306a\u308b\u5206\u5c90\u3067\u3059\u304c\u3001\u540c\u3058\u90e8\u5206\u96c6\u5408\u306b\u5bfe\u5fdc\u3057\u307e\u3059\u3002

\u56f3 13-10 \u00a0 \u90e8\u5206\u96c6\u5408\u306e\u691c\u7d22\u3068\u5883\u754c\u5916\u306e\u526a\u5b9a

\u91cd\u8907\u3059\u308b\u90e8\u5206\u96c6\u5408\u3092\u9664\u53bb\u3059\u308b\u305f\u3081\u306b\u3001\u76f4\u63a5\u7684\u306a\u30a2\u30a4\u30c7\u30a2\u306f\u7d50\u679c\u30ea\u30b9\u30c8\u3092\u91cd\u8907\u9664\u53bb\u3059\u308b\u3053\u3068\u3067\u3059\u3002\u3057\u304b\u3057\u3001\u3053\u306e\u65b9\u6cd5\u306f2\u3064\u306e\u7406\u7531\u3067\u975e\u5e38\u306b\u975e\u52b9\u7387\u7684\u3067\u3059\u3002

"},{"location":"chapter_backtracking/subset_sum_problem/#2","title":"2. \u00a0 \u91cd\u8907\u90e8\u5206\u96c6\u5408\u306e\u526a\u5b9a","text":"

\u526a\u5b9a\u3092\u901a\u3058\u3066\u691c\u7d22\u30d7\u30ed\u30bb\u30b9\u4e2d\u306b\u91cd\u8907\u9664\u53bb\u3092\u691c\u8a0e\u3057\u307e\u3059\u3002\u4ee5\u4e0b\u306e\u56f3\u3092\u89b3\u5bdf\u3059\u308b\u3068\u3001\u7570\u306a\u308b\u9806\u5e8f\u3067\u914d\u5217\u8981\u7d20\u3092\u9078\u629e\u3059\u308b\u3068\u304d\u306b\u91cd\u8907\u3059\u308b\u90e8\u5206\u96c6\u5408\u304c\u751f\u6210\u3055\u308c\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001\u4ee5\u4e0b\u306e\u72b6\u6cc1\u3067\u3059\u3002

  1. \u6700\u521d\u306e\u30e9\u30a6\u30f3\u30c9\u3067 \\(3\\) \u3092\u9078\u629e\u3057\u30012\u756a\u76ee\u306e\u30e9\u30a6\u30f3\u30c9\u3067 \\(4\\) \u3092\u9078\u629e\u3059\u308b\u3068\u3001\u3053\u308c\u30892\u3064\u306e\u8981\u7d20\u3092\u542b\u3080\u3059\u3079\u3066\u306e\u90e8\u5206\u96c6\u5408\u304c\u751f\u6210\u3055\u308c\u3001\\([3, 4, \\dots]\\) \u3068\u8868\u8a18\u3055\u308c\u307e\u3059\u3002
  2. \u5f8c\u3067\u3001\u6700\u521d\u306e\u30e9\u30a6\u30f3\u30c9\u3067 \\(4\\) \u304c\u9078\u629e\u3055\u308c\u305f\u3068\u304d\u30012\u756a\u76ee\u306e\u30e9\u30a6\u30f3\u30c9\u306f \\(3\\) \u3092\u30b9\u30ad\u30c3\u30d7\u3059\u3079\u304d\u3067\u3059\u3002\u3053\u306e\u9078\u629e\u306b\u3088\u3063\u3066\u751f\u6210\u3055\u308c\u308b\u90e8\u5206\u96c6\u5408 \\([4, 3, \\dots]\\) \u306f\u30b9\u30c6\u30c3\u30d7 1. \u306e\u90e8\u5206\u96c6\u5408\u3068\u5b8c\u5168\u306b\u91cd\u8907\u3059\u308b\u304b\u3089\u3067\u3059\u3002

\u691c\u7d22\u30d7\u30ed\u30bb\u30b9\u3067\u306f\u3001\u5404\u5c64\u306e\u9078\u629e\u304c\u5de6\u304b\u3089\u53f3\u306b\u4e00\u3064\u305a\u3064\u8a66\u884c\u3055\u308c\u308b\u305f\u3081\u3001\u53f3\u5074\u306e\u5206\u5c90\u307b\u3069\u3088\u308a\u591a\u304f\u526a\u5b9a\u3055\u308c\u307e\u3059\u3002

  1. \u6700\u521d\u306e2\u30e9\u30a6\u30f3\u30c9\u3067 \\(3\\) \u3068 \\(5\\) \u3092\u9078\u629e\u3057\u3001\u90e8\u5206\u96c6\u5408 \\([3, 5, \\dots]\\) \u3092\u751f\u6210\u3057\u307e\u3059\u3002
  2. \u6700\u521d\u306e2\u30e9\u30a6\u30f3\u30c9\u3067 \\(4\\) \u3068 \\(5\\) \u3092\u9078\u629e\u3057\u3001\u90e8\u5206\u96c6\u5408 \\([4, 5, \\dots]\\) \u3092\u751f\u6210\u3057\u307e\u3059\u3002
  3. \u6700\u521d\u306e\u30e9\u30a6\u30f3\u30c9\u3067 \\(5\\) \u304c\u9078\u629e\u3055\u308c\u305f\u5834\u5408\u30012\u756a\u76ee\u306e\u30e9\u30a6\u30f3\u30c9\u306f \\(3\\) \u3068 \\(4\\) \u3092\u30b9\u30ad\u30c3\u30d7\u3059\u3079\u304d\u3067\u3059\u3002\u90e8\u5206\u96c6\u5408 \\([5, 3, \\dots]\\) \u3068 \\([5, 4, \\dots]\\) \u306f\u30b9\u30c6\u30c3\u30d7 1. \u3068 2. \u3067\u8a18\u8ff0\u3055\u308c\u305f\u90e8\u5206\u96c6\u5408\u3068\u5b8c\u5168\u306b\u91cd\u8907\u3059\u308b\u304b\u3089\u3067\u3059\u3002

\u56f3 13-11 \u00a0 \u7570\u306a\u308b\u9078\u629e\u9806\u5e8f\u306b\u3088\u308b\u91cd\u8907\u90e8\u5206\u96c6\u5408

\u8981\u7d04\u3059\u308b\u3068\u3001\u5165\u529b\u914d\u5217 \\([x_1, x_2, \\dots, x_n]\\) \u304c\u4e0e\u3048\u3089\u308c\u305f\u5834\u5408\u3001\u691c\u7d22\u30d7\u30ed\u30bb\u30b9\u3067\u306e\u9078\u629e\u30b7\u30fc\u30b1\u30f3\u30b9\u306f \\([x_{i_1}, x_{i_2}, \\dots, x_{i_m}]\\) \u3067\u3042\u308b\u3079\u304d\u3067\u3001\\(i_1 \\leq i_2 \\leq \\dots \\leq i_m\\) \u3092\u6e80\u305f\u3059\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u306e\u6761\u4ef6\u3092\u6e80\u305f\u3055\u306a\u3044\u9078\u629e\u30b7\u30fc\u30b1\u30f3\u30b9\u306f\u91cd\u8907\u3092\u5f15\u304d\u8d77\u3053\u3057\u3001\u526a\u5b9a\u3055\u308c\u308b\u3079\u304d\u3067\u3059\u3002

"},{"location":"chapter_backtracking/subset_sum_problem/#3","title":"3. \u00a0 \u30b3\u30fc\u30c9\u5b9f\u88c5","text":"

\u3053\u306e\u526a\u5b9a\u3092\u5b9f\u88c5\u3059\u308b\u305f\u3081\u306b\u3001\u5909\u6570 start \u3092\u521d\u671f\u5316\u3057\u3001\u3053\u308c\u306f\u8d70\u67fb\u306e\u958b\u59cb\u70b9\u3092\u793a\u3057\u307e\u3059\u3002\u9078\u629e \\(x_{i}\\) \u3092\u884c\u3063\u305f\u5f8c\u3001\u6b21\u306e\u30e9\u30a6\u30f3\u30c9\u3092\u30a4\u30f3\u30c7\u30c3\u30af\u30b9 \\(i\\) \u304b\u3089\u958b\u59cb\u3059\u308b\u3088\u3046\u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u9078\u629e\u30b7\u30fc\u30b1\u30f3\u30b9\u304c \\(i_1 \\leq i_2 \\leq \\dots \\leq i_m\\) \u3092\u6e80\u305f\u3059\u3053\u3068\u304c\u4fdd\u8a3c\u3055\u308c\u3001\u90e8\u5206\u96c6\u5408\u306e\u4e00\u610f\u6027\u304c\u4fdd\u8a3c\u3055\u308c\u307e\u3059\u3002

\u3055\u3089\u306b\u3001\u30b3\u30fc\u30c9\u306b\u4ee5\u4e0b\u306e2\u3064\u306e\u6700\u9069\u5316\u3092\u884c\u3044\u307e\u3057\u305f\u3002

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby subset_sum_i.py
def backtrack(\n    state: list[int], target: int, choices: list[int], start: int, res: list[list[int]]\n):\n    \"\"\"\u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\uff1a\u90e8\u5206\u96c6\u5408\u306e\u548c I\"\"\"\n    # \u90e8\u5206\u96c6\u5408\u306e\u548c\u304c target \u3068\u7b49\u3057\u3044\u3068\u304d\u3001\u89e3\u3092\u8a18\u9332\n    if target == 0:\n        res.append(list(state))\n        return\n    # \u3059\u3079\u3066\u306e\u9078\u629e\u80a2\u3092\u8d70\u67fb\n    # \u679d\u5208\u308a\u4e8c\uff1astart \u304b\u3089\u8d70\u67fb\u3092\u958b\u59cb\u3057\u3066\u91cd\u8907\u3059\u308b\u90e8\u5206\u96c6\u5408\u306e\u751f\u6210\u3092\u907f\u3051\u308b\n    for i in range(start, len(choices)):\n        # \u679d\u5208\u308a\u4e00\uff1a\u90e8\u5206\u96c6\u5408\u306e\u548c\u304c target \u3092\u8d85\u3048\u308b\u5834\u5408\u3001\u76f4\u3061\u306b\u30eb\u30fc\u30d7\u3092\u7d42\u4e86\n        # \u3053\u308c\u306f\u914d\u5217\u304c\u30bd\u30fc\u30c8\u3055\u308c\u3066\u304a\u308a\u3001\u5f8c\u306e\u8981\u7d20\u304c\u3088\u308a\u5927\u304d\u3044\u305f\u3081\u3001\u90e8\u5206\u96c6\u5408\u306e\u548c\u306f\u5fc5\u305a target \u3092\u8d85\u3048\u308b\u305f\u3081\n        if target - choices[i] < 0:\n            break\n        # \u8a66\u884c\uff1a\u9078\u629e\u3092\u884c\u3044\u3001target\u3001start \u3092\u66f4\u65b0\n        state.append(choices[i])\n        # \u6b21\u306e\u9078\u629e\u30e9\u30a6\u30f3\u30c9\u306b\u9032\u3080\n        backtrack(state, target - choices[i], choices, i, res)\n        # \u64a4\u56de\uff1a\u9078\u629e\u3092\u53d6\u308a\u6d88\u3057\u3001\u524d\u306e\u72b6\u614b\u306b\u5fa9\u5143\n        state.pop()\n\ndef subset_sum_i(nums: list[int], target: int) -> list[list[int]]:\n    \"\"\"\u90e8\u5206\u96c6\u5408\u306e\u548c I \u3092\u89e3\u304f\"\"\"\n    state = []  # \u72b6\u614b\uff08\u90e8\u5206\u96c6\u5408\uff09\n    nums.sort()  # nums \u3092\u30bd\u30fc\u30c8\n    start = 0  # \u8d70\u67fb\u306e\u958b\u59cb\u70b9\n    res = []  # \u7d50\u679c\u30ea\u30b9\u30c8\uff08\u90e8\u5206\u96c6\u5408\u30ea\u30b9\u30c8\uff09\n    backtrack(state, target, nums, start, res)\n    return res\n
subset_sum_i.cpp
/* \u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\uff1a\u90e8\u5206\u96c6\u5408\u548c I */\nvoid backtrack(vector<int> &state, int target, vector<int> &choices, int start, vector<vector<int>> &res) {\n    // \u90e8\u5206\u96c6\u5408\u306e\u548c\u304ctarget\u3068\u7b49\u3057\u3044\u3068\u304d\u3001\u89e3\u3092\u8a18\u9332\n    if (target == 0) {\n        res.push_back(state);\n        return;\n    }\n    // \u3059\u3079\u3066\u306e\u9078\u629e\u80a2\u3092\u8d70\u67fb\n    // \u526a\u5b9a\u4e8c\uff1astart\u304b\u3089\u8d70\u67fb\u3092\u958b\u59cb\u3057\u3001\u91cd\u8907\u3059\u308b\u90e8\u5206\u96c6\u5408\u306e\u751f\u6210\u3092\u56de\u907f\n    for (int i = start; i < choices.size(); i++) {\n        // \u526a\u5b9a\u4e00\uff1a\u90e8\u5206\u96c6\u5408\u306e\u548c\u304ctarget\u3092\u8d85\u3048\u305f\u5834\u5408\u3001\u5373\u5ea7\u306b\u30eb\u30fc\u30d7\u3092\u7d42\u4e86\n        // \u914d\u5217\u304c\u30bd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308b\u305f\u3081\u3001\u5f8c\u306e\u8981\u7d20\u306f\u3055\u3089\u306b\u5927\u304d\u304f\u3001\u90e8\u5206\u96c6\u5408\u306e\u548c\u306f\u5fc5\u305atarget\u3092\u8d85\u3048\u308b\n        if (target - choices[i] < 0) {\n            break;\n        }\n        // \u8a66\u884c\uff1a\u9078\u629e\u3092\u884c\u3044\u3001target\u3001start\u3092\u66f4\u65b0\n        state.push_back(choices[i]);\n        // \u6b21\u306e\u30e9\u30a6\u30f3\u30c9\u306e\u9078\u629e\u306b\u9032\u3080\n        backtrack(state, target - choices[i], choices, i, res);\n        // \u56de\u9000\uff1a\u9078\u629e\u3092\u53d6\u308a\u6d88\u3057\u3001\u524d\u306e\u72b6\u614b\u306b\u5fa9\u5143\n        state.pop_back();\n    }\n}\n\n/* \u90e8\u5206\u96c6\u5408\u548c I \u3092\u89e3\u304f */\nvector<vector<int>> subsetSumI(vector<int> nums, int target) {\n    vector<int> state;              // \u72b6\u614b\uff08\u90e8\u5206\u96c6\u5408\uff09\n    sort(nums.begin(), nums.end()); // nums \u3092\u30bd\u30fc\u30c8\n    int start = 0;                  // \u8d70\u67fb\u306e\u958b\u59cb\u70b9\n    vector<vector<int>> res;        // \u7d50\u679c\u30ea\u30b9\u30c8\uff08\u90e8\u5206\u96c6\u5408\u30ea\u30b9\u30c8\uff09\n    backtrack(state, target, nums, start, res);\n    return res;\n}\n
subset_sum_i.java
/* \u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\uff1a\u90e8\u5206\u96c6\u5408\u548c I */\nvoid backtrack(List<Integer> state, int target, int[] choices, int start, List<List<Integer>> res) {\n    // \u90e8\u5206\u96c6\u5408\u306e\u548c\u304ctarget\u3068\u7b49\u3057\u3044\u3068\u304d\u3001\u89e3\u3092\u8a18\u9332\n    if (target == 0) {\n        res.add(new ArrayList<>(state));\n        return;\n    }\n    // \u3059\u3079\u3066\u306e\u9078\u629e\u80a2\u3092\u8d70\u67fb\n    // \u526a\u5b9a\u4e8c\uff1astart\u304b\u3089\u8d70\u67fb\u3092\u958b\u59cb\u3057\u3001\u91cd\u8907\u3059\u308b\u90e8\u5206\u96c6\u5408\u306e\u751f\u6210\u3092\u56de\u907f\n    for (int i = start; i < choices.length; i++) {\n        // \u526a\u5b9a\u4e00\uff1a\u90e8\u5206\u96c6\u5408\u306e\u548c\u304ctarget\u3092\u8d85\u3048\u305f\u5834\u5408\u3001\u5373\u5ea7\u306b\u30eb\u30fc\u30d7\u3092\u7d42\u4e86\n        // \u914d\u5217\u304c\u30bd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308b\u305f\u3081\u3001\u5f8c\u306e\u8981\u7d20\u306f\u3055\u3089\u306b\u5927\u304d\u304f\u3001\u90e8\u5206\u96c6\u5408\u306e\u548c\u306f\u5fc5\u305atarget\u3092\u8d85\u3048\u308b\n        if (target - choices[i] < 0) {\n            break;\n        }\n        // \u8a66\u884c\uff1a\u9078\u629e\u3092\u884c\u3044\u3001target\u3001start\u3092\u66f4\u65b0\n        state.add(choices[i]);\n        // \u6b21\u306e\u30e9\u30a6\u30f3\u30c9\u306e\u9078\u629e\u306b\u9032\u3080\n        backtrack(state, target - choices[i], choices, i, res);\n        // \u56de\u9000\uff1a\u9078\u629e\u3092\u53d6\u308a\u6d88\u3057\u3001\u524d\u306e\u72b6\u614b\u306b\u5fa9\u5143\n        state.remove(state.size() - 1);\n    }\n}\n\n/* \u90e8\u5206\u96c6\u5408\u548c I \u3092\u89e3\u304f */\nList<List<Integer>> subsetSumI(int[] nums, int target) {\n    List<Integer> state = new ArrayList<>(); // \u72b6\u614b\uff08\u90e8\u5206\u96c6\u5408\uff09\n    Arrays.sort(nums); // nums \u3092\u30bd\u30fc\u30c8\n    int start = 0; // \u8d70\u67fb\u306e\u958b\u59cb\u70b9\n    List<List<Integer>> res = new ArrayList<>(); // \u7d50\u679c\u30ea\u30b9\u30c8\uff08\u90e8\u5206\u96c6\u5408\u30ea\u30b9\u30c8\uff09\n    backtrack(state, target, nums, start, res);\n    return res;\n}\n
subset_sum_i.cs
[class]{subset_sum_i}-[func]{Backtrack}\n\n[class]{subset_sum_i}-[func]{SubsetSumI}\n
subset_sum_i.go
[class]{}-[func]{backtrackSubsetSumI}\n\n[class]{}-[func]{subsetSumI}\n
subset_sum_i.swift
[class]{}-[func]{backtrack}\n\n[class]{}-[func]{subsetSumI}\n
subset_sum_i.js
[class]{}-[func]{backtrack}\n\n[class]{}-[func]{subsetSumI}\n
subset_sum_i.ts
[class]{}-[func]{backtrack}\n\n[class]{}-[func]{subsetSumI}\n
subset_sum_i.dart
[class]{}-[func]{backtrack}\n\n[class]{}-[func]{subsetSumI}\n
subset_sum_i.rs
[class]{}-[func]{backtrack}\n\n[class]{}-[func]{subset_sum_i}\n
subset_sum_i.c
[class]{}-[func]{backtrack}\n\n[class]{}-[func]{subsetSumI}\n
subset_sum_i.kt
[class]{}-[func]{backtrack}\n\n[class]{}-[func]{subsetSumI}\n
subset_sum_i.rb
[class]{}-[func]{backtrack}\n\n[class]{}-[func]{subset_sum_i}\n

\u4ee5\u4e0b\u306e\u56f3\u306f\u3001\u914d\u5217 \\([3, 4, 5]\\) \u3068\u30bf\u30fc\u30b2\u30c3\u30c8\u8981\u7d20 \\(9\\) \u3092\u4e0a\u8a18\u306e\u30b3\u30fc\u30c9\u306b\u5165\u529b\u3057\u305f\u5f8c\u306e\u5168\u4f53\u7684\u306a\u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u30d7\u30ed\u30bb\u30b9\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002

\u56f3 13-12 \u00a0 \u90e8\u5206\u96c6\u5408\u548c I \u306e\u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u30d7\u30ed\u30bb\u30b9

"},{"location":"chapter_backtracking/subset_sum_problem/#1332","title":"13.3.2 \u00a0 \u91cd\u8907\u8981\u7d20\u304c\u3042\u308b\u5834\u5408\u3092\u8003\u616e","text":"

Question

\u6b63\u306e\u6574\u6570\u306e\u914d\u5217 nums \u3068\u30bf\u30fc\u30b2\u30c3\u30c8\u6b63\u6574\u6570 target \u304c\u4e0e\u3048\u3089\u308c\u305f\u5834\u5408\u3001\u7d44\u307f\u5408\u308f\u305b\u5185\u306e\u8981\u7d20\u306e\u548c\u304c target \u306b\u7b49\u3057\u304f\u306a\u308b\u3088\u3046\u306a\u3059\u3079\u3066\u306e\u53ef\u80fd\u306a\u7d44\u307f\u5408\u308f\u305b\u3092\u898b\u3064\u3051\u3066\u304f\u3060\u3055\u3044\u3002\u4e0e\u3048\u3089\u308c\u305f\u914d\u5217\u306b\u306f\u91cd\u8907\u8981\u7d20\u304c\u542b\u307e\u308c\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u3001\u5404\u8981\u7d20\u306f\u4e00\u5ea6\u3060\u3051\u9078\u629e\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u7d44\u307f\u5408\u308f\u305b\u3092\u91cd\u8907\u3059\u308b\u7d44\u307f\u5408\u308f\u305b\u3092\u542b\u307e\u306a\u3044\u30ea\u30b9\u30c8\u3068\u3057\u3066\u8fd4\u3057\u3066\u304f\u3060\u3055\u3044\u3002

\u524d\u306e\u554f\u984c\u3068\u6bd4\u8f03\u3057\u3066\u3001\u3053\u306e\u554f\u984c\u306e\u5165\u529b\u914d\u5217\u306b\u306f\u91cd\u8907\u8981\u7d20\u304c\u542b\u307e\u308c\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u3001\u65b0\u3057\u3044\u554f\u984c\u304c\u5c0e\u5165\u3055\u308c\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001\u914d\u5217 \\([4, \\hat{4}, 5]\\) \u3068\u30bf\u30fc\u30b2\u30c3\u30c8\u8981\u7d20 \\(9\\) \u304c\u4e0e\u3048\u3089\u308c\u305f\u5834\u5408\u3001\u65e2\u5b58\u306e\u30b3\u30fc\u30c9\u306e\u51fa\u529b\u7d50\u679c\u306f \\([4, 5], [\\hat{4}, 5]\\) \u3068\u306a\u308a\u3001\u91cd\u8907\u3059\u308b\u90e8\u5206\u96c6\u5408\u304c\u751f\u6210\u3055\u308c\u307e\u3059\u3002

\u3053\u306e\u91cd\u8907\u306e\u7406\u7531\u306f\u3001\u7279\u5b9a\u306e\u30e9\u30a6\u30f3\u30c9\u3067\u7b49\u3057\u3044\u8981\u7d20\u304c\u8907\u6570\u56de\u9078\u629e\u3055\u308c\u308b\u3053\u3068\u3067\u3059\u3002\u4ee5\u4e0b\u306e\u56f3\u3067\u306f\u3001\u6700\u521d\u306e\u30e9\u30a6\u30f3\u30c9\u306b3\u3064\u306e\u9078\u629e\u80a2\u304c\u3042\u308a\u3001\u305d\u306e\u3046\u30612\u3064\u304c \\(4\\) \u3067\u3042\u308a\u30012\u3064\u306e\u91cd\u8907\u3059\u308b\u691c\u7d22\u5206\u5c90\u3092\u751f\u6210\u3057\u3001\u91cd\u8907\u3059\u308b\u90e8\u5206\u96c6\u5408\u3092\u51fa\u529b\u3057\u307e\u3059\u3002\u540c\u69d8\u306b\u30012\u756a\u76ee\u306e\u30e9\u30a6\u30f3\u30c9\u306e2\u3064\u306e \\(4\\) \u3082\u91cd\u8907\u3059\u308b\u90e8\u5206\u96c6\u5408\u3092\u751f\u6210\u3057\u307e\u3059\u3002

\u56f3 13-13 \u00a0 \u7b49\u3057\u3044\u8981\u7d20\u306b\u3088\u308b\u91cd\u8907\u90e8\u5206\u96c6\u5408

"},{"location":"chapter_backtracking/subset_sum_problem/#1_1","title":"1. \u00a0 \u7b49\u5024\u8981\u7d20\u306e\u526a\u5b9a","text":"

\u3053\u306e\u554f\u984c\u3092\u89e3\u6c7a\u3059\u308b\u305f\u3081\u306b\u3001\u7b49\u3057\u3044\u8981\u7d20\u304c\u30e9\u30a6\u30f3\u30c9\u3054\u3068\u306b\u4e00\u5ea6\u3060\u3051\u9078\u629e\u3055\u308c\u308b\u3088\u3046\u306b\u5236\u9650\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u5b9f\u88c5\u306f\u975e\u5e38\u306b\u5de7\u5999\u3067\u3059\uff1a\u914d\u5217\u304c\u30bd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308b\u305f\u3081\u3001\u7b49\u3057\u3044\u8981\u7d20\u306f\u96a3\u63a5\u3057\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u7279\u5b9a\u306e\u30e9\u30a6\u30f3\u30c9\u306e\u9078\u629e\u3067\u3001\u73fe\u5728\u306e\u8981\u7d20\u304c\u305d\u306e\u5de6\u5074\u306e\u8981\u7d20\u3068\u7b49\u3057\u3044\u5834\u5408\u3001\u305d\u308c\u306f\u3059\u3067\u306b\u9078\u629e\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u610f\u5473\u3059\u308b\u305f\u3081\u3001\u73fe\u5728\u306e\u8981\u7d20\u3092\u76f4\u63a5\u30b9\u30ad\u30c3\u30d7\u3057\u307e\u3059\u3002

\u540c\u6642\u306b\u3001\u3053\u306e\u554f\u984c\u3067\u306f\u5404\u914d\u5217\u8981\u7d20\u306f\u4e00\u5ea6\u3060\u3051\u9078\u629e\u3067\u304d\u308b\u3068\u898f\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u5e78\u3044\u3001\u5909\u6570 start \u3092\u4f7f\u7528\u3057\u3066\u3053\u306e\u5236\u7d04\u3082\u6e80\u305f\u3059\u3053\u3068\u304c\u3067\u304d\u307e\u3059\uff1a\u9078\u629e \\(x_{i}\\) \u3092\u884c\u3063\u305f\u5f8c\u3001\u6b21\u306e\u30e9\u30a6\u30f3\u30c9\u3092\u30a4\u30f3\u30c7\u30c3\u30af\u30b9 \\(i + 1\\) \u304b\u3089\u524d\u65b9\u306b\u958b\u59cb\u3059\u308b\u3088\u3046\u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u91cd\u8907\u3059\u308b\u90e8\u5206\u96c6\u5408\u304c\u9664\u53bb\u3055\u308c\u308b\u3060\u3051\u3067\u306a\u304f\u3001\u8981\u7d20\u306e\u91cd\u8907\u9078\u629e\u3082\u56de\u907f\u3055\u308c\u307e\u3059\u3002

"},{"location":"chapter_backtracking/subset_sum_problem/#2_1","title":"2. \u00a0 \u30b3\u30fc\u30c9\u5b9f\u88c5","text":"PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby subset_sum_ii.py
def backtrack(\n    state: list[int], target: int, choices: list[int], start: int, res: list[list[int]]\n):\n    \"\"\"\u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\uff1a\u90e8\u5206\u96c6\u5408\u306e\u548c II\"\"\"\n    # \u90e8\u5206\u96c6\u5408\u306e\u548c\u304c target \u3068\u7b49\u3057\u3044\u3068\u304d\u3001\u89e3\u3092\u8a18\u9332\n    if target == 0:\n        res.append(list(state))\n        return\n    # \u3059\u3079\u3066\u306e\u9078\u629e\u80a2\u3092\u8d70\u67fb\n    # \u679d\u5208\u308a\u4e8c\uff1astart \u304b\u3089\u8d70\u67fb\u3092\u958b\u59cb\u3057\u3066\u91cd\u8907\u3059\u308b\u90e8\u5206\u96c6\u5408\u306e\u751f\u6210\u3092\u907f\u3051\u308b\n    # \u679d\u5208\u308a\u4e09\uff1astart \u304b\u3089\u8d70\u67fb\u3092\u958b\u59cb\u3057\u3066\u540c\u3058\u8981\u7d20\u306e\u91cd\u8907\u9078\u629e\u3092\u907f\u3051\u308b\n    for i in range(start, len(choices)):\n        # \u679d\u5208\u308a\u4e00\uff1a\u90e8\u5206\u96c6\u5408\u306e\u548c\u304c target \u3092\u8d85\u3048\u308b\u5834\u5408\u3001\u76f4\u3061\u306b\u30eb\u30fc\u30d7\u3092\u7d42\u4e86\n        # \u3053\u308c\u306f\u914d\u5217\u304c\u30bd\u30fc\u30c8\u3055\u308c\u3066\u304a\u308a\u3001\u5f8c\u306e\u8981\u7d20\u304c\u3088\u308a\u5927\u304d\u3044\u305f\u3081\u3001\u90e8\u5206\u96c6\u5408\u306e\u548c\u306f\u5fc5\u305a target \u3092\u8d85\u3048\u308b\u305f\u3081\n        if target - choices[i] < 0:\n            break\n        # \u679d\u5208\u308a\u56db\uff1a\u8981\u7d20\u304c\u5de6\u306e\u8981\u7d20\u3068\u7b49\u3057\u3044\u5834\u5408\u3001\u691c\u7d22\u5206\u5c90\u304c\u91cd\u8907\u3057\u3066\u3044\u308b\u3053\u3068\u3092\u793a\u3059\u305f\u3081\u3001\u30b9\u30ad\u30c3\u30d7\n        if i > start and choices[i] == choices[i - 1]:\n            continue\n        # \u8a66\u884c\uff1a\u9078\u629e\u3092\u884c\u3044\u3001target\u3001start \u3092\u66f4\u65b0\n        state.append(choices[i])\n        # \u6b21\u306e\u9078\u629e\u30e9\u30a6\u30f3\u30c9\u306b\u9032\u3080\n        backtrack(state, target - choices[i], choices, i + 1, res)\n        # \u64a4\u56de\uff1a\u9078\u629e\u3092\u53d6\u308a\u6d88\u3057\u3001\u524d\u306e\u72b6\u614b\u306b\u5fa9\u5143\n        state.pop()\n\ndef subset_sum_ii(nums: list[int], target: int) -> list[list[int]]:\n    \"\"\"\u90e8\u5206\u96c6\u5408\u306e\u548c II \u3092\u89e3\u304f\"\"\"\n    state = []  # \u72b6\u614b\uff08\u90e8\u5206\u96c6\u5408\uff09\n    nums.sort()  # nums \u3092\u30bd\u30fc\u30c8\n    start = 0  # \u8d70\u67fb\u306e\u958b\u59cb\u70b9\n    res = []  # \u7d50\u679c\u30ea\u30b9\u30c8\uff08\u90e8\u5206\u96c6\u5408\u30ea\u30b9\u30c8\uff09\n    backtrack(state, target, nums, start, res)\n    return res\n
subset_sum_ii.cpp
/* \u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\uff1a\u90e8\u5206\u96c6\u5408\u548c II */\nvoid backtrack(vector<int> &state, int target, vector<int> &choices, int start, vector<vector<int>> &res) {\n    // \u90e8\u5206\u96c6\u5408\u306e\u548c\u304ctarget\u3068\u7b49\u3057\u3044\u3068\u304d\u3001\u89e3\u3092\u8a18\u9332\n    if (target == 0) {\n        res.push_back(state);\n        return;\n    }\n    // \u3059\u3079\u3066\u306e\u9078\u629e\u80a2\u3092\u8d70\u67fb\n    // \u526a\u5b9a\u4e8c\uff1astart\u304b\u3089\u8d70\u67fb\u3092\u958b\u59cb\u3057\u3001\u91cd\u8907\u3059\u308b\u90e8\u5206\u96c6\u5408\u306e\u751f\u6210\u3092\u56de\u907f\n    // \u526a\u5b9a\u4e09\uff1astart\u304b\u3089\u8d70\u67fb\u3092\u958b\u59cb\u3057\u3001\u540c\u3058\u8981\u7d20\u306e\u7e70\u308a\u8fd4\u3057\u9078\u629e\u3092\u56de\u907f\n    for (int i = start; i < choices.size(); i++) {\n        // \u526a\u5b9a\u4e00\uff1a\u90e8\u5206\u96c6\u5408\u306e\u548c\u304ctarget\u3092\u8d85\u3048\u305f\u5834\u5408\u3001\u5373\u5ea7\u306b\u30eb\u30fc\u30d7\u3092\u7d42\u4e86\n        // \u914d\u5217\u304c\u30bd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308b\u305f\u3081\u3001\u5f8c\u306e\u8981\u7d20\u306f\u3055\u3089\u306b\u5927\u304d\u304f\u3001\u90e8\u5206\u96c6\u5408\u306e\u548c\u306f\u5fc5\u305atarget\u3092\u8d85\u3048\u308b\n        if (target - choices[i] < 0) {\n            break;\n        }\n        // \u526a\u5b9a\u56db\uff1a\u8981\u7d20\u304c\u5de6\u306e\u8981\u7d20\u3068\u7b49\u3057\u3044\u5834\u5408\u3001\u691c\u7d22\u30d6\u30e9\u30f3\u30c1\u306e\u91cd\u8907\u3092\u793a\u3059\u306e\u3067\u30b9\u30ad\u30c3\u30d7\n        if (i > start && choices[i] == choices[i - 1]) {\n            continue;\n        }\n        // \u8a66\u884c\uff1a\u9078\u629e\u3092\u884c\u3044\u3001target\u3001start\u3092\u66f4\u65b0\n        state.push_back(choices[i]);\n        // \u6b21\u306e\u30e9\u30a6\u30f3\u30c9\u306e\u9078\u629e\u306b\u9032\u3080\n        backtrack(state, target - choices[i], choices, i + 1, res);\n        // \u56de\u9000\uff1a\u9078\u629e\u3092\u53d6\u308a\u6d88\u3057\u3001\u524d\u306e\u72b6\u614b\u306b\u5fa9\u5143\n        state.pop_back();\n    }\n}\n\n/* \u90e8\u5206\u96c6\u5408\u548c II \u3092\u89e3\u304f */\nvector<vector<int>> subsetSumII(vector<int> nums, int target) {\n    vector<int> state;              // \u72b6\u614b\uff08\u90e8\u5206\u96c6\u5408\uff09\n    sort(nums.begin(), nums.end()); // nums \u3092\u30bd\u30fc\u30c8\n    int start = 0;                  // \u8d70\u67fb\u306e\u958b\u59cb\u70b9\n    vector<vector<int>> res;        // \u7d50\u679c\u30ea\u30b9\u30c8\uff08\u90e8\u5206\u96c6\u5408\u30ea\u30b9\u30c8\uff09\n    backtrack(state, target, nums, start, res);\n    return res;\n}\n
subset_sum_ii.java
/* \u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\uff1a\u90e8\u5206\u96c6\u5408\u548c II */\nvoid backtrack(List<Integer> state, int target, int[] choices, int start, List<List<Integer>> res) {\n    // \u90e8\u5206\u96c6\u5408\u306e\u548c\u304ctarget\u3068\u7b49\u3057\u3044\u3068\u304d\u3001\u89e3\u3092\u8a18\u9332\n    if (target == 0) {\n        res.add(new ArrayList<>(state));\n        return;\n    }\n    // \u3059\u3079\u3066\u306e\u9078\u629e\u80a2\u3092\u8d70\u67fb\n    // \u526a\u5b9a\u4e8c\uff1astart\u304b\u3089\u8d70\u67fb\u3092\u958b\u59cb\u3057\u3001\u91cd\u8907\u3059\u308b\u90e8\u5206\u96c6\u5408\u306e\u751f\u6210\u3092\u56de\u907f\n    // \u526a\u5b9a\u4e09\uff1astart\u304b\u3089\u8d70\u67fb\u3092\u958b\u59cb\u3057\u3001\u540c\u3058\u8981\u7d20\u306e\u7e70\u308a\u8fd4\u3057\u9078\u629e\u3092\u56de\u907f\n    for (int i = start; i < choices.length; i++) {\n        // \u526a\u5b9a\u4e00\uff1a\u90e8\u5206\u96c6\u5408\u306e\u548c\u304ctarget\u3092\u8d85\u3048\u305f\u5834\u5408\u3001\u5373\u5ea7\u306b\u30eb\u30fc\u30d7\u3092\u7d42\u4e86\n        // \u914d\u5217\u304c\u30bd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308b\u305f\u3081\u3001\u5f8c\u306e\u8981\u7d20\u306f\u3055\u3089\u306b\u5927\u304d\u304f\u3001\u90e8\u5206\u96c6\u5408\u306e\u548c\u306f\u5fc5\u305atarget\u3092\u8d85\u3048\u308b\n        if (target - choices[i] < 0) {\n            break;\n        }\n        // \u526a\u5b9a\u56db\uff1a\u8981\u7d20\u304c\u5de6\u306e\u8981\u7d20\u3068\u7b49\u3057\u3044\u5834\u5408\u3001\u691c\u7d22\u30d6\u30e9\u30f3\u30c1\u306e\u91cd\u8907\u3092\u793a\u3059\u306e\u3067\u30b9\u30ad\u30c3\u30d7\n        if (i > start && choices[i] == choices[i - 1]) {\n            continue;\n        }\n        // \u8a66\u884c\uff1a\u9078\u629e\u3092\u884c\u3044\u3001target\u3001start\u3092\u66f4\u65b0\n        state.add(choices[i]);\n        // \u6b21\u306e\u30e9\u30a6\u30f3\u30c9\u306e\u9078\u629e\u306b\u9032\u3080\n        backtrack(state, target - choices[i], choices, i + 1, res);\n        // \u56de\u9000\uff1a\u9078\u629e\u3092\u53d6\u308a\u6d88\u3057\u3001\u524d\u306e\u72b6\u614b\u306b\u5fa9\u5143\n        state.remove(state.size() - 1);\n    }\n}\n\n/* \u90e8\u5206\u96c6\u5408\u548c II \u3092\u89e3\u304f */\nList<List<Integer>> subsetSumII(int[] nums, int target) {\n    List<Integer> state = new ArrayList<>(); // \u72b6\u614b\uff08\u90e8\u5206\u96c6\u5408\uff09\n    Arrays.sort(nums); // nums \u3092\u30bd\u30fc\u30c8\n    int start = 0; // \u8d70\u67fb\u306e\u958b\u59cb\u70b9\n    List<List<Integer>> res = new ArrayList<>(); // \u7d50\u679c\u30ea\u30b9\u30c8\uff08\u90e8\u5206\u96c6\u5408\u30ea\u30b9\u30c8\uff09\n    backtrack(state, target, nums, start, res);\n    return res;\n}\n
subset_sum_ii.cs
[class]{subset_sum_ii}-[func]{Backtrack}\n\n[class]{subset_sum_ii}-[func]{SubsetSumII}\n
subset_sum_ii.go
[class]{}-[func]{backtrackSubsetSumII}\n\n[class]{}-[func]{subsetSumII}\n
subset_sum_ii.swift
[class]{}-[func]{backtrack}\n\n[class]{}-[func]{subsetSumII}\n
subset_sum_ii.js
[class]{}-[func]{backtrack}\n\n[class]{}-[func]{subsetSumII}\n
subset_sum_ii.ts
[class]{}-[func]{backtrack}\n\n[class]{}-[func]{subsetSumII}\n
subset_sum_ii.dart
[class]{}-[func]{backtrack}\n\n[class]{}-[func]{subsetSumII}\n
subset_sum_ii.rs
[class]{}-[func]{backtrack}\n\n[class]{}-[func]{subset_sum_ii}\n
subset_sum_ii.c
[class]{}-[func]{backtrack}\n\n[class]{}-[func]{subsetSumII}\n
subset_sum_ii.kt
[class]{}-[func]{backtrack}\n\n[class]{}-[func]{subsetSumII}\n
subset_sum_ii.rb
[class]{}-[func]{backtrack}\n\n[class]{}-[func]{subset_sum_ii}\n

\u4ee5\u4e0b\u306e\u56f3\u306f\u3001\u914d\u5217 \\([4, 4, 5]\\) \u3068\u30bf\u30fc\u30b2\u30c3\u30c8\u8981\u7d20 \\(9\\) \u306e\u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u30d7\u30ed\u30bb\u30b9\u3092\u793a\u3057\u30014\u7a2e\u985e\u306e\u526a\u5b9a\u64cd\u4f5c\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002\u56f3\u3068\u30b3\u30fc\u30c9\u306e\u30b3\u30e1\u30f3\u30c8\u3092\u7d44\u307f\u5408\u308f\u305b\u3066\u3001\u691c\u7d22\u30d7\u30ed\u30bb\u30b9\u5168\u4f53\u3068\u5404\u7a2e\u985e\u306e\u526a\u5b9a\u64cd\u4f5c\u306e\u52d5\u4f5c\u3092\u7406\u89e3\u3057\u3066\u304f\u3060\u3055\u3044\u3002

\u56f3 13-14 \u00a0 \u90e8\u5206\u96c6\u5408\u548c II \u306e\u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u30d7\u30ed\u30bb\u30b9

"},{"location":"chapter_backtracking/summary/","title":"13.5 \u00a0 \u307e\u3068\u3081","text":""},{"location":"chapter_backtracking/summary/#1","title":"1. \u00a0 \u91cd\u8981\u306a\u5fa9\u7fd2","text":""},{"location":"chapter_backtracking/summary/#2-q-a","title":"2. \u00a0 Q & A","text":"

Q: \u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u3068\u518d\u5e30\u306e\u95a2\u4fc2\u3092\u3069\u306e\u3088\u3046\u306b\u7406\u89e3\u3059\u308c\u3070\u3088\u3044\u3067\u3059\u304b\uff1f

\u5168\u4f53\u7684\u306b\u3001\u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u306f\u300c\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u6226\u7565\u300d\u3067\u3042\u308a\u3001\u518d\u5e30\u306f\u3088\u308a\u300c\u30c4\u30fc\u30eb\u300d\u3067\u3059\u3002

"},{"location":"chapter_computational_complexity/","title":"\u7b2c 2 \u7ae0 \u00a0 \u8907\u96d1\u5ea6\u89e3\u6790","text":"

Abstract

\u8907\u96d1\u5ea6\u89e3\u6790\u306f\u3001\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u5e83\u5927\u306a\u5b87\u5b99\u306b\u304a\u3051\u308b\u6642\u7a7a\u306e\u30ca\u30d3\u30b2\u30fc\u30bf\u30fc\u306e\u3088\u3046\u306a\u3082\u306e\u3067\u3059\u3002

\u6642\u9593\u3068\u7a7a\u9593\u306e\u6b21\u5143\u3092\u3088\u308a\u6df1\u304f\u63a2\u6c42\u3057\u3001\u3088\u308a\u512a\u96c5\u306a\u89e3\u6c7a\u7b56\u3092\u6c42\u3081\u308b\u305f\u3081\u306e\u30ac\u30a4\u30c9\u3068\u306a\u308a\u307e\u3059\u3002

"},{"location":"chapter_computational_complexity/#_1","title":"\u7ae0\u306e\u5185\u5bb9","text":""},{"location":"chapter_computational_complexity/iteration_and_recursion/","title":"2.2 \u00a0 \u53cd\u5fa9\u3068\u518d\u5e30","text":"

\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306b\u304a\u3044\u3066\u3001\u30bf\u30b9\u30af\u306e\u7e70\u308a\u8fd4\u3057\u5b9f\u884c\u306f\u975e\u5e38\u306b\u4e00\u822c\u7684\u3067\u3042\u308a\u3001\u8907\u96d1\u5ea6\u306e\u5206\u6790\u3068\u5bc6\u63a5\u306b\u95a2\u4fc2\u3057\u3066\u3044\u307e\u3059\u3002\u3057\u305f\u304c\u3063\u3066\u3001\u6642\u9593\u8a08\u7b97\u91cf\u3068\u7a7a\u9593\u8a08\u7b97\u91cf\u306e\u6982\u5ff5\u3092\u8a73\u3057\u304f\u5b66\u3076\u524d\u306b\u3001\u307e\u305a\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u3067\u7e70\u308a\u8fd4\u3057\u30bf\u30b9\u30af\u3092\u5b9f\u88c5\u3059\u308b\u65b9\u6cd5\u3092\u63a2\u7a76\u3057\u307e\u3057\u3087\u3046\u3002\u3053\u308c\u306b\u306f\u30012\u3064\u306e\u57fa\u672c\u7684\u306a\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u5236\u5fa1\u69cb\u9020\u3067\u3042\u308b\u53cd\u5fa9\u3068\u518d\u5e30\u306e\u7406\u89e3\u304c\u542b\u307e\u308c\u307e\u3059\u3002

"},{"location":"chapter_computational_complexity/iteration_and_recursion/#221","title":"2.2.1 \u00a0 \u53cd\u5fa9","text":"

\u53cd\u5fa9\u306f\u3001\u30bf\u30b9\u30af\u3092\u7e70\u308a\u8fd4\u3057\u5b9f\u884c\u3059\u308b\u305f\u3081\u306e\u5236\u5fa1\u69cb\u9020\u3067\u3059\u3002\u53cd\u5fa9\u3067\u306f\u3001\u30d7\u30ed\u30b0\u30e9\u30e0\u306f\u7279\u5b9a\u306e\u6761\u4ef6\u304c\u6e80\u305f\u3055\u308c\u3066\u3044\u308b\u9650\u308a\u30b3\u30fc\u30c9\u30d6\u30ed\u30c3\u30af\u3092\u7e70\u308a\u8fd4\u3057\u5b9f\u884c\u3057\u3001\u3053\u306e\u6761\u4ef6\u304c\u6e80\u305f\u3055\u308c\u306a\u304f\u306a\u308b\u307e\u3067\u7d9a\u3051\u307e\u3059\u3002

"},{"location":"chapter_computational_complexity/iteration_and_recursion/#1-for","title":"1. \u00a0 for\u30eb\u30fc\u30d7","text":"

for\u30eb\u30fc\u30d7\u306f\u53cd\u5fa9\u306e\u6700\u3082\u4e00\u822c\u7684\u306a\u5f62\u5f0f\u306e1\u3064\u3067\u3042\u308a\u3001\u53cd\u5fa9\u56de\u6570\u304c\u4e8b\u524d\u306b\u5206\u304b\u3063\u3066\u3044\u308b\u5834\u5408\u306b\u7279\u306b\u9069\u3057\u3066\u3044\u307e\u3059\u3002

\u4ee5\u4e0b\u306e\u95a2\u6570\u306ffor\u30eb\u30fc\u30d7\u3092\u4f7f\u7528\u3057\u3066\\(1 + 2 + \\dots + n\\)\u306e\u5408\u8a08\u3092\u5b9f\u884c\u3057\u3001\u5408\u8a08\u3092\u5909\u6570res\u306b\u683c\u7d0d\u3057\u307e\u3059\u3002Python\u3067\u306f\u3001range(a, b)\u306fa\u3092\u542b\u307fb\u3092\u9664\u304f\u533a\u9593\u3092\u4f5c\u6210\u3059\u308b\u3053\u3068\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3064\u307e\u308a\u3001\\(a\\)\u304b\u3089\\(b\u22121\\)\u307e\u3067\u306e\u7bc4\u56f2\u3067\u53cd\u5fa9\u3057\u307e\u3059\u3002

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby iteration.py
def for_loop(n: int) -> int:\n    \"\"\"for\u30eb\u30fc\u30d7\"\"\"\n    res = 0\n    # 1, 2, ..., n-1, n \u306e\u5408\u8a08\u3092\u30eb\u30fc\u30d7\n    for i in range(1, n + 1):\n        res += i\n    return res\n
iteration.cpp
/* for \u30eb\u30fc\u30d7 */\nint forLoop(int n) {\n    int res = 0;\n    // 1, 2, ..., n-1, n \u306e\u5408\u8a08\u3092\u30eb\u30fc\u30d7\u8a08\u7b97\n    for (int i = 1; i <= n; ++i) {\n        res += i;\n    }\n    return res;\n}\n
iteration.java
/* for \u30eb\u30fc\u30d7 */\nint forLoop(int n) {\n    int res = 0;\n    // 1, 2, ..., n-1, n \u306e\u5408\u8a08\u3092\u30eb\u30fc\u30d7\u8a08\u7b97\n    for (int i = 1; i <= n; i++) {\n        res += i;\n    }\n    return res;\n}\n
iteration.cs
[class]{iteration}-[func]{ForLoop}\n
iteration.go
[class]{}-[func]{forLoop}\n
iteration.swift
[class]{}-[func]{forLoop}\n
iteration.js
[class]{}-[func]{forLoop}\n
iteration.ts
[class]{}-[func]{forLoop}\n
iteration.dart
[class]{}-[func]{forLoop}\n
iteration.rs
[class]{}-[func]{for_loop}\n
iteration.c
[class]{}-[func]{forLoop}\n
iteration.kt
[class]{}-[func]{forLoop}\n
iteration.rb
[class]{}-[func]{for_loop}\n

\u4ee5\u4e0b\u306e\u56f3\u306f\u3053\u306e\u5408\u8a08\u95a2\u6570\u3092\u8868\u3057\u3066\u3044\u307e\u3059\u3002

\u56f3 2-1 \u00a0 Flowchart of the sum function

\u3053\u306e\u5408\u8a08\u95a2\u6570\u3067\u306e\u64cd\u4f5c\u6570\u306f\u5165\u529b\u30c7\u30fc\u30bf\u306e\u30b5\u30a4\u30ba\\(n\\)\u306b\u6bd4\u4f8b\u3059\u308b\u3001\u3064\u307e\u308a\u7dda\u5f62\u95a2\u4fc2\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u306e\u300c\u7dda\u5f62\u95a2\u4fc2\u300d\u3053\u305d\u304c\u6642\u9593\u8a08\u7b97\u91cf\u304c\u8a18\u8ff0\u3059\u308b\u3082\u306e\u3067\u3059\u3002\u3053\u306e\u30c8\u30d4\u30c3\u30af\u306b\u3064\u3044\u3066\u306f\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u8a73\u3057\u304f\u8aac\u660e\u3057\u307e\u3059\u3002

"},{"location":"chapter_computational_complexity/iteration_and_recursion/#2-while","title":"2. \u00a0 while\u30eb\u30fc\u30d7","text":"

for\u30eb\u30fc\u30d7\u3068\u540c\u69d8\u306b\u3001while\u30eb\u30fc\u30d7\u306f\u53cd\u5fa9\u3092\u5b9f\u88c5\u3059\u308b\u305f\u3081\u306e\u3082\u30461\u3064\u306e\u30a2\u30d7\u30ed\u30fc\u30c1\u3067\u3059\u3002while\u30eb\u30fc\u30d7\u3067\u306f\u3001\u30d7\u30ed\u30b0\u30e9\u30e0\u306f\u5404\u53cd\u5fa9\u306e\u958b\u59cb\u6642\u306b\u6761\u4ef6\u3092\u30c1\u30a7\u30c3\u30af\u3057\u3001\u6761\u4ef6\u304c\u771f\u306e\u5834\u5408\u306f\u5b9f\u884c\u3092\u7d99\u7d9a\u3057\u3001\u305d\u3046\u3067\u306a\u3051\u308c\u3070\u30eb\u30fc\u30d7\u3092\u7d42\u4e86\u3057\u307e\u3059\u3002

\u4ee5\u4e0b\u3067\u306fwhile\u30eb\u30fc\u30d7\u3092\u4f7f\u7528\u3057\u3066\u5408\u8a08\\(1 + 2 + \\dots + n\\)\u3092\u5b9f\u88c5\u3057\u307e\u3059\u3002

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby iteration.py
def while_loop(n: int) -> int:\n    \"\"\"while\u30eb\u30fc\u30d7\"\"\"\n    res = 0\n    i = 1  # \u6761\u4ef6\u5909\u6570\u3092\u521d\u671f\u5316\n    # 1, 2, ..., n-1, n \u306e\u5408\u8a08\u3092\u30eb\u30fc\u30d7\n    while i <= n:\n        res += i\n        i += 1  # \u6761\u4ef6\u5909\u6570\u3092\u66f4\u65b0\n    return res\n
iteration.cpp
/* while \u30eb\u30fc\u30d7 */\nint whileLoop(int n) {\n    int res = 0;\n    int i = 1; // \u6761\u4ef6\u5909\u6570\u3092\u521d\u671f\u5316\n    // 1, 2, ..., n-1, n \u306e\u5408\u8a08\u3092\u30eb\u30fc\u30d7\u8a08\u7b97\n    while (i <= n) {\n        res += i;\n        i++; // \u6761\u4ef6\u5909\u6570\u3092\u66f4\u65b0\n    }\n    return res;\n}\n
iteration.java
/* while \u30eb\u30fc\u30d7 */\nint whileLoop(int n) {\n    int res = 0;\n    int i = 1; // \u6761\u4ef6\u5909\u6570\u3092\u521d\u671f\u5316\n    // 1, 2, ..., n-1, n \u306e\u5408\u8a08\u3092\u30eb\u30fc\u30d7\u8a08\u7b97\n    while (i <= n) {\n        res += i;\n        i++; // \u6761\u4ef6\u5909\u6570\u3092\u66f4\u65b0\n    }\n    return res;\n}\n
iteration.cs
[class]{iteration}-[func]{WhileLoop}\n
iteration.go
[class]{}-[func]{whileLoop}\n
iteration.swift
[class]{}-[func]{whileLoop}\n
iteration.js
[class]{}-[func]{whileLoop}\n
iteration.ts
[class]{}-[func]{whileLoop}\n
iteration.dart
[class]{}-[func]{whileLoop}\n
iteration.rs
[class]{}-[func]{while_loop}\n
iteration.c
[class]{}-[func]{whileLoop}\n
iteration.kt
[class]{}-[func]{whileLoop}\n
iteration.rb
[class]{}-[func]{while_loop}\n

while\u30eb\u30fc\u30d7\u306ffor\u30eb\u30fc\u30d7\u3088\u308a\u3082\u67d4\u8edf\u6027\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002\u7279\u306b\u3001\u6761\u4ef6\u5909\u6570\u306e\u30ab\u30b9\u30bf\u30e0\u521d\u671f\u5316\u3068\u5404\u30b9\u30c6\u30c3\u30d7\u3067\u306e\u5909\u66f4\u304c\u53ef\u80fd\u3067\u3059\u3002

\u4f8b\u3048\u3070\u3001\u4ee5\u4e0b\u306e\u30b3\u30fc\u30c9\u3067\u306f\u3001\u6761\u4ef6\u5909\u6570\\(i\\)\u304c\u5404\u30e9\u30a6\u30f3\u30c9\u30672\u56de\u66f4\u65b0\u3055\u308c\u307e\u3059\u304c\u3001\u3053\u308c\u306ffor\u30eb\u30fc\u30d7\u3067\u306f\u5b9f\u88c5\u304c\u4e0d\u4fbf\u3067\u3059\u3002

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby iteration.py
def while_loop_ii(n: int) -> int:\n    \"\"\"while\u30eb\u30fc\u30d7\uff082\u3064\u306e\u66f4\u65b0\uff09\"\"\"\n    res = 0\n    i = 1  # \u6761\u4ef6\u5909\u6570\u3092\u521d\u671f\u5316\n    # 1, 4, 10, ... \u306e\u5408\u8a08\u3092\u30eb\u30fc\u30d7\n    while i <= n:\n        res += i\n        # \u6761\u4ef6\u5909\u6570\u3092\u66f4\u65b0\n        i += 1\n        i *= 2\n    return res\n
iteration.cpp
/* while \u30eb\u30fc\u30d7\uff082\u3064\u306e\u66f4\u65b0\uff09 */\nint whileLoopII(int n) {\n    int res = 0;\n    int i = 1; // \u6761\u4ef6\u5909\u6570\u3092\u521d\u671f\u5316\n    // 1, 4, 10, ... \u306e\u5408\u8a08\u3092\u30eb\u30fc\u30d7\u8a08\u7b97\n    while (i <= n) {\n        res += i;\n        // \u6761\u4ef6\u5909\u6570\u3092\u66f4\u65b0\n        i++;\n        i *= 2;\n    }\n    return res;\n}\n
iteration.java
/* while \u30eb\u30fc\u30d7\uff082\u3064\u306e\u66f4\u65b0\uff09 */\nint whileLoopII(int n) {\n    int res = 0;\n    int i = 1; // \u6761\u4ef6\u5909\u6570\u3092\u521d\u671f\u5316\n    // 1, 4, 10, ... \u306e\u5408\u8a08\u3092\u30eb\u30fc\u30d7\u8a08\u7b97\n    while (i <= n) {\n        res += i;\n        // \u6761\u4ef6\u5909\u6570\u3092\u66f4\u65b0\n        i++;\n        i *= 2;\n    }\n    return res;\n}\n
iteration.cs
[class]{iteration}-[func]{WhileLoopII}\n
iteration.go
[class]{}-[func]{whileLoopII}\n
iteration.swift
[class]{}-[func]{whileLoopII}\n
iteration.js
[class]{}-[func]{whileLoopII}\n
iteration.ts
[class]{}-[func]{whileLoopII}\n
iteration.dart
[class]{}-[func]{whileLoopII}\n
iteration.rs
[class]{}-[func]{while_loop_ii}\n
iteration.c
[class]{}-[func]{whileLoopII}\n
iteration.kt
[class]{}-[func]{whileLoopII}\n
iteration.rb
[class]{}-[func]{while_loop_ii}\n

\u5168\u4f53\u7684\u306b\u3001for\u30eb\u30fc\u30d7\u306f\u3088\u308a\u7c21\u6f54\u3067\u3001while\u30eb\u30fc\u30d7\u306f\u3088\u308a\u67d4\u8edf\u3067\u3059\u3002\u3069\u3061\u3089\u3082\u53cd\u5fa9\u69cb\u9020\u3092\u5b9f\u88c5\u3067\u304d\u307e\u3059\u3002\u3069\u3061\u3089\u3092\u4f7f\u7528\u3059\u308b\u304b\u306f\u3001\u554f\u984c\u306e\u5177\u4f53\u7684\u306a\u8981\u4ef6\u306b\u57fa\u3065\u3044\u3066\u6c7a\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

"},{"location":"chapter_computational_complexity/iteration_and_recursion/#3","title":"3. \u00a0 \u30cd\u30b9\u30c8\u3057\u305f\u30eb\u30fc\u30d7","text":"

1\u3064\u306e\u30eb\u30fc\u30d7\u69cb\u9020\u3092\u5225\u306e\u30eb\u30fc\u30d7\u69cb\u9020\u5185\u306b\u30cd\u30b9\u30c8\u3067\u304d\u307e\u3059\u3002\u4ee5\u4e0b\u306ffor\u30eb\u30fc\u30d7\u3092\u4f7f\u7528\u3057\u305f\u4f8b\u3067\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby iteration.py
def nested_for_loop(n: int) -> str:\n    \"\"\"\u4e8c\u91cdfor\u30eb\u30fc\u30d7\"\"\"\n    res = \"\"\n    # i = 1, 2, ..., n-1, n \u3092\u30eb\u30fc\u30d7\n    for i in range(1, n + 1):\n        # j = 1, 2, ..., n-1, n \u3092\u30eb\u30fc\u30d7\n        for j in range(1, n + 1):\n            res += f\"({i}, {j}), \"\n    return res\n
iteration.cpp
/* 2\u91cd for \u30eb\u30fc\u30d7 */\nstring nestedForLoop(int n) {\n    ostringstream res;\n    // \u30eb\u30fc\u30d7 i = 1, 2, ..., n-1, n\n    for (int i = 1; i <= n; ++i) {\n        // \u30eb\u30fc\u30d7 j = 1, 2, ..., n-1, n\n        for (int j = 1; j <= n; ++j) {\n            res << \"(\" << i << \", \" << j << \"), \";\n        }\n    }\n    return res.str();\n}\n
iteration.java
/* 2\u91cd for \u30eb\u30fc\u30d7 */\nString nestedForLoop(int n) {\n    StringBuilder res = new StringBuilder();\n    // \u30eb\u30fc\u30d7 i = 1, 2, ..., n-1, n\n    for (int i = 1; i <= n; i++) {\n        // \u30eb\u30fc\u30d7 j = 1, 2, ..., n-1, n\n        for (int j = 1; j <= n; j++) {\n            res.append(\"(\" + i + \", \" + j + \"), \");\n        }\n    }\n    return res.toString();\n}\n
iteration.cs
[class]{iteration}-[func]{NestedForLoop}\n
iteration.go
[class]{}-[func]{nestedForLoop}\n
iteration.swift
[class]{}-[func]{nestedForLoop}\n
iteration.js
[class]{}-[func]{nestedForLoop}\n
iteration.ts
[class]{}-[func]{nestedForLoop}\n
iteration.dart
[class]{}-[func]{nestedForLoop}\n
iteration.rs
[class]{}-[func]{nested_for_loop}\n
iteration.c
[class]{}-[func]{nestedForLoop}\n
iteration.kt
[class]{}-[func]{nestedForLoop}\n
iteration.rb
[class]{}-[func]{nested_for_loop}\n

\u4ee5\u4e0b\u306e\u56f3\u306f\u3053\u306e\u30cd\u30b9\u30c8\u3057\u305f\u30eb\u30fc\u30d7\u3092\u8868\u3057\u3066\u3044\u307e\u3059\u3002

\u56f3 2-2 \u00a0 Flowchart of the nested loop

\u3053\u306e\u3088\u3046\u306a\u5834\u5408\u3001\u95a2\u6570\u306e\u64cd\u4f5c\u6570\u306f\\(n^2\\)\u306b\u6bd4\u4f8b\u3057\u307e\u3059\u3002\u3064\u307e\u308a\u3001\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u5b9f\u884c\u6642\u9593\u3068\u5165\u529b\u30c7\u30fc\u30bf\u306e\u30b5\u30a4\u30ba\\(n\\)\u306b\u306f\u300c\u4e8c\u6b21\u95a2\u4fc2\u300d\u304c\u3042\u308a\u307e\u3059\u3002

\u3055\u3089\u306b\u30cd\u30b9\u30c8\u3057\u305f\u30eb\u30fc\u30d7\u3092\u8ffd\u52a0\u3059\u308b\u3053\u3068\u3067\u8907\u96d1\u5ea6\u3092\u9ad8\u3081\u308b\u3053\u3068\u304c\u3067\u304d\u3001\u5404\u30ec\u30d9\u30eb\u306e\u30cd\u30b9\u30c8\u306f\u4e8b\u5b9f\u4e0a\u300c\u6b21\u5143\u3092\u5897\u52a0\u300d\u3055\u305b\u3001\u6642\u9593\u8a08\u7b97\u91cf\u3092\u300c\u4e09\u6b21\u300d\u3001\u300c\u56db\u6b21\u300d\u306a\u3069\u306b\u5f15\u304d\u4e0a\u3052\u307e\u3059\u3002

"},{"location":"chapter_computational_complexity/iteration_and_recursion/#222","title":"2.2.2 \u00a0 \u518d\u5e30","text":"

\u518d\u5e30\u306f\u3001\u95a2\u6570\u304c\u81ea\u5206\u81ea\u8eab\u3092\u547c\u3073\u51fa\u3059\u3053\u3068\u3067\u554f\u984c\u3092\u89e3\u6c7a\u3059\u308b\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u6226\u7565\u3067\u3059\u3002\u4e3b\u306b2\u3064\u306e\u30d5\u30a7\u30fc\u30ba\u304c\u542b\u307e\u308c\u307e\u3059\uff1a

  1. \u547c\u3073\u51fa\u3057: \u30d7\u30ed\u30b0\u30e9\u30e0\u304c\u81ea\u5206\u81ea\u8eab\u3092\u7e70\u308a\u8fd4\u3057\u547c\u3073\u51fa\u3057\u3001\u3057\u3070\u3057\u3070\u3088\u308a\u5c0f\u3055\u3044\u307e\u305f\u306f\u3088\u308a\u5358\u7d14\u306a\u5f15\u6570\u3067\u3001\u300c\u7d42\u4e86\u6761\u4ef6\u300d\u306b\u5411\u304b\u3063\u3066\u9032\u307f\u307e\u3059\u3002
  2. \u8fd4\u5374: \u300c\u7d42\u4e86\u6761\u4ef6\u300d\u304c\u30c8\u30ea\u30ac\u30fc\u3055\u308c\u308b\u3068\u3001\u30d7\u30ed\u30b0\u30e9\u30e0\u306f\u6700\u3082\u6df1\u3044\u518d\u5e30\u95a2\u6570\u304b\u3089\u8fd4\u308a\u59cb\u3081\u3001\u5404\u30ec\u30a4\u30e4\u30fc\u306e\u7d50\u679c\u3092\u96c6\u7d04\u3057\u307e\u3059\u3002

\u5b9f\u88c5\u306e\u89b3\u70b9\u304b\u3089\u3001\u518d\u5e30\u30b3\u30fc\u30c9\u306f\u4e3b\u306b3\u3064\u306e\u8981\u7d20\u3092\u542b\u307f\u307e\u3059\u3002

  1. \u7d42\u4e86\u6761\u4ef6: \u300c\u547c\u3073\u51fa\u3057\u300d\u304b\u3089\u300c\u8fd4\u5374\u300d\u306b\u3044\u3064\u5207\u308a\u66ff\u3048\u308b\u304b\u3092\u6c7a\u5b9a\u3057\u307e\u3059\u3002
  2. \u518d\u5e30\u547c\u3073\u51fa\u3057: \u300c\u547c\u3073\u51fa\u3057\u300d\u306b\u5bfe\u5fdc\u3057\u3001\u95a2\u6570\u304c\u81ea\u5206\u81ea\u8eab\u3092\u547c\u3073\u51fa\u3057\u3001\u901a\u5e38\u306f\u3088\u308a\u5c0f\u3055\u3044\u307e\u305f\u306f\u3088\u308a\u5358\u7d14\u5316\u3055\u308c\u305f\u30d1\u30e9\u30e1\u30fc\u30bf\u3067\u884c\u3044\u307e\u3059\u3002
  3. \u7d50\u679c\u306e\u8fd4\u5374: \u300c\u8fd4\u5374\u300d\u306b\u5bfe\u5fdc\u3057\u3001\u73fe\u5728\u306e\u518d\u5e30\u30ec\u30d9\u30eb\u306e\u7d50\u679c\u304c\u524d\u306e\u30ec\u30a4\u30e4\u30fc\u306b\u8fd4\u3055\u308c\u307e\u3059\u3002

\u4ee5\u4e0b\u306e\u30b3\u30fc\u30c9\u3092\u89b3\u5bdf\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u5358\u7d14\u306b\u95a2\u6570recur(n)\u3092\u547c\u3073\u51fa\u3059\u3060\u3051\u3067\\(1 + 2 + \\dots + n\\)\u306e\u5408\u8a08\u3092\u8a08\u7b97\u3067\u304d\u307e\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby recursion.py
def recur(n: int) -> int:\n    \"\"\"\u518d\u5e30\"\"\"\n    # \u7d42\u4e86\u6761\u4ef6\n    if n == 1:\n        return 1\n    # \u518d\u5e30\uff1a\u518d\u5e30\u547c\u3073\u51fa\u3057\n    res = recur(n - 1)\n    # \u5fa9\u5e30\uff1a\u7d50\u679c\u3092\u8fd4\u3059\n    return n + res\n
recursion.cpp
/* \u518d\u5e30 */\nint recur(int n) {\n    // \u7d42\u4e86\u6761\u4ef6\n    if (n == 1)\n        return 1;\n    // \u518d\u5e30\uff1a\u518d\u5e30\u547c\u3073\u51fa\u3057\n    int res = recur(n - 1);\n    // \u623b\u308a\u5024\uff1a\u7d50\u679c\u3092\u8fd4\u3059\n    return n + res;\n}\n
recursion.java
/* \u518d\u5e30 */\nint recur(int n) {\n    // \u7d42\u4e86\u6761\u4ef6\n    if (n == 1)\n        return 1;\n    // \u518d\u5e30\uff1a\u518d\u5e30\u547c\u3073\u51fa\u3057\n    int res = recur(n - 1);\n    // \u623b\u308a\u5024\uff1a\u7d50\u679c\u3092\u8fd4\u3059\n    return n + res;\n}\n
recursion.cs
[class]{recursion}-[func]{Recur}\n
recursion.go
[class]{}-[func]{recur}\n
recursion.swift
[class]{}-[func]{recur}\n
recursion.js
[class]{}-[func]{recur}\n
recursion.ts
[class]{}-[func]{recur}\n
recursion.dart
[class]{}-[func]{recur}\n
recursion.rs
[class]{}-[func]{recur}\n
recursion.c
[class]{}-[func]{recur}\n
recursion.kt
[class]{}-[func]{recur}\n
recursion.rb
[class]{}-[func]{recur}\n

\u4ee5\u4e0b\u306e\u56f3\u306f\u3053\u306e\u95a2\u6570\u306e\u518d\u5e30\u30d7\u30ed\u30bb\u30b9\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002

\u56f3 2-3 \u00a0 Recursive process of the sum function

\u53cd\u5fa9\u3068\u518d\u5e30\u306f\u8a08\u7b97\u306e\u89b3\u70b9\u304b\u3089\u540c\u3058\u7d50\u679c\u3092\u9054\u6210\u3067\u304d\u307e\u3059\u304c\u3001\u305d\u308c\u3089\u306f\u601d\u8003\u3068\u554f\u984c\u89e3\u6c7a\u306e\u5168\u304f\u7570\u306a\u308b\u30d1\u30e9\u30c0\u30a4\u30e0\u3092\u8868\u3057\u307e\u3059\u3002

\u5148\u307b\u3069\u306e\u5408\u8a08\u95a2\u6570\u306e\u4f8b\u3092\u53d6\u3063\u3066\u307f\u307e\u3057\u3087\u3046\u3002\\(f(n) = 1 + 2 + \\dots + n\\)\u3068\u3057\u3066\u5b9a\u7fa9\u3055\u308c\u307e\u3059\u3002

"},{"location":"chapter_computational_complexity/iteration_and_recursion/#1","title":"1. \u00a0 \u547c\u3073\u51fa\u3057\u30b9\u30bf\u30c3\u30af","text":"

\u518d\u5e30\u95a2\u6570\u304c\u81ea\u5206\u81ea\u8eab\u3092\u547c\u3073\u51fa\u3059\u305f\u3073\u306b\u3001\u30b7\u30b9\u30c6\u30e0\u306f\u65b0\u3057\u304f\u958b\u59cb\u3055\u308c\u305f\u95a2\u6570\u306b\u30e1\u30e2\u30ea\u3092\u5272\u308a\u5f53\u3066\u3066\u3001\u30ed\u30fc\u30ab\u30eb\u5909\u6570\u3001\u623b\u308a\u30a2\u30c9\u30ec\u30b9\u3001\u305d\u306e\u4ed6\u306e\u95a2\u9023\u60c5\u5831\u3092\u683c\u7d0d\u3057\u307e\u3059\u3002\u3053\u308c\u306f2\u3064\u306e\u4e3b\u8981\u306a\u7d50\u679c\u3092\u3082\u305f\u3089\u3057\u307e\u3059\u3002

\u4ee5\u4e0b\u306e\u56f3\u306b\u793a\u3055\u308c\u3066\u3044\u308b\u3088\u3046\u306b\u3001\u7d42\u4e86\u6761\u4ef6\u304c\u30c8\u30ea\u30ac\u30fc\u3055\u308c\u308b\u524d\u306b\\(n\\)\u500b\u306e\u672a\u8fd4\u5374\u306e\u518d\u5e30\u95a2\u6570\u304c\u3042\u308a\u3001\u518d\u5e30\u306e\u6df1\u3055\u304c\\(n\\)\u3067\u3042\u308b\u3053\u3068\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002

\u56f3 2-4 \u00a0 Recursion call depth

\u5b9f\u969b\u306b\u306f\u3001\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\u3067\u8a31\u53ef\u3055\u308c\u308b\u518d\u5e30\u306e\u6df1\u3055\u306f\u901a\u5e38\u5236\u9650\u3055\u308c\u3066\u304a\u308a\u3001\u904e\u5ea6\u306b\u6df1\u3044\u518d\u5e30\u306f\u30b9\u30bf\u30c3\u30af\u30aa\u30fc\u30d0\u30fc\u30d5\u30ed\u30fc\u30a8\u30e9\u30fc\u3092\u5f15\u304d\u8d77\u3053\u3059\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002

"},{"location":"chapter_computational_complexity/iteration_and_recursion/#2","title":"2. \u00a0 \u672b\u5c3e\u518d\u5e30","text":"

\u8208\u5473\u6df1\u3044\u3053\u3068\u306b\u3001\u95a2\u6570\u304c\u8fd4\u3059\u76f4\u524d\u306e\u6700\u5f8c\u306e\u30b9\u30c6\u30c3\u30d7\u3068\u3057\u3066\u518d\u5e30\u547c\u3073\u51fa\u3057\u3092\u5b9f\u884c\u3059\u308b\u5834\u5408\u3001\u30b3\u30f3\u30d1\u30a4\u30e9\u307e\u305f\u306f\u30a4\u30f3\u30bf\u30fc\u30d7\u30ea\u30bf\u30fc\u306b\u3088\u3063\u3066\u53cd\u5fa9\u3068\u540c\u3058\u7a7a\u9593\u52b9\u7387\u306b\u306a\u308b\u3088\u3046\u306b\u6700\u9069\u5316\u3067\u304d\u307e\u3059\u3002\u3053\u306e\u30b7\u30ca\u30ea\u30aa\u306f\u672b\u5c3e\u518d\u5e30\u3068\u3057\u3066\u77e5\u3089\u308c\u3066\u3044\u307e\u3059\u3002

\u4f8b\u3048\u3070\u3001\\(1 + 2 + \\dots + n\\)\u306e\u8a08\u7b97\u3067\u306f\u3001\u7d50\u679c\u5909\u6570res\u3092\u95a2\u6570\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u306b\u3059\u308b\u3053\u3068\u3067\u3001\u672b\u5c3e\u518d\u5e30\u3092\u5b9f\u73fe\u3067\u304d\u307e\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby recursion.py
def tail_recur(n, res):\n    \"\"\"\u672b\u5c3e\u518d\u5e30\"\"\"\n    # \u7d42\u4e86\u6761\u4ef6\n    if n == 0:\n        return res\n    # \u672b\u5c3e\u518d\u5e30\u547c\u3073\u51fa\u3057\n    return tail_recur(n - 1, res + n)\n
recursion.cpp
/* \u672b\u5c3e\u518d\u5e30 */\nint tailRecur(int n, int res) {\n    // \u7d42\u4e86\u6761\u4ef6\n    if (n == 0)\n        return res;\n    // \u672b\u5c3e\u518d\u5e30\u547c\u3073\u51fa\u3057\n    return tailRecur(n - 1, res + n);\n}\n
recursion.java
/* \u672b\u5c3e\u518d\u5e30 */\nint tailRecur(int n, int res) {\n    // \u7d42\u4e86\u6761\u4ef6\n    if (n == 0)\n        return res;\n    // \u672b\u5c3e\u518d\u5e30\u547c\u3073\u51fa\u3057\n    return tailRecur(n - 1, res + n);\n}\n
recursion.cs
[class]{recursion}-[func]{TailRecur}\n
recursion.go
[class]{}-[func]{tailRecur}\n
recursion.swift
[class]{}-[func]{tailRecur}\n
recursion.js
[class]{}-[func]{tailRecur}\n
recursion.ts
[class]{}-[func]{tailRecur}\n
recursion.dart
[class]{}-[func]{tailRecur}\n
recursion.rs
[class]{}-[func]{tail_recur}\n
recursion.c
[class]{}-[func]{tailRecur}\n
recursion.kt
[class]{}-[func]{tailRecur}\n
recursion.rb
[class]{}-[func]{tail_recur}\n

\u672b\u5c3e\u518d\u5e30\u306e\u5b9f\u884c\u30d7\u30ed\u30bb\u30b9\u306f\u4ee5\u4e0b\u306e\u56f3\u306b\u793a\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u901a\u5e38\u306e\u518d\u5e30\u3068\u672b\u5c3e\u518d\u5e30\u3092\u6bd4\u8f03\u3059\u308b\u3068\u3001\u5408\u8a08\u64cd\u4f5c\u306e\u30dd\u30a4\u30f3\u30c8\u304c\u7570\u306a\u308a\u307e\u3059\u3002

\u56f3 2-5 \u00a0 Tail recursion process

Tip

\u591a\u304f\u306e\u30b3\u30f3\u30d1\u30a4\u30e9\u3084\u30a4\u30f3\u30bf\u30fc\u30d7\u30ea\u30bf\u30fc\u306f\u672b\u5c3e\u518d\u5e30\u6700\u9069\u5316\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u306a\u3044\u3053\u3068\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u4f8b\u3048\u3070\u3001Python\u306f\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u672b\u5c3e\u518d\u5e30\u6700\u9069\u5316\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u306a\u3044\u305f\u3081\u3001\u95a2\u6570\u304c\u672b\u5c3e\u518d\u5e30\u306e\u5f62\u5f0f\u3067\u3042\u3063\u3066\u3082\u3001\u30b9\u30bf\u30c3\u30af\u30aa\u30fc\u30d0\u30fc\u30d5\u30ed\u30fc\u306e\u554f\u984c\u306b\u906d\u9047\u3059\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002

"},{"location":"chapter_computational_complexity/iteration_and_recursion/#3_1","title":"3. \u00a0 \u518d\u5e30\u6728","text":"

\u300c\u5206\u5272\u7d71\u6cbb\u300d\u306b\u95a2\u9023\u3059\u308b\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3092\u6271\u3046\u969b\u3001\u518d\u5e30\u306f\u53cd\u5fa9\u3088\u308a\u3082\u3057\u3070\u3057\u3070\u3088\u308a\u76f4\u611f\u7684\u306a\u30a2\u30d7\u30ed\u30fc\u30c1\u3068\u3088\u308a\u8aad\u307f\u3084\u3059\u3044\u30b3\u30fc\u30c9\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002\u300c\u30d5\u30a3\u30dc\u30ca\u30c3\u30c1\u6570\u5217\u300d\u3092\u4f8b\u306b\u53d6\u3063\u3066\u307f\u307e\u3057\u3087\u3046\u3002

Question

\u30d5\u30a3\u30dc\u30ca\u30c3\u30c1\u6570\u5217\\(0, 1, 1, 2, 3, 5, 8, 13, \\dots\\)\u304c\u4e0e\u3048\u3089\u308c\u305f\u5834\u5408\u3001\u6570\u5217\u306e\\(n\\)\u756a\u76ee\u306e\u6570\u3092\u6c42\u3081\u306a\u3055\u3044\u3002

\u30d5\u30a3\u30dc\u30ca\u30c3\u30c1\u6570\u5217\u306e\\(n\\)\u756a\u76ee\u306e\u6570\u3092\\(f(n)\\)\u3068\u3059\u308b\u3068\u30012\u3064\u306e\u7d50\u8ad6\u3092\u7c21\u5358\u306b\u5c0e\u304d\u51fa\u305b\u307e\u3059\uff1a

\u518d\u5e30\u95a2\u4fc2\u3092\u4f7f\u7528\u3057\u3001\u6700\u521d\u306e2\u3064\u306e\u6570\u3092\u7d42\u4e86\u6761\u4ef6\u3068\u3057\u3066\u8003\u616e\u3059\u308b\u3068\u3001\u518d\u5e30\u30b3\u30fc\u30c9\u3092\u66f8\u3051\u307e\u3059\u3002fib(n)\u3092\u547c\u3073\u51fa\u3059\u3068\u30d5\u30a3\u30dc\u30ca\u30c3\u30c1\u6570\u5217\u306e\\(n\\)\u756a\u76ee\u306e\u6570\u304c\u5f97\u3089\u308c\u307e\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby recursion.py
def fib(n: int) -> int:\n    \"\"\"\u30d5\u30a3\u30dc\u30ca\u30c3\u30c1\u6570\u5217\uff1a\u518d\u5e30\"\"\"\n    # \u7d42\u4e86\u6761\u4ef6 f(1) = 0, f(2) = 1\n    if n == 1 or n == 2:\n        return n - 1\n    # \u518d\u5e30\u547c\u3073\u51fa\u3057 f(n) = f(n-1) + f(n-2)\n    res = fib(n - 1) + fib(n - 2)\n    # \u7d50\u679c f(n) \u3092\u8fd4\u3059\n    return res\n
recursion.cpp
/* \u30d5\u30a3\u30dc\u30ca\u30c3\u30c1\u6570\u5217\uff1a\u518d\u5e30 */\nint fib(int n) {\n    // \u7d42\u4e86\u6761\u4ef6 f(1) = 0, f(2) = 1\n    if (n == 1 || n == 2)\n        return n - 1;\n    // \u518d\u5e30\u547c\u3073\u51fa\u3057 f(n) = f(n-1) + f(n-2)\n    int res = fib(n - 1) + fib(n - 2);\n    // \u7d50\u679c f(n) \u3092\u8fd4\u3059\n    return res;\n}\n
recursion.java
/* \u30d5\u30a3\u30dc\u30ca\u30c3\u30c1\u6570\u5217\uff1a\u518d\u5e30 */\nint fib(int n) {\n    // \u7d42\u4e86\u6761\u4ef6 f(1) = 0, f(2) = 1\n    if (n == 1 || n == 2)\n        return n - 1;\n    // \u518d\u5e30\u547c\u3073\u51fa\u3057 f(n) = f(n-1) + f(n-2)\n    int res = fib(n - 1) + fib(n - 2);\n    // \u7d50\u679c f(n) \u3092\u8fd4\u3059\n    return res;\n}\n
recursion.cs
[class]{recursion}-[func]{Fib}\n
recursion.go
[class]{}-[func]{fib}\n
recursion.swift
[class]{}-[func]{fib}\n
recursion.js
[class]{}-[func]{fib}\n
recursion.ts
[class]{}-[func]{fib}\n
recursion.dart
[class]{}-[func]{fib}\n
recursion.rs
[class]{}-[func]{fib}\n
recursion.c
[class]{}-[func]{fib}\n
recursion.kt
[class]{}-[func]{fib}\n
recursion.rb
[class]{}-[func]{fib}\n

\u4e0a\u8a18\u306e\u30b3\u30fc\u30c9\u3092\u89b3\u5bdf\u3059\u308b\u3068\u3001\u305d\u308c\u81ea\u4f53\u306e\u4e2d\u30672\u3064\u306e\u95a2\u6570\u3092\u518d\u5e30\u7684\u306b\u547c\u3073\u51fa\u3057\u3066\u3044\u308b\u3053\u3068\u304c\u308f\u304b\u308a\u307e\u3059\u3002\u3064\u307e\u308a\u30011\u56de\u306e\u547c\u3073\u51fa\u3057\u30672\u3064\u306e\u5206\u5c90\u547c\u3073\u51fa\u3057\u304c\u751f\u6210\u3055\u308c\u307e\u3059\u3002\u4ee5\u4e0b\u306e\u56f3\u306b\u793a\u3055\u308c\u3066\u3044\u308b\u3088\u3046\u306b\u3001\u3053\u306e\u7d99\u7d9a\u7684\u306a\u518d\u5e30\u547c\u3073\u51fa\u3057\u306f\u6700\u7d42\u7684\u306b\u6df1\u3055\\(n\\)\u306e\u518d\u5e30\u6728\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002

\u56f3 2-6 \u00a0 Fibonacci sequence recursion tree

\u57fa\u672c\u7684\u306b\u3001\u518d\u5e30\u306f\u300c\u554f\u984c\u3092\u3088\u308a\u5c0f\u3055\u306a\u30b5\u30d6\u554f\u984c\u306b\u5206\u89e3\u3059\u308b\u300d\u30d1\u30e9\u30c0\u30a4\u30e0\u3092\u4f53\u73fe\u3057\u3066\u3044\u307e\u3059\u3002\u3053\u306e\u5206\u5272\u7d71\u6cbb\u6226\u7565\u306f\u91cd\u8981\u3067\u3059\u3002

"},{"location":"chapter_computational_complexity/iteration_and_recursion/#223","title":"2.2.3 \u00a0 \u6bd4\u8f03","text":"

\u4e0a\u8a18\u306e\u5185\u5bb9\u3092\u307e\u3068\u3081\u308b\u3068\u3001\u4ee5\u4e0b\u306e\u8868\u306f\u5b9f\u88c5\u3001\u6027\u80fd\u3001\u9069\u7528\u6027\u306e\u89b3\u70b9\u304b\u3089\u53cd\u5fa9\u3068\u518d\u5e30\u306e\u9055\u3044\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002

\u8868: \u53cd\u5fa9\u3068\u518d\u5e30\u306e\u7279\u6027\u306e\u6bd4\u8f03

\u53cd\u5fa9 \u518d\u5e30 \u30a2\u30d7\u30ed\u30fc\u30c1 \u30eb\u30fc\u30d7\u69cb\u9020 \u95a2\u6570\u304c\u81ea\u5206\u81ea\u8eab\u3092\u547c\u3073\u51fa\u3059 \u6642\u9593\u52b9\u7387 \u4e00\u822c\u7684\u306b\u3088\u308a\u9ad8\u3044\u52b9\u7387\u3001\u95a2\u6570\u547c\u3073\u51fa\u3057\u306e\u30aa\u30fc\u30d0\u30fc\u30d8\u30c3\u30c9\u306a\u3057 \u5404\u95a2\u6570\u547c\u3073\u51fa\u3057\u304c\u30aa\u30fc\u30d0\u30fc\u30d8\u30c3\u30c9\u3092\u751f\u6210 \u30e1\u30e2\u30ea\u4f7f\u7528\u91cf \u901a\u5e38\u306f\u56fa\u5b9a\u30b5\u30a4\u30ba\u306e\u30e1\u30e2\u30ea\u7a7a\u9593\u3092\u4f7f\u7528 \u7d2f\u7a4d\u7684\u306a\u95a2\u6570\u547c\u3073\u51fa\u3057\u304c\u5927\u91cf\u306e\u30b9\u30bf\u30c3\u30af\u30d5\u30ec\u30fc\u30e0\u7a7a\u9593\u3092\u4f7f\u7528\u3059\u308b\u53ef\u80fd\u6027 \u9069\u7528\u53ef\u80fd\u306a\u554f\u984c \u5358\u7d14\u306a\u30eb\u30fc\u30d7\u30bf\u30b9\u30af\u306b\u9069\u3057\u3066\u3044\u308b\u3001\u76f4\u611f\u7684\u3067\u8aad\u307f\u3084\u3059\u3044\u30b3\u30fc\u30c9 \u554f\u984c\u306e\u5206\u89e3\u306b\u9069\u3057\u3066\u3044\u308b\uff08\u6728\u3001\u30b0\u30e9\u30d5\u3001\u5206\u5272\u7d71\u6cbb\u3001\u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u306a\u3069\uff09\u3001\u7c21\u6f54\u3067\u660e\u78ba\u306a\u30b3\u30fc\u30c9\u69cb\u9020

Tip

\u4ee5\u4e0b\u306e\u5185\u5bb9\u304c\u7406\u89e3\u3057\u306b\u304f\u3044\u5834\u5408\u306f\u3001\u300c\u30b9\u30bf\u30c3\u30af\u300d\u306e\u7ae0\u3092\u8aad\u3093\u3060\u5f8c\u306b\u518d\u3073\u8a2a\u308c\u308b\u3053\u3068\u3092\u691c\u8a0e\u3057\u3066\u304f\u3060\u3055\u3044\u3002

\u305d\u308c\u3067\u306f\u3001\u53cd\u5fa9\u3068\u518d\u5e30\u306e\u672c\u8cea\u7684\u306a\u95a2\u9023\u306f\u4f55\u3067\u3057\u3087\u3046\u304b\uff1f\u4e0a\u8a18\u306e\u518d\u5e30\u95a2\u6570\u3092\u4f8b\u306b\u53d6\u308b\u3068\u3001\u5408\u8a08\u64cd\u4f5c\u306f\u518d\u5e30\u306e\u300c\u8fd4\u5374\u300d\u30d5\u30a7\u30fc\u30ba\u3067\u767a\u751f\u3057\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u6700\u521d\u306b\u547c\u3073\u51fa\u3055\u308c\u305f\u95a2\u6570\u304c\u6700\u5f8c\u306b\u5408\u8a08\u64cd\u4f5c\u3092\u5b8c\u4e86\u3059\u308b\u3053\u3068\u3092\u610f\u5473\u3057\u3001\u30b9\u30bf\u30c3\u30af\u306e\u300c\u5f8c\u5165\u308c\u5148\u51fa\u3057\u300d\u539f\u7406\u3092\u53cd\u6620\u3057\u3066\u3044\u307e\u3059\u3002

\u300c\u547c\u3073\u51fa\u3057\u30b9\u30bf\u30c3\u30af\u300d\u3084\u300c\u30b9\u30bf\u30c3\u30af\u30d5\u30ec\u30fc\u30e0\u7a7a\u9593\u300d\u306a\u3069\u306e\u518d\u5e30\u7528\u8a9e\u306f\u3001\u518d\u5e30\u3068\u30b9\u30bf\u30c3\u30af\u306e\u5bc6\u63a5\u306a\u95a2\u4fc2\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002

  1. \u547c\u3073\u51fa\u3057: \u95a2\u6570\u304c\u547c\u3073\u51fa\u3055\u308c\u308b\u3068\u3001\u30b7\u30b9\u30c6\u30e0\u306f\u300c\u547c\u3073\u51fa\u3057\u30b9\u30bf\u30c3\u30af\u300d\u4e0a\u306b\u305d\u306e\u95a2\u6570\u7528\u306e\u65b0\u3057\u3044\u30b9\u30bf\u30c3\u30af\u30d5\u30ec\u30fc\u30e0\u3092\u5272\u308a\u5f53\u3066\u3001\u30ed\u30fc\u30ab\u30eb\u5909\u6570\u3001\u30d1\u30e9\u30e1\u30fc\u30bf\u3001\u623b\u308a\u30a2\u30c9\u30ec\u30b9\u3001\u305d\u306e\u4ed6\u306e\u30c7\u30fc\u30bf\u3092\u683c\u7d0d\u3057\u307e\u3059\u3002
  2. \u8fd4\u5374: \u95a2\u6570\u304c\u5b9f\u884c\u3092\u5b8c\u4e86\u3057\u3066\u8fd4\u308b\u3068\u3001\u5bfe\u5fdc\u3059\u308b\u30b9\u30bf\u30c3\u30af\u30d5\u30ec\u30fc\u30e0\u304c\u300c\u547c\u3073\u51fa\u3057\u30b9\u30bf\u30c3\u30af\u300d\u304b\u3089\u524a\u9664\u3055\u308c\u3001\u524d\u306e\u95a2\u6570\u306e\u5b9f\u884c\u74b0\u5883\u304c\u5fa9\u5143\u3055\u308c\u307e\u3059\u3002

\u3057\u305f\u304c\u3063\u3066\u3001\u660e\u793a\u7684\u306a\u30b9\u30bf\u30c3\u30af\u3092\u4f7f\u7528\u3057\u3066\u547c\u3073\u51fa\u3057\u30b9\u30bf\u30c3\u30af\u306e\u52d5\u4f5c\u3092\u30b7\u30df\u30e5\u30ec\u30fc\u30c8\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u518d\u5e30\u3092\u53cd\u5fa9\u5f62\u5f0f\u306b\u5909\u63db\u3067\u304d\u307e\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby recursion.py
def for_loop_recur(n: int) -> int:\n    \"\"\"\u53cd\u5fa9\u3067\u518d\u5e30\u3092\u30b7\u30df\u30e5\u30ec\u30fc\u30c8\"\"\"\n    # \u660e\u793a\u7684\u306a\u30b9\u30bf\u30c3\u30af\u3092\u4f7f\u7528\u3057\u3066\u30b7\u30b9\u30c6\u30e0\u30b3\u30fc\u30eb\u30b9\u30bf\u30c3\u30af\u3092\u30b7\u30df\u30e5\u30ec\u30fc\u30c8\n    stack = []\n    res = 0\n    # \u518d\u5e30\uff1a\u518d\u5e30\u547c\u3073\u51fa\u3057\n    for i in range(n, 0, -1):\n        # \u300c\u30b9\u30bf\u30c3\u30af\u3078\u306e\u30d7\u30c3\u30b7\u30e5\u300d\u3067\u300c\u518d\u5e30\u300d\u3092\u30b7\u30df\u30e5\u30ec\u30fc\u30c8\n        stack.append(i)\n    # \u5fa9\u5e30\uff1a\u7d50\u679c\u3092\u8fd4\u3059\n    while stack:\n        # \u300c\u30b9\u30bf\u30c3\u30af\u304b\u3089\u306e\u30dd\u30c3\u30d7\u300d\u3067\u300c\u5fa9\u5e30\u300d\u3092\u30b7\u30df\u30e5\u30ec\u30fc\u30c8\n        res += stack.pop()\n    # res = 1+2+3+...+n\n    return res\n
recursion.cpp
/* \u53cd\u5fa9\u3067\u518d\u5e30\u3092\u30b7\u30df\u30e5\u30ec\u30fc\u30c8 */\nint forLoopRecur(int n) {\n    // \u660e\u793a\u7684\u306a\u30b9\u30bf\u30c3\u30af\u3092\u4f7f\u7528\u3057\u3066\u30b7\u30b9\u30c6\u30e0\u30b3\u30fc\u30eb\u30b9\u30bf\u30c3\u30af\u3092\u30b7\u30df\u30e5\u30ec\u30fc\u30c8\n    stack<int> stack;\n    int res = 0;\n    // \u518d\u5e30\uff1a\u518d\u5e30\u547c\u3073\u51fa\u3057\n    for (int i = n; i > 0; i--) {\n        // \u300c\u30b9\u30bf\u30c3\u30af\u3078\u306e\u30d7\u30c3\u30b7\u30e5\u300d\u3067\u300c\u518d\u5e30\u300d\u3092\u30b7\u30df\u30e5\u30ec\u30fc\u30c8\n        stack.push(i);\n    }\n    // \u623b\u308a\u5024\uff1a\u7d50\u679c\u3092\u8fd4\u3059\n    while (!stack.empty()) {\n        // \u300c\u30b9\u30bf\u30c3\u30af\u304b\u3089\u306e\u30dd\u30c3\u30d7\u300d\u3067\u300c\u623b\u308a\u5024\u300d\u3092\u30b7\u30df\u30e5\u30ec\u30fc\u30c8\n        res += stack.top();\n        stack.pop();\n    }\n    // res = 1+2+3+...+n\n    return res;\n}\n
recursion.java
/* \u53cd\u5fa9\u3067\u518d\u5e30\u3092\u30b7\u30df\u30e5\u30ec\u30fc\u30c8 */\nint forLoopRecur(int n) {\n    // \u660e\u793a\u7684\u306a\u30b9\u30bf\u30c3\u30af\u3092\u4f7f\u7528\u3057\u3066\u30b7\u30b9\u30c6\u30e0\u30b3\u30fc\u30eb\u30b9\u30bf\u30c3\u30af\u3092\u30b7\u30df\u30e5\u30ec\u30fc\u30c8\n    Stack<Integer> stack = new Stack<>();\n    int res = 0;\n    // \u518d\u5e30\uff1a\u518d\u5e30\u547c\u3073\u51fa\u3057\n    for (int i = n; i > 0; i--) {\n        // \u300c\u30b9\u30bf\u30c3\u30af\u3078\u306e\u30d7\u30c3\u30b7\u30e5\u300d\u3067\u300c\u518d\u5e30\u300d\u3092\u30b7\u30df\u30e5\u30ec\u30fc\u30c8\n        stack.push(i);\n    }\n    // \u623b\u308a\u5024\uff1a\u7d50\u679c\u3092\u8fd4\u3059\n    while (!stack.isEmpty()) {\n        // \u300c\u30b9\u30bf\u30c3\u30af\u304b\u3089\u306e\u30dd\u30c3\u30d7\u300d\u3067\u300c\u623b\u308a\u5024\u300d\u3092\u30b7\u30df\u30e5\u30ec\u30fc\u30c8\n        res += stack.pop();\n    }\n    // res = 1+2+3+...+n\n    return res;\n}\n
recursion.cs
[class]{recursion}-[func]{ForLoopRecur}\n
recursion.go
[class]{}-[func]{forLoopRecur}\n
recursion.swift
[class]{}-[func]{forLoopRecur}\n
recursion.js
[class]{}-[func]{forLoopRecur}\n
recursion.ts
[class]{}-[func]{forLoopRecur}\n
recursion.dart
[class]{}-[func]{forLoopRecur}\n
recursion.rs
[class]{}-[func]{for_loop_recur}\n
recursion.c
[class]{}-[func]{forLoopRecur}\n
recursion.kt
[class]{}-[func]{forLoopRecur}\n
recursion.rb
[class]{}-[func]{for_loop_recur}\n

\u4e0a\u8a18\u306e\u30b3\u30fc\u30c9\u3092\u89b3\u5bdf\u3059\u308b\u3068\u3001\u518d\u5e30\u304c\u53cd\u5fa9\u306b\u5909\u63db\u3055\u308c\u305f\u3068\u304d\u3001\u30b3\u30fc\u30c9\u306f\u3088\u308a\u8907\u96d1\u306b\u306a\u308a\u307e\u3059\u3002\u53cd\u5fa9\u3068\u518d\u5e30\u306f\u3057\u3070\u3057\u3070\u76f8\u4e92\u306b\u5909\u63db\u3067\u304d\u307e\u3059\u304c\u30012\u3064\u306e\u7406\u7531\u3067\u305d\u3046\u3059\u308b\u3053\u3068\u304c\u5e38\u306b\u63a8\u5968\u3055\u308c\u308b\u308f\u3051\u3067\u306f\u3042\u308a\u307e\u305b\u3093\uff1a

\u7d50\u8ad6\u3068\u3057\u3066\u3001\u53cd\u5fa9\u307e\u305f\u306f\u518d\u5e30\u3092\u9078\u629e\u3059\u308b\u304b\u306f\u554f\u984c\u306e\u5177\u4f53\u7684\u306a\u6027\u8cea\u306b\u3088\u308a\u307e\u3059\u3002\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u306e\u5b9f\u8df5\u3067\u306f\u3001\u4e21\u65b9\u306e\u9577\u6240\u3068\u77ed\u6240\u3092\u6bd4\u8f03\u691c\u8a0e\u3057\u3001\u624b\u5143\u306e\u72b6\u6cc1\u306b\u6700\u3082\u9069\u3057\u305f\u30a2\u30d7\u30ed\u30fc\u30c1\u3092\u9078\u629e\u3059\u308b\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002

"},{"location":"chapter_computational_complexity/performance_evaluation/","title":"2.1 \u00a0 \u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u52b9\u7387\u8a55\u4fa1","text":"

\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u8a2d\u8a08\u306b\u304a\u3044\u3066\u3001\u79c1\u305f\u3061\u306f\u9806\u5e8f\u306b\u5f93\u3063\u3066\u4ee5\u4e0b\u306e2\u3064\u306e\u76ee\u6a19\u3092\u8ffd\u6c42\u3057\u307e\u3059\u3002

  1. \u554f\u984c\u306e\u89e3\u6c7a\u7b56\u3092\u898b\u3064\u3051\u308b: \u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306f\u3001\u6307\u5b9a\u3055\u308c\u305f\u5165\u529b\u7bc4\u56f2\u5185\u3067\u78ba\u5b9f\u306b\u6b63\u3057\u3044\u89e3\u3092\u898b\u3064\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u3079\u304d\u3067\u3059\u3002
  2. \u6700\u9069\u89e3\u3092\u6c42\u3081\u308b: \u540c\u3058\u554f\u984c\u306b\u5bfe\u3057\u3066\u8907\u6570\u306e\u89e3\u6c7a\u7b56\u304c\u5b58\u5728\u3059\u308b\u5834\u5408\u304c\u3042\u308a\u3001\u79c1\u305f\u3061\u306f\u53ef\u80fd\u306a\u9650\u308a\u6700\u3082\u52b9\u7387\u7684\u306a\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3092\u898b\u3064\u3051\u308b\u3053\u3068\u3092\u76ee\u6307\u3057\u307e\u3059\u3002

\u3064\u307e\u308a\u3001\u554f\u984c\u3092\u89e3\u6c7a\u3067\u304d\u308b\u3053\u3068\u3092\u524d\u63d0\u3068\u3057\u3066\u3001\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u52b9\u7387\u304c\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3092\u8a55\u4fa1\u3059\u308b\u4e3b\u8981\u306a\u57fa\u6e96\u3068\u306a\u3063\u3066\u304a\u308a\u3001\u3053\u308c\u306b\u306f\u4ee5\u4e0b\u306e2\u3064\u306e\u6b21\u5143\u304c\u542b\u307e\u308c\u307e\u3059\u3002

\u8981\u3059\u308b\u306b\u3001\u79c1\u305f\u3061\u306e\u76ee\u6a19\u306f\u3001\u9ad8\u901f\u3067\u30e1\u30e2\u30ea\u52b9\u7387\u306e\u826f\u3044\u30c7\u30fc\u30bf\u69cb\u9020\u3068\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3092\u8a2d\u8a08\u3059\u308b\u3053\u3068\u3067\u3059\u3002\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u52b9\u7387\u3092\u52b9\u679c\u7684\u306b\u8a55\u4fa1\u3059\u308b\u3053\u3068\u306f\u91cd\u8981\u3067\u3059\u3002\u306a\u305c\u306a\u3089\u3001\u305d\u3046\u3059\u308b\u3053\u3068\u3067\u521d\u3081\u3066\u69d8\u3005\u306a\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3092\u6bd4\u8f03\u3057\u3001\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u8a2d\u8a08\u3068\u6700\u9069\u5316\u30d7\u30ed\u30bb\u30b9\u3092\u5c0e\u304f\u3053\u3068\u304c\u3067\u304d\u308b\u304b\u3089\u3067\u3059\u3002

\u52b9\u7387\u8a55\u4fa1\u306b\u306f\u4e3b\u306b2\u3064\u306e\u65b9\u6cd5\u304c\u3042\u308a\u307e\u3059\uff1a\u5b9f\u969b\u306e\u30c6\u30b9\u30c8\u3068\u7406\u8ad6\u7684\u63a8\u5b9a\u3067\u3059\u3002

"},{"location":"chapter_computational_complexity/performance_evaluation/#211","title":"2.1.1 \u00a0 \u5b9f\u969b\u306e\u30c6\u30b9\u30c8","text":"

\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0A\u3068B\u304c\u3042\u308a\u3001\u3069\u3061\u3089\u3082\u540c\u3058\u554f\u984c\u3092\u89e3\u6c7a\u3067\u304d\u3001\u305d\u308c\u3089\u306e\u52b9\u7387\u3092\u6bd4\u8f03\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u3068\u3057\u307e\u3059\u3002\u6700\u3082\u76f4\u63a5\u7684\u306a\u65b9\u6cd5\u306f\u3001\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u3092\u4f7f\u7528\u3057\u3066\u3053\u308c\u30892\u3064\u306e\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3092\u5b9f\u884c\u3057\u3001\u5b9f\u884c\u6642\u9593\u3068\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u3092\u76e3\u8996\u30fb\u8a18\u9332\u3059\u308b\u3053\u3068\u3067\u3059\u3002\u3053\u306e\u8a55\u4fa1\u65b9\u6cd5\u306f\u5b9f\u969b\u306e\u72b6\u6cc1\u3092\u53cd\u6620\u3057\u307e\u3059\u304c\u3001\u5927\u304d\u306a\u5236\u9650\u304c\u3042\u308a\u307e\u3059\u3002

\u4e00\u65b9\u3067\u3001\u30c6\u30b9\u30c8\u74b0\u5883\u304b\u3089\u306e\u5e72\u6e09\u3092\u6392\u9664\u3059\u308b\u3053\u3068\u306f\u56f0\u96e3\u3067\u3059\u3002\u30cf\u30fc\u30c9\u30a6\u30a7\u30a2\u69cb\u6210\u306f\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u6027\u80fd\u306b\u5f71\u97ff\u3092\u4e0e\u3048\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001\u4e26\u5217\u5ea6\u306e\u9ad8\u3044\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306f\u30de\u30eb\u30c1\u30b3\u30a2CPU\u3067\u306e\u5b9f\u884c\u306b\u3088\u308a\u9069\u3057\u3066\u3044\u307e\u3059\u3057\u3001\u96c6\u7d04\u7684\u306a\u30e1\u30e2\u30ea\u64cd\u4f5c\u3092\u542b\u3080\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306f\u9ad8\u6027\u80fd\u30e1\u30e2\u30ea\u3067\u3088\u308a\u826f\u3044\u6027\u80fd\u3092\u767a\u63ee\u3057\u307e\u3059\u3002\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u30c6\u30b9\u30c8\u7d50\u679c\u306f\u3001\u7570\u306a\u308b\u30de\u30b7\u30f3\u9593\u3067\u5909\u308f\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u5e73\u5747\u52b9\u7387\u3092\u8a08\u7b97\u3059\u308b\u305f\u3081\u306b\u8907\u6570\u306e\u30de\u30b7\u30f3\u3067\u30c6\u30b9\u30c8\u3059\u308b\u3053\u3068\u304c\u5b9f\u7528\u7684\u3067\u306a\u3044\u3053\u3068\u3092\u610f\u5473\u3057\u307e\u3059\u3002

\u4e00\u65b9\u3067\u3001\u5b8c\u5168\u306a\u30c6\u30b9\u30c8\u3092\u5b9f\u65bd\u3059\u308b\u3053\u3068\u306f\u975e\u5e38\u306b\u30ea\u30bd\u30fc\u30b9\u96c6\u7d04\u7684\u3067\u3059\u3002\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u52b9\u7387\u306f\u5165\u529b\u30c7\u30fc\u30bf\u30b5\u30a4\u30ba\u306b\u3088\u3063\u3066\u5909\u308f\u308a\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001\u30c7\u30fc\u30bf\u91cf\u304c\u5c11\u306a\u3044\u5834\u5408\u306f\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0A\u304cB\u3088\u308a\u901f\u304f\u5b9f\u884c\u3055\u308c\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u304c\u3001\u30c7\u30fc\u30bf\u91cf\u304c\u591a\u3044\u5834\u5408\u306f\u30c6\u30b9\u30c8\u7d50\u679c\u304c\u9006\u306b\u306a\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002\u3057\u305f\u304c\u3063\u3066\u3001\u8aac\u5f97\u529b\u306e\u3042\u308b\u7d50\u8ad6\u3092\u5c0e\u304f\u305f\u3081\u306b\u306f\u3001\u5e45\u5e83\u3044\u5165\u529b\u30c7\u30fc\u30bf\u30b5\u30a4\u30ba\u3092\u30c6\u30b9\u30c8\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u3001\u3053\u308c\u306b\u306f\u904e\u5ea6\u306a\u8a08\u7b97\u30ea\u30bd\u30fc\u30b9\u304c\u5fc5\u8981\u306b\u306a\u308a\u307e\u3059\u3002

"},{"location":"chapter_computational_complexity/performance_evaluation/#212","title":"2.1.2 \u00a0 \u7406\u8ad6\u7684\u63a8\u5b9a","text":"

\u5b9f\u969b\u306e\u30c6\u30b9\u30c8\u306e\u5927\u304d\u306a\u5236\u9650\u306b\u3088\u308a\u3001\u8a08\u7b97\u306e\u307f\u3067\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u52b9\u7387\u3092\u8a55\u4fa1\u3059\u308b\u3053\u3068\u3092\u691c\u8a0e\u3067\u304d\u307e\u3059\u3002\u3053\u306e\u63a8\u5b9a\u65b9\u6cd5\u306f\u6f38\u8fd1\u7684\u8907\u96d1\u5ea6\u89e3\u6790\u3001\u307e\u305f\u306f\u5358\u306b\u8907\u96d1\u5ea6\u89e3\u6790\u3068\u3057\u3066\u77e5\u3089\u308c\u3066\u3044\u307e\u3059\u3002

\u8907\u96d1\u5ea6\u89e3\u6790\u306f\u3001\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u5b9f\u884c\u306b\u5fc5\u8981\u306a\u6642\u9593\u3068\u7a7a\u9593\u30ea\u30bd\u30fc\u30b9\u3068\u5165\u529b\u30c7\u30fc\u30bf\u306e\u30b5\u30a4\u30ba\u3068\u306e\u95a2\u4fc2\u3092\u53cd\u6620\u3057\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u5165\u529b\u30c7\u30fc\u30bf\u306e\u30b5\u30a4\u30ba\u304c\u5897\u52a0\u3059\u308b\u306b\u3064\u308c\u3066\u3001\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306b\u5fc5\u8981\u306a\u6642\u9593\u3068\u7a7a\u9593\u306e\u5897\u52a0\u50be\u5411\u3092\u8a18\u8ff0\u3057\u307e\u3059\u3002\u3053\u306e\u5b9a\u7fa9\u306f\u8907\u96d1\u306b\u805e\u3053\u3048\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u304c\u3001\u3088\u308a\u826f\u304f\u7406\u89e3\u3059\u308b\u305f\u3081\u306b3\u3064\u306e\u91cd\u8981\u306a\u30dd\u30a4\u30f3\u30c8\u306b\u5206\u89e3\u3067\u304d\u307e\u3059\u3002

\u8907\u96d1\u5ea6\u89e3\u6790\u306f\u5b9f\u969b\u306e\u30c6\u30b9\u30c8\u65b9\u6cd5\u306e\u6b20\u70b9\u3092\u514b\u670d\u3057\u307e\u3059\u3002\u3053\u308c\u306f\u4ee5\u4e0b\u306e\u5074\u9762\u3067\u53cd\u6620\u3055\u308c\u307e\u3059\uff1a

Tip

\u8907\u96d1\u5ea6\u306e\u6982\u5ff5\u306b\u3064\u3044\u3066\u307e\u3060\u6df7\u4e71\u3057\u3066\u3044\u308b\u5834\u5408\u3067\u3082\u3001\u5fc3\u914d\u3057\u306a\u3044\u3067\u304f\u3060\u3055\u3044\u3002\u4ee5\u964d\u306e\u7ae0\u3067\u8a73\u3057\u304f\u53d6\u308a\u4e0a\u3052\u307e\u3059\u3002

\u8907\u96d1\u5ea6\u89e3\u6790\u306f\u3001\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u52b9\u7387\u3092\u8a55\u4fa1\u3059\u308b\u300c\u3082\u306e\u3055\u3057\u300d\u3092\u63d0\u4f9b\u3057\u3001\u5b9f\u884c\u306b\u5fc5\u8981\u306a\u6642\u9593\u3068\u7a7a\u9593\u30ea\u30bd\u30fc\u30b9\u3092\u6e2c\u5b9a\u3057\u3001\u7570\u306a\u308b\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u52b9\u7387\u3092\u6bd4\u8f03\u3059\u308b\u3053\u3068\u3092\u53ef\u80fd\u306b\u3057\u307e\u3059\u3002

\u8907\u96d1\u5ea6\u306f\u6570\u5b66\u7684\u6982\u5ff5\u3067\u3042\u308a\u3001\u521d\u5fc3\u8005\u306b\u306f\u62bd\u8c61\u7684\u3067\u56f0\u96e3\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002\u3053\u306e\u89b3\u70b9\u304b\u3089\u3001\u8907\u96d1\u5ea6\u89e3\u6790\u306f\u6700\u521d\u306b\u7d39\u4ecb\u3059\u308b\u306e\u306b\u6700\u3082\u9069\u3057\u305f\u30c8\u30d4\u30c3\u30af\u3067\u306f\u306a\u3044\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002\u3057\u304b\u3057\u3001\u7279\u5b9a\u306e\u30c7\u30fc\u30bf\u69cb\u9020\u3084\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u7279\u6027\u306b\u3064\u3044\u3066\u8b70\u8ad6\u3059\u308b\u3068\u304d\u3001\u305d\u306e\u901f\u5ea6\u3068\u7a7a\u9593\u4f7f\u7528\u91cf\u3092\u5206\u6790\u3059\u308b\u3053\u3068\u3092\u907f\u3051\u308b\u306e\u306f\u56f0\u96e3\u3067\u3059\u3002

\u8981\u7d04\u3059\u308b\u3068\u3001\u30c7\u30fc\u30bf\u69cb\u9020\u3068\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306b\u6df1\u304f\u5165\u308b\u524d\u306b\u8907\u96d1\u5ea6\u89e3\u6790\u306e\u57fa\u672c\u7684\u306a\u7406\u89e3\u3092\u8eab\u306b\u3064\u3051\u308b\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u7c21\u5358\u306a\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3067\u8907\u96d1\u5ea6\u89e3\u6790\u3092\u5b9f\u884c\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002

"},{"location":"chapter_computational_complexity/space_complexity/","title":"2.4 \u00a0 \u7a7a\u9593\u8a08\u7b97\u91cf","text":"

\u7a7a\u9593\u8a08\u7b97\u91cf\u306f\u3001\u30c7\u30fc\u30bf\u91cf\u304c\u5897\u52a0\u3059\u308b\u306b\u3064\u308c\u3066\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u304c\u5360\u6709\u3059\u308b\u30e1\u30e2\u30ea\u7a7a\u9593\u306e\u5897\u52a0\u50be\u5411\u3092\u6e2c\u5b9a\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002\u3053\u306e\u6982\u5ff5\u306f\u6642\u9593\u8a08\u7b97\u91cf\u3068\u975e\u5e38\u306b\u4f3c\u3066\u3044\u307e\u3059\u304c\u3001\u300c\u5b9f\u884c\u6642\u9593\u300d\u304c\u300c\u5360\u6709\u30e1\u30e2\u30ea\u7a7a\u9593\u300d\u306b\u7f6e\u304d\u63db\u3048\u3089\u308c\u3066\u3044\u307e\u3059\u3002

"},{"location":"chapter_computational_complexity/space_complexity/#241","title":"2.4.1 \u00a0 \u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306b\u95a2\u9023\u3059\u308b\u7a7a\u9593","text":"

\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u304c\u5b9f\u884c\u4e2d\u306b\u4f7f\u7528\u3059\u308b\u30e1\u30e2\u30ea\u7a7a\u9593\u306b\u306f\u3001\u4e3b\u306b\u4ee5\u4e0b\u306e\u7a2e\u985e\u304c\u3042\u308a\u307e\u3059\u3002

\u4e00\u822c\u7684\u306b\u3001\u7a7a\u9593\u8a08\u7b97\u91cf\u306e\u7d71\u8a08\u7bc4\u56f2\u306b\u306f\u300c\u4e00\u6642\u7a7a\u9593\u300d\u3068\u300c\u51fa\u529b\u7a7a\u9593\u300d\u306e\u4e21\u65b9\u304c\u542b\u307e\u308c\u307e\u3059\u3002

\u4e00\u6642\u7a7a\u9593\u306f\u3055\u3089\u306b3\u3064\u306e\u90e8\u5206\u306b\u5206\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

\u30d7\u30ed\u30b0\u30e9\u30e0\u306e\u7a7a\u9593\u8a08\u7b97\u91cf\u3092\u5206\u6790\u3059\u308b\u969b\u3001\u901a\u5e38\u306f\u4e00\u6642\u30c7\u30fc\u30bf\u3001\u30b9\u30bf\u30c3\u30af\u30d5\u30ec\u30fc\u30e0\u7a7a\u9593\u3001\u51fa\u529b\u30c7\u30fc\u30bf\u3092\u30ab\u30a6\u30f3\u30c8\u3057\u307e\u3059\u3002\u4ee5\u4e0b\u306e\u56f3\u306b\u793a\u3055\u308c\u3066\u3044\u307e\u3059\u3002

\u56f3 2-15 \u00a0 Space types used in algorithms

\u95a2\u9023\u3059\u308b\u30b3\u30fc\u30c9\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlin
class Node:\n    \"\"\"\u30af\u30e9\u30b9\"\"\"\n    def __init__(self, x: int):\n        self.val: int = x               # \u30ce\u30fc\u30c9\u5024\n        self.next: Node | None = None   # \u6b21\u306e\u30ce\u30fc\u30c9\u3078\u306e\u53c2\u7167\n\ndef function() -> int:\n    \"\"\"\u95a2\u6570\"\"\"\n    # \u7279\u5b9a\u306e\u64cd\u4f5c\u3092\u5b9f\u884c...\n    return 0\n\ndef algorithm(n) -> int:    # \u5165\u529b\u30c7\u30fc\u30bf\n    A = 0                   # \u4e00\u6642\u30c7\u30fc\u30bf\uff08\u5b9a\u6570\u3001\u901a\u5e38\u5927\u6587\u5b57\uff09\n    b = 0                   # \u4e00\u6642\u30c7\u30fc\u30bf\uff08\u5909\u6570\uff09\n    node = Node(0)          # \u4e00\u6642\u30c7\u30fc\u30bf\uff08\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\uff09\n    c = function()          # \u30b9\u30bf\u30c3\u30af\u30d5\u30ec\u30fc\u30e0\u7a7a\u9593\uff08\u95a2\u6570\u547c\u3073\u51fa\u3057\uff09\n    return A + b + c        # \u51fa\u529b\u30c7\u30fc\u30bf\n
/* \u69cb\u9020\u4f53 */\nstruct Node {\n    int val;\n    Node *next;\n    Node(int x) : val(x), next(nullptr) {}\n};\n\n/* \u95a2\u6570 */\nint func() {\n    // \u7279\u5b9a\u306e\u64cd\u4f5c\u3092\u5b9f\u884c...\n    return 0;\n}\n\nint algorithm(int n) {          // \u5165\u529b\u30c7\u30fc\u30bf\n    const int a = 0;            // \u4e00\u6642\u30c7\u30fc\u30bf\uff08\u5b9a\u6570\uff09\n    int b = 0;                  // \u4e00\u6642\u30c7\u30fc\u30bf\uff08\u5909\u6570\uff09\n    Node* node = new Node(0);   // \u4e00\u6642\u30c7\u30fc\u30bf\uff08\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\uff09\n    int c = func();             // \u30b9\u30bf\u30c3\u30af\u30d5\u30ec\u30fc\u30e0\u7a7a\u9593\uff08\u95a2\u6570\u547c\u3073\u51fa\u3057\uff09\n    return a + b + c;           // \u51fa\u529b\u30c7\u30fc\u30bf\n}\n
/* \u30af\u30e9\u30b9 */\nclass Node {\n    int val;\n    Node next;\n    Node(int x) { val = x; }\n}\n\n/* \u95a2\u6570 */\nint function() {\n    // \u7279\u5b9a\u306e\u64cd\u4f5c\u3092\u5b9f\u884c...\n    return 0;\n}\n\nint algorithm(int n) {          // \u5165\u529b\u30c7\u30fc\u30bf\n    final int a = 0;            // \u4e00\u6642\u30c7\u30fc\u30bf\uff08\u5b9a\u6570\uff09\n    int b = 0;                  // \u4e00\u6642\u30c7\u30fc\u30bf\uff08\u5909\u6570\uff09\n    Node node = new Node(0);    // \u4e00\u6642\u30c7\u30fc\u30bf\uff08\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\uff09\n    int c = function();         // \u30b9\u30bf\u30c3\u30af\u30d5\u30ec\u30fc\u30e0\u7a7a\u9593\uff08\u95a2\u6570\u547c\u3073\u51fa\u3057\uff09\n    return a + b + c;           // \u51fa\u529b\u30c7\u30fc\u30bf\n}\n
/* \u30af\u30e9\u30b9 */\nclass Node {\n    int val;\n    Node next;\n    Node(int x) { val = x; }\n}\n\n/* \u95a2\u6570 */\nint Function() {\n    // \u7279\u5b9a\u306e\u64cd\u4f5c\u3092\u5b9f\u884c...\n    return 0;\n}\n\nint Algorithm(int n) {  // \u5165\u529b\u30c7\u30fc\u30bf\n    const int a = 0;    // \u4e00\u6642\u30c7\u30fc\u30bf\uff08\u5b9a\u6570\uff09\n    int b = 0;          // \u4e00\u6642\u30c7\u30fc\u30bf\uff08\u5909\u6570\uff09\n    Node node = new(0); // \u4e00\u6642\u30c7\u30fc\u30bf\uff08\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\uff09\n    int c = Function(); // \u30b9\u30bf\u30c3\u30af\u30d5\u30ec\u30fc\u30e0\u7a7a\u9593\uff08\u95a2\u6570\u547c\u3073\u51fa\u3057\uff09\n    return a + b + c;   // \u51fa\u529b\u30c7\u30fc\u30bf\n}\n
/* \u69cb\u9020\u4f53 */\ntype node struct {\n    val  int\n    next *node\n}\n\n/* \u30ce\u30fc\u30c9\u69cb\u9020\u4f53\u3092\u4f5c\u6210 */\nfunc newNode(val int) *node {\n    return &node{val: val}\n}\n\n/* \u95a2\u6570 */\nfunc function() int {\n    // \u7279\u5b9a\u306e\u64cd\u4f5c\u3092\u5b9f\u884c...\n    return 0\n}\n\nfunc algorithm(n int) int { // \u5165\u529b\u30c7\u30fc\u30bf\n    const a = 0             // \u4e00\u6642\u30c7\u30fc\u30bf\uff08\u5b9a\u6570\uff09\n    b := 0                  // \u4e00\u6642\u30c7\u30fc\u30bf\uff08\u5909\u6570\uff09\n    newNode(0)              // \u4e00\u6642\u30c7\u30fc\u30bf\uff08\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\uff09\n    c := function()         // \u30b9\u30bf\u30c3\u30af\u30d5\u30ec\u30fc\u30e0\u7a7a\u9593\uff08\u95a2\u6570\u547c\u3073\u51fa\u3057\uff09\n    return a + b + c        // \u51fa\u529b\u30c7\u30fc\u30bf\n}\n
/* \u30af\u30e9\u30b9 */\nclass Node {\n    var val: Int\n    var next: Node?\n\n    init(x: Int) {\n        val = x\n    }\n}\n\n/* \u95a2\u6570 */\nfunc function() -> Int {\n    // \u7279\u5b9a\u306e\u64cd\u4f5c\u3092\u5b9f\u884c...\n    return 0\n}\n\nfunc algorithm(n: Int) -> Int { // \u5165\u529b\u30c7\u30fc\u30bf\n    let a = 0                   // \u4e00\u6642\u30c7\u30fc\u30bf\uff08\u5b9a\u6570\uff09\n    var b = 0                   // \u4e00\u6642\u30c7\u30fc\u30bf\uff08\u5909\u6570\uff09\n    let node = Node(x: 0)       // \u4e00\u6642\u30c7\u30fc\u30bf\uff08\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\uff09\n    let c = function()          // \u30b9\u30bf\u30c3\u30af\u30d5\u30ec\u30fc\u30e0\u7a7a\u9593\uff08\u95a2\u6570\u547c\u3073\u51fa\u3057\uff09\n    return a + b + c            // \u51fa\u529b\u30c7\u30fc\u30bf\n}\n
/* \u30af\u30e9\u30b9 */\nclass Node {\n    val;\n    next;\n    constructor(val) {\n        this.val = val === undefined ? 0 : val; // \u30ce\u30fc\u30c9\u5024\n        this.next = null;                       // \u6b21\u306e\u30ce\u30fc\u30c9\u3078\u306e\u53c2\u7167\n    }\n}\n\n/* \u95a2\u6570 */\nfunction constFunc() {\n    // \u7279\u5b9a\u306e\u64cd\u4f5c\u3092\u5b9f\u884c\n    return 0;\n}\n\nfunction algorithm(n) {         // \u5165\u529b\u30c7\u30fc\u30bf\n    const a = 0;                // \u4e00\u6642\u30c7\u30fc\u30bf\uff08\u5b9a\u6570\uff09\n    let b = 0;                  // \u4e00\u6642\u30c7\u30fc\u30bf\uff08\u5909\u6570\uff09\n    const node = new Node(0);   // \u4e00\u6642\u30c7\u30fc\u30bf\uff08\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\uff09\n    const c = constFunc();      // \u30b9\u30bf\u30c3\u30af\u30d5\u30ec\u30fc\u30e0\u7a7a\u9593\uff08\u95a2\u6570\u547c\u3073\u51fa\u3057\uff09\n    return a + b + c;           // \u51fa\u529b\u30c7\u30fc\u30bf\n}\n
/* \u30af\u30e9\u30b9 */\nclass Node {\n    val: number;\n    next: Node | null;\n    constructor(val?: number) {\n        this.val = val === undefined ? 0 : val; // \u30ce\u30fc\u30c9\u5024\n        this.next = null;                       // \u6b21\u306e\u30ce\u30fc\u30c9\u3078\u306e\u53c2\u7167\n    }\n}\n\n/* \u95a2\u6570 */\nfunction constFunc(): number {\n    // \u7279\u5b9a\u306e\u64cd\u4f5c\u3092\u5b9f\u884c\n    return 0;\n}\n\nfunction algorithm(n: number): number { // \u5165\u529b\u30c7\u30fc\u30bf\n    const a = 0;                        // \u4e00\u6642\u30c7\u30fc\u30bf\uff08\u5b9a\u6570\uff09\n    let b = 0;                          // \u4e00\u6642\u30c7\u30fc\u30bf\uff08\u5909\u6570\uff09\n    const node = new Node(0);           // \u4e00\u6642\u30c7\u30fc\u30bf\uff08\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\uff09\n    const c = constFunc();              // \u30b9\u30bf\u30c3\u30af\u30d5\u30ec\u30fc\u30e0\u7a7a\u9593\uff08\u95a2\u6570\u547c\u3073\u51fa\u3057\uff09\n    return a + b + c;                   // \u51fa\u529b\u30c7\u30fc\u30bf\n}\n
/* \u30af\u30e9\u30b9 */\nclass Node {\n  int val;\n  Node next;\n  Node(this.val, [this.next]);\n}\n\n/* \u95a2\u6570 */\nint function() {\n  // \u7279\u5b9a\u306e\u64cd\u4f5c\u3092\u5b9f\u884c...\n  return 0;\n}\n\nint algorithm(int n) {  // \u5165\u529b\u30c7\u30fc\u30bf\n  const int a = 0;      // \u4e00\u6642\u30c7\u30fc\u30bf\uff08\u5b9a\u6570\uff09\n  int b = 0;            // \u4e00\u6642\u30c7\u30fc\u30bf\uff08\u5909\u6570\uff09\n  Node node = Node(0);  // \u4e00\u6642\u30c7\u30fc\u30bf\uff08\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\uff09\n  int c = function();   // \u30b9\u30bf\u30c3\u30af\u30d5\u30ec\u30fc\u30e0\u7a7a\u9593\uff08\u95a2\u6570\u547c\u3073\u51fa\u3057\uff09\n  return a + b + c;     // \u51fa\u529b\u30c7\u30fc\u30bf\n}\n
use std::rc::Rc;\nuse std::cell::RefCell;\n\n/* \u69cb\u9020\u4f53 */\nstruct Node {\n    val: i32,\n    next: Option<Rc<RefCell<Node>>>,\n}\n\n/* \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf */\nimpl Node {\n    fn new(val: i32) -> Self {\n        Self { val: val, next: None }\n    }\n}\n\n/* \u95a2\u6570 */\nfn function() -> i32 {\n    // \u7279\u5b9a\u306e\u64cd\u4f5c\u3092\u5b9f\u884c...\n    return 0;\n}\n\nfn algorithm(n: i32) -> i32 {   // \u5165\u529b\u30c7\u30fc\u30bf\n    const a: i32 = 0;           // \u4e00\u6642\u30c7\u30fc\u30bf\uff08\u5b9a\u6570\uff09\n    let mut b = 0;              // \u4e00\u6642\u30c7\u30fc\u30bf\uff08\u5909\u6570\uff09\n    let node = Node::new(0);    // \u4e00\u6642\u30c7\u30fc\u30bf\uff08\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\uff09\n    let c = function();         // \u30b9\u30bf\u30c3\u30af\u30d5\u30ec\u30fc\u30e0\u7a7a\u9593\uff08\u95a2\u6570\u547c\u3073\u51fa\u3057\uff09\n    return a + b + c;           // \u51fa\u529b\u30c7\u30fc\u30bf\n}\n
/* \u95a2\u6570 */\nint func() {\n    // \u7279\u5b9a\u306e\u64cd\u4f5c\u3092\u5b9f\u884c...\n    return 0;\n}\n\nint algorithm(int n) {  // \u5165\u529b\u30c7\u30fc\u30bf\n    const int a = 0;    // \u4e00\u6642\u30c7\u30fc\u30bf\uff08\u5b9a\u6570\uff09\n    int b = 0;          // \u4e00\u6642\u30c7\u30fc\u30bf\uff08\u5909\u6570\uff09\n    int c = func();     // \u30b9\u30bf\u30c3\u30af\u30d5\u30ec\u30fc\u30e0\u7a7a\u9593\uff08\u95a2\u6570\u547c\u3073\u51fa\u3057\uff09\n    return a + b + c;   // \u51fa\u529b\u30c7\u30fc\u30bf\n}\n
\n
"},{"location":"chapter_computational_complexity/space_complexity/#242","title":"2.4.2 \u00a0 \u8a08\u7b97\u65b9\u6cd5","text":"

\u7a7a\u9593\u8a08\u7b97\u91cf\u3092\u8a08\u7b97\u3059\u308b\u65b9\u6cd5\u306f\u6642\u9593\u8a08\u7b97\u91cf\u3068\u307b\u307c\u540c\u69d8\u3067\u3001\u7d71\u8a08\u5bfe\u8c61\u3092\u300c\u64cd\u4f5c\u6570\u300d\u304b\u3089\u300c\u4f7f\u7528\u7a7a\u9593\u306e\u30b5\u30a4\u30ba\u300d\u306b\u5909\u66f4\u3059\u308b\u3060\u3051\u3067\u3059\u3002

\u3057\u304b\u3057\u3001\u6642\u9593\u8a08\u7b97\u91cf\u3068\u306f\u7570\u306a\u308a\u3001\u901a\u5e38\u306f\u6700\u60aa\u30b1\u30fc\u30b9\u7a7a\u9593\u8a08\u7b97\u91cf\u306e\u307f\u306b\u7126\u70b9\u3092\u5f53\u3066\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u30e1\u30e2\u30ea\u7a7a\u9593\u304c\u30cf\u30fc\u30c9\u8981\u4ef6\u3067\u3042\u308a\u3001\u3059\u3079\u3066\u306e\u5165\u529b\u30c7\u30fc\u30bf\u306e\u4e0b\u3067\u5341\u5206\u306a\u30e1\u30e2\u30ea\u7a7a\u9593\u304c\u78ba\u4fdd\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u4fdd\u8a3c\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u305f\u3081\u3067\u3059\u3002

\u4ee5\u4e0b\u306e\u30b3\u30fc\u30c9\u3092\u8003\u3048\u3066\u307f\u307e\u3057\u3087\u3046\u3002\u6700\u60aa\u30b1\u30fc\u30b9\u7a7a\u9593\u8a08\u7b97\u91cf\u306e\u300c\u6700\u60aa\u30b1\u30fc\u30b9\u300d\u3068\u3044\u3046\u7528\u8a9e\u306b\u306f2\u3064\u306e\u610f\u5473\u304c\u3042\u308a\u307e\u3059\u3002

  1. \u6700\u60aa\u306e\u5165\u529b\u30c7\u30fc\u30bf\u306b\u57fa\u3065\u304f: \\(n < 10\\)\u306e\u5834\u5408\u3001\u7a7a\u9593\u8a08\u7b97\u91cf\u306f\\(O(1)\\)\u3067\u3059\u304c\u3001\\(n > 10\\)\u306e\u5834\u5408\u3001\u521d\u671f\u5316\u3055\u308c\u305f\u914d\u5217nums\u304c\\(O(n)\\)\u306e\u7a7a\u9593\u3092\u5360\u6709\u3059\u308b\u305f\u3081\u3001\u6700\u60aa\u30b1\u30fc\u30b9\u7a7a\u9593\u8a08\u7b97\u91cf\u306f\\(O(n)\\)\u3067\u3059\u3002
  2. \u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u5b9f\u884c\u4e2d\u306b\u4f7f\u7528\u3055\u308c\u308b\u30d4\u30fc\u30af\u30e1\u30e2\u30ea\u306b\u57fa\u3065\u304f: \u4f8b\u3048\u3070\u3001\u6700\u5f8c\u306e\u884c\u3092\u5b9f\u884c\u3059\u308b\u524d\u3001\u30d7\u30ed\u30b0\u30e9\u30e0\u306f\\(O(1)\\)\u306e\u7a7a\u9593\u3092\u5360\u6709\u3057\u307e\u3059\u3002\u914d\u5217nums\u3092\u521d\u671f\u5316\u3059\u308b\u969b\u3001\u30d7\u30ed\u30b0\u30e9\u30e0\u306f\\(O(n)\\)\u306e\u7a7a\u9593\u3092\u5360\u6709\u3059\u308b\u305f\u3081\u3001\u6700\u60aa\u30b1\u30fc\u30b9\u7a7a\u9593\u8a08\u7b97\u91cf\u306f\\(O(n)\\)\u3067\u3059\u3002
PythonC++JavaC#GoSwiftJSTSDartRustCKotlin
def algorithm(n: int):\n    a = 0               # O(1)\n    b = [0] * 10000     # O(1)\n    if n > 10:\n        nums = [0] * n  # O(n)\n
void algorithm(int n) {\n    int a = 0;               // O(1)\n    vector<int> b(10000);    // O(1)\n    if (n > 10)\n        vector<int> nums(n); // O(n)\n}\n
void algorithm(int n) {\n    int a = 0;                   // O(1)\n    int[] b = new int[10000];    // O(1)\n    if (n > 10)\n        int[] nums = new int[n]; // O(n)\n}\n
void Algorithm(int n) {\n    int a = 0;                   // O(1)\n    int[] b = new int[10000];    // O(1)\n    if (n > 10) {\n        int[] nums = new int[n]; // O(n)\n    }\n}\n
func algorithm(n int) {\n    a := 0                      // O(1)\n    b := make([]int, 10000)     // O(1)\n    var nums []int\n    if n > 10 {\n        nums := make([]int, n)  // O(n)\n    }\n    fmt.Println(a, b, nums)\n}\n
func algorithm(n: Int) {\n    let a = 0 // O(1)\n    let b = Array(repeating: 0, count: 10000) // O(1)\n    if n > 10 {\n        let nums = Array(repeating: 0, count: n) // O(n)\n    }\n}\n
function algorithm(n) {\n    const a = 0;                   // O(1)\n    const b = new Array(10000);    // O(1)\n    if (n > 10) {\n        const nums = new Array(n); // O(n)\n    }\n}\n
function algorithm(n: number): void {\n    const a = 0;                   // O(1)\n    const b = new Array(10000);    // O(1)\n    if (n > 10) {\n        const nums = new Array(n); // O(n)\n    }\n}\n
void algorithm(int n) {\n  int a = 0;                            // O(1)\n  List<int> b = List.filled(10000, 0);  // O(1)\n  if (n > 10) {\n    List<int> nums = List.filled(n, 0); // O(n)\n  }\n}\n
fn algorithm(n: i32) {\n    let a = 0;                           // O(1)\n    let b = [0; 10000];                  // O(1)\n    if n > 10 {\n        let nums = vec![0; n as usize];  // O(n)\n    }\n}\n
void algorithm(int n) {\n    int a = 0;               // O(1)\n    int b[10000];            // O(1)\n    if (n > 10)\n        int nums[n] = {0};   // O(n)\n}\n
\n

\u518d\u5e30\u95a2\u6570\u3067\u306f\u3001\u30b9\u30bf\u30c3\u30af\u30d5\u30ec\u30fc\u30e0\u7a7a\u9593\u3092\u8003\u616e\u306b\u5165\u308c\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u4ee5\u4e0b\u306e\u30b3\u30fc\u30c9\u3092\u8003\u3048\u3066\u307f\u307e\u3057\u3087\u3046\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlin
def function() -> int:\n    # \u7279\u5b9a\u306e\u64cd\u4f5c\u3092\u5b9f\u884c\n    return 0\n\ndef loop(n: int):\n    \"\"\"\u30eb\u30fc\u30d7 O(1)\"\"\"\n    for _ in range(n):\n        function()\n\ndef recur(n: int):\n    \"\"\"\u518d\u5e30 O(n)\"\"\"\n    if n == 1:\n        return\n    return recur(n - 1)\n
int func() {\n    // \u7279\u5b9a\u306e\u64cd\u4f5c\u3092\u5b9f\u884c\n    return 0;\n}\n/* \u30b5\u30a4\u30af\u30eb O(1) */\nvoid loop(int n) {\n    for (int i = 0; i < n; i++) {\n        func();\n    }\n}\n/* \u518d\u5e30 O(n) */\nvoid recur(int n) {\n    if (n == 1) return;\n    recur(n - 1);\n}\n
int function() {\n    // \u7279\u5b9a\u306e\u64cd\u4f5c\u3092\u5b9f\u884c\n    return 0;\n}\n/* \u30b5\u30a4\u30af\u30eb O(1) */\nvoid loop(int n) {\n    for (int i = 0; i < n; i++) {\n        function();\n    }\n}\n/* \u518d\u5e30 O(n) */\nvoid recur(int n) {\n    if (n == 1) return;\n    recur(n - 1);\n}\n
int Function() {\n    // \u7279\u5b9a\u306e\u64cd\u4f5c\u3092\u5b9f\u884c\n    return 0;\n}\n/* \u30b5\u30a4\u30af\u30eb O(1) */\nvoid Loop(int n) {\n    for (int i = 0; i < n; i++) {\n        Function();\n    }\n}\n/* \u518d\u5e30 O(n) */\nint Recur(int n) {\n    if (n == 1) return 1;\n    return Recur(n - 1);\n}\n
func function() int {\n    // \u7279\u5b9a\u306e\u64cd\u4f5c\u3092\u5b9f\u884c\n    return 0\n}\n\n/* \u30b5\u30a4\u30af\u30eb O(1) */\nfunc loop(n int) {\n    for i := 0; i < n; i++ {\n        function()\n    }\n}\n\n/* \u518d\u5e30 O(n) */\nfunc recur(n int) {\n    if n == 1 {\n        return\n    }\n    recur(n - 1)\n}\n
@discardableResult\nfunc function() -> Int {\n    // \u7279\u5b9a\u306e\u64cd\u4f5c\u3092\u5b9f\u884c\n    return 0\n}\n\n/* \u30b5\u30a4\u30af\u30eb O(1) */\nfunc loop(n: Int) {\n    for _ in 0 ..< n {\n        function()\n    }\n}\n\n/* \u518d\u5e30 O(n) */\nfunc recur(n: Int) {\n    if n == 1 {\n        return\n    }\n    recur(n: n - 1)\n}\n
function constFunc() {\n    // \u7279\u5b9a\u306e\u64cd\u4f5c\u3092\u5b9f\u884c\n    return 0;\n}\n/* \u30b5\u30a4\u30af\u30eb O(1) */\nfunction loop(n) {\n    for (let i = 0; i < n; i++) {\n        constFunc();\n    }\n}\n/* \u518d\u5e30 O(n) */\nfunction recur(n) {\n    if (n === 1) return;\n    return recur(n - 1);\n}\n
function constFunc(): number {\n    // \u7279\u5b9a\u306e\u64cd\u4f5c\u3092\u5b9f\u884c\n    return 0;\n}\n/* \u30b5\u30a4\u30af\u30eb O(1) */\nfunction loop(n: number): void {\n    for (let i = 0; i < n; i++) {\n        constFunc();\n    }\n}\n/* \u518d\u5e30 O(n) */\nfunction recur(n: number): void {\n    if (n === 1) return;\n    return recur(n - 1);\n}\n
int function() {\n  // \u7279\u5b9a\u306e\u64cd\u4f5c\u3092\u5b9f\u884c\n  return 0;\n}\n/* \u30b5\u30a4\u30af\u30eb O(1) */\nvoid loop(int n) {\n  for (int i = 0; i < n; i++) {\n    function();\n  }\n}\n/* \u518d\u5e30 O(n) */\nvoid recur(int n) {\n  if (n == 1) return;\n  recur(n - 1);\n}\n
fn function() -> i32 {\n    // \u7279\u5b9a\u306e\u64cd\u4f5c\u3092\u5b9f\u884c\n    return 0;\n}\n/* \u30b5\u30a4\u30af\u30eb O(1) */\nfn loop(n: i32) {\n    for i in 0..n {\n        function();\n    }\n}\n/* \u518d\u5e30 O(n) */\nvoid recur(n: i32) {\n    if n == 1 {\n        return;\n    }\n    recur(n - 1);\n}\n
int func() {\n    // \u7279\u5b9a\u306e\u64cd\u4f5c\u3092\u5b9f\u884c\n    return 0;\n}\n/* \u30b5\u30a4\u30af\u30eb O(1) */\nvoid loop(int n) {\n    for (int i = 0; i < n; i++) {\n        func();\n    }\n}\n/* \u518d\u5e30 O(n) */\nvoid recur(int n) {\n    if (n == 1) return;\n    recur(n - 1);\n}\n
\n

loop()\u95a2\u6570\u3068recur()\u95a2\u6570\u306e\u6642\u9593\u8a08\u7b97\u91cf\u306f\u4e21\u65b9\u3068\u3082\\(O(n)\\)\u3067\u3059\u304c\u3001\u305d\u308c\u3089\u306e\u7a7a\u9593\u8a08\u7b97\u91cf\u306f\u7570\u306a\u308a\u307e\u3059\u3002

"},{"location":"chapter_computational_complexity/space_complexity/#243","title":"2.4.3 \u00a0 \u4e00\u822c\u7684\u306a\u7a2e\u985e","text":"

\u5165\u529b\u30c7\u30fc\u30bf\u306e\u30b5\u30a4\u30ba\u3092\\(n\\)\u3068\u3059\u308b\u3068\u3001\u4e0b\u56f3\u306f\u4e00\u822c\u7684\u306a\u7a7a\u9593\u8a08\u7b97\u91cf\u306e\u7a2e\u985e\u3092\u793a\u3057\u3066\u3044\u307e\u3059\uff08\u4f4e\u3044\u3082\u306e\u304b\u3089\u9ad8\u3044\u3082\u306e\u3078\u3068\u4e26\u3079\u3089\u308c\u3066\u3044\u307e\u3059\uff09\u3002

\\[ \\begin{aligned} & O(1) < O(\\log n) < O(n) < O(n^2) < O(2^n) \\newline & \\text{\u5b9a\u6570} < \\text{\u5bfe\u6570} < \\text{\u7dda\u5f62} < \\text{\u4e8c\u6b21} < \\text{\u6307\u6570} \\end{aligned} \\]

\u56f3 2-16 \u00a0 Common types of space complexity

"},{"location":"chapter_computational_complexity/space_complexity/#1-o1","title":"1. \u00a0 \u5b9a\u6570\u30aa\u30fc\u30c0\u30fc \\(O(1)\\)","text":"

\u5b9a\u6570\u30aa\u30fc\u30c0\u30fc\u306f\u3001\u5165\u529b\u30c7\u30fc\u30bf\u30b5\u30a4\u30ba\\(n\\)\u3068\u306f\u7121\u95a2\u4fc2\u306a\u5b9a\u6570\u3001\u5909\u6570\u3001\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3067\u4e00\u822c\u7684\u3067\u3059\u3002

\u30eb\u30fc\u30d7\u3067\u5909\u6570\u3092\u521d\u671f\u5316\u3057\u305f\u308a\u95a2\u6570\u3092\u547c\u3073\u51fa\u3057\u305f\u308a\u3059\u308b\u305f\u3081\u306b\u5360\u6709\u3055\u308c\u308b\u30e1\u30e2\u30ea\u306f\u3001\u6b21\u306e\u30b5\u30a4\u30af\u30eb\u306b\u5165\u308b\u969b\u306b\u89e3\u653e\u3055\u308c\u3001\u7a7a\u9593\u4e0a\u3067\u7d2f\u7a4d\u3055\u308c\u306a\u3044\u305f\u3081\u3001\u7a7a\u9593\u8a08\u7b97\u91cf\u306f\\(O(1)\\)\u306e\u307e\u307e\u3067\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby space_complexity.py
def function() -> int:\n    \"\"\"\u95a2\u6570\"\"\"\n    # \u4f55\u3089\u304b\u306e\u64cd\u4f5c\u3092\u5b9f\u884c\n    return 0\n\ndef constant(n: int):\n    \"\"\"\u5b9a\u6570\u8907\u96d1\u5ea6\"\"\"\n    # \u5b9a\u6570\u3001\u5909\u6570\u3001\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306f O(1) \u306e\u30b9\u30da\u30fc\u30b9\u3092\u5360\u6709\n    a = 0\n    nums = [0] * 10000\n    node = ListNode(0)\n    # \u30eb\u30fc\u30d7\u5185\u306e\u5909\u6570\u306f O(1) \u306e\u30b9\u30da\u30fc\u30b9\u3092\u5360\u6709\n    for _ in range(n):\n        c = 0\n    # \u30eb\u30fc\u30d7\u5185\u306e\u95a2\u6570\u306f O(1) \u306e\u30b9\u30da\u30fc\u30b9\u3092\u5360\u6709\n    for _ in range(n):\n        function()\n
space_complexity.cpp
/* \u95a2\u6570 */\nint func() {\n    // \u4f55\u3089\u304b\u306e\u64cd\u4f5c\u3092\u5b9f\u884c\n    return 0;\n}\n\n/* \u5b9a\u6570\u8a08\u7b97\u91cf */\nvoid constant(int n) {\n    // \u5b9a\u6570\u3001\u5909\u6570\u3001\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306f O(1) \u7a7a\u9593\u3092\u5360\u3081\u308b\n    const int a = 0;\n    int b = 0;\n    vector<int> nums(10000);\n    ListNode node(0);\n    // \u30eb\u30fc\u30d7\u5185\u306e\u5909\u6570\u306f O(1) \u7a7a\u9593\u3092\u5360\u3081\u308b\n    for (int i = 0; i < n; i++) {\n        int c = 0;\n    }\n    // \u30eb\u30fc\u30d7\u5185\u306e\u95a2\u6570\u306f O(1) \u7a7a\u9593\u3092\u5360\u3081\u308b\n    for (int i = 0; i < n; i++) {\n        func();\n    }\n}\n
space_complexity.java
/* \u95a2\u6570 */\nint function() {\n    // \u4f55\u3089\u304b\u306e\u64cd\u4f5c\u3092\u5b9f\u884c\n    return 0;\n}\n\n/* \u5b9a\u6570\u8a08\u7b97\u91cf */\nvoid constant(int n) {\n    // \u5b9a\u6570\u3001\u5909\u6570\u3001\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306f O(1) \u7a7a\u9593\u3092\u5360\u3081\u308b\n    final int a = 0;\n    int b = 0;\n    int[] nums = new int[10000];\n    ListNode node = new ListNode(0);\n    // \u30eb\u30fc\u30d7\u5185\u306e\u5909\u6570\u306f O(1) \u7a7a\u9593\u3092\u5360\u3081\u308b\n    for (int i = 0; i < n; i++) {\n        int c = 0;\n    }\n    // \u30eb\u30fc\u30d7\u5185\u306e\u95a2\u6570\u306f O(1) \u7a7a\u9593\u3092\u5360\u3081\u308b\n    for (int i = 0; i < n; i++) {\n        function();\n    }\n}\n
space_complexity.cs
[class]{space_complexity}-[func]{Function}\n\n[class]{space_complexity}-[func]{Constant}\n
space_complexity.go
[class]{}-[func]{function}\n\n[class]{}-[func]{spaceConstant}\n
space_complexity.swift
[class]{}-[func]{function}\n\n[class]{}-[func]{constant}\n
space_complexity.js
[class]{}-[func]{constFunc}\n\n[class]{}-[func]{constant}\n
space_complexity.ts
[class]{}-[func]{constFunc}\n\n[class]{}-[func]{constant}\n
space_complexity.dart
[class]{}-[func]{function}\n\n[class]{}-[func]{constant}\n
space_complexity.rs
[class]{}-[func]{function}\n\n[class]{}-[func]{constant}\n
space_complexity.c
[class]{}-[func]{func}\n\n[class]{}-[func]{constant}\n
space_complexity.kt
[class]{}-[func]{function}\n\n[class]{}-[func]{constant}\n
space_complexity.rb
[class]{}-[func]{function}\n\n[class]{}-[func]{constant}\n
"},{"location":"chapter_computational_complexity/space_complexity/#2-on","title":"2. \u00a0 \u7dda\u5f62\u30aa\u30fc\u30c0\u30fc \\(O(n)\\)","text":"

\u7dda\u5f62\u30aa\u30fc\u30c0\u30fc\u306f\u914d\u5217\u3001\u9023\u7d50\u30ea\u30b9\u30c8\u3001\u30b9\u30bf\u30c3\u30af\u3001\u30ad\u30e5\u30fc\u306a\u3069\u3067\u4e00\u822c\u7684\u3067\u3001\u8981\u7d20\u6570\u306f\\(n\\)\u306b\u6bd4\u4f8b\u3057\u307e\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby space_complexity.py
def linear(n: int):\n    \"\"\"\u7dda\u5f62\u8907\u96d1\u5ea6\"\"\"\n    # \u9577\u3055 n \u306e\u30ea\u30b9\u30c8\u306f O(n) \u306e\u30b9\u30da\u30fc\u30b9\u3092\u5360\u6709\n    nums = [0] * n\n    # \u9577\u3055 n \u306e\u30cf\u30c3\u30b7\u30e5\u30de\u30c3\u30d7\u306f O(n) \u306e\u30b9\u30da\u30fc\u30b9\u3092\u5360\u6709\n    hmap = dict[int, str]()\n    for i in range(n):\n        hmap[i] = str(i)\n
space_complexity.cpp
/* \u7dda\u5f62\u8a08\u7b97\u91cf */\nvoid linear(int n) {\n    // \u9577\u3055 n \u306e\u914d\u5217\u306f O(n) \u7a7a\u9593\u3092\u5360\u3081\u308b\n    vector<int> nums(n);\n    // \u9577\u3055 n \u306e\u30ea\u30b9\u30c8\u306f O(n) \u7a7a\u9593\u3092\u5360\u3081\u308b\n    vector<ListNode> nodes;\n    for (int i = 0; i < n; i++) {\n        nodes.push_back(ListNode(i));\n    }\n    // \u9577\u3055 n \u306e\u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb\u306f O(n) \u7a7a\u9593\u3092\u5360\u3081\u308b\n    unordered_map<int, string> map;\n    for (int i = 0; i < n; i++) {\n        map[i] = to_string(i);\n    }\n}\n
space_complexity.java
/* \u7dda\u5f62\u8a08\u7b97\u91cf */\nvoid linear(int n) {\n    // \u9577\u3055 n \u306e\u914d\u5217\u306f O(n) \u7a7a\u9593\u3092\u5360\u3081\u308b\n    int[] nums = new int[n];\n    // \u9577\u3055 n \u306e\u30ea\u30b9\u30c8\u306f O(n) \u7a7a\u9593\u3092\u5360\u3081\u308b\n    List<ListNode> nodes = new ArrayList<>();\n    for (int i = 0; i < n; i++) {\n        nodes.add(new ListNode(i));\n    }\n    // \u9577\u3055 n \u306e\u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb\u306f O(n) \u7a7a\u9593\u3092\u5360\u3081\u308b\n    Map<Integer, String> map = new HashMap<>();\n    for (int i = 0; i < n; i++) {\n        map.put(i, String.valueOf(i));\n    }\n}\n
space_complexity.cs
[class]{space_complexity}-[func]{Linear}\n
space_complexity.go
[class]{}-[func]{spaceLinear}\n
space_complexity.swift
[class]{}-[func]{linear}\n
space_complexity.js
[class]{}-[func]{linear}\n
space_complexity.ts
[class]{}-[func]{linear}\n
space_complexity.dart
[class]{}-[func]{linear}\n
space_complexity.rs
[class]{}-[func]{linear}\n
space_complexity.c
[class]{HashTable}-[func]{}\n\n[class]{}-[func]{linear}\n
space_complexity.kt
[class]{}-[func]{linear}\n
space_complexity.rb
[class]{}-[func]{linear}\n

\u4e0b\u56f3\u306b\u793a\u3055\u308c\u3066\u3044\u308b\u3088\u3046\u306b\u3001\u3053\u306e\u95a2\u6570\u306e\u518d\u5e30\u6df1\u5ea6\u306f\\(n\\)\u3067\u3001\\(n\\)\u500b\u306e\u672a\u8fd4\u5374\u306elinear_recur()\u95a2\u6570\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u304c\u3042\u308a\u3001\\(O(n)\\)\u30b5\u30a4\u30ba\u306e\u30b9\u30bf\u30c3\u30af\u30d5\u30ec\u30fc\u30e0\u7a7a\u9593\u3092\u4f7f\u7528\u3057\u307e\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby space_complexity.py
def linear_recur(n: int):\n    \"\"\"\u7dda\u5f62\u8907\u96d1\u5ea6\uff08\u518d\u5e30\u5b9f\u88c5\uff09\"\"\"\n    print(\"\u518d\u5e30 n =\", n)\n    if n == 1:\n        return\n    linear_recur(n - 1)\n
space_complexity.cpp
/* \u7dda\u5f62\u8a08\u7b97\u91cf\uff08\u518d\u5e30\u5b9f\u88c5\uff09 */\nvoid linearRecur(int n) {\n    cout << \"\u518d\u5e30 n = \" << n << endl;\n    if (n == 1)\n        return;\n    linearRecur(n - 1);\n}\n
space_complexity.java
/* \u7dda\u5f62\u8a08\u7b97\u91cf\uff08\u518d\u5e30\u5b9f\u88c5\uff09 */\nvoid linearRecur(int n) {\n    System.out.println(\"\u518d\u5e30 n = \" + n);\n    if (n == 1)\n        return;\n    linearRecur(n - 1);\n}\n
space_complexity.cs
[class]{space_complexity}-[func]{LinearRecur}\n
space_complexity.go
[class]{}-[func]{spaceLinearRecur}\n
space_complexity.swift
[class]{}-[func]{linearRecur}\n
space_complexity.js
[class]{}-[func]{linearRecur}\n
space_complexity.ts
[class]{}-[func]{linearRecur}\n
space_complexity.dart
[class]{}-[func]{linearRecur}\n
space_complexity.rs
[class]{}-[func]{linear_recur}\n
space_complexity.c
[class]{}-[func]{linearRecur}\n
space_complexity.kt
[class]{}-[func]{linearRecur}\n
space_complexity.rb
[class]{}-[func]{linear_recur}\n

\u56f3 2-17 \u00a0 Recursive function generating linear order space complexity

"},{"location":"chapter_computational_complexity/space_complexity/#3-on2","title":"3. \u00a0 \u4e8c\u6b21\u30aa\u30fc\u30c0\u30fc \\(O(n^2)\\)","text":"

\u4e8c\u6b21\u30aa\u30fc\u30c0\u30fc\u306f\u884c\u5217\u3084\u30b0\u30e9\u30d5\u3067\u4e00\u822c\u7684\u3067\u3001\u8981\u7d20\u6570\u306f\\(n\\)\u306e\u4e8c\u4e57\u306b\u6bd4\u4f8b\u3057\u307e\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby space_complexity.py
def quadratic(n: int):\n    \"\"\"\u5e73\u65b9\u8907\u96d1\u5ea6\"\"\"\n    # \u4e8c\u6b21\u5143\u30ea\u30b9\u30c8\u306f O(n^2) \u306e\u30b9\u30da\u30fc\u30b9\u3092\u5360\u6709\n    num_matrix = [[0] * n for _ in range(n)]\n
space_complexity.cpp
/* \u4e8c\u6b21\u8a08\u7b97\u91cf */\nvoid quadratic(int n) {\n    // \u4e8c\u6b21\u5143\u30ea\u30b9\u30c8\u306f O(n^2) \u7a7a\u9593\u3092\u5360\u3081\u308b\n    vector<vector<int>> numMatrix;\n    for (int i = 0; i < n; i++) {\n        vector<int> tmp;\n        for (int j = 0; j < n; j++) {\n            tmp.push_back(0);\n        }\n        numMatrix.push_back(tmp);\n    }\n}\n
space_complexity.java
/* \u4e8c\u6b21\u8a08\u7b97\u91cf */\nvoid quadratic(int n) {\n    // \u884c\u5217\u306f O(n^2) \u7a7a\u9593\u3092\u5360\u3081\u308b\n    int[][] numMatrix = new int[n][n];\n    // \u4e8c\u6b21\u5143\u30ea\u30b9\u30c8\u306f O(n^2) \u7a7a\u9593\u3092\u5360\u3081\u308b\n    List<List<Integer>> numList = new ArrayList<>();\n    for (int i = 0; i < n; i++) {\n        List<Integer> tmp = new ArrayList<>();\n        for (int j = 0; j < n; j++) {\n            tmp.add(0);\n        }\n        numList.add(tmp);\n    }\n}\n
space_complexity.cs
[class]{space_complexity}-[func]{Quadratic}\n
space_complexity.go
[class]{}-[func]{spaceQuadratic}\n
space_complexity.swift
[class]{}-[func]{quadratic}\n
space_complexity.js
[class]{}-[func]{quadratic}\n
space_complexity.ts
[class]{}-[func]{quadratic}\n
space_complexity.dart
[class]{}-[func]{quadratic}\n
space_complexity.rs
[class]{}-[func]{quadratic}\n
space_complexity.c
[class]{}-[func]{quadratic}\n
space_complexity.kt
[class]{}-[func]{quadratic}\n
space_complexity.rb
[class]{}-[func]{quadratic}\n

\u4e0b\u56f3\u306b\u793a\u3055\u308c\u3066\u3044\u308b\u3088\u3046\u306b\u3001\u3053\u306e\u95a2\u6570\u306e\u518d\u5e30\u6df1\u5ea6\u306f\\(n\\)\u3067\u3001\u5404\u518d\u5e30\u547c\u3073\u51fa\u3057\u3067\u9577\u3055\\(n\\)\u3001\\(n-1\\)\u3001\\(\\dots\\)\u3001\\(2\\)\u3001\\(1\\)\u306e\u914d\u5217\u304c\u521d\u671f\u5316\u3055\u308c\u3001\u5e73\u5747\\(n/2\\)\u3068\u306a\u308a\u3001\u5168\u4f53\u3068\u3057\u3066\\(O(n^2)\\)\u306e\u7a7a\u9593\u3092\u5360\u6709\u3057\u307e\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby space_complexity.py
def quadratic_recur(n: int) -> int:\n    \"\"\"\u5e73\u65b9\u8907\u96d1\u5ea6\uff08\u518d\u5e30\u5b9f\u88c5\uff09\"\"\"\n    if n <= 0:\n        return 0\n    nums = [0] * n\n    print(f\"\u518d\u5e30 n = {n} \u306e\u4e2d\u3067\u914d\u5217\u306e\u9577\u3055 = {len(nums)}\")\n    return quadratic_recur(n - 1)\n
space_complexity.cpp
/* \u4e8c\u6b21\u8a08\u7b97\u91cf\uff08\u518d\u5e30\u5b9f\u88c5\uff09 */\nint quadraticRecur(int n) {\n    if (n <= 0)\n        return 0;\n    vector<int> nums(n);\n    cout << \"\u518d\u5e30 n = \" << n << \", nums \u306e\u9577\u3055 = \" << nums.size() << endl;\n    return quadraticRecur(n - 1);\n}\n
space_complexity.java
/* \u4e8c\u6b21\u8a08\u7b97\u91cf\uff08\u518d\u5e30\u5b9f\u88c5\uff09 */\nint quadraticRecur(int n) {\n    if (n <= 0)\n        return 0;\n    // \u914d\u5217 nums \u306e\u9577\u3055 = n, n-1, ..., 2, 1\n    int[] nums = new int[n];\n    System.out.println(\"\u518d\u5e30 n = \" + n + \" \u306e nums \u306e\u9577\u3055 = \" + nums.length);\n    return quadraticRecur(n - 1);\n}\n
space_complexity.cs
[class]{space_complexity}-[func]{QuadraticRecur}\n
space_complexity.go
[class]{}-[func]{spaceQuadraticRecur}\n
space_complexity.swift
[class]{}-[func]{quadraticRecur}\n
space_complexity.js
[class]{}-[func]{quadraticRecur}\n
space_complexity.ts
[class]{}-[func]{quadraticRecur}\n
space_complexity.dart
[class]{}-[func]{quadraticRecur}\n
space_complexity.rs
[class]{}-[func]{quadratic_recur}\n
space_complexity.c
[class]{}-[func]{quadraticRecur}\n
space_complexity.kt
[class]{}-[func]{quadraticRecur}\n
space_complexity.rb
[class]{}-[func]{quadratic_recur}\n

\u56f3 2-18 \u00a0 Recursive function generating quadratic order space complexity

"},{"location":"chapter_computational_complexity/space_complexity/#4-o2n","title":"4. \u00a0 \u6307\u6570\u30aa\u30fc\u30c0\u30fc \\(O(2^n)\\)","text":"

\u6307\u6570\u30aa\u30fc\u30c0\u30fc\u306f\u4e8c\u5206\u6728\u3067\u4e00\u822c\u7684\u3067\u3059\u3002\u4e0b\u56f3\u3092\u89b3\u5bdf\u3059\u308b\u3068\u3001\\(n\\)\u30ec\u30d9\u30eb\u306e\u300c\u5b8c\u5168\u4e8c\u5206\u6728\u300d\u306f\\(2^n - 1\\)\u500b\u306e\u30ce\u30fc\u30c9\u3092\u6301\u3061\u3001\\(O(2^n)\\)\u306e\u7a7a\u9593\u3092\u5360\u6709\u3057\u307e\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby space_complexity.py
def build_tree(n: int) -> TreeNode | None:\n    \"\"\"\u6307\u6570\u8907\u96d1\u5ea6\uff08\u5b8c\u5168\u4e8c\u5206\u6728\u306e\u69cb\u7bc9\uff09\"\"\"\n    if n == 0:\n        return None\n    root = TreeNode(0)\n    root.left = build_tree(n - 1)\n    root.right = build_tree(n - 1)\n    return root\n
space_complexity.cpp
/* \u6307\u6570\u8a08\u7b97\u91cf\uff08\u5b8c\u5168\u4e8c\u5206\u6728\u306e\u69cb\u7bc9\uff09 */\nTreeNode *buildTree(int n) {\n    if (n == 0)\n        return nullptr;\n    TreeNode *root = new TreeNode(0);\n    root->left = buildTree(n - 1);\n    root->right = buildTree(n - 1);\n    return root;\n}\n
space_complexity.java
/* \u6307\u6570\u8a08\u7b97\u91cf\uff08\u5b8c\u5168\u4e8c\u5206\u6728\u306e\u69cb\u7bc9\uff09 */\nTreeNode buildTree(int n) {\n    if (n == 0)\n        return null;\n    TreeNode root = new TreeNode(0);\n    root.left = buildTree(n - 1);\n    root.right = buildTree(n - 1);\n    return root;\n}\n
space_complexity.cs
[class]{space_complexity}-[func]{BuildTree}\n
space_complexity.go
[class]{}-[func]{buildTree}\n
space_complexity.swift
[class]{}-[func]{buildTree}\n
space_complexity.js
[class]{}-[func]{buildTree}\n
space_complexity.ts
[class]{}-[func]{buildTree}\n
space_complexity.dart
[class]{}-[func]{buildTree}\n
space_complexity.rs
[class]{}-[func]{build_tree}\n
space_complexity.c
[class]{}-[func]{buildTree}\n
space_complexity.kt
[class]{}-[func]{buildTree}\n
space_complexity.rb
[class]{}-[func]{build_tree}\n

\u56f3 2-19 \u00a0 Full binary tree generating exponential order space complexity

"},{"location":"chapter_computational_complexity/space_complexity/#5-olog-n","title":"5. \u00a0 \u5bfe\u6570\u30aa\u30fc\u30c0\u30fc \\(O(\\log n)\\)","text":"

\u5bfe\u6570\u30aa\u30fc\u30c0\u30fc\u306f\u5206\u5272\u7d71\u6cbb\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3067\u4e00\u822c\u7684\u3067\u3059\u3002\u4f8b\u3048\u3070\u3001\u30de\u30fc\u30b8\u30bd\u30fc\u30c8\u3067\u306f\u3001\u9577\u3055\\(n\\)\u306e\u914d\u5217\u304c\u5404\u30e9\u30a6\u30f3\u30c9\u3067\u518d\u5e30\u7684\u306b\u534a\u5206\u306b\u5206\u5272\u3055\u308c\u3001\u9ad8\u3055\\(\\log n\\)\u306e\u518d\u5e30\u6728\u3092\u5f62\u6210\u3057\u3001\\(O(\\log n)\\)\u306e\u30b9\u30bf\u30c3\u30af\u30d5\u30ec\u30fc\u30e0\u7a7a\u9593\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002

\u5225\u306e\u4f8b\u306f\u3001\u6570\u5024\u3092\u6587\u5b57\u5217\u306b\u5909\u63db\u3059\u308b\u3053\u3068\u3067\u3059\u3002\u6b63\u306e\u6574\u6570\\(n\\)\u304c\u4e0e\u3048\u3089\u308c\u305f\u5834\u5408\u3001\u305d\u306e\u6841\u6570\u306f\\(\\log_{10} n + 1\\)\u3067\u3001\u6587\u5b57\u5217\u306e\u9577\u3055\u306b\u5bfe\u5fdc\u3059\u308b\u305f\u3081\u3001\u7a7a\u9593\u8a08\u7b97\u91cf\u306f\\(O(\\log_{10} n + 1) = O(\\log n)\\)\u3067\u3059\u3002

"},{"location":"chapter_computational_complexity/space_complexity/#244","title":"2.4.4 \u00a0 \u6642\u9593\u3068\u7a7a\u9593\u306e\u30d0\u30e9\u30f3\u30b9","text":"

\u7406\u60f3\u7684\u306b\u306f\u3001\u6642\u9593\u8a08\u7b97\u91cf\u3068\u7a7a\u9593\u8a08\u7b97\u91cf\u306e\u4e21\u65b9\u304c\u6700\u9069\u3067\u3042\u308b\u3053\u3068\u3092\u76ee\u6307\u3057\u307e\u3059\u3002\u3057\u304b\u3057\u3001\u5b9f\u969b\u306b\u306f\u4e21\u65b9\u3092\u540c\u6642\u306b\u6700\u9069\u5316\u3059\u308b\u3053\u3068\u306f\u3057\u3070\u3057\u3070\u56f0\u96e3\u3067\u3059\u3002

\u6642\u9593\u8a08\u7b97\u91cf\u3092\u4e0b\u3052\u308b\u3053\u3068\u306f\u901a\u5e38\u3001\u7a7a\u9593\u8a08\u7b97\u91cf\u306e\u5897\u52a0\u3092\u4ee3\u511f\u3068\u3057\u3001\u305d\u306e\u9006\u3082\u540c\u69d8\u3067\u3059\u3002\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u901f\u5ea6\u3092\u5411\u4e0a\u3055\u305b\u308b\u305f\u3081\u306b\u30e1\u30e2\u30ea\u7a7a\u9593\u3092\u72a0\u7272\u306b\u3059\u308b\u30a2\u30d7\u30ed\u30fc\u30c1\u306f\u300c\u6642\u7a7a\u30c8\u30ec\u30fc\u30c9\u30aa\u30d5\u300d\u3068\u3057\u3066\u77e5\u3089\u308c\u3001\u305d\u306e\u9006\u306f\u300c\u7a7a\u6642\u30c8\u30ec\u30fc\u30c9\u30aa\u30d5\u300d\u3068\u3057\u3066\u77e5\u3089\u308c\u3066\u3044\u307e\u3059\u3002

\u9078\u629e\u306f\u3001\u3069\u3061\u3089\u306e\u5074\u9762\u3092\u3088\u308a\u91cd\u8996\u3059\u308b\u304b\u306b\u4f9d\u5b58\u3057\u307e\u3059\u3002\u307b\u3068\u3093\u3069\u306e\u5834\u5408\u3001\u6642\u9593\u306f\u7a7a\u9593\u3088\u308a\u3082\u8cb4\u91cd\u3067\u3042\u308b\u305f\u3081\u3001\u300c\u6642\u7a7a\u30c8\u30ec\u30fc\u30c9\u30aa\u30d5\u300d\u304c\u3088\u308a\u4e00\u822c\u7684\u306a\u6226\u7565\u3067\u3059\u3002\u3082\u3061\u308d\u3093\u3001\u5927\u91cf\u306e\u30c7\u30fc\u30bf\u3092\u6271\u3046\u969b\u306f\u7a7a\u9593\u8a08\u7b97\u91cf\u3092\u5236\u5fa1\u3059\u308b\u3053\u3068\u3082\u975e\u5e38\u306b\u91cd\u8981\u3067\u3059\u3002

"},{"location":"chapter_computational_complexity/summary/","title":"2.5 \u00a0 \u307e\u3068\u3081","text":""},{"location":"chapter_computational_complexity/summary/#1","title":"1. \u00a0 \u91cd\u8981\u306a\u30ec\u30d3\u30e5\u30fc","text":"

\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u52b9\u7387\u8a55\u4fa1

\u6642\u9593\u8a08\u7b97\u91cf

\u7a7a\u9593\u8a08\u7b97\u91cf

"},{"location":"chapter_computational_complexity/summary/#2-q-a","title":"2. \u00a0 Q & A","text":"

Q: \u672b\u5c3e\u518d\u5e30\u306e\u7a7a\u9593\u8a08\u7b97\u91cf\u306f\\(O(1)\\)\u3067\u3059\u304b\uff1f

\u7406\u8ad6\u7684\u306b\u306f\u3001\u672b\u5c3e\u518d\u5e30\u95a2\u6570\u306e\u7a7a\u9593\u8a08\u7b97\u91cf\u306f\\(O(1)\\)\u306b\u6700\u9069\u5316\u3067\u304d\u307e\u3059\u3002\u3057\u304b\u3057\u3001\u307b\u3068\u3093\u3069\u306e\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\uff08Java\u3001Python\u3001C++\u3001Go\u3001C#\u306a\u3069\uff09\u306f\u672b\u5c3e\u518d\u5e30\u306e\u81ea\u52d5\u6700\u9069\u5316\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u306a\u3044\u305f\u3081\u3001\u4e00\u822c\u7684\u306b\u7a7a\u9593\u8a08\u7b97\u91cf\u306f\\(O(n)\\)\u3068\u8003\u3048\u3089\u308c\u3066\u3044\u307e\u3059\u3002

Q: \u300c\u95a2\u6570\u300d\u3068\u300c\u30e1\u30bd\u30c3\u30c9\u300d\u3068\u3044\u3046\u7528\u8a9e\u306e\u9055\u3044\u306f\u4f55\u3067\u3059\u304b\uff1f

\u95a2\u6570\u306f\u72ec\u7acb\u3057\u3066\u5b9f\u884c\u3067\u304d\u3001\u3059\u3079\u3066\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u304c\u660e\u793a\u7684\u306b\u6e21\u3055\u308c\u307e\u3059\u3002\u30e1\u30bd\u30c3\u30c9\u306f\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306b\u95a2\u9023\u4ed8\u3051\u3089\u308c\u3001\u305d\u308c\u3092\u547c\u3073\u51fa\u3059\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306b\u6697\u9ed9\u7684\u306b\u6e21\u3055\u308c\u3001\u30af\u30e9\u30b9\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u5185\u306b\u542b\u307e\u308c\u308b\u30c7\u30fc\u30bf\u3092\u64cd\u4f5c\u3067\u304d\u307e\u3059\u3002

\u4e00\u822c\u7684\u306a\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\u304b\u3089\u306e\u4f8b\u3092\u3044\u304f\u3064\u304b\u793a\u3057\u307e\u3059\uff1a

Q: \u300c\u7a7a\u9593\u8a08\u7b97\u91cf\u306e\u4e00\u822c\u7684\u306a\u7a2e\u985e\u300d\u306e\u56f3\u306f\u3001\u5360\u6709\u7a7a\u9593\u306e\u7d76\u5bfe\u30b5\u30a4\u30ba\u3092\u53cd\u6620\u3057\u3066\u3044\u307e\u3059\u304b\uff1f

\u3044\u3044\u3048\u3001\u56f3\u306f\u7a7a\u9593\u8a08\u7b97\u91cf\u3092\u793a\u3057\u3066\u304a\u308a\u3001\u3053\u308c\u306f\u5897\u52a0\u50be\u5411\u3092\u53cd\u6620\u3059\u308b\u3082\u306e\u3067\u3042\u308a\u3001\u5360\u6709\u7a7a\u9593\u306e\u7d76\u5bfe\u30b5\u30a4\u30ba\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002

\\(n = 8\\)\u3092\u53d6\u308b\u3068\u3001\u5404\u66f2\u7dda\u306e\u5024\u304c\u305d\u306e\u95a2\u6570\u306b\u5bfe\u5fdc\u3057\u3066\u3044\u306a\u3044\u3053\u3068\u306b\u6c17\u3065\u304f\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002\u3053\u308c\u306f\u3001\u5404\u66f2\u7dda\u306b\u5b9a\u6570\u9805\u304c\u542b\u307e\u308c\u3066\u3044\u308b\u305f\u3081\u3067\u3001\u5024\u306e\u7bc4\u56f2\u3092\u8996\u899a\u7684\u306b\u5feb\u9069\u306a\u7bc4\u56f2\u306b\u5727\u7e2e\u3059\u308b\u3053\u3068\u3092\u610f\u56f3\u3057\u3066\u3044\u307e\u3059\u3002

\u5b9f\u969b\u306b\u306f\u3001\u901a\u5e38\u306f\u5404\u30e1\u30bd\u30c3\u30c9\u306e\u300c\u5b9a\u6570\u9805\u300d\u8907\u96d1\u5ea6\u3092\u77e5\u3089\u306a\u3044\u305f\u3081\u3001\u8907\u96d1\u5ea6\u306e\u307f\u306b\u57fa\u3065\u3044\u3066\\(n = 8\\)\u306e\u6700\u826f\u30bd\u30ea\u30e5\u30fc\u30b7\u30e7\u30f3\u3092\u9078\u629e\u3059\u308b\u3053\u3068\u306f\u4e00\u822c\u7684\u306b\u4e0d\u53ef\u80fd\u3067\u3059\u3002\u3057\u304b\u3057\u3001\\(n = 8^5\\)\u306e\u5834\u5408\u3001\u5897\u52a0\u50be\u5411\u304c\u652f\u914d\u7684\u306b\u306a\u308b\u305f\u3081\u3001\u9078\u629e\u304c\u306f\u308b\u304b\u306b\u5bb9\u6613\u306b\u306a\u308a\u307e\u3059\u3002

"},{"location":"chapter_computational_complexity/time_complexity/","title":"2.3 \u00a0 \u6642\u9593\u8a08\u7b97\u91cf","text":"

\u5b9f\u884c\u6642\u9593\u306f\u3001\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u52b9\u7387\u3092\u76f4\u611f\u7684\u306b\u8a55\u4fa1\u3067\u304d\u307e\u3059\u3002\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u5b9f\u884c\u6642\u9593\u3092\u6b63\u78ba\u306b\u63a8\u5b9a\u3059\u308b\u306b\u306f\u3069\u3046\u3059\u308c\u3070\u3088\u3044\u3067\u3057\u3087\u3046\u304b\uff1f

  1. \u5b9f\u884c\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u306e\u6c7a\u5b9a: \u3053\u308c\u306b\u306f\u3001\u30cf\u30fc\u30c9\u30a6\u30a7\u30a2\u69cb\u6210\u3001\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\u3001\u30b7\u30b9\u30c6\u30e0\u74b0\u5883\u306a\u3069\u304c\u542b\u307e\u308c\u3001\u3053\u308c\u3089\u3059\u3079\u3066\u304c\u30b3\u30fc\u30c9\u306e\u5b9f\u884c\u52b9\u7387\u306b\u5f71\u97ff\u3059\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002
  2. \u69d8\u3005\u306a\u8a08\u7b97\u64cd\u4f5c\u306e\u5b9f\u884c\u6642\u9593\u306e\u8a55\u4fa1: \u4f8b\u3048\u3070\u3001\u52a0\u7b97\u64cd\u4f5c+\u306f1 ns\u3001\u4e57\u7b97\u64cd\u4f5c*\u306f10 ns\u3001\u5370\u5237\u64cd\u4f5cprint()\u306f5 ns\u306a\u3069\u304b\u304b\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002
  3. \u30b3\u30fc\u30c9\u5185\u306e\u3059\u3079\u3066\u306e\u8a08\u7b97\u64cd\u4f5c\u3092\u30ab\u30a6\u30f3\u30c8: \u3053\u308c\u3089\u3059\u3079\u3066\u306e\u64cd\u4f5c\u306e\u5b9f\u884c\u6642\u9593\u3092\u5408\u8a08\u3059\u308b\u3068\u3001\u7dcf\u5b9f\u884c\u6642\u9593\u304c\u5f97\u3089\u308c\u307e\u3059\u3002

\u4f8b\u3048\u3070\u3001\u5165\u529b\u30b5\u30a4\u30ba\u304c\\(n\\)\u306e\u4ee5\u4e0b\u306e\u30b3\u30fc\u30c9\u3092\u8003\u3048\u3066\u307f\u307e\u3057\u3087\u3046\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlin
# \u7279\u5b9a\u306e\u64cd\u4f5c\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u4e0b\u3067\ndef algorithm(n: int):\n    a = 2      # 1 ns\n    a = a + 1  # 1 ns\n    a = a * 2  # 10 ns\n    # n\u56de\u30eb\u30fc\u30d7\n    for _ in range(n):  # 1 ns\n        print(0)        # 5 ns\n
// \u7279\u5b9a\u306e\u64cd\u4f5c\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u4e0b\u3067\nvoid algorithm(int n) {\n    int a = 2;  // 1 ns\n    a = a + 1;  // 1 ns\n    a = a * 2;  // 10 ns\n    // n\u56de\u30eb\u30fc\u30d7\n    for (int i = 0; i < n; i++) {  // 1 ns, \u6bce\u56dei++\u304c\u5b9f\u884c\u3055\u308c\u308b\n        cout << 0 << endl;         // 5 ns\n    }\n}\n
// \u7279\u5b9a\u306e\u64cd\u4f5c\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u4e0b\u3067\nvoid algorithm(int n) {\n    int a = 2;  // 1 ns\n    a = a + 1;  // 1 ns\n    a = a * 2;  // 10 ns\n    // n\u56de\u30eb\u30fc\u30d7\n    for (int i = 0; i < n; i++) {  // 1 ns, \u6bce\u56dei++\u304c\u5b9f\u884c\u3055\u308c\u308b\n        System.out.println(0);     // 5 ns\n    }\n}\n
// \u7279\u5b9a\u306e\u64cd\u4f5c\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u4e0b\u3067\nvoid Algorithm(int n) {\n    int a = 2;  // 1 ns\n    a = a + 1;  // 1 ns\n    a = a * 2;  // 10 ns\n    // n\u56de\u30eb\u30fc\u30d7\n    for (int i = 0; i < n; i++) {  // 1 ns, \u6bce\u56dei++\u304c\u5b9f\u884c\u3055\u308c\u308b\n        Console.WriteLine(0);      // 5 ns\n    }\n}\n
// \u7279\u5b9a\u306e\u64cd\u4f5c\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u4e0b\u3067\nfunc algorithm(n int) {\n    a := 2     // 1 ns\n    a = a + 1  // 1 ns\n    a = a * 2  // 10 ns\n    // n\u56de\u30eb\u30fc\u30d7\n    for i := 0; i < n; i++ {  // 1 ns\n        fmt.Println(a)        // 5 ns\n    }\n}\n
// \u7279\u5b9a\u306e\u64cd\u4f5c\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u4e0b\u3067\nfunc algorithm(n: Int) {\n    var a = 2 // 1 ns\n    a = a + 1 // 1 ns\n    a = a * 2 // 10 ns\n    // n\u56de\u30eb\u30fc\u30d7\n    for _ in 0 ..< n { // 1 ns\n        print(0) // 5 ns\n    }\n}\n
// \u7279\u5b9a\u306e\u64cd\u4f5c\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u4e0b\u3067\nfunction algorithm(n) {\n    var a = 2; // 1 ns\n    a = a + 1; // 1 ns\n    a = a * 2; // 10 ns\n    // n\u56de\u30eb\u30fc\u30d7\n    for(let i = 0; i < n; i++) { // 1 ns, \u6bce\u56dei++\u304c\u5b9f\u884c\u3055\u308c\u308b\n        console.log(0); // 5 ns\n    }\n}\n
// \u7279\u5b9a\u306e\u64cd\u4f5c\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u4e0b\u3067\nfunction algorithm(n: number): void {\n    var a: number = 2; // 1 ns\n    a = a + 1; // 1 ns\n    a = a * 2; // 10 ns\n    // n\u56de\u30eb\u30fc\u30d7\n    for(let i = 0; i < n; i++) { // 1 ns, \u6bce\u56dei++\u304c\u5b9f\u884c\u3055\u308c\u308b\n        console.log(0); // 5 ns\n    }\n}\n
// \u7279\u5b9a\u306e\u64cd\u4f5c\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u4e0b\u3067\nvoid algorithm(int n) {\n  int a = 2; // 1 ns\n  a = a + 1; // 1 ns\n  a = a * 2; // 10 ns\n  // n\u56de\u30eb\u30fc\u30d7\n  for (int i = 0; i < n; i++) { // 1 ns, \u6bce\u56dei++\u304c\u5b9f\u884c\u3055\u308c\u308b\n    print(0); // 5 ns\n  }\n}\n
// \u7279\u5b9a\u306e\u64cd\u4f5c\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u4e0b\u3067\nfn algorithm(n: i32) {\n    let mut a = 2;      // 1 ns\n    a = a + 1;          // 1 ns\n    a = a * 2;          // 10 ns\n    // n\u56de\u30eb\u30fc\u30d7\n    for _ in 0..n {     // \u6bce\u56dei++\u30671 ns\n        println!(\"{}\", 0);  // 5 ns\n    }\n}\n
// \u7279\u5b9a\u306e\u64cd\u4f5c\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u4e0b\u3067\nvoid algorithm(int n) {\n    int a = 2;  // 1 ns\n    a = a + 1;  // 1 ns\n    a = a * 2;  // 10 ns\n    // n\u56de\u30eb\u30fc\u30d7\n    for (int i = 0; i < n; i++) {   // 1 ns, \u6bce\u56dei++\u304c\u5b9f\u884c\u3055\u308c\u308b\n        printf(\"%d\", 0);            // 5 ns\n    }\n}\n
\n

\u4e0a\u8a18\u306e\u65b9\u6cd5\u3092\u4f7f\u7528\u3059\u308b\u3068\u3001\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u5b9f\u884c\u6642\u9593\u306f\\((6n + 12)\\) ns\u3068\u3057\u3066\u8a08\u7b97\u3067\u304d\u307e\u3059\uff1a

\\[ 1 + 1 + 10 + (1 + 5) \\times n = 6n + 12 \\]

\u3057\u304b\u3057\u3001\u5b9f\u969b\u306b\u306f\u3001\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u5b9f\u884c\u6642\u9593\u3092\u30ab\u30a6\u30f3\u30c8\u3059\u308b\u3053\u3068\u306f\u5b9f\u7528\u7684\u3067\u3082\u5408\u7406\u7684\u3067\u3082\u3042\u308a\u307e\u305b\u3093\u3002\u7b2c\u4e00\u306b\u3001\u63a8\u5b9a\u6642\u9593\u3092\u5b9f\u884c\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u306b\u7d50\u3073\u4ed8\u3051\u305f\u304f\u3042\u308a\u307e\u305b\u3093\u3002\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306f\u69d8\u3005\u306a\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3067\u5b9f\u884c\u3055\u308c\u308b\u5fc5\u8981\u304c\u3042\u308b\u304b\u3089\u3067\u3059\u3002\u7b2c\u4e8c\u306b\u3001\u5404\u7a2e\u64cd\u4f5c\u306e\u5b9f\u884c\u6642\u9593\u3092\u77e5\u308b\u3053\u3068\u306f\u56f0\u96e3\u3067\u3042\u308a\u3001\u63a8\u5b9a\u30d7\u30ed\u30bb\u30b9\u3092\u96e3\u3057\u304f\u3057\u307e\u3059\u3002

"},{"location":"chapter_computational_complexity/time_complexity/#231","title":"2.3.1 \u00a0 \u6642\u9593\u5897\u52a0\u50be\u5411\u306e\u8a55\u4fa1","text":"

\u6642\u9593\u8a08\u7b97\u91cf\u5206\u6790\u306f\u3001\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u5b9f\u884c\u6642\u9593\u3092\u30ab\u30a6\u30f3\u30c8\u3059\u308b\u306e\u3067\u306f\u306a\u304f\u3001**\u30c7\u30fc\u30bf\u91cf\u304c\u5897\u52a0\u3059\u308b\u306b\u3064\u308c\u3066\u306e\u5b9f\u884c\u6642\u9593\u306e\u5897\u52a0\u50be\u5411**\u3092\u5206\u6790\u3057\u307e\u3059\u3002

\u3053\u306e\u300c\u6642\u9593\u5897\u52a0\u50be\u5411\u300d\u306e\u6982\u5ff5\u3092\u4f8b\u3067\u7406\u89e3\u3057\u307e\u3057\u3087\u3046\u3002\u5165\u529b\u30c7\u30fc\u30bf\u30b5\u30a4\u30ba\u3092\\(n\\)\u3068\u3057\u30013\u3064\u306e\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0A\u3001B\u3001C\u3092\u8003\u3048\u3066\u307f\u307e\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlin
# \u30a2\u30eb\u30b4\u30ea\u30ba\u30e0A\u306e\u6642\u9593\u8a08\u7b97\u91cf\uff1a\u5b9a\u6570\u30aa\u30fc\u30c0\u30fc\ndef algorithm_A(n: int):\n    print(0)\n# \u30a2\u30eb\u30b4\u30ea\u30ba\u30e0B\u306e\u6642\u9593\u8a08\u7b97\u91cf\uff1a\u7dda\u5f62\u30aa\u30fc\u30c0\u30fc\ndef algorithm_B(n: int):\n    for _ in range(n):\n        print(0)\n# \u30a2\u30eb\u30b4\u30ea\u30ba\u30e0C\u306e\u6642\u9593\u8a08\u7b97\u91cf\uff1a\u5b9a\u6570\u30aa\u30fc\u30c0\u30fc\ndef algorithm_C(n: int):\n    for _ in range(1000000):\n        print(0)\n
// \u30a2\u30eb\u30b4\u30ea\u30ba\u30e0A\u306e\u6642\u9593\u8a08\u7b97\u91cf\uff1a\u5b9a\u6570\u30aa\u30fc\u30c0\u30fc\nvoid algorithm_A(int n) {\n    cout << 0 << endl;\n}\n// \u30a2\u30eb\u30b4\u30ea\u30ba\u30e0B\u306e\u6642\u9593\u8a08\u7b97\u91cf\uff1a\u7dda\u5f62\u30aa\u30fc\u30c0\u30fc\nvoid algorithm_B(int n) {\n    for (int i = 0; i < n; i++) {\n        cout << 0 << endl;\n    }\n}\n// \u30a2\u30eb\u30b4\u30ea\u30ba\u30e0C\u306e\u6642\u9593\u8a08\u7b97\u91cf\uff1a\u5b9a\u6570\u30aa\u30fc\u30c0\u30fc\nvoid algorithm_C(int n) {\n    for (int i = 0; i < 1000000; i++) {\n        cout << 0 << endl;\n    }\n}\n
// \u30a2\u30eb\u30b4\u30ea\u30ba\u30e0A\u306e\u6642\u9593\u8a08\u7b97\u91cf\uff1a\u5b9a\u6570\u30aa\u30fc\u30c0\u30fc\nvoid algorithm_A(int n) {\n    System.out.println(0);\n}\n// \u30a2\u30eb\u30b4\u30ea\u30ba\u30e0B\u306e\u6642\u9593\u8a08\u7b97\u91cf\uff1a\u7dda\u5f62\u30aa\u30fc\u30c0\u30fc\nvoid algorithm_B(int n) {\n    for (int i = 0; i < n; i++) {\n        System.out.println(0);\n    }\n}\n// \u30a2\u30eb\u30b4\u30ea\u30ba\u30e0C\u306e\u6642\u9593\u8a08\u7b97\u91cf\uff1a\u5b9a\u6570\u30aa\u30fc\u30c0\u30fc\nvoid algorithm_C(int n) {\n    for (int i = 0; i < 1000000; i++) {\n        System.out.println(0);\n    }\n}\n
// \u30a2\u30eb\u30b4\u30ea\u30ba\u30e0A\u306e\u6642\u9593\u8a08\u7b97\u91cf\uff1a\u5b9a\u6570\u30aa\u30fc\u30c0\u30fc\nvoid AlgorithmA(int n) {\n    Console.WriteLine(0);\n}\n// \u30a2\u30eb\u30b4\u30ea\u30ba\u30e0B\u306e\u6642\u9593\u8a08\u7b97\u91cf\uff1a\u7dda\u5f62\u30aa\u30fc\u30c0\u30fc\nvoid AlgorithmB(int n) {\n    for (int i = 0; i < n; i++) {\n        Console.WriteLine(0);\n    }\n}\n// \u30a2\u30eb\u30b4\u30ea\u30ba\u30e0C\u306e\u6642\u9593\u8a08\u7b97\u91cf\uff1a\u5b9a\u6570\u30aa\u30fc\u30c0\u30fc\nvoid AlgorithmC(int n) {\n    for (int i = 0; i < 1000000; i++) {\n        Console.WriteLine(0);\n    }\n}\n
// \u30a2\u30eb\u30b4\u30ea\u30ba\u30e0A\u306e\u6642\u9593\u8a08\u7b97\u91cf\uff1a\u5b9a\u6570\u30aa\u30fc\u30c0\u30fc\nfunc algorithm_A(n int) {\n    fmt.Println(0)\n}\n// \u30a2\u30eb\u30b4\u30ea\u30ba\u30e0B\u306e\u6642\u9593\u8a08\u7b97\u91cf\uff1a\u7dda\u5f62\u30aa\u30fc\u30c0\u30fc\nfunc algorithm_B(n int) {\n    for i := 0; i < n; i++ {\n        fmt.Println(0)\n    }\n}\n// \u30a2\u30eb\u30b4\u30ea\u30ba\u30e0C\u306e\u6642\u9593\u8a08\u7b97\u91cf\uff1a\u5b9a\u6570\u30aa\u30fc\u30c0\u30fc\nfunc algorithm_C(n int) {\n    for i := 0; i < 1000000; i++ {\n        fmt.Println(0)\n    }\n}\n
// \u30a2\u30eb\u30b4\u30ea\u30ba\u30e0A\u306e\u6642\u9593\u8a08\u7b97\u91cf\uff1a\u5b9a\u6570\u30aa\u30fc\u30c0\u30fc\nfunc algorithmA(n: Int) {\n    print(0)\n}\n\n// \u30a2\u30eb\u30b4\u30ea\u30ba\u30e0B\u306e\u6642\u9593\u8a08\u7b97\u91cf\uff1a\u7dda\u5f62\u30aa\u30fc\u30c0\u30fc\nfunc algorithmB(n: Int) {\n    for _ in 0 ..< n {\n        print(0)\n    }\n}\n\n// \u30a2\u30eb\u30b4\u30ea\u30ba\u30e0C\u306e\u6642\u9593\u8a08\u7b97\u91cf\uff1a\u5b9a\u6570\u30aa\u30fc\u30c0\u30fc\nfunc algorithmC(n: Int) {\n    for _ in 0 ..< 1_000_000 {\n        print(0)\n    }\n}\n
// \u30a2\u30eb\u30b4\u30ea\u30ba\u30e0A\u306e\u6642\u9593\u8a08\u7b97\u91cf\uff1a\u5b9a\u6570\u30aa\u30fc\u30c0\u30fc\nfunction algorithm_A(n) {\n    console.log(0);\n}\n// \u30a2\u30eb\u30b4\u30ea\u30ba\u30e0B\u306e\u6642\u9593\u8a08\u7b97\u91cf\uff1a\u7dda\u5f62\u30aa\u30fc\u30c0\u30fc\nfunction algorithm_B(n) {\n    for (let i = 0; i < n; i++) {\n        console.log(0);\n    }\n}\n// \u30a2\u30eb\u30b4\u30ea\u30ba\u30e0C\u306e\u6642\u9593\u8a08\u7b97\u91cf\uff1a\u5b9a\u6570\u30aa\u30fc\u30c0\u30fc\nfunction algorithm_C(n) {\n    for (let i = 0; i < 1000000; i++) {\n        console.log(0);\n    }\n}\n
// \u30a2\u30eb\u30b4\u30ea\u30ba\u30e0A\u306e\u6642\u9593\u8a08\u7b97\u91cf\uff1a\u5b9a\u6570\u30aa\u30fc\u30c0\u30fc\nfunction algorithm_A(n: number): void {\n    console.log(0);\n}\n// \u30a2\u30eb\u30b4\u30ea\u30ba\u30e0B\u306e\u6642\u9593\u8a08\u7b97\u91cf\uff1a\u7dda\u5f62\u30aa\u30fc\u30c0\u30fc\nfunction algorithm_B(n: number): void {\n    for (let i = 0; i < n; i++) {\n        console.log(0);\n    }\n}\n// \u30a2\u30eb\u30b4\u30ea\u30ba\u30e0C\u306e\u6642\u9593\u8a08\u7b97\u91cf\uff1a\u5b9a\u6570\u30aa\u30fc\u30c0\u30fc\nfunction algorithm_C(n: number): void {\n    for (let i = 0; i < 1000000; i++) {\n        console.log(0);\n    }\n}\n
// \u30a2\u30eb\u30b4\u30ea\u30ba\u30e0A\u306e\u6642\u9593\u8a08\u7b97\u91cf\uff1a\u5b9a\u6570\u30aa\u30fc\u30c0\u30fc\nvoid algorithmA(int n) {\n  print(0);\n}\n// \u30a2\u30eb\u30b4\u30ea\u30ba\u30e0B\u306e\u6642\u9593\u8a08\u7b97\u91cf\uff1a\u7dda\u5f62\u30aa\u30fc\u30c0\u30fc\nvoid algorithmB(int n) {\n  for (int i = 0; i < n; i++) {\n    print(0);\n  }\n}\n// \u30a2\u30eb\u30b4\u30ea\u30ba\u30e0C\u306e\u6642\u9593\u8a08\u7b97\u91cf\uff1a\u5b9a\u6570\u30aa\u30fc\u30c0\u30fc\nvoid algorithmC(int n) {\n  for (int i = 0; i < 1000000; i++) {\n    print(0);\n  }\n}\n
// \u30a2\u30eb\u30b4\u30ea\u30ba\u30e0A\u306e\u6642\u9593\u8a08\u7b97\u91cf\uff1a\u5b9a\u6570\u30aa\u30fc\u30c0\u30fc\nfn algorithm_A(n: i32) {\n    println!(\"{}\", 0);\n}\n// \u30a2\u30eb\u30b4\u30ea\u30ba\u30e0B\u306e\u6642\u9593\u8a08\u7b97\u91cf\uff1a\u7dda\u5f62\u30aa\u30fc\u30c0\u30fc\nfn algorithm_B(n: i32) {\n    for _ in 0..n {\n        println!(\"{}\", 0);\n    }\n}\n// \u30a2\u30eb\u30b4\u30ea\u30ba\u30e0C\u306e\u6642\u9593\u8a08\u7b97\u91cf\uff1a\u5b9a\u6570\u30aa\u30fc\u30c0\u30fc\nfn algorithm_C(n: i32) {\n    for _ in 0..1000000 {\n        println!(\"{}\", 0);\n    }\n}\n
// \u30a2\u30eb\u30b4\u30ea\u30ba\u30e0A\u306e\u6642\u9593\u8a08\u7b97\u91cf\uff1a\u5b9a\u6570\u30aa\u30fc\u30c0\u30fc\nvoid algorithm_A(int n) {\n    printf(\"%d\", 0);\n}\n// \u30a2\u30eb\u30b4\u30ea\u30ba\u30e0B\u306e\u6642\u9593\u8a08\u7b97\u91cf\uff1a\u7dda\u5f62\u30aa\u30fc\u30c0\u30fc\nvoid algorithm_B(int n) {\n    for (int i = 0; i < n; i++) {\n        printf(\"%d\", 0);\n    }\n}\n// \u30a2\u30eb\u30b4\u30ea\u30ba\u30e0C\u306e\u6642\u9593\u8a08\u7b97\u91cf\uff1a\u5b9a\u6570\u30aa\u30fc\u30c0\u30fc\nvoid algorithm_C(int n) {\n    for (int i = 0; i < 1000000; i++) {\n        printf(\"%d\", 0);\n    }\n}\n
\n

\u4e0b\u56f3\u306f\u3053\u308c\u30893\u3064\u306e\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u6642\u9593\u8a08\u7b97\u91cf\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002

\u56f3 2-7 \u00a0 Time growth trend of algorithms a, b, and c

\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u5b9f\u884c\u6642\u9593\u3092\u76f4\u63a5\u30ab\u30a6\u30f3\u30c8\u3059\u308b\u3053\u3068\u3068\u6bd4\u8f03\u3057\u3066\u3001\u6642\u9593\u8a08\u7b97\u91cf\u5206\u6790\u306e\u7279\u5fb4\u306f\u4f55\u3067\u3057\u3087\u3046\u304b\uff1f

"},{"location":"chapter_computational_complexity/time_complexity/#232","title":"2.3.2 \u00a0 \u6f38\u8fd1\u4e0a\u9650","text":"

\u5165\u529b\u30b5\u30a4\u30ba\u304c\\(n\\)\u306e\u95a2\u6570\u3092\u8003\u3048\u3066\u307f\u307e\u3057\u3087\u3046\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlin
def algorithm(n: int):\n    a = 1      # +1\n    a = a + 1  # +1\n    a = a * 2  # +1\n    # n\u56de\u30eb\u30fc\u30d7\n    for i in range(n):  # +1\n        print(0)        # +1\n
void algorithm(int n) {\n    int a = 1;  // +1\n    a = a + 1;  // +1\n    a = a * 2;  // +1\n    // n\u56de\u30eb\u30fc\u30d7\n    for (int i = 0; i < n; i++) { // +1 (\u6bce\u56dei++\u304c\u5b9f\u884c\u3055\u308c\u308b)\n        cout << 0 << endl;    // +1\n    }\n}\n
void algorithm(int n) {\n    int a = 1;  // +1\n    a = a + 1;  // +1\n    a = a * 2;  // +1\n    // n\u56de\u30eb\u30fc\u30d7\n    for (int i = 0; i < n; i++) { // +1 (\u6bce\u56dei++\u304c\u5b9f\u884c\u3055\u308c\u308b)\n        System.out.println(0);    // +1\n    }\n}\n
void Algorithm(int n) {\n    int a = 1;  // +1\n    a = a + 1;  // +1\n    a = a * 2;  // +1\n    // n\u56de\u30eb\u30fc\u30d7\n    for (int i = 0; i < n; i++) {   // +1 (\u6bce\u56dei++\u304c\u5b9f\u884c\u3055\u308c\u308b)\n        Console.WriteLine(0);   // +1\n    }\n}\n
func algorithm(n int) {\n    a := 1      // +1\n    a = a + 1   // +1\n    a = a * 2   // +1\n    // n\u56de\u30eb\u30fc\u30d7\n    for i := 0; i < n; i++ {   // +1\n        fmt.Println(a)         // +1\n    }\n}\n
func algorithm(n: Int) {\n    var a = 1 // +1\n    a = a + 1 // +1\n    a = a * 2 // +1\n    // n\u56de\u30eb\u30fc\u30d7\n    for _ in 0 ..< n { // +1\n        print(0) // +1\n    }\n}\n
function algorithm(n) {\n    var a = 1; // +1\n    a += 1; // +1\n    a *= 2; // +1\n    // n\u56de\u30eb\u30fc\u30d7\n    for(let i = 0; i < n; i++){ // +1 (\u6bce\u56dei++\u304c\u5b9f\u884c\u3055\u308c\u308b)\n        console.log(0); // +1\n    }\n}\n
function algorithm(n: number): void{\n    var a: number = 1; // +1\n    a += 1; // +1\n    a *= 2; // +1\n    // n\u56de\u30eb\u30fc\u30d7\n    for(let i = 0; i < n; i++){ // +1 (\u6bce\u56dei++\u304c\u5b9f\u884c\u3055\u308c\u308b)\n        console.log(0); // +1\n    }\n}\n
void algorithm(int n) {\n  int a = 1; // +1\n  a = a + 1; // +1\n  a = a * 2; // +1\n  // n\u56de\u30eb\u30fc\u30d7\n  for (int i = 0; i < n; i++) { // +1 (\u6bce\u56dei++\u304c\u5b9f\u884c\u3055\u308c\u308b)\n    print(0); // +1\n  }\n}\n
fn algorithm(n: i32) {\n    let mut a = 1;   // +1\n    a = a + 1;      // +1\n    a = a * 2;      // +1\n\n    // n\u56de\u30eb\u30fc\u30d7\n    for _ in 0..n { // +1 (\u6bce\u56dei++\u304c\u5b9f\u884c\u3055\u308c\u308b)\n        println!(\"{}\", 0); // +1\n    }\n}\n
void algorithm(int n) {\n    int a = 1;  // +1\n    a = a + 1;  // +1\n    a = a * 2;  // +1\n    // n\u56de\u30eb\u30fc\u30d7\n    for (int i = 0; i < n; i++) {   // +1 (\u6bce\u56dei++\u304c\u5b9f\u884c\u3055\u308c\u308b)\n        printf(\"%d\", 0);            // +1\n    }\n}\n
\n

\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u64cd\u4f5c\u6570\u3092\u5165\u529b\u30b5\u30a4\u30ba\\(n\\)\u306e\u95a2\u6570\u3068\u3057\u3066\u8868\u3059\u95a2\u6570\u3092\\(T(n)\\)\u3068\u3059\u308b\u3068\u3001\u4ee5\u4e0b\u306e\u4f8b\u3092\u8003\u3048\u3066\u307f\u307e\u3057\u3087\u3046\uff1a

\\[ T(n) = 3 + 2n \\]

\\(T(n)\\)\u306f\u7dda\u5f62\u95a2\u6570\u3067\u3042\u308b\u305f\u3081\u3001\u305d\u306e\u5897\u52a0\u50be\u5411\u306f\u7dda\u5f62\u3067\u3042\u308a\u3001\u3057\u305f\u304c\u3063\u3066\u3001\u305d\u306e\u6642\u9593\u8a08\u7b97\u91cf\u306f\u7dda\u5f62\u30aa\u30fc\u30c0\u30fc\u3067\u3001\\(O(n)\\)\u3068\u8868\u8a18\u3055\u308c\u307e\u3059\u3002\u3053\u306e\u6570\u5b66\u8a18\u6cd5\u306f\u30d3\u30c3\u30b0O\u8a18\u6cd5\u3068\u3057\u3066\u77e5\u3089\u308c\u3001\u95a2\u6570\\(T(n)\\)\u306e\u6f38\u8fd1\u4e0a\u9650\u3092\u8868\u3057\u307e\u3059\u3002

\u672c\u8cea\u7684\u306b\u3001\u6642\u9593\u8a08\u7b97\u91cf\u5206\u6790\u306f\u300c\u64cd\u4f5c\u6570\\(T(n)\\)\u300d\u306e\u6f38\u8fd1\u4e0a\u9650\u3092\u898b\u3064\u3051\u308b\u3053\u3068\u3067\u3059\u3002\u305d\u308c\u306b\u306f\u6b63\u78ba\u306a\u6570\u5b66\u7684\u5b9a\u7fa9\u304c\u3042\u308a\u307e\u3059\u3002

\u6f38\u8fd1\u4e0a\u9650

\u3059\u3079\u3066\u306e\\(n > n_0\\)\u306b\u5bfe\u3057\u3066\\(T(n) \\leq c \\cdot f(n)\\)\u3068\u306a\u308b\u3088\u3046\u306a\u6b63\u306e\u5b9f\u6570\\(c\\)\u3068\\(n_0\\)\u304c\u5b58\u5728\u3059\u308b\u5834\u5408\u3001\\(f(n)\\)\u306f\\(T(n)\\)\u306e\u6f38\u8fd1\u4e0a\u9650\u3068\u307f\u306a\u3055\u308c\u3001\\(T(n) = O(f(n))\\)\u3068\u8868\u8a18\u3055\u308c\u307e\u3059\u3002

\u4e0b\u56f3\u306b\u793a\u3055\u308c\u3066\u3044\u308b\u3088\u3046\u306b\u3001\u6f38\u8fd1\u4e0a\u9650\u306e\u8a08\u7b97\u3067\u306f\u3001\\(n\\)\u304c\u7121\u9650\u5927\u306b\u8fd1\u3065\u304f\u306b\u3064\u308c\u3066\u3001\\(T(n)\\)\u3068\\(f(n)\\)\u304c\u540c\u3058\u5897\u52a0\u30aa\u30fc\u30c0\u30fc\u3092\u6301\u3061\u3001\u5b9a\u6570\u56e0\u5b50\\(c\\)\u306e\u307f\u304c\u7570\u306a\u308b\u3088\u3046\u306a\u95a2\u6570\\(f(n)\\)\u3092\u898b\u3064\u3051\u308b\u3053\u3068\u304c\u542b\u307e\u308c\u307e\u3059\u3002

\u56f3 2-8 \u00a0 Asymptotic upper bound of a function

"},{"location":"chapter_computational_complexity/time_complexity/#233","title":"2.3.3 \u00a0 \u8a08\u7b97\u65b9\u6cd5","text":"

\u6f38\u8fd1\u4e0a\u9650\u306e\u6982\u5ff5\u306f\u6570\u5b66\u7684\u306b\u6fc3\u5bc6\u306b\u898b\u3048\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u304c\u3001\u4eca\u3059\u3050\u5b8c\u5168\u306b\u7406\u89e3\u3059\u308b\u5fc5\u8981\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u307e\u305a\u8a08\u7b97\u65b9\u6cd5\u3092\u7406\u89e3\u3057\u3001\u6642\u9593\u3092\u304b\u3051\u3066\u7df4\u7fd2\u3057\u7406\u89e3\u3057\u307e\u3057\u3087\u3046\u3002

\\(f(n)\\)\u304c\u6c7a\u307e\u308c\u3070\u3001\u6642\u9593\u8a08\u7b97\u91cf\\(O(f(n))\\)\u304c\u5f97\u3089\u308c\u307e\u3059\u3002\u3057\u304b\u3057\u3001\u6f38\u8fd1\u4e0a\u9650\\(f(n)\\)\u3092\u3069\u306e\u3088\u3046\u306b\u6c7a\u5b9a\u3059\u308b\u306e\u3067\u3057\u3087\u3046\u304b\uff1f\u3053\u306e\u30d7\u30ed\u30bb\u30b9\u306b\u306f\u4e00\u822c\u7684\u306b2\u3064\u306e\u30b9\u30c6\u30c3\u30d7\u304c\u542b\u307e\u308c\u307e\u3059\uff1a\u64cd\u4f5c\u6570\u306e\u30ab\u30a6\u30f3\u30c8\u3068\u6f38\u8fd1\u4e0a\u9650\u306e\u6c7a\u5b9a\u3067\u3059\u3002

"},{"location":"chapter_computational_complexity/time_complexity/#1-1","title":"1. \u00a0 \u30b9\u30c6\u30c3\u30d71: \u64cd\u4f5c\u6570\u306e\u30ab\u30a6\u30f3\u30c8","text":"

\u3053\u306e\u30b9\u30c6\u30c3\u30d7\u3067\u306f\u3001\u30b3\u30fc\u30c9\u3092\u884c\u3054\u3068\u306b\u78ba\u8a8d\u3057\u307e\u3059\u3002\u3057\u304b\u3057\u3001\\(c \\cdot f(n)\\)\u306e\u5b9a\u6570\\(c\\)\u306e\u5b58\u5728\u306b\u3088\u308a\u3001\\(T(n)\\)\u306e\u3059\u3079\u3066\u306e\u4fc2\u6570\u3068\u5b9a\u6570\u9805\u306f\u7121\u8996\u3067\u304d\u307e\u3059\u3002\u3053\u306e\u539f\u7406\u306b\u3088\u308a\u3001\u64cd\u4f5c\u3092\u30ab\u30a6\u30f3\u30c8\u3059\u308b\u969b\u306e\u7c21\u7565\u5316\u6280\u6cd5\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002

  1. \\(T(n)\\)\u306e\u5b9a\u6570\u9805\u3092\u7121\u8996\u3057\u307e\u3059\u3002\u3053\u308c\u3089\u306f\\(n\\)\u3068\u306f\u7121\u95a2\u4fc2\u3067\u3042\u308b\u305f\u3081\u3001\u6642\u9593\u8a08\u7b97\u91cf\u306b\u5f71\u97ff\u3057\u307e\u305b\u3093\u3002
  2. \u3059\u3079\u3066\u306e\u4fc2\u6570\u3092\u7701\u7565\u3057\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001\\(2n\\)\u3001\\(5n + 1\\)\u56de\u306a\u3069\u306e\u30eb\u30fc\u30d7\u306f\u3001\\(n\\)\u306e\u524d\u306e\u4fc2\u6570\u304c\u6642\u9593\u8a08\u7b97\u91cf\u306b\u5f71\u97ff\u3057\u306a\u3044\u305f\u3081\u3001\\(n\\)\u56de\u306b\u7c21\u7565\u5316\u3067\u304d\u307e\u3059\u3002
  3. \u30cd\u30b9\u30c8\u3057\u305f\u30eb\u30fc\u30d7\u306b\u306f\u4e57\u7b97\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002\u7dcf\u64cd\u4f5c\u6570\u306f\u5404\u30eb\u30fc\u30d7\u306e\u64cd\u4f5c\u6570\u306e\u7a4d\u3067\u3042\u308a\u3001\u30dd\u30a4\u30f3\u30c81\u30682\u306e\u7c21\u7565\u5316\u6280\u6cd5\u3092\u5404\u30eb\u30fc\u30d7\u30ec\u30d9\u30eb\u306b\u9069\u7528\u3057\u307e\u3059\u3002

\u95a2\u6570\u304c\u4e0e\u3048\u3089\u308c\u305f\u5834\u5408\u3001\u3053\u308c\u3089\u306e\u6280\u6cd5\u3092\u4f7f\u7528\u3057\u3066\u64cd\u4f5c\u3092\u30ab\u30a6\u30f3\u30c8\u3067\u304d\u307e\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlin
def algorithm(n: int):\n    a = 1      # +0 (\u6280\u6cd51)\n    a = a + n  # +0 (\u6280\u6cd51)\n    # +n (\u6280\u6cd52)\n    for i in range(5 * n + 1):\n        print(0)\n    # +n*n (\u6280\u6cd53)\n    for i in range(2 * n):\n        for j in range(n + 1):\n            print(0)\n
void algorithm(int n) {\n    int a = 1;  // +0 (\u6280\u6cd51)\n    a = a + n;  // +0 (\u6280\u6cd51)\n    // +n (\u6280\u6cd52)\n    for (int i = 0; i < 5 * n + 1; i++) {\n        cout << 0 << endl;\n    }\n    // +n*n (\u6280\u6cd53)\n    for (int i = 0; i < 2 * n; i++) {\n        for (int j = 0; j < n + 1; j++) {\n            cout << 0 << endl;\n        }\n    }\n}\n
void algorithm(int n) {\n    int a = 1;  // +0 (\u6280\u6cd51)\n    a = a + n;  // +0 (\u6280\u6cd51)\n    // +n (\u6280\u6cd52)\n    for (int i = 0; i < 5 * n + 1; i++) {\n        System.out.println(0);\n    }\n    // +n*n (\u6280\u6cd53)\n    for (int i = 0; i < 2 * n; i++) {\n        for (int j = 0; j < n + 1; j++) {\n            System.out.println(0);\n        }\n    }\n}\n
void Algorithm(int n) {\n    int a = 1;  // +0 (\u6280\u6cd51)\n    a = a + n;  // +0 (\u6280\u6cd51)\n    // +n (\u6280\u6cd52)\n    for (int i = 0; i < 5 * n + 1; i++) {\n        Console.WriteLine(0);\n    }\n    // +n*n (\u6280\u6cd53)\n    for (int i = 0; i < 2 * n; i++) {\n        for (int j = 0; j < n + 1; j++) {\n            Console.WriteLine(0);\n        }\n    }\n}\n
func algorithm(n int) {\n    a := 1     // +0 (\u6280\u6cd51)\n    a = a + n  // +0 (\u6280\u6cd51)\n    // +n (\u6280\u6cd52)\n    for i := 0; i < 5 * n + 1; i++ {\n        fmt.Println(0)\n    }\n    // +n*n (\u6280\u6cd53)\n    for i := 0; i < 2 * n; i++ {\n        for j := 0; j < n + 1; j++ {\n            fmt.Println(0)\n        }\n    }\n}\n
func algorithm(n: Int) {\n    var a = 1 // +0 (\u6280\u6cd51)\n    a = a + n // +0 (\u6280\u6cd51)\n    // +n (\u6280\u6cd52)\n    for _ in 0 ..< (5 * n + 1) {\n        print(0)\n    }\n    // +n*n (\u6280\u6cd53)\n    for _ in 0 ..< (2 * n) {\n        for _ in 0 ..< (n + 1) {\n            print(0)\n        }\n    }\n}\n
function algorithm(n) {\n    let a = 1;  // +0 (\u6280\u6cd51)\n    a = a + n;  // +0 (\u6280\u6cd51)\n    // +n (\u6280\u6cd52)\n    for (let i = 0; i < 5 * n + 1; i++) {\n        console.log(0);\n    }\n    // +n*n (\u6280\u6cd53)\n    for (let i = 0; i < 2 * n; i++) {\n        for (let j = 0; j < n + 1; j++) {\n            console.log(0);\n        }\n    }\n}\n
function algorithm(n: number): void {\n    let a = 1;  // +0 (\u6280\u6cd51)\n    a = a + n;  // +0 (\u6280\u6cd51)\n    // +n (\u6280\u6cd52)\n    for (let i = 0; i < 5 * n + 1; i++) {\n        console.log(0);\n    }\n    // +n*n (\u6280\u6cd53)\n    for (let i = 0; i < 2 * n; i++) {\n        for (let j = 0; j < n + 1; j++) {\n            console.log(0);\n        }\n    }\n}\n
void algorithm(int n) {\n  int a = 1; // +0 (\u6280\u6cd51)\n  a = a + n; // +0 (\u6280\u6cd51)\n  // +n (\u6280\u6cd52)\n  for (int i = 0; i < 5 * n + 1; i++) {\n    print(0);\n  }\n  // +n*n (\u6280\u6cd53)\n  for (int i = 0; i < 2 * n; i++) {\n    for (int j = 0; j < n + 1; j++) {\n      print(0);\n    }\n  }\n}\n
fn algorithm(n: i32) {\n    let mut a = 1;     // +0 (\u6280\u6cd51)\n    a = a + n;        // +0 (\u6280\u6cd51)\n\n    // +n (\u6280\u6cd52)\n    for i in 0..(5 * n + 1) {\n        println!(\"{}\", 0);\n    }\n\n    // +n*n (\u6280\u6cd53)\n    for i in 0..(2 * n) {\n        for j in 0..(n + 1) {\n            println!(\"{}\", 0);\n        }\n    }\n}\n
void algorithm(int n) {\n    int a = 1;  // +0 (\u6280\u6cd51)\n    a = a + n;  // +0 (\u6280\u6cd51)\n    // +n (\u6280\u6cd52)\n    for (int i = 0; i < 5 * n + 1; i++) {\n        printf(\"%d\", 0);\n    }\n    // +n*n (\u6280\u6cd53)\n    for (int i = 0; i < 2 * n; i++) {\n        for (int j = 0; j < n + 1; j++) {\n            printf(\"%d\", 0);\n        }\n    }\n}\n
\n

\u4ee5\u4e0b\u306e\u5f0f\u306f\u3001\u7c21\u7565\u5316\u524d\u5f8c\u306e\u30ab\u30a6\u30f3\u30c8\u7d50\u679c\u3092\u793a\u3057\u3066\u304a\u308a\u3001\u3069\u3061\u3089\u3082\\(O(n^2)\\)\u306e\u6642\u9593\u8a08\u7b97\u91cf\u306b\u5c0e\u304d\u307e\u3059\uff1a

\\[ \\begin{aligned} T(n) & = 2n(n + 1) + (5n + 1) + 2 & \\text{\u5b8c\u5168\u30ab\u30a6\u30f3\u30c8 (-.-|||)} \\newline & = 2n^2 + 7n + 3 \\newline T(n) & = n^2 + n & \\text{\u7c21\u7565\u5316\u30ab\u30a6\u30f3\u30c8 (o.O)} \\end{aligned} \\]"},{"location":"chapter_computational_complexity/time_complexity/#2-2","title":"2. \u00a0 \u30b9\u30c6\u30c3\u30d72: \u6f38\u8fd1\u4e0a\u9650\u306e\u6c7a\u5b9a","text":"

\u6642\u9593\u8a08\u7b97\u91cf\u306f\\(T(n)\\)\u306e\u6700\u9ad8\u6b21\u9805\u306b\u3088\u3063\u3066\u6c7a\u5b9a\u3055\u308c\u307e\u3059\u3002\u3053\u308c\u306f\u3001\\(n\\)\u304c\u7121\u9650\u5927\u306b\u8fd1\u3065\u304f\u306b\u3064\u308c\u3066\u3001\u6700\u9ad8\u6b21\u9805\u304c\u652f\u914d\u7684\u306b\u306a\u308a\u3001\u4ed6\u306e\u9805\u306e\u5f71\u97ff\u306f\u7121\u8996\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308b\u305f\u3081\u3067\u3059\u3002

\u4ee5\u4e0b\u306e\u8868\u306f\u3001\u7570\u306a\u308b\u64cd\u4f5c\u30ab\u30a6\u30f3\u30c8\u3068\u305d\u308c\u306b\u5bfe\u5fdc\u3059\u308b\u6642\u9593\u8a08\u7b97\u91cf\u306e\u4f8b\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002\u4fc2\u6570\u304c\u5897\u52a0\u30aa\u30fc\u30c0\u30fc\u3092\u5909\u66f4\u3067\u304d\u306a\u3044\u3053\u3068\u3092\u5f37\u8abf\u3059\u308b\u305f\u3081\u306b\u3001\u8a87\u5f35\u3055\u308c\u305f\u5024\u304c\u4f7f\u7528\u3055\u308c\u3066\u3044\u307e\u3059\u3002\\(n\\)\u304c\u975e\u5e38\u306b\u5927\u304d\u304f\u306a\u308b\u3068\u3001\u3053\u308c\u3089\u306e\u5b9a\u6570\u306f\u91cd\u8981\u3067\u306a\u304f\u306a\u308a\u307e\u3059\u3002

\u8868: \u7570\u306a\u308b\u64cd\u4f5c\u30ab\u30a6\u30f3\u30c8\u306b\u5bfe\u3059\u308b\u6642\u9593\u8a08\u7b97\u91cf

\u64cd\u4f5c\u30ab\u30a6\u30f3\u30c8 \\(T(n)\\) \u6642\u9593\u8a08\u7b97\u91cf \\(O(f(n))\\) \\(100000\\) \\(O(1)\\) \\(3n + 2\\) \\(O(n)\\) \\(2n^2 + 3n + 2\\) \\(O(n^2)\\) \\(n^3 + 10000n^2\\) \\(O(n^3)\\) \\(2^n + 10000n^{10000}\\) \\(O(2^n)\\)"},{"location":"chapter_computational_complexity/time_complexity/#234","title":"2.3.4 \u00a0 \u4e00\u822c\u7684\u306a\u6642\u9593\u8a08\u7b97\u91cf\u306e\u7a2e\u985e","text":"

\u5165\u529b\u30c7\u30fc\u30bf\u30b5\u30a4\u30ba\u3092\\(n\\)\u3068\u3057\u307e\u3057\u3087\u3046\u3002\u4e00\u822c\u7684\u306a\u6642\u9593\u8a08\u7b97\u91cf\u306e\u7a2e\u985e\u3092\u4e0b\u56f3\u306b\u793a\u3057\u3001\u4f4e\u3044\u3082\u306e\u304b\u3089\u9ad8\u3044\u3082\u306e\u3078\u3068\u4e26\u3079\u3066\u3044\u307e\u3059\uff1a

\\[ \\begin{aligned} & O(1) < O(\\log n) < O(n) < O(n \\log n) < O(n^2) < O(2^n) < O(n!) \\newline & \\text{\u5b9a\u6570} < \\text{\u5bfe\u6570} < \\text{\u7dda\u5f62} < \\text{\u7dda\u5f62\u5bfe\u6570} < \\text{\u4e8c\u6b21} < \\text{\u6307\u6570} < \\text{\u968e\u4e57} \\end{aligned} \\]

\u56f3 2-9 \u00a0 Common types of time complexity

"},{"location":"chapter_computational_complexity/time_complexity/#1-o1","title":"1. \u00a0 \u5b9a\u6570\u30aa\u30fc\u30c0\u30fc \\(O(1)\\)","text":"

\u5b9a\u6570\u30aa\u30fc\u30c0\u30fc\u306f\u3001\u64cd\u4f5c\u6570\u304c\u5165\u529b\u30c7\u30fc\u30bf\u30b5\u30a4\u30ba\\(n\\)\u3068\u306f\u7121\u95a2\u4fc2\u3067\u3042\u308b\u3053\u3068\u3092\u610f\u5473\u3057\u307e\u3059\u3002\u4ee5\u4e0b\u306e\u95a2\u6570\u3067\u306f\u3001\u64cd\u4f5c\u6570size\u304c\u5927\u304d\u3044\u5834\u5408\u3067\u3082\u3001\\(n\\)\u3068\u306f\u7121\u95a2\u4fc2\u3067\u3042\u308b\u305f\u3081\u3001\u6642\u9593\u8a08\u7b97\u91cf\u306f\\(O(1)\\)\u306e\u307e\u307e\u3067\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby time_complexity.py
def constant(n: int) -> int:\n    \"\"\"\u5b9a\u6570\u8907\u96d1\u5ea6\"\"\"\n    count = 0\n    size = 100000\n    for _ in range(size):\n        count += 1\n    return count\n
time_complexity.cpp
/* \u5b9a\u6570\u8a08\u7b97\u91cf */\nint constant(int n) {\n    int count = 0;\n    int size = 100000;\n    for (int i = 0; i < size; i++)\n        count++;\n    return count;\n}\n
time_complexity.java
/* \u5b9a\u6570\u8a08\u7b97\u91cf */\nint constant(int n) {\n    int count = 0;\n    int size = 100000;\n    for (int i = 0; i < size; i++)\n        count++;\n    return count;\n}\n
time_complexity.cs
[class]{time_complexity}-[func]{Constant}\n
time_complexity.go
[class]{}-[func]{constant}\n
time_complexity.swift
[class]{}-[func]{constant}\n
time_complexity.js
[class]{}-[func]{constant}\n
time_complexity.ts
[class]{}-[func]{constant}\n
time_complexity.dart
[class]{}-[func]{constant}\n
time_complexity.rs
[class]{}-[func]{constant}\n
time_complexity.c
[class]{}-[func]{constant}\n
time_complexity.kt
[class]{}-[func]{constant}\n
time_complexity.rb
[class]{}-[func]{constant}\n
"},{"location":"chapter_computational_complexity/time_complexity/#2-on","title":"2. \u00a0 \u7dda\u5f62\u30aa\u30fc\u30c0\u30fc \\(O(n)\\)","text":"

\u7dda\u5f62\u30aa\u30fc\u30c0\u30fc\u306f\u3001\u64cd\u4f5c\u6570\u304c\u5165\u529b\u30c7\u30fc\u30bf\u30b5\u30a4\u30ba\\(n\\)\u3068\u7dda\u5f62\u306b\u5897\u52a0\u3059\u308b\u3053\u3068\u3092\u793a\u3057\u307e\u3059\u3002\u7dda\u5f62\u30aa\u30fc\u30c0\u30fc\u306f\u4e00\u822c\u7684\u306b\u5358\u4e00\u30eb\u30fc\u30d7\u69cb\u9020\u3067\u73fe\u308c\u307e\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby time_complexity.py
def linear(n: int) -> int:\n    \"\"\"\u7dda\u5f62\u8907\u96d1\u5ea6\"\"\"\n    count = 0\n    for _ in range(n):\n        count += 1\n    return count\n
time_complexity.cpp
/* \u7dda\u5f62\u8a08\u7b97\u91cf */\nint linear(int n) {\n    int count = 0;\n    for (int i = 0; i < n; i++)\n        count++;\n    return count;\n}\n
time_complexity.java
/* \u7dda\u5f62\u8a08\u7b97\u91cf */\nint linear(int n) {\n    int count = 0;\n    for (int i = 0; i < n; i++)\n        count++;\n    return count;\n}\n
time_complexity.cs
[class]{time_complexity}-[func]{Linear}\n
time_complexity.go
[class]{}-[func]{linear}\n
time_complexity.swift
[class]{}-[func]{linear}\n
time_complexity.js
[class]{}-[func]{linear}\n
time_complexity.ts
[class]{}-[func]{linear}\n
time_complexity.dart
[class]{}-[func]{linear}\n
time_complexity.rs
[class]{}-[func]{linear}\n
time_complexity.c
[class]{}-[func]{linear}\n
time_complexity.kt
[class]{}-[func]{linear}\n
time_complexity.rb
[class]{}-[func]{linear}\n

\u914d\u5217\u306e\u8d70\u67fb\u3084\u9023\u7d50\u30ea\u30b9\u30c8\u306e\u8d70\u67fb\u306a\u3069\u306e\u64cd\u4f5c\u306f\u6642\u9593\u8a08\u7b97\u91cf\u304c\\(O(n)\\)\u3067\u3001\\(n\\)\u306f\u914d\u5217\u307e\u305f\u306f\u30ea\u30b9\u30c8\u306e\u9577\u3055\u3067\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby time_complexity.py
def array_traversal(nums: list[int]) -> int:\n    \"\"\"\u7dda\u5f62\u8907\u96d1\u5ea6\uff08\u914d\u5217\u306e\u8d70\u67fb\uff09\"\"\"\n    count = 0\n    # \u30eb\u30fc\u30d7\u56de\u6570\u306f\u914d\u5217\u306e\u9577\u3055\u306b\u6bd4\u4f8b\u3059\u308b\n    for num in nums:\n        count += 1\n    return count\n
time_complexity.cpp
/* \u7dda\u5f62\u8a08\u7b97\u91cf\uff08\u914d\u5217\u306e\u8d70\u67fb\uff09 */\nint arrayTraversal(vector<int> &nums) {\n    int count = 0;\n    // \u30eb\u30fc\u30d7\u56de\u6570\u306f\u914d\u5217\u306e\u9577\u3055\u306b\u6bd4\u4f8b\n    for (int num : nums) {\n        count++;\n    }\n    return count;\n}\n
time_complexity.java
/* \u7dda\u5f62\u8a08\u7b97\u91cf\uff08\u914d\u5217\u306e\u8d70\u67fb\uff09 */\nint arrayTraversal(int[] nums) {\n    int count = 0;\n    // \u30eb\u30fc\u30d7\u56de\u6570\u306f\u914d\u5217\u306e\u9577\u3055\u306b\u6bd4\u4f8b\n    for (int num : nums) {\n        count++;\n    }\n    return count;\n}\n
time_complexity.cs
[class]{time_complexity}-[func]{ArrayTraversal}\n
time_complexity.go
[class]{}-[func]{arrayTraversal}\n
time_complexity.swift
[class]{}-[func]{arrayTraversal}\n
time_complexity.js
[class]{}-[func]{arrayTraversal}\n
time_complexity.ts
[class]{}-[func]{arrayTraversal}\n
time_complexity.dart
[class]{}-[func]{arrayTraversal}\n
time_complexity.rs
[class]{}-[func]{array_traversal}\n
time_complexity.c
[class]{}-[func]{arrayTraversal}\n
time_complexity.kt
[class]{}-[func]{arrayTraversal}\n
time_complexity.rb
[class]{}-[func]{array_traversal}\n

\u5165\u529b\u30c7\u30fc\u30bf\u30b5\u30a4\u30ba\\(n\\)\u306f\u5165\u529b\u30c7\u30fc\u30bf\u306e\u7a2e\u985e\u306b\u57fa\u3065\u3044\u3066\u6c7a\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001\u6700\u521d\u306e\u4f8b\u3067\u306f\u3001\\(n\\)\u306f\u5165\u529b\u30c7\u30fc\u30bf\u30b5\u30a4\u30ba\u3092\u8868\u3057\u30012\u756a\u76ee\u306e\u4f8b\u3067\u306f\u3001\u914d\u5217\u306e\u9577\u3055\\(n\\)\u304c\u30c7\u30fc\u30bf\u30b5\u30a4\u30ba\u3067\u3059\u3002

"},{"location":"chapter_computational_complexity/time_complexity/#3-on2","title":"3. \u00a0 \u4e8c\u6b21\u30aa\u30fc\u30c0\u30fc \\(O(n^2)\\)","text":"

\u4e8c\u6b21\u30aa\u30fc\u30c0\u30fc\u306f\u3001\u64cd\u4f5c\u6570\u304c\u5165\u529b\u30c7\u30fc\u30bf\u30b5\u30a4\u30ba\\(n\\)\u306e\u4e8c\u4e57\u306b\u6bd4\u4f8b\u3057\u3066\u5897\u52a0\u3059\u308b\u3053\u3068\u3092\u610f\u5473\u3057\u307e\u3059\u3002\u4e8c\u6b21\u30aa\u30fc\u30c0\u30fc\u306f\u901a\u5e38\u30cd\u30b9\u30c8\u3057\u305f\u30eb\u30fc\u30d7\u3067\u73fe\u308c\u3001\u5916\u5074\u3068\u5185\u5074\u306e\u30eb\u30fc\u30d7\u306e\u4e21\u65b9\u304c\u6642\u9593\u8a08\u7b97\u91cf\\(O(n)\\)\u3092\u6301\u3061\u3001\u5168\u4f53\u306e\u8907\u96d1\u5ea6\u306f\\(O(n^2)\\)\u306b\u306a\u308a\u307e\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby time_complexity.py
def quadratic(n: int) -> int:\n    \"\"\"\u4e8c\u6b21\u8907\u96d1\u5ea6\"\"\"\n    count = 0\n    # \u30eb\u30fc\u30d7\u56de\u6570\u306f\u30c7\u30fc\u30bf\u30b5\u30a4\u30ban\u306e\u4e8c\u4e57\u306b\u6bd4\u4f8b\u3059\u308b\n    for i in range(n):\n        for j in range(n):\n            count += 1\n    return count\n
time_complexity.cpp
/* \u4e8c\u6b21\u8a08\u7b97\u91cf */\nint quadratic(int n) {\n    int count = 0;\n    // \u30eb\u30fc\u30d7\u56de\u6570\u306f\u30c7\u30fc\u30bf\u30b5\u30a4\u30ba n \u306e\u4e8c\u4e57\u306b\u6bd4\u4f8b\n    for (int i = 0; i < n; i++) {\n        for (int j = 0; j < n; j++) {\n            count++;\n        }\n    }\n    return count;\n}\n
time_complexity.java
/* \u4e8c\u6b21\u8a08\u7b97\u91cf */\nint quadratic(int n) {\n    int count = 0;\n    // \u30eb\u30fc\u30d7\u56de\u6570\u306f\u30c7\u30fc\u30bf\u30b5\u30a4\u30ba n \u306e\u4e8c\u4e57\u306b\u6bd4\u4f8b\n    for (int i = 0; i < n; i++) {\n        for (int j = 0; j < n; j++) {\n            count++;\n        }\n    }\n    return count;\n}\n
time_complexity.cs
[class]{time_complexity}-[func]{Quadratic}\n
time_complexity.go
[class]{}-[func]{quadratic}\n
time_complexity.swift
[class]{}-[func]{quadratic}\n
time_complexity.js
[class]{}-[func]{quadratic}\n
time_complexity.ts
[class]{}-[func]{quadratic}\n
time_complexity.dart
[class]{}-[func]{quadratic}\n
time_complexity.rs
[class]{}-[func]{quadratic}\n
time_complexity.c
[class]{}-[func]{quadratic}\n
time_complexity.kt
[class]{}-[func]{quadratic}\n
time_complexity.rb
[class]{}-[func]{quadratic}\n

\u4e0b\u56f3\u306f\u5b9a\u6570\u30aa\u30fc\u30c0\u30fc\u3001\u7dda\u5f62\u30aa\u30fc\u30c0\u30fc\u3001\u4e8c\u6b21\u30aa\u30fc\u30c0\u30fc\u306e\u6642\u9593\u8a08\u7b97\u91cf\u3092\u6bd4\u8f03\u3057\u3066\u3044\u307e\u3059\u3002

\u56f3 2-10 \u00a0 Constant, linear, and quadratic order time complexities

\u4f8b\u3048\u3070\u3001\u30d0\u30d6\u30eb\u30bd\u30fc\u30c8\u3067\u306f\u3001\u5916\u5074\u306e\u30eb\u30fc\u30d7\u304c\\(n - 1\\)\u56de\u5b9f\u884c\u3055\u308c\u3001\u5185\u5074\u306e\u30eb\u30fc\u30d7\u304c\\(n-1\\)\u3001\\(n-2\\)\u3001...\u3001\\(2\\)\u3001\\(1\\)\u56de\u5b9f\u884c\u3055\u308c\u3001\u5e73\u5747\\(n / 2\\)\u56de\u3068\u306a\u308a\u3001\u6642\u9593\u8a08\u7b97\u91cf\u306f\\(O((n - 1) n / 2) = O(n^2)\\)\u306b\u306a\u308a\u307e\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby time_complexity.py
def bubble_sort(nums: list[int]) -> int:\n    \"\"\"\u4e8c\u6b21\u8907\u96d1\u5ea6\uff08\u30d0\u30d6\u30eb\u30bd\u30fc\u30c8\uff09\"\"\"\n    count = 0  # \u30ab\u30a6\u30f3\u30bf\n    # \u5916\u5074\u306e\u30eb\u30fc\u30d7: \u672a\u30bd\u30fc\u30c8\u7bc4\u56f2\u306f [0, i]\n    for i in range(len(nums) - 1, 0, -1):\n        # \u5185\u5074\u306e\u30eb\u30fc\u30d7: \u672a\u30bd\u30fc\u30c8\u7bc4\u56f2 [0, i] \u306e\u6700\u5927\u8981\u7d20\u3092\u53f3\u7aef\u306b\u30b9\u30ef\u30c3\u30d7\n        for j in range(i):\n            if nums[j] > nums[j + 1]:\n                # nums[j] \u3068 nums[j + 1] \u3092\u30b9\u30ef\u30c3\u30d7\n                tmp: int = nums[j]\n                nums[j] = nums[j + 1]\n                nums[j + 1] = tmp\n                count += 3  # \u8981\u7d20\u306e\u30b9\u30ef\u30c3\u30d7\u306f3\u3064\u306e\u500b\u5225\u64cd\u4f5c\u3092\u542b\u3080\n    return count\n
time_complexity.cpp
/* \u4e8c\u6b21\u8a08\u7b97\u91cf\uff08\u30d0\u30d6\u30eb\u30bd\u30fc\u30c8\uff09 */\nint bubbleSort(vector<int> &nums) {\n    int count = 0; // \u30ab\u30a6\u30f3\u30bf\u30fc\n    // \u5916\u5074\u30eb\u30fc\u30d7\uff1a\u672a\u30bd\u30fc\u30c8\u7bc4\u56f2\u306f [0, i]\n    for (int i = nums.size() - 1; i > 0; i--) {\n        // \u5185\u5074\u30eb\u30fc\u30d7\uff1a\u672a\u30bd\u30fc\u30c8\u7bc4\u56f2 [0, i] \u306e\u6700\u5927\u8981\u7d20\u3092\u7bc4\u56f2\u306e\u53f3\u7aef\u306b\u30b9\u30ef\u30c3\u30d7\n        for (int j = 0; j < i; j++) {\n            if (nums[j] > nums[j + 1]) {\n                // nums[j] \u3068 nums[j + 1] \u3092\u30b9\u30ef\u30c3\u30d7\n                int tmp = nums[j];\n                nums[j] = nums[j + 1];\n                nums[j + 1] = tmp;\n                count += 3; // \u8981\u7d20\u306e\u30b9\u30ef\u30c3\u30d7\u306b\u306f3\u3064\u306e\u500b\u5225\u64cd\u4f5c\u304c\u542b\u307e\u308c\u308b\n            }\n        }\n    }\n    return count;\n}\n
time_complexity.java
/* \u4e8c\u6b21\u8a08\u7b97\u91cf\uff08\u30d0\u30d6\u30eb\u30bd\u30fc\u30c8\uff09 */\nint bubbleSort(int[] nums) {\n    int count = 0; // \u30ab\u30a6\u30f3\u30bf\u30fc\n    // \u5916\u5074\u30eb\u30fc\u30d7\uff1a\u672a\u30bd\u30fc\u30c8\u7bc4\u56f2\u306f [0, i]\n    for (int i = nums.length - 1; i > 0; i--) {\n        // \u5185\u5074\u30eb\u30fc\u30d7\uff1a\u672a\u30bd\u30fc\u30c8\u7bc4\u56f2 [0, i] \u306e\u6700\u5927\u8981\u7d20\u3092\u7bc4\u56f2\u306e\u53f3\u7aef\u306b\u30b9\u30ef\u30c3\u30d7\n        for (int j = 0; j < i; j++) {\n            if (nums[j] > nums[j + 1]) {\n                // nums[j] \u3068 nums[j + 1] \u3092\u30b9\u30ef\u30c3\u30d7\n                int tmp = nums[j];\n                nums[j] = nums[j + 1];\n                nums[j + 1] = tmp;\n                count += 3; // \u8981\u7d20\u306e\u30b9\u30ef\u30c3\u30d7\u306b\u306f3\u3064\u306e\u500b\u5225\u64cd\u4f5c\u304c\u542b\u307e\u308c\u308b\n            }\n        }\n    }\n    return count;\n}\n
time_complexity.cs
[class]{time_complexity}-[func]{BubbleSort}\n
time_complexity.go
[class]{}-[func]{bubbleSort}\n
time_complexity.swift
[class]{}-[func]{bubbleSort}\n
time_complexity.js
[class]{}-[func]{bubbleSort}\n
time_complexity.ts
[class]{}-[func]{bubbleSort}\n
time_complexity.dart
[class]{}-[func]{bubbleSort}\n
time_complexity.rs
[class]{}-[func]{bubble_sort}\n
time_complexity.c
[class]{}-[func]{bubbleSort}\n
time_complexity.kt
[class]{}-[func]{bubbleSort}\n
time_complexity.rb
[class]{}-[func]{bubble_sort}\n
"},{"location":"chapter_computational_complexity/time_complexity/#4-o2n","title":"4. \u00a0 \u6307\u6570\u30aa\u30fc\u30c0\u30fc \\(O(2^n)\\)","text":"

\u751f\u7269\u5b66\u7684\u300c\u7d30\u80de\u5206\u88c2\u300d\u306f\u6307\u6570\u30aa\u30fc\u30c0\u30fc\u5897\u52a0\u306e\u5178\u578b\u4f8b\u3067\u3059\uff1a1\u3064\u306e\u7d30\u80de\u304b\u3089\u59cb\u307e\u308a\u30011\u56de\u306e\u5206\u88c2\u5f8c\u306b2\u3064\u30012\u56de\u306e\u5206\u88c2\u5f8c\u306b4\u3064\u3068\u306a\u308a\u3001\\(n\\)\u56de\u306e\u5206\u88c2\u5f8c\u306b\\(2^n\\)\u500b\u306e\u7d30\u80de\u306b\u306a\u308a\u307e\u3059\u3002

\u4e0b\u56f3\u3068\u30b3\u30fc\u30c9\u306f\u7d30\u80de\u5206\u88c2\u30d7\u30ed\u30bb\u30b9\u3092\u30b7\u30df\u30e5\u30ec\u30fc\u30c8\u3057\u3001\u6642\u9593\u8a08\u7b97\u91cf\u306f\\(O(2^n)\\)\u3067\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby time_complexity.py
def exponential(n: int) -> int:\n    \"\"\"\u6307\u6570\u8907\u96d1\u5ea6\uff08\u30eb\u30fc\u30d7\u5b9f\u88c5\uff09\"\"\"\n    count = 0\n    base = 1\n    # \u30bb\u30eb\u306f\u6bce\u56de2\u3064\u306b\u5206\u88c2\u3057\u30011, 2, 4, 8, ..., 2^(n-1) \u306e\u6570\u5217\u3092\u5f62\u6210\u3059\u308b\n    for _ in range(n):\n        for _ in range(base):\n            count += 1\n        base *= 2\n    # count = 1 + 2 + 4 + 8 + .. + 2^(n-1) = 2^n - 1\n    return count\n
time_complexity.cpp
/* \u6307\u6570\u8a08\u7b97\u91cf\uff08\u30eb\u30fc\u30d7\u5b9f\u88c5\uff09 */\nint exponential(int n) {\n    int count = 0, base = 1;\n    // \u30bb\u30eb\u306f\u6bce\u30e9\u30a6\u30f3\u30c92\u3064\u306b\u5206\u88c2\u3057\u3001\u6570\u5217 1, 2, 4, 8, ..., 2^(n-1) \u3092\u5f62\u6210\n    for (int i = 0; i < n; i++) {\n        for (int j = 0; j < base; j++) {\n            count++;\n        }\n        base *= 2;\n    }\n    // count = 1 + 2 + 4 + 8 + .. + 2^(n-1) = 2^n - 1\n    return count;\n}\n
time_complexity.java
/* \u6307\u6570\u8a08\u7b97\u91cf\uff08\u30eb\u30fc\u30d7\u5b9f\u88c5\uff09 */\nint exponential(int n) {\n    int count = 0, base = 1;\n    // \u30bb\u30eb\u306f\u6bce\u30e9\u30a6\u30f3\u30c92\u3064\u306b\u5206\u88c2\u3057\u3001\u6570\u5217 1, 2, 4, 8, ..., 2^(n-1) \u3092\u5f62\u6210\n    for (int i = 0; i < n; i++) {\n        for (int j = 0; j < base; j++) {\n            count++;\n        }\n        base *= 2;\n    }\n    // count = 1 + 2 + 4 + 8 + .. + 2^(n-1) = 2^n - 1\n    return count;\n}\n
time_complexity.cs
[class]{time_complexity}-[func]{Exponential}\n
time_complexity.go
[class]{}-[func]{exponential}\n
time_complexity.swift
[class]{}-[func]{exponential}\n
time_complexity.js
[class]{}-[func]{exponential}\n
time_complexity.ts
[class]{}-[func]{exponential}\n
time_complexity.dart
[class]{}-[func]{exponential}\n
time_complexity.rs
[class]{}-[func]{exponential}\n
time_complexity.c
[class]{}-[func]{exponential}\n
time_complexity.kt
[class]{}-[func]{exponential}\n
time_complexity.rb
[class]{}-[func]{exponential}\n

\u56f3 2-11 \u00a0 Exponential order time complexity

\u5b9f\u969b\u306b\u306f\u3001\u6307\u6570\u30aa\u30fc\u30c0\u30fc\u306f\u518d\u5e30\u95a2\u6570\u3067\u3088\u304f\u73fe\u308c\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001\u4ee5\u4e0b\u306e\u30b3\u30fc\u30c9\u3067\u306f\u3001\u518d\u5e30\u7684\u306b2\u3064\u306e\u534a\u5206\u306b\u5206\u5272\u3057\u3001\\(n\\)\u56de\u306e\u5206\u5272\u5f8c\u306b\u505c\u6b62\u3057\u307e\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby time_complexity.py
def exp_recur(n: int) -> int:\n    \"\"\"\u6307\u6570\u8907\u96d1\u5ea6\uff08\u518d\u5e30\u5b9f\u88c5\uff09\"\"\"\n    if n == 1:\n        return 1\n    return exp_recur(n - 1) + exp_recur(n - 1) + 1\n
time_complexity.cpp
/* \u6307\u6570\u8a08\u7b97\u91cf\uff08\u518d\u5e30\u5b9f\u88c5\uff09 */\nint expRecur(int n) {\n    if (n == 1)\n        return 1;\n    return expRecur(n - 1) + expRecur(n - 1) + 1;\n}\n
time_complexity.java
/* \u6307\u6570\u8a08\u7b97\u91cf\uff08\u518d\u5e30\u5b9f\u88c5\uff09 */\nint expRecur(int n) {\n    if (n == 1)\n        return 1;\n    return expRecur(n - 1) + expRecur(n - 1) + 1;\n}\n
time_complexity.cs
[class]{time_complexity}-[func]{ExpRecur}\n
time_complexity.go
[class]{}-[func]{expRecur}\n
time_complexity.swift
[class]{}-[func]{expRecur}\n
time_complexity.js
[class]{}-[func]{expRecur}\n
time_complexity.ts
[class]{}-[func]{expRecur}\n
time_complexity.dart
[class]{}-[func]{expRecur}\n
time_complexity.rs
[class]{}-[func]{exp_recur}\n
time_complexity.c
[class]{}-[func]{expRecur}\n
time_complexity.kt
[class]{}-[func]{expRecur}\n
time_complexity.rb
[class]{}-[func]{exp_recur}\n

\u6307\u6570\u30aa\u30fc\u30c0\u30fc\u306e\u5897\u52a0\u306f\u6975\u3081\u3066\u6025\u901f\u3067\u3001\u5168\u6570\u63a2\u7d22\u6cd5\uff08\u30d6\u30eb\u30fc\u30c8\u30d5\u30a9\u30fc\u30b9\u3001\u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u306a\u3069\uff09\u3067\u3088\u304f\u898b\u3089\u308c\u307e\u3059\u3002\u5927\u898f\u6a21\u554f\u984c\u3067\u306f\u3001\u6307\u6570\u30aa\u30fc\u30c0\u30fc\u306f\u53d7\u3051\u5165\u308c\u3089\u308c\u305a\u3001\u3057\u3070\u3057\u3070\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u3084\u8caa\u6b32\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u304c\u89e3\u6c7a\u7b56\u3068\u3057\u3066\u5fc5\u8981\u306b\u306a\u308a\u307e\u3059\u3002

"},{"location":"chapter_computational_complexity/time_complexity/#5-olog-n","title":"5. \u00a0 \u5bfe\u6570\u30aa\u30fc\u30c0\u30fc \\(O(\\log n)\\)","text":"

\u6307\u6570\u30aa\u30fc\u30c0\u30fc\u3068\u306f\u5bfe\u7167\u7684\u306b\u3001\u5bfe\u6570\u30aa\u30fc\u30c0\u30fc\u306f\u300c\u5404\u30e9\u30a6\u30f3\u30c9\u3067\u30b5\u30a4\u30ba\u304c\u534a\u5206\u306b\u306a\u308b\u300d\u72b6\u6cc1\u3092\u53cd\u6620\u3057\u307e\u3059\u3002\u5165\u529b\u30c7\u30fc\u30bf\u30b5\u30a4\u30ba\u304c\\(n\\)\u306e\u5834\u5408\u3001\u5404\u30e9\u30a6\u30f3\u30c9\u3067\u30b5\u30a4\u30ba\u304c\u534a\u5206\u306b\u306a\u308b\u305f\u3081\u3001\u53cd\u5fa9\u56de\u6570\u306f\\(\\log_2 n\\)\u3067\u3001\u3053\u308c\u306f\\(2^n\\)\u306e\u9006\u95a2\u6570\u3067\u3059\u3002

\u4e0b\u56f3\u3068\u30b3\u30fc\u30c9\u306f\u300c\u5404\u30e9\u30a6\u30f3\u30c9\u3067\u534a\u5206\u306b\u3059\u308b\u300d\u30d7\u30ed\u30bb\u30b9\u3092\u30b7\u30df\u30e5\u30ec\u30fc\u30c8\u3057\u3001\u6642\u9593\u8a08\u7b97\u91cf\u306f\\(O(\\log_2 n)\\)\u3067\u3001\u4e00\u822c\u7684\u306b\\(O(\\log n)\\)\u3068\u7701\u7565\u3055\u308c\u307e\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby time_complexity.py
def logarithmic(n: int) -> int:\n    \"\"\"\u5bfe\u6570\u8907\u96d1\u5ea6\uff08\u30eb\u30fc\u30d7\u5b9f\u88c5\uff09\"\"\"\n    count = 0\n    while n > 1:\n        n = n / 2\n        count += 1\n    return count\n
time_complexity.cpp
/* \u5bfe\u6570\u8a08\u7b97\u91cf\uff08\u30eb\u30fc\u30d7\u5b9f\u88c5\uff09 */\nint logarithmic(int n) {\n    int count = 0;\n    while (n > 1) {\n        n = n / 2;\n        count++;\n    }\n    return count;\n}\n
time_complexity.java
/* \u5bfe\u6570\u8a08\u7b97\u91cf\uff08\u30eb\u30fc\u30d7\u5b9f\u88c5\uff09 */\nint logarithmic(int n) {\n    int count = 0;\n    while (n > 1) {\n        n = n / 2;\n        count++;\n    }\n    return count;\n}\n
time_complexity.cs
[class]{time_complexity}-[func]{Logarithmic}\n
time_complexity.go
[class]{}-[func]{logarithmic}\n
time_complexity.swift
[class]{}-[func]{logarithmic}\n
time_complexity.js
[class]{}-[func]{logarithmic}\n
time_complexity.ts
[class]{}-[func]{logarithmic}\n
time_complexity.dart
[class]{}-[func]{logarithmic}\n
time_complexity.rs
[class]{}-[func]{logarithmic}\n
time_complexity.c
[class]{}-[func]{logarithmic}\n
time_complexity.kt
[class]{}-[func]{logarithmic}\n
time_complexity.rb
[class]{}-[func]{logarithmic}\n

\u56f3 2-12 \u00a0 Logarithmic order time complexity

\u6307\u6570\u30aa\u30fc\u30c0\u30fc\u3068\u540c\u69d8\u306b\u3001\u5bfe\u6570\u30aa\u30fc\u30c0\u30fc\u3082\u518d\u5e30\u95a2\u6570\u3067\u983b\u7e41\u306b\u73fe\u308c\u307e\u3059\u3002\u4ee5\u4e0b\u306e\u30b3\u30fc\u30c9\u306f\u9ad8\u3055\\(\\log_2 n\\)\u306e\u518d\u5e30\u6728\u3092\u5f62\u6210\u3057\u307e\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby time_complexity.py
def log_recur(n: int) -> int:\n    \"\"\"\u5bfe\u6570\u8907\u96d1\u5ea6\uff08\u518d\u5e30\u5b9f\u88c5\uff09\"\"\"\n    if n <= 1:\n        return 0\n    return log_recur(n / 2) + 1\n
time_complexity.cpp
/* \u5bfe\u6570\u8a08\u7b97\u91cf\uff08\u518d\u5e30\u5b9f\u88c5\uff09 */\nint logRecur(int n) {\n    if (n <= 1)\n        return 0;\n    return logRecur(n / 2) + 1;\n}\n
time_complexity.java
/* \u5bfe\u6570\u8a08\u7b97\u91cf\uff08\u518d\u5e30\u5b9f\u88c5\uff09 */\nint logRecur(int n) {\n    if (n <= 1)\n        return 0;\n    return logRecur(n / 2) + 1;\n}\n
time_complexity.cs
[class]{time_complexity}-[func]{LogRecur}\n
time_complexity.go
[class]{}-[func]{logRecur}\n
time_complexity.swift
[class]{}-[func]{logRecur}\n
time_complexity.js
[class]{}-[func]{logRecur}\n
time_complexity.ts
[class]{}-[func]{logRecur}\n
time_complexity.dart
[class]{}-[func]{logRecur}\n
time_complexity.rs
[class]{}-[func]{log_recur}\n
time_complexity.c
[class]{}-[func]{logRecur}\n
time_complexity.kt
[class]{}-[func]{logRecur}\n
time_complexity.rb
[class]{}-[func]{log_recur}\n

\u5bfe\u6570\u30aa\u30fc\u30c0\u30fc\u306f\u5206\u5272\u7d71\u6cbb\u6226\u7565\u306b\u57fa\u3065\u304f\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u5178\u578b\u3067\u3001\u300c\u591a\u304f\u306b\u5206\u5272\u300d\u3068\u300c\u8907\u96d1\u306a\u554f\u984c\u3092\u5358\u7d14\u5316\u300d\u3059\u308b\u30a2\u30d7\u30ed\u30fc\u30c1\u3092\u4f53\u73fe\u3057\u3066\u3044\u307e\u3059\u3002\u5897\u52a0\u304c\u9045\u304f\u3001\u5b9a\u6570\u30aa\u30fc\u30c0\u30fc\u306e\u6b21\u306b\u6700\u3082\u7406\u60f3\u7684\u306a\u6642\u9593\u8a08\u7b97\u91cf\u3067\u3059\u3002

\\(O(\\log n)\\)\u306e\u5e95\u306f\u4f55\u3067\u3059\u304b\uff1f

\u6280\u8853\u7684\u306b\u306f\u3001\u300c\\(m\\)\u306b\u5206\u5272\u300d\u306f\u6642\u9593\u8a08\u7b97\u91cf\\(O(\\log_m n)\\)\u306b\u5bfe\u5fdc\u3057\u307e\u3059\u3002\u5bfe\u6570\u306e\u5e95\u5909\u66f4\u516c\u5f0f\u3092\u4f7f\u7528\u3059\u308b\u3068\u3001\u7570\u306a\u308b\u5bfe\u6570\u8907\u96d1\u5ea6\u3092\u7b49\u4fa1\u306b\u3067\u304d\u307e\u3059\uff1a

\\[ O(\\log_m n) = O(\\log_k n / \\log_k m) = O(\\log_k n) \\]

\u3053\u308c\u306f\u3001\u5e95\\(m\\)\u3092\u8907\u96d1\u5ea6\u306b\u5f71\u97ff\u3092\u4e0e\u3048\u308b\u3053\u3068\u306a\u304f\u5909\u66f4\u3067\u304d\u308b\u3053\u3068\u3092\u610f\u5473\u3057\u307e\u3059\u3002\u3057\u305f\u304c\u3063\u3066\u3001\u3057\u3070\u3057\u3070\u5e95\\(m\\)\u3092\u7701\u7565\u3057\u3001\u5358\u306b\u5bfe\u6570\u30aa\u30fc\u30c0\u30fc\u3092\\(O(\\log n)\\)\u3068\u8868\u8a18\u3057\u307e\u3059\u3002

"},{"location":"chapter_computational_complexity/time_complexity/#6-on-log-n","title":"6. \u00a0 \u7dda\u5f62\u5bfe\u6570\u30aa\u30fc\u30c0\u30fc \\(O(n \\log n)\\)","text":"

\u7dda\u5f62\u5bfe\u6570\u30aa\u30fc\u30c0\u30fc\u306f\u30cd\u30b9\u30c8\u3057\u305f\u30eb\u30fc\u30d7\u3067\u3088\u304f\u73fe\u308c\u30012\u3064\u306e\u30eb\u30fc\u30d7\u306e\u8907\u96d1\u5ea6\u304c\u305d\u308c\u305e\u308c\\(O(\\log n)\\)\u3068\\(O(n)\\)\u3067\u3059\u3002\u95a2\u9023\u3059\u308b\u30b3\u30fc\u30c9\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby time_complexity.py
def linear_log_recur(n: int) -> int:\n    \"\"\"\u7dda\u5f62\u5bfe\u6570\u8907\u96d1\u5ea6\"\"\"\n    if n <= 1:\n        return 1\n    count: int = linear_log_recur(n // 2) + linear_log_recur(n // 2)\n    for _ in range(n):\n        count += 1\n    return count\n
time_complexity.cpp
/* \u7dda\u5f62\u5bfe\u6570\u8a08\u7b97\u91cf */\nint linearLogRecur(int n) {\n    if (n <= 1)\n        return 1;\n    int count = linearLogRecur(n / 2) + linearLogRecur(n / 2);\n    for (int i = 0; i < n; i++) {\n        count++;\n    }\n    return count;\n}\n
time_complexity.java
/* \u7dda\u5f62\u5bfe\u6570\u8a08\u7b97\u91cf */\nint linearLogRecur(int n) {\n    if (n <= 1)\n        return 1;\n    int count = linearLogRecur(n / 2) + linearLogRecur(n / 2);\n    for (int i = 0; i < n; i++) {\n        count++;\n    }\n    return count;\n}\n
time_complexity.cs
[class]{time_complexity}-[func]{LinearLogRecur}\n
time_complexity.go
[class]{}-[func]{linearLogRecur}\n
time_complexity.swift
[class]{}-[func]{linearLogRecur}\n
time_complexity.js
[class]{}-[func]{linearLogRecur}\n
time_complexity.ts
[class]{}-[func]{linearLogRecur}\n
time_complexity.dart
[class]{}-[func]{linearLogRecur}\n
time_complexity.rs
[class]{}-[func]{linear_log_recur}\n
time_complexity.c
[class]{}-[func]{linearLogRecur}\n
time_complexity.kt
[class]{}-[func]{linearLogRecur}\n
time_complexity.rb
[class]{}-[func]{linear_log_recur}\n

\u4e0b\u56f3\u306f\u7dda\u5f62\u5bfe\u6570\u30aa\u30fc\u30c0\u30fc\u304c\u3069\u306e\u3088\u3046\u306b\u751f\u6210\u3055\u308c\u308b\u304b\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002\u4e8c\u5206\u6728\u306e\u5404\u30ec\u30d9\u30eb\u306b\u306f\\(n\\)\u500b\u306e\u64cd\u4f5c\u304c\u3042\u308a\u3001\u6728\u306b\u306f\\(\\log_2 n + 1\\)\u30ec\u30d9\u30eb\u304c\u3042\u308a\u3001\u6642\u9593\u8a08\u7b97\u91cf\u306f\\(O(n \\log n)\\)\u306b\u306a\u308a\u307e\u3059\u3002

\u56f3 2-13 \u00a0 Linear-logarithmic order time complexity

\u4e3b\u6d41\u306e\u30bd\u30fc\u30c8\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306f\u901a\u5e38\\(O(n \\log n)\\)\u306e\u6642\u9593\u8a08\u7b97\u91cf\u3092\u6301\u3061\u3001\u30af\u30a4\u30c3\u30af\u30bd\u30fc\u30c8\u3001\u30de\u30fc\u30b8\u30bd\u30fc\u30c8\u3001\u30d2\u30fc\u30d7\u30bd\u30fc\u30c8\u306a\u3069\u304c\u3042\u308a\u307e\u3059\u3002

"},{"location":"chapter_computational_complexity/time_complexity/#7-on","title":"7. \u00a0 \u968e\u4e57\u30aa\u30fc\u30c0\u30fc \\(O(n!)\\)","text":"

\u968e\u4e57\u30aa\u30fc\u30c0\u30fc\u306f\u300c\u5168\u9806\u5217\u300d\u306e\u6570\u5b66\u554f\u984c\u306b\u5bfe\u5fdc\u3057\u307e\u3059\u3002\\(n\\)\u500b\u306e\u7570\u306a\u308b\u8981\u7d20\u304c\u4e0e\u3048\u3089\u308c\u305f\u5834\u5408\u3001\u53ef\u80fd\u306a\u9806\u5217\u306e\u7dcf\u6570\u306f\uff1a

\\[ n! = n \\times (n - 1) \\times (n - 2) \\times \\dots \\times 2 \\times 1 \\]

\u968e\u4e57\u306f\u901a\u5e38\u518d\u5e30\u3092\u4f7f\u7528\u3057\u3066\u5b9f\u88c5\u3055\u308c\u307e\u3059\u3002\u4ee5\u4e0b\u306e\u30b3\u30fc\u30c9\u3068\u56f3\u306b\u793a\u3055\u308c\u3066\u3044\u308b\u3088\u3046\u306b\u3001\u7b2c1\u30ec\u30d9\u30eb\u306f\\(n\\)\u500b\u306e\u5206\u5c90\u306b\u5206\u5272\u3055\u308c\u3001\u7b2c2\u30ec\u30d9\u30eb\u306f\\(n - 1\\)\u500b\u306e\u5206\u5c90\u306b\u5206\u5272\u3055\u308c\u3001\u7b2c\\(n\\)\u30ec\u30d9\u30eb\u5f8c\u306b\u505c\u6b62\u3057\u307e\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby time_complexity.py
def factorial_recur(n: int) -> int:\n    \"\"\"\u968e\u4e57\u8907\u96d1\u5ea6\uff08\u518d\u5e30\u5b9f\u88c5\uff09\"\"\"\n    if n == 0:\n        return 1\n    count = 0\n    # 1\u3064\u304b\u3089n\u306b\u5206\u5c90\n    for _ in range(n):\n        count += factorial_recur(n - 1)\n    return count\n
time_complexity.cpp
/* \u968e\u4e57\u8a08\u7b97\u91cf\uff08\u518d\u5e30\u5b9f\u88c5\uff09 */\nint factorialRecur(int n) {\n    if (n == 0)\n        return 1;\n    int count = 0;\n    // 1\u304b\u3089 n \u306b\u5206\u88c2\n    for (int i = 0; i < n; i++) {\n        count += factorialRecur(n - 1);\n    }\n    return count;\n}\n
time_complexity.java
/* \u968e\u4e57\u8a08\u7b97\u91cf\uff08\u518d\u5e30\u5b9f\u88c5\uff09 */\nint factorialRecur(int n) {\n    if (n == 0)\n        return 1;\n    int count = 0;\n    // 1\u304b\u3089 n \u306b\u5206\u88c2\n    for (int i = 0; i < n; i++) {\n        count += factorialRecur(n - 1);\n    }\n    return count;\n}\n
time_complexity.cs
[class]{time_complexity}-[func]{FactorialRecur}\n
time_complexity.go
[class]{}-[func]{factorialRecur}\n
time_complexity.swift
[class]{}-[func]{factorialRecur}\n
time_complexity.js
[class]{}-[func]{factorialRecur}\n
time_complexity.ts
[class]{}-[func]{factorialRecur}\n
time_complexity.dart
[class]{}-[func]{factorialRecur}\n
time_complexity.rs
[class]{}-[func]{factorial_recur}\n
time_complexity.c
[class]{}-[func]{factorialRecur}\n
time_complexity.kt
[class]{}-[func]{factorialRecur}\n
time_complexity.rb
[class]{}-[func]{factorial_recur}\n

\u56f3 2-14 \u00a0 Factorial order time complexity

\u968e\u4e57\u30aa\u30fc\u30c0\u30fc\u306f\u6307\u6570\u30aa\u30fc\u30c0\u30fc\u3088\u308a\u3082\u3055\u3089\u306b\u901f\u304f\u5897\u52a0\u3059\u308b\u3053\u3068\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3088\u308a\u5927\u304d\u306a\\(n\\)\u5024\u3067\u306f\u53d7\u3051\u5165\u308c\u3089\u308c\u307e\u305b\u3093\u3002

"},{"location":"chapter_computational_complexity/time_complexity/#235","title":"2.3.5 \u00a0 \u6700\u60aa\u3001\u6700\u826f\u3001\u5e73\u5747\u6642\u9593\u8a08\u7b97\u91cf","text":"

\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u6642\u9593\u52b9\u7387\u306f\u56fa\u5b9a\u3055\u308c\u3066\u3044\u306a\u3044\u3053\u3068\u304c\u591a\u304f\u3001\u5165\u529b\u30c7\u30fc\u30bf\u306e\u5206\u5e03\u306b\u4f9d\u5b58\u3057\u307e\u3059\u3002\u9577\u3055\\(n\\)\u306e\u914d\u5217nums\u304c\u3042\u308a\u3001\\(1\\)\u304b\u3089\\(n\\)\u307e\u3067\u306e\u6570\u3067\u69cb\u6210\u3055\u308c\u3001\u305d\u308c\u305e\u308c\u304c\u4e00\u5ea6\u3060\u3051\u73fe\u308c\u307e\u3059\u304c\u3001\u30e9\u30f3\u30c0\u30e0\u306b\u30b7\u30e3\u30c3\u30d5\u30eb\u3055\u308c\u305f\u9806\u5e8f\u3067\u3042\u308b\u3068\u3057\u307e\u3059\u3002\u30bf\u30b9\u30af\u306f\u8981\u7d20\\(1\\)\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u8fd4\u3059\u3053\u3068\u3067\u3059\u3002\u4ee5\u4e0b\u306e\u7d50\u8ad6\u3092\u5c0e\u3051\u307e\u3059\uff1a

\u300c\u6700\u60aa\u30b1\u30fc\u30b9\u6642\u9593\u8a08\u7b97\u91cf\u300d\u306f\u6f38\u8fd1\u4e0a\u9650\u306b\u5bfe\u5fdc\u3057\u3001\u5927\u304d\u306a\\(O\\)\u8a18\u6cd5\u3067\u8868\u3055\u308c\u307e\u3059\u3002\u5bfe\u5fdc\u3057\u3066\u3001\u300c\u6700\u826f\u30b1\u30fc\u30b9\u6642\u9593\u8a08\u7b97\u91cf\u300d\u306f\u6f38\u8fd1\u4e0b\u9650\u306b\u5bfe\u5fdc\u3057\u3001\\(\\Omega\\)\u3067\u8868\u3055\u308c\u307e\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby worst_best_time_complexity.py
def random_numbers(n: int) -> list[int]:\n    \"\"\"\u8981\u7d20 1, 2, ..., n \u3092\u542b\u3080\u914d\u5217\u3092\u751f\u6210\u3001\u9806\u5e8f\u306f\u30b7\u30e3\u30c3\u30d5\u30eb\"\"\"\n    # \u914d\u5217 nums = 1, 2, 3, ..., n \u3092\u751f\u6210\n    nums = [i for i in range(1, n + 1)]\n    # \u914d\u5217\u8981\u7d20\u3092\u30e9\u30f3\u30c0\u30e0\u306b\u30b7\u30e3\u30c3\u30d5\u30eb\n    random.shuffle(nums)\n    return nums\n\ndef find_one(nums: list[int]) -> int:\n    \"\"\"\u914d\u5217 nums \u3067\u6570\u5024 1 \u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u691c\u7d22\"\"\"\n    for i in range(len(nums)):\n        # \u8981\u7d20 1 \u304c\u914d\u5217\u306e\u6700\u521d\u306b\u3042\u308b\u5834\u5408\u3001\u6700\u826f\u6642\u9593\u8a08\u7b97\u91cf O(1) \u3092\u9054\u6210\n        # \u8981\u7d20 1 \u304c\u914d\u5217\u306e\u6700\u5f8c\u306b\u3042\u308b\u5834\u5408\u3001\u6700\u60aa\u6642\u9593\u8a08\u7b97\u91cf O(n) \u3092\u9054\u6210\n        if nums[i] == 1:\n            return i\n    return -1\n
worst_best_time_complexity.cpp
/* \u8981\u7d20 {1, 2, ..., n} \u3092\u30e9\u30f3\u30c0\u30e0\u306b\u30b7\u30e3\u30c3\u30d5\u30eb\u3057\u305f\u914d\u5217\u3092\u751f\u6210 */\nvector<int> randomNumbers(int n) {\n    vector<int> nums(n);\n    // \u914d\u5217 nums = { 1, 2, 3, ..., n } \u3092\u751f\u6210\n    for (int i = 0; i < n; i++) {\n        nums[i] = i + 1;\n    }\n    // \u30b7\u30b9\u30c6\u30e0\u6642\u523b\u3092\u4f7f\u7528\u3057\u3066\u30e9\u30f3\u30c0\u30e0\u30b7\u30fc\u30c9\u3092\u751f\u6210\n    unsigned seed = chrono::system_clock::now().time_since_epoch().count();\n    // \u914d\u5217\u8981\u7d20\u3092\u30e9\u30f3\u30c0\u30e0\u306b\u30b7\u30e3\u30c3\u30d5\u30eb\n    shuffle(nums.begin(), nums.end(), default_random_engine(seed));\n    return nums;\n}\n\n/* \u914d\u5217 nums \u3067\u6570\u50241\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u898b\u3064\u3051\u308b */\nint findOne(vector<int> &nums) {\n    for (int i = 0; i < nums.size(); i++) {\n        // \u8981\u7d201\u304c\u914d\u5217\u306e\u5148\u982d\u306b\u3042\u308b\u5834\u5408\u3001\u6700\u826f\u6642\u9593\u8a08\u7b97\u91cf O(1) \u3092\u9054\u6210\n        // \u8981\u7d201\u304c\u914d\u5217\u306e\u672b\u5c3e\u306b\u3042\u308b\u5834\u5408\u3001\u6700\u60aa\u6642\u9593\u8a08\u7b97\u91cf O(n) \u3092\u9054\u6210\n        if (nums[i] == 1)\n            return i;\n    }\n    return -1;\n}\n
worst_best_time_complexity.java
/* \u8981\u7d20 {1, 2, ..., n} \u3092\u30e9\u30f3\u30c0\u30e0\u306b\u30b7\u30e3\u30c3\u30d5\u30eb\u3057\u305f\u914d\u5217\u3092\u751f\u6210 */\nint[] randomNumbers(int n) {\n    Integer[] nums = new Integer[n];\n    // \u914d\u5217 nums = { 1, 2, 3, ..., n } \u3092\u751f\u6210\n    for (int i = 0; i < n; i++) {\n        nums[i] = i + 1;\n    }\n    // \u914d\u5217\u8981\u7d20\u3092\u30e9\u30f3\u30c0\u30e0\u306b\u30b7\u30e3\u30c3\u30d5\u30eb\n    Collections.shuffle(Arrays.asList(nums));\n    // Integer[] -> int[]\n    int[] res = new int[n];\n    for (int i = 0; i < n; i++) {\n        res[i] = nums[i];\n    }\n    return res;\n}\n\n/* \u914d\u5217 nums \u3067\u6570\u50241\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u898b\u3064\u3051\u308b */\nint findOne(int[] nums) {\n    for (int i = 0; i < nums.length; i++) {\n        // \u8981\u7d201\u304c\u914d\u5217\u306e\u5148\u982d\u306b\u3042\u308b\u5834\u5408\u3001\u6700\u826f\u6642\u9593\u8a08\u7b97\u91cf O(1) \u3092\u9054\u6210\n        // \u8981\u7d201\u304c\u914d\u5217\u306e\u672b\u5c3e\u306b\u3042\u308b\u5834\u5408\u3001\u6700\u60aa\u6642\u9593\u8a08\u7b97\u91cf O(n) \u3092\u9054\u6210\n        if (nums[i] == 1)\n            return i;\n    }\n    return -1;\n}\n
worst_best_time_complexity.cs
[class]{worst_best_time_complexity}-[func]{RandomNumbers}\n\n[class]{worst_best_time_complexity}-[func]{FindOne}\n
worst_best_time_complexity.go
[class]{}-[func]{randomNumbers}\n\n[class]{}-[func]{findOne}\n
worst_best_time_complexity.swift
[class]{}-[func]{randomNumbers}\n\n[class]{}-[func]{findOne}\n
worst_best_time_complexity.js
[class]{}-[func]{randomNumbers}\n\n[class]{}-[func]{findOne}\n
worst_best_time_complexity.ts
[class]{}-[func]{randomNumbers}\n\n[class]{}-[func]{findOne}\n
worst_best_time_complexity.dart
[class]{}-[func]{randomNumbers}\n\n[class]{}-[func]{findOne}\n
worst_best_time_complexity.rs
[class]{}-[func]{random_numbers}\n\n[class]{}-[func]{find_one}\n
worst_best_time_complexity.c
[class]{}-[func]{randomNumbers}\n\n[class]{}-[func]{findOne}\n
worst_best_time_complexity.kt
[class]{}-[func]{randomNumbers}\n\n[class]{}-[func]{findOne}\n
worst_best_time_complexity.rb
[class]{}-[func]{random_numbers}\n\n[class]{}-[func]{find_one}\n

\u6700\u826f\u30b1\u30fc\u30b9\u6642\u9593\u8a08\u7b97\u91cf\u306f\u5b9f\u969b\u306b\u306f\u307b\u3068\u3093\u3069\u4f7f\u7528\u3055\u308c\u306a\u3044\u3053\u3068\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u901a\u5e38\u306f\u975e\u5e38\u306b\u4f4e\u3044\u78ba\u7387\u3067\u306e\u307f\u9054\u6210\u53ef\u80fd\u3067\u3001\u8aa4\u89e3\u3092\u62db\u304f\u53ef\u80fd\u6027\u304c\u3042\u308b\u304b\u3089\u3067\u3059\u3002\u6700\u60aa\u30b1\u30fc\u30b9\u6642\u9593\u8a08\u7b97\u91cf\u306f\u3088\u308a\u5b9f\u7528\u7684\u3067\u3001\u52b9\u7387\u306e\u5b89\u5168\u5024\u3092\u63d0\u4f9b\u3057\u3001\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3092\u81ea\u4fe1\u3092\u6301\u3063\u3066\u4f7f\u7528\u3067\u304d\u308b\u3088\u3046\u306b\u3057\u307e\u3059\u3002

\u4e0a\u8a18\u306e\u4f8b\u304b\u3089\u3001\u6700\u60aa\u30b1\u30fc\u30b9\u3068\u6700\u826f\u30b1\u30fc\u30b9\u306e\u6642\u9593\u8a08\u7b97\u91cf\u306f\u4e21\u65b9\u3068\u3082\u300c\u7279\u6b8a\u306a\u30c7\u30fc\u30bf\u5206\u5e03\u300d\u4e0b\u3067\u306e\u307f\u767a\u751f\u3057\u3001\u767a\u751f\u78ba\u7387\u304c\u5c0f\u3055\u304f\u3001\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u5b9f\u884c\u52b9\u7387\u3092\u6b63\u78ba\u306b\u53cd\u6620\u3057\u306a\u3044\u53ef\u80fd\u6027\u304c\u3042\u308b\u3053\u3068\u304c\u660e\u3089\u304b\u3067\u3059\u3002\u5bfe\u7167\u7684\u306b\u3001\u5e73\u5747\u6642\u9593\u8a08\u7b97\u91cf\u306f\u30e9\u30f3\u30c0\u30e0\u5165\u529b\u30c7\u30fc\u30bf\u4e0b\u3067\u306e\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u52b9\u7387\u3092\u53cd\u6620\u3067\u304d\u3001\\(\\Theta\\)\u8a18\u6cd5\u3067\u8868\u3055\u308c\u307e\u3059\u3002

\u4e00\u90e8\u306e\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3067\u306f\u3001\u30e9\u30f3\u30c0\u30e0\u30c7\u30fc\u30bf\u5206\u5e03\u4e0b\u3067\u306e\u5e73\u5747\u30b1\u30fc\u30b9\u3092\u7c21\u5358\u306b\u63a8\u5b9a\u3067\u304d\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001\u524d\u8ff0\u306e\u4f8b\u3067\u306f\u3001\u5165\u529b\u914d\u5217\u304c\u30b7\u30e3\u30c3\u30d5\u30eb\u3055\u308c\u3066\u3044\u308b\u305f\u3081\u3001\u8981\u7d20\\(1\\)\u304c\u4efb\u610f\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306b\u73fe\u308c\u308b\u78ba\u7387\u306f\u7b49\u3057\u3044\u3067\u3059\u3002\u3057\u305f\u304c\u3063\u3066\u3001\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u5e73\u5747\u30eb\u30fc\u30d7\u6570\u306f\u914d\u5217\u9577\u3055\u306e\u534a\u5206\\(n / 2\\)\u3067\u3001\u5e73\u5747\u6642\u9593\u8a08\u7b97\u91cf\u306f\\(\\Theta(n / 2) = \\Theta(n)\\)\u3067\u3059\u3002

\u3057\u304b\u3057\u3001\u3088\u308a\u8907\u96d1\u306a\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u5e73\u5747\u6642\u9593\u8a08\u7b97\u91cf\u3092\u8a08\u7b97\u3059\u308b\u3053\u3068\u306f\u975e\u5e38\u306b\u56f0\u96e3\u3067\u3059\u3002\u30c7\u30fc\u30bf\u5206\u5e03\u4e0b\u3067\u306e\u5168\u4f53\u7684\u306a\u6570\u5b66\u7684\u671f\u5f85\u5024\u3092\u5206\u6790\u3059\u308b\u3053\u3068\u304c\u56f0\u96e3\u3060\u304b\u3089\u3067\u3059\u3002\u305d\u306e\u3088\u3046\u306a\u5834\u5408\u3001\u901a\u5e38\u306f\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u52b9\u7387\u3092\u5224\u65ad\u3059\u308b\u57fa\u6e96\u3068\u3057\u3066\u6700\u60aa\u30b1\u30fc\u30b9\u6642\u9593\u8a08\u7b97\u91cf\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002

\\(\\Theta\\)\u8a18\u53f7\u306f\u306a\u305c\u307b\u3068\u3093\u3069\u898b\u3089\u308c\u306a\u3044\u306e\u3067\u3059\u304b\uff1f

\u304a\u305d\u3089\u304f\\(O\\)\u8a18\u6cd5\u304c\u3088\u308a\u4e00\u822c\u7684\u306b\u8a71\u3055\u308c\u308b\u305f\u3081\u3001\u5e73\u5747\u6642\u9593\u8a08\u7b97\u91cf\u3092\u8868\u3059\u305f\u3081\u306b\u3088\u304f\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002\u3057\u304b\u3057\u3001\u53b3\u5bc6\u306b\u8a00\u3048\u3070\u3001\u3053\u306e\u5b9f\u8df5\u306f\u6b63\u78ba\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u3053\u306e\u672c\u3084\u4ed6\u306e\u8cc7\u6599\u3067\u300c\u5e73\u5747\u6642\u9593\u8a08\u7b97\u91cf\\(O(n)\\)\u300d\u306e\u3088\u3046\u306a\u8868\u73fe\u306b\u906d\u9047\u3057\u305f\u5834\u5408\u306f\u3001\u76f4\u63a5\\(\\Theta(n)\\)\u3068\u3057\u3066\u7406\u89e3\u3057\u3066\u304f\u3060\u3055\u3044\u3002

"},{"location":"chapter_data_structure/","title":"\u7b2c 3 \u7ae0 \u00a0 \u30c7\u30fc\u30bf\u69cb\u9020","text":"

Abstract

\u30c7\u30fc\u30bf\u69cb\u9020\u306f\u5805\u7262\u3067\u591a\u69d8\u306a\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3068\u3057\u3066\u6a5f\u80fd\u3057\u307e\u3059\u3002

\u30c7\u30fc\u30bf\u306e\u6574\u7136\u3068\u3057\u305f\u7d44\u7e54\u5316\u306e\u305f\u3081\u306e\u8a2d\u8a08\u56f3\u3092\u63d0\u4f9b\u3057\u3001\u305d\u306e\u4e0a\u3067\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u304c\u751f\u304d\u751f\u304d\u3068\u52d5\u304d\u51fa\u3057\u307e\u3059\u3002

"},{"location":"chapter_data_structure/#_1","title":"\u7ae0\u306e\u5185\u5bb9","text":""},{"location":"chapter_data_structure/basic_data_types/","title":"3.2 \u00a0 \u57fa\u672c\u30c7\u30fc\u30bf\u578b","text":"

\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u5185\u306e\u30c7\u30fc\u30bf\u306b\u3064\u3044\u3066\u8003\u3048\u308b\u969b\u3001\u30c6\u30ad\u30b9\u30c8\u3001\u753b\u50cf\u3001\u52d5\u753b\u3001\u97f3\u58f0\u30013D\u30e2\u30c7\u30eb\u306a\u3069\u3001\u69d8\u3005\u306a\u5f62\u5f0f\u304c\u601d\u3044\u6d6e\u304b\u3073\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u7d44\u7e54\u7684\u306a\u5f62\u5f0f\u306f\u7570\u306a\u308a\u307e\u3059\u304c\u3001\u3059\u3079\u3066\u69d8\u3005\u306a\u57fa\u672c\u30c7\u30fc\u30bf\u578b\u304b\u3089\u69cb\u6210\u3055\u308c\u3066\u3044\u307e\u3059\u3002

**\u57fa\u672c\u30c7\u30fc\u30bf\u578b\u3068\u306f\u3001CPU\u304c\u76f4\u63a5\u64cd\u4f5c\u3067\u304d\u308b\u3082\u306e**\u3067\u3042\u308a\u3001\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3067\u76f4\u63a5\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002\u4e3b\u306b\u4ee5\u4e0b\u304c\u542b\u307e\u308c\u307e\u3059\u3002

\u57fa\u672c\u30c7\u30fc\u30bf\u578b\u306f\u3001\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u5185\u3067\u4e8c\u9032\u5f62\u5f0f\u3067\u683c\u7d0d\u3055\u308c\u307e\u3059\u30021\u3064\u306e\u4e8c\u9032\u6841\u306f1\u30d3\u30c3\u30c8\u3067\u3059\u3002\u307b\u3068\u3093\u3069\u306e\u73fe\u4ee3\u7684\u306a\u30aa\u30da\u30ec\u30fc\u30c6\u30a3\u30f3\u30b0\u30b7\u30b9\u30c6\u30e0\u3067\u306f\u30011\u30d0\u30a4\u30c8\u306f8\u30d3\u30c3\u30c8\u3067\u69cb\u6210\u3055\u308c\u3066\u3044\u307e\u3059\u3002

\u57fa\u672c\u30c7\u30fc\u30bf\u578b\u306e\u5024\u306e\u7bc4\u56f2\u306f\u3001\u305d\u308c\u3089\u304c\u5360\u3081\u308b\u7a7a\u9593\u306e\u30b5\u30a4\u30ba\u306b\u4f9d\u5b58\u3057\u307e\u3059\u3002\u4ee5\u4e0b\u3067\u306f\u3001Java\u3092\u4f8b\u306b\u8aac\u660e\u3057\u307e\u3059\u3002

\u4ee5\u4e0b\u306e\u8868\u306f\u3001Java\u306b\u304a\u3051\u308b\u69d8\u3005\u306a\u57fa\u672c\u30c7\u30fc\u30bf\u578b\u304c\u5360\u3081\u308b\u7a7a\u9593\u3001\u5024\u306e\u7bc4\u56f2\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002\u3053\u306e\u8868\u3092\u6697\u8a18\u3059\u308b\u5fc5\u8981\u306f\u3042\u308a\u307e\u305b\u3093\u304c\u3001\u4e00\u822c\u7684\u306a\u7406\u89e3\u3092\u6301\u3061\u3001\u5fc5\u8981\u6642\u306b\u53c2\u7167\u3059\u308b\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\u3002

\u8868 3-1 \u00a0 \u57fa\u672c\u30c7\u30fc\u30bf\u578b\u304c\u5360\u3081\u308b\u7a7a\u9593\u3068\u5024\u306e\u7bc4\u56f2

\u578b \u30b7\u30f3\u30dc\u30eb \u5360\u6709\u7a7a\u9593 \u6700\u5c0f\u5024 \u6700\u5927\u5024 \u30c7\u30d5\u30a9\u30eb\u30c8\u5024 \u6574\u6570 byte 1\u30d0\u30a4\u30c8 \\(-2^7\\) (\\(-128\\)) \\(2^7 - 1\\) (\\(127\\)) 0 short 2\u30d0\u30a4\u30c8 \\(-2^{15}\\) \\(2^{15} - 1\\) 0 int 4\u30d0\u30a4\u30c8 \\(-2^{31}\\) \\(2^{31} - 1\\) 0 long 8\u30d0\u30a4\u30c8 \\(-2^{63}\\) \\(2^{63} - 1\\) 0 \u6d6e\u52d5\u5c0f\u6570\u70b9 float 4\u30d0\u30a4\u30c8 \\(1.175 \\times 10^{-38}\\) \\(3.403 \\times 10^{38}\\) \\(0.0\\text{f}\\) double 8\u30d0\u30a4\u30c8 \\(2.225 \\times 10^{-308}\\) \\(1.798 \\times 10^{308}\\) 0.0 \u6587\u5b57 char 2\u30d0\u30a4\u30c8 0 \\(2^{16} - 1\\) 0 \u30d6\u30fc\u30eb bool 1\u30d0\u30a4\u30c8 \\(\\text{false}\\) \\(\\text{true}\\) \\(\\text{false}\\)

\u4e0a\u8a18\u306e\u8868\u306fJava\u306e\u57fa\u672c\u30c7\u30fc\u30bf\u578b\u306b\u7279\u6709\u3067\u3042\u308b\u3053\u3068\u306b\u3054\u6ce8\u610f\u304f\u3060\u3055\u3044\u3002\u3059\u3079\u3066\u306e\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\u306b\u306f\u72ec\u81ea\u306e\u30c7\u30fc\u30bf\u578b\u5b9a\u7fa9\u304c\u3042\u308a\u3001\u5360\u6709\u7a7a\u9593\u3001\u5024\u306e\u7bc4\u56f2\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u304c\u7570\u306a\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002

\u3067\u306f\u3001\u57fa\u672c\u30c7\u30fc\u30bf\u578b\u3068\u30c7\u30fc\u30bf\u69cb\u9020\u306e\u95a2\u4fc2\u306f\u4f55\u3067\u3057\u3087\u3046\u304b\uff1f\u30c7\u30fc\u30bf\u69cb\u9020\u3068\u306f\u3001\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u5185\u3067\u30c7\u30fc\u30bf\u3092\u7d44\u7e54\u5316\u3057\u683c\u7d0d\u3059\u308b\u65b9\u6cd5\u3067\u3042\u308b\u3053\u3068\u3092\u77e5\u3063\u3066\u3044\u307e\u3059\u3002\u3053\u3053\u3067\u306e\u7126\u70b9\u306f\u300c\u30c7\u30fc\u30bf\u300d\u3067\u306f\u306a\u304f\u300c\u69cb\u9020\u300d\u3067\u3059\u3002

\u300c\u6570\u5024\u306e\u5217\u300d\u3092\u8868\u73fe\u3057\u305f\u3044\u5834\u5408\u3001\u81ea\u7136\u306b\u914d\u5217\u306e\u4f7f\u7528\u3092\u8003\u3048\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u914d\u5217\u306e\u7dda\u5f62\u69cb\u9020\u304c\u6570\u5024\u306e\u96a3\u63a5\u6027\u3068\u9806\u5e8f\u6027\u3092\u8868\u73fe\u3067\u304d\u308b\u305f\u3081\u3067\u3059\u304c\u3001\u683c\u7d0d\u3055\u308c\u308b\u5185\u5bb9\u304c\u6574\u6570int\u3001\u5c0f\u6570float\u3001\u6587\u5b57char\u306e\u3044\u305a\u308c\u3067\u3042\u3063\u3066\u3082\u3001\u300c\u30c7\u30fc\u30bf\u69cb\u9020\u300d\u3068\u306f\u7121\u95a2\u4fc2\u3067\u3059\u3002

\u8a00\u3044\u63db\u3048\u308b\u3068\u3001\u57fa\u672c\u30c7\u30fc\u30bf\u578b\u306f\u30c7\u30fc\u30bf\u306e\u300c\u5185\u5bb9\u578b\u300d\u3092\u63d0\u4f9b\u3057\u3001\u30c7\u30fc\u30bf\u69cb\u9020\u306f\u30c7\u30fc\u30bf\u306e\u300c\u7d44\u7e54\u5316\u65b9\u6cd5\u300d\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001\u4ee5\u4e0b\u306e\u30b3\u30fc\u30c9\u3067\u306f\u3001\u540c\u3058\u30c7\u30fc\u30bf\u69cb\u9020\uff08\u914d\u5217\uff09\u3092\u4f7f\u7528\u3057\u3066\u3001int\u3001float\u3001char\u3001bool\u306a\u3069\u306e\u7570\u306a\u308b\u57fa\u672c\u30c7\u30fc\u30bf\u578b\u3092\u683c\u7d0d\u3057\u8868\u73fe\u3057\u3066\u3044\u307e\u3059\u3002

PythonC++JavaC#GoSwiftJSTSDartRustCKotlin
# \u69d8\u3005\u306a\u57fa\u672c\u30c7\u30fc\u30bf\u578b\u3092\u4f7f\u7528\u3057\u3066\u914d\u5217\u3092\u521d\u671f\u5316\nnumbers: list[int] = [0] * 5\ndecimals: list[float] = [0.0] * 5\n# Python\u306e\u6587\u5b57\u306f\u5b9f\u969b\u306b\u306f\u9577\u30551\u306e\u6587\u5b57\u5217\ncharacters: list[str] = ['0'] * 5\nbools: list[bool] = [False] * 5\n# Python\u306e\u30ea\u30b9\u30c8\u306f\u69d8\u3005\u306a\u57fa\u672c\u30c7\u30fc\u30bf\u578b\u3068\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u53c2\u7167\u3092\u81ea\u7531\u306b\u683c\u7d0d\u53ef\u80fd\ndata = [0, 0.0, 'a', False, ListNode(0)]\n
// \u69d8\u3005\u306a\u57fa\u672c\u30c7\u30fc\u30bf\u578b\u3092\u4f7f\u7528\u3057\u3066\u914d\u5217\u3092\u521d\u671f\u5316\nint numbers[5];\nfloat decimals[5];\nchar characters[5];\nbool bools[5];\n
// \u69d8\u3005\u306a\u57fa\u672c\u30c7\u30fc\u30bf\u578b\u3092\u4f7f\u7528\u3057\u3066\u914d\u5217\u3092\u521d\u671f\u5316\nint[] numbers = new int[5];\nfloat[] decimals = new float[5];\nchar[] characters = new char[5];\nboolean[] bools = new boolean[5];\n
// \u69d8\u3005\u306a\u57fa\u672c\u30c7\u30fc\u30bf\u578b\u3092\u4f7f\u7528\u3057\u3066\u914d\u5217\u3092\u521d\u671f\u5316\nint[] numbers = new int[5];\nfloat[] decimals = new float[5];\nchar[] characters = new char[5];\nbool[] bools = new bool[5];\n
// \u69d8\u3005\u306a\u57fa\u672c\u30c7\u30fc\u30bf\u578b\u3092\u4f7f\u7528\u3057\u3066\u914d\u5217\u3092\u521d\u671f\u5316\nvar numbers = [5]int{}\nvar decimals = [5]float64{}\nvar characters = [5]byte{}\nvar bools = [5]bool{}\n
// \u69d8\u3005\u306a\u57fa\u672c\u30c7\u30fc\u30bf\u578b\u3092\u4f7f\u7528\u3057\u3066\u914d\u5217\u3092\u521d\u671f\u5316\nlet numbers = Array(repeating: 0, count: 5)\nlet decimals = Array(repeating: 0.0, count: 5)\nlet characters: [Character] = Array(repeating: \"a\", count: 5)\nlet bools = Array(repeating: false, count: 5)\n
// JavaScript\u306e\u914d\u5217\u306f\u69d8\u3005\u306a\u57fa\u672c\u30c7\u30fc\u30bf\u578b\u3068\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u81ea\u7531\u306b\u683c\u7d0d\u53ef\u80fd\nconst array = [0, 0.0, 'a', false];\n
// \u69d8\u3005\u306a\u57fa\u672c\u30c7\u30fc\u30bf\u578b\u3092\u4f7f\u7528\u3057\u3066\u914d\u5217\u3092\u521d\u671f\u5316\nconst numbers: number[] = [];\nconst characters: string[] = [];\nconst bools: boolean[] = [];\n
// \u69d8\u3005\u306a\u57fa\u672c\u30c7\u30fc\u30bf\u578b\u3092\u4f7f\u7528\u3057\u3066\u914d\u5217\u3092\u521d\u671f\u5316\nList<int> numbers = List.filled(5, 0);\nList<double> decimals = List.filled(5, 0.0);\nList<String> characters = List.filled(5, 'a');\nList<bool> bools = List.filled(5, false);\n
// \u69d8\u3005\u306a\u57fa\u672c\u30c7\u30fc\u30bf\u578b\u3092\u4f7f\u7528\u3057\u3066\u914d\u5217\u3092\u521d\u671f\u5316\nlet numbers: Vec<i32> = vec![0; 5];\nlet decimals: Vec<f32> = vec![0.0, 5];\nlet characters: Vec<char> = vec!['0'; 5];\nlet bools: Vec<bool> = vec![false; 5];\n
// \u69d8\u3005\u306a\u57fa\u672c\u30c7\u30fc\u30bf\u578b\u3092\u4f7f\u7528\u3057\u3066\u914d\u5217\u3092\u521d\u671f\u5316\nint numbers[10];\nfloat decimals[10];\nchar characters[10];\nbool bools[10];\n
\n
"},{"location":"chapter_data_structure/character_encoding/","title":"3.4 \u00a0 \u6587\u5b57\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0 *","text":"

\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u30b7\u30b9\u30c6\u30e0\u3067\u306f\u3001\u3059\u3079\u3066\u306e\u30c7\u30fc\u30bf\u304c\u4e8c\u9032\u5f62\u5f0f\u3067\u683c\u7d0d\u3055\u308c\u3001char\u3082\u4f8b\u5916\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u6587\u5b57\u3092\u8868\u73fe\u3059\u308b\u305f\u3081\u306b\u3001\u5404\u6587\u5b57\u3068\u4e8c\u9032\u6570\u306e\u4e00\u5bfe\u4e00\u306e\u30de\u30c3\u30d4\u30f3\u30b0\u3092\u5b9a\u7fa9\u3059\u308b\u300c\u6587\u5b57\u30bb\u30c3\u30c8\u300d\u3092\u958b\u767a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u6587\u5b57\u30bb\u30c3\u30c8\u304c\u3042\u308c\u3070\u3001\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u306f\u8868\u3092\u53c2\u7167\u3057\u3066\u4e8c\u9032\u6570\u3092\u6587\u5b57\u306b\u5909\u63db\u3067\u304d\u307e\u3059\u3002

"},{"location":"chapter_data_structure/character_encoding/#341-ascii","title":"3.4.1 \u00a0 ASCII\u6587\u5b57\u30bb\u30c3\u30c8","text":"

ASCII\u30b3\u30fc\u30c9\u306f\u6700\u3082\u521d\u671f\u306e\u6587\u5b57\u30bb\u30c3\u30c8\u306e\u4e00\u3064\u3067\u3001\u6b63\u5f0f\u306b\u306fAmerican Standard Code for Information Interchange\u3068\u3057\u3066\u77e5\u3089\u308c\u3066\u3044\u307e\u3059\u30027\u3064\u306e\u4e8c\u9032\u6841\uff081\u30d0\u30a4\u30c8\u306e\u4e0b\u4f4d7\u30d3\u30c3\u30c8\uff09\u3092\u4f7f\u7528\u3057\u3066\u6587\u5b57\u3092\u8868\u73fe\u3057\u3001\u6700\u5927128\u7a2e\u985e\u306e\u7570\u306a\u308b\u6587\u5b57\u3092\u8868\u73fe\u3067\u304d\u307e\u3059\u3002\u4ee5\u4e0b\u306e\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001ASCII\u306b\u306f\u82f1\u8a9e\u306e\u5927\u6587\u5b57\u3068\u5c0f\u6587\u5b57\u30010\u301c9\u306e\u6570\u5b57\u3001\u69d8\u3005\u306a\u53e5\u8aad\u70b9\u3001\u7279\u5b9a\u306e\u5236\u5fa1\u6587\u5b57\uff08\u6539\u884c\u3084\u30bf\u30d6\u306a\u3069\uff09\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002

\u56f3 3-6 \u00a0 ASCII\u30b3\u30fc\u30c9

\u3057\u304b\u3057\u3001ASCII\u306f\u82f1\u8a9e\u306e\u6587\u5b57\u306e\u307f\u3092\u8868\u73fe\u3067\u304d\u307e\u3059\u3002\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u306e\u30b0\u30ed\u30fc\u30d0\u30eb\u5316\u306b\u4f34\u3044\u3001\u3088\u308a\u591a\u304f\u306e\u8a00\u8a9e\u3092\u8868\u73fe\u3059\u308b\u305f\u3081\u306bEASCII\u3068\u547c\u3070\u308c\u308b\u6587\u5b57\u30bb\u30c3\u30c8\u304c\u958b\u767a\u3055\u308c\u307e\u3057\u305f\u3002ASCII\u306e7\u30d3\u30c3\u30c8\u69cb\u9020\u304b\u30898\u30d3\u30c3\u30c8\u306b\u62e1\u5f35\u3057\u3001256\u6587\u5b57\u306e\u8868\u73fe\u3092\u53ef\u80fd\u306b\u3057\u307e\u3057\u305f\u3002

\u4e16\u754c\u7684\u306b\u3001\u69d8\u3005\u306a\u5730\u57df\u56fa\u6709\u306eEASCII\u6587\u5b57\u30bb\u30c3\u30c8\u304c\u5c0e\u5165\u3055\u308c\u307e\u3057\u305f\u3002\u3053\u308c\u3089\u306e\u30bb\u30c3\u30c8\u306e\u6700\u521d\u306e128\u6587\u5b57\u306fASCII\u3068\u4e00\u81f4\u3057\u3066\u3044\u307e\u3059\u304c\u3001\u6b8b\u308a\u306e128\u6587\u5b57\u306f\u7570\u306a\u308b\u8a00\u8a9e\u306e\u8981\u4ef6\u306b\u5bfe\u5fdc\u3059\u308b\u305f\u3081\u306b\u7570\u306a\u3063\u3066\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u307e\u3059\u3002

"},{"location":"chapter_data_structure/character_encoding/#342-gbk","title":"3.4.2 \u00a0 GBK\u6587\u5b57\u30bb\u30c3\u30c8","text":"

\u5f8c\u306b\u3001**EASCII\u3067\u3082\u591a\u304f\u306e\u8a00\u8a9e\u306e\u6587\u5b57\u8981\u4ef6\u3092\u6e80\u305f\u3059\u3053\u3068\u304c\u3067\u304d\u306a\u3044**\u3053\u3068\u304c\u5224\u660e\u3057\u307e\u3057\u305f\u3002\u4f8b\u3048\u3070\u3001\u4e2d\u56fd\u8a9e\u306b\u306f\u7d0410\u4e07\u306e\u6f22\u5b57\u304c\u3042\u308a\u3001\u305d\u306e\u3046\u3061\u6570\u5343\u304c\u5b9a\u671f\u7684\u306b\u4f7f\u7528\u3055\u308c\u3066\u3044\u307e\u3059\u30021980\u5e74\u3001\u4e2d\u56fd\u6a19\u6e96\u5316\u59d4\u54e1\u4f1a\u306f6763\u306e\u4e2d\u56fd\u8a9e\u6587\u5b57\u3092\u542b\u3080GB2312\u6587\u5b57\u30bb\u30c3\u30c8\u3092\u767a\u8868\u3057\u3001\u4e2d\u56fd\u8a9e\u306e\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u51e6\u7406\u30cb\u30fc\u30ba\u3092\u672c\u8cea\u7684\u306b\u6e80\u305f\u3057\u307e\u3057\u305f\u3002

\u3057\u304b\u3057\u3001GB2312\u306f\u4e00\u90e8\u306e\u7a00\u5c11\u6587\u5b57\u3084\u7e41\u4f53\u5b57\u3092\u51e6\u7406\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002GBK\u6587\u5b57\u30bb\u30c3\u30c8\u306fGB2312\u3092\u62e1\u5f35\u3057\u300121886\u306e\u4e2d\u56fd\u8a9e\u6587\u5b57\u3092\u542b\u3093\u3067\u3044\u307e\u3059\u3002GBK\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u30b9\u30ad\u30fc\u30e0\u3067\u306f\u3001ASCII\u6587\u5b57\u306f1\u30d0\u30a4\u30c8\u3067\u8868\u73fe\u3055\u308c\u3001\u4e2d\u56fd\u8a9e\u6587\u5b57\u306f2\u30d0\u30a4\u30c8\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002

"},{"location":"chapter_data_structure/character_encoding/#343-unicode","title":"3.4.3 \u00a0 Unicode\u6587\u5b57\u30bb\u30c3\u30c8","text":"

\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u6280\u8853\u306e\u6025\u901f\u306a\u767a\u5c55\u3068\u591a\u6570\u306e\u6587\u5b57\u30bb\u30c3\u30c8\u304a\u3088\u3073\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u6a19\u6e96\u306b\u3088\u308a\u3001\u6570\u591a\u304f\u306e\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\u4e00\u65b9\u3067\u306f\u3001\u3053\u308c\u3089\u306e\u6587\u5b57\u30bb\u30c3\u30c8\u306f\u4e00\u822c\u7684\u306b\u7279\u5b9a\u306e\u8a00\u8a9e\u306e\u6587\u5b57\u306e\u307f\u3092\u5b9a\u7fa9\u3057\u3001\u591a\u8a00\u8a9e\u74b0\u5883\u3067\u306f\u9069\u5207\u306b\u6a5f\u80fd\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u4ed6\u65b9\u3067\u306f\u3001\u540c\u3058\u8a00\u8a9e\u306b\u5bfe\u3059\u308b\u8907\u6570\u306e\u6587\u5b57\u30bb\u30c3\u30c8\u6a19\u6e96\u306e\u5b58\u5728\u306b\u3088\u308a\u3001\u7570\u306a\u308b\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u6a19\u6e96\u3092\u4f7f\u7528\u3059\u308b\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u9593\u3067\u60c5\u5831\u4ea4\u63db\u3092\u884c\u3046\u969b\u306b\u6587\u5b57\u5316\u3051\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002

\u5f53\u6642\u306e\u7814\u7a76\u8005\u305f\u3061\u306f\u8003\u3048\u307e\u3057\u305f\uff1a\u4e16\u754c\u306e\u3059\u3079\u3066\u306e\u8a00\u8a9e\u3068\u8a18\u53f7\u3092\u542b\u3080\u5305\u62ec\u7684\u306a\u6587\u5b57\u30bb\u30c3\u30c8\u304c\u958b\u767a\u3055\u308c\u308c\u3070\u3001\u8a00\u8a9e\u6a2a\u65ad\u74b0\u5883\u3068\u6587\u5b57\u5316\u3051\u306b\u95a2\u9023\u3059\u308b\u554f\u984c\u3092\u89e3\u6c7a\u3067\u304d\u308b\u306e\u3067\u306f\u306a\u3044\u3067\u3057\u3087\u3046\u304b\uff1f \u3053\u306e\u30a2\u30a4\u30c7\u30a2\u306b\u30a4\u30f3\u30b9\u30d1\u30a4\u30a2\u3055\u308c\u3066\u3001\u5e83\u7bc4\u56f2\u306a\u6587\u5b57\u30bb\u30c3\u30c8\u3067\u3042\u308bUnicode\u304c\u8a95\u751f\u3057\u307e\u3057\u305f\u3002

Unicode\u306f\u4e2d\u56fd\u8a9e\u3067\u300c\u7edf\u4e00\u7801\u300d\uff08\u7d71\u4e00\u30b3\u30fc\u30c9\uff09\u3068\u547c\u3070\u308c\u3001\u7406\u8ad6\u7684\u306b100\u4e07\u6587\u5b57\u4ee5\u4e0a\u3092\u53ce\u5bb9\u3067\u304d\u307e\u3059\u3002\u4e16\u754c\u4e2d\u306e\u3059\u3079\u3066\u306e\u6587\u5b57\u3092\u5358\u4e00\u306e\u30bb\u30c3\u30c8\u306b\u7d44\u307f\u8fbc\u307f\u3001\u69d8\u3005\u306a\u8a00\u8a9e\u306e\u51e6\u7406\u3068\u8868\u793a\u306e\u305f\u3081\u306e\u6c4e\u7528\u6587\u5b57\u30bb\u30c3\u30c8\u3092\u63d0\u4f9b\u3057\u3001\u7570\u306a\u308b\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u6a19\u6e96\u306b\u3088\u308b\u6587\u5b57\u5316\u3051\u306e\u554f\u984c\u3092\u6e1b\u3089\u3059\u3053\u3068\u3092\u76ee\u6307\u3057\u3066\u3044\u307e\u3059\u3002

1991\u5e74\u306e\u30ea\u30ea\u30fc\u30b9\u4ee5\u6765\u3001Unicode\u306f\u65b0\u3057\u3044\u8a00\u8a9e\u3068\u6587\u5b57\u3092\u542b\u3080\u3088\u3046\u7d99\u7d9a\u7684\u306b\u62e1\u5f35\u3055\u308c\u3066\u3044\u307e\u3059\u30022022\u5e749\u6708\u73fe\u5728\u3001Unicode\u306b\u306f149,186\u6587\u5b57\u304c\u542b\u307e\u308c\u3066\u304a\u308a\u3001\u69d8\u3005\u306a\u8a00\u8a9e\u306e\u6587\u5b57\u3001\u8a18\u53f7\u3001\u3055\u3089\u306b\u306f\u7d75\u6587\u5b57\u3082\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002\u5e83\u5927\u306aUnicode\u6587\u5b57\u30bb\u30c3\u30c8\u3067\u306f\u3001\u4e00\u822c\u7684\u306b\u4f7f\u7528\u3055\u308c\u308b\u6587\u5b57\u306f2\u30d0\u30a4\u30c8\u3092\u5360\u6709\u3057\u3001\u4e00\u90e8\u306e\u7a00\u5c11\u306a\u6587\u5b57\u306f3\u30d0\u30a4\u30c8\u307e\u305f\u306f4\u30d0\u30a4\u30c8\u3092\u5360\u6709\u3059\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002

Unicode\u306f\u5404\u6587\u5b57\u306b\u6570\u5024\uff08\u300c\u30b3\u30fc\u30c9\u30dd\u30a4\u30f3\u30c8\u300d\u3068\u547c\u3070\u308c\u308b\uff09\u3092\u5272\u308a\u5f53\u3066\u308b\u6c4e\u7528\u6587\u5b57\u30bb\u30c3\u30c8\u3067\u3059\u304c\u3001\u3053\u308c\u3089\u306e\u6587\u5b57\u30b3\u30fc\u30c9\u30dd\u30a4\u30f3\u30c8\u304c\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u30b7\u30b9\u30c6\u30e0\u306b\u3069\u306e\u3088\u3046\u306b\u683c\u7d0d\u3055\u308c\u308b\u3079\u304d\u304b\u306f\u6307\u5b9a\u3057\u3066\u3044\u307e\u305b\u3093\u3002\u7591\u554f\u304c\u751f\u3058\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\uff1a\u30b7\u30b9\u30c6\u30e0\u306f\u30c6\u30ad\u30b9\u30c8\u5185\u306e\u7570\u306a\u308b\u9577\u3055\u306eUnicode\u30b3\u30fc\u30c9\u30dd\u30a4\u30f3\u30c8\u3092\u3069\u306e\u3088\u3046\u306b\u89e3\u91c8\u3059\u308b\u306e\u3067\u3057\u3087\u3046\u304b\uff1f\u4f8b\u3048\u3070\u30012\u30d0\u30a4\u30c8\u306e\u30b3\u30fc\u30c9\u304c\u4e0e\u3048\u3089\u308c\u305f\u5834\u5408\u3001\u30b7\u30b9\u30c6\u30e0\u306f\u305d\u308c\u304c\u5358\u4e00\u306e2\u30d0\u30a4\u30c8\u6587\u5b57\u3092\u8868\u3059\u306e\u304b\u30012\u3064\u306e1\u30d0\u30a4\u30c8\u6587\u5b57\u3092\u8868\u3059\u306e\u304b\u3092\u3069\u306e\u3088\u3046\u306b\u5224\u65ad\u3059\u308b\u306e\u3067\u3057\u3087\u3046\u304b\uff1f

\u3053\u306e\u554f\u984c\u306b\u5bfe\u3059\u308b\u7c21\u5358\u306a\u89e3\u6c7a\u7b56\u306f\u3001\u3059\u3079\u3066\u306e\u6587\u5b57\u3092\u7b49\u9577\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u3068\u3057\u3066\u683c\u7d0d\u3059\u308b\u3053\u3068\u3067\u3059\u3002\u4ee5\u4e0b\u306e\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u300cHello\u300d\u306e\u5404\u6587\u5b57\u306f1\u30d0\u30a4\u30c8\u3092\u5360\u6709\u3057\u3001\u300c\u7b97\u6cd5\u300d\uff08\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\uff09\u306e\u5404\u6587\u5b57\u306f2\u30d0\u30a4\u30c8\u3092\u5360\u6709\u3057\u307e\u3059\u3002\u4e0a\u4f4d\u30d3\u30c3\u30c8\u3092\u30bc\u30ed\u3067\u57cb\u3081\u308b\u3053\u3068\u3067\u3001\u300cHello \u7b97\u6cd5\u300d\u306e\u3059\u3079\u3066\u306e\u6587\u5b57\u30922\u30d0\u30a4\u30c8\u3068\u3057\u3066\u30a8\u30f3\u30b3\u30fc\u30c9\u3067\u304d\u307e\u3059\u3002\u3053\u306e\u65b9\u6cd5\u306b\u3088\u308a\u3001\u30b7\u30b9\u30c6\u30e0\u306f2\u30d0\u30a4\u30c8\u3054\u3068\u306b\u6587\u5b57\u3092\u89e3\u91c8\u3057\u3001\u30d5\u30ec\u30fc\u30ba\u306e\u5185\u5bb9\u3092\u5fa9\u5143\u3067\u304d\u307e\u3059\u3002

\u56f3 3-7 \u00a0 Unicode\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u4f8b

\u3057\u304b\u3057\u3001ASCII\u304c\u793a\u3057\u305f\u3088\u3046\u306b\u3001\u82f1\u8a9e\u306e\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u306b\u306f1\u30d0\u30a4\u30c8\u306e\u307f\u304c\u5fc5\u8981\u3067\u3059\u3002\u4e0a\u8a18\u306e\u30a2\u30d7\u30ed\u30fc\u30c1\u3092\u4f7f\u7528\u3059\u308b\u3068\u3001\u82f1\u8a9e\u30c6\u30ad\u30b9\u30c8\u304c\u5360\u6709\u3059\u308b\u7a7a\u9593\u304cASCII\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u3068\u6bd4\u8f03\u3057\u30662\u500d\u306b\u306a\u308a\u3001\u30e1\u30e2\u30ea\u7a7a\u9593\u306e\u7121\u99c4\u306b\u306a\u308a\u307e\u3059\u3002\u3057\u305f\u304c\u3063\u3066\u3001\u3088\u308a\u52b9\u7387\u7684\u306aUnicode\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u65b9\u6cd5\u304c\u5fc5\u8981\u3067\u3059\u3002

"},{"location":"chapter_data_structure/character_encoding/#344-utf-8","title":"3.4.4 \u00a0 UTF-8\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0","text":"

\u73fe\u5728\u3001UTF-8\u306f\u56fd\u969b\u7684\u306b\u6700\u3082\u5e83\u304f\u4f7f\u7528\u3055\u308c\u3066\u3044\u308bUnicode\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u65b9\u6cd5\u306b\u306a\u3063\u3066\u3044\u307e\u3059\u3002**\u3053\u308c\u306f\u53ef\u5909\u9577\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0**\u3067\u3001\u6587\u5b57\u306e\u8907\u96d1\u3055\u306b\u5fdc\u3058\u30661\u301c4\u30d0\u30a4\u30c8\u3092\u4f7f\u7528\u3057\u3066\u6587\u5b57\u3092\u8868\u73fe\u3057\u307e\u3059\u3002ASCII\u6587\u5b57\u306f1\u30d0\u30a4\u30c8\u306e\u307f\u304c\u5fc5\u8981\u3067\u3001\u30e9\u30c6\u30f3\u6587\u5b57\u3068\u30ae\u30ea\u30b7\u30e3\u6587\u5b57\u306f2\u30d0\u30a4\u30c8\u3001\u4e00\u822c\u7684\u306b\u4f7f\u7528\u3055\u308c\u308b\u4e2d\u56fd\u8a9e\u6587\u5b57\u306f3\u30d0\u30a4\u30c8\u3001\u305d\u306e\u4ed6\u306e\u7a00\u5c11\u306a\u6587\u5b57\u306f4\u30d0\u30a4\u30c8\u304c\u5fc5\u8981\u3067\u3059\u3002

UTF-8\u306e\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u898f\u5247\u306f\u8907\u96d1\u3067\u306f\u306a\u304f\u30012\u3064\u306e\u30b1\u30fc\u30b9\u306b\u5206\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\uff1a

\u4ee5\u4e0b\u306e\u56f3\u306f\u300cHello\u7b97\u6cd5\u300d\u306eUTF-8\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002\u6700\u4e0a\u4f4d\\(n\\)\u30d3\u30c3\u30c8\u304c\\(1\\)\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u305f\u3081\u3001\u30b7\u30b9\u30c6\u30e0\u306f\u6700\u4e0a\u4f4d\u30d3\u30c3\u30c8\u3067\\(1\\)\u306b\u8a2d\u5b9a\u3055\u308c\u305f\u30d3\u30c3\u30c8\u6570\u3092\u6570\u3048\u308b\u3053\u3068\u3067\u6587\u5b57\u306e\u9577\u3055\u3092\\(n\\)\u3068\u3057\u3066\u6c7a\u5b9a\u3067\u304d\u308b\u3053\u3068\u304c\u89b3\u5bdf\u3067\u304d\u307e\u3059\u3002

\u3057\u304b\u3057\u3001\u306a\u305c\u6b8b\u308a\u306e\u30d0\u30a4\u30c8\u306e\u6700\u4e0a\u4f4d2\u30d3\u30c3\u30c8\u3092\\(10\\)\u306b\u8a2d\u5b9a\u3059\u308b\u306e\u3067\u3057\u3087\u3046\u304b\uff1f\u5b9f\u969b\u3001\u3053\u306e\\(10\\)\u306f\u4e00\u7a2e\u306e\u30c1\u30a7\u30c3\u30af\u30b5\u30e0\u3068\u3057\u3066\u6a5f\u80fd\u3057\u307e\u3059\u3002\u30b7\u30b9\u30c6\u30e0\u304c\u9593\u9055\u3063\u305f\u30d0\u30a4\u30c8\u304b\u3089\u30c6\u30ad\u30b9\u30c8\u306e\u89e3\u6790\u3092\u958b\u59cb\u3057\u305f\u5834\u5408\u3001\u30d0\u30a4\u30c8\u306e\u5148\u982d\u306e\\(10\\)\u306b\u3088\u308a\u30b7\u30b9\u30c6\u30e0\u306f\u7570\u5e38\u3092\u8fc5\u901f\u306b\u691c\u51fa\u3067\u304d\u307e\u3059\u3002

\\(10\\)\u3092\u30c1\u30a7\u30c3\u30af\u30b5\u30e0\u3068\u3057\u3066\u4f7f\u7528\u3059\u308b\u7406\u7531\u306f\u3001UTF-8\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u898f\u5247\u306e\u4e0b\u3067\u306f\u3001\u6587\u5b57\u306e\u6700\u4e0a\u4f4d2\u30d3\u30c3\u30c8\u304c\\(10\\)\u306b\u306a\u308b\u3053\u3068\u306f\u4e0d\u53ef\u80fd\u3060\u304b\u3089\u3067\u3059\u3002\u3053\u308c\u306f\u77db\u76fe\u306b\u3088\u308a\u8a3c\u660e\u3067\u304d\u307e\u3059\uff1a\u6587\u5b57\u306e\u6700\u4e0a\u4f4d2\u30d3\u30c3\u30c8\u304c\\(10\\)\u306e\u5834\u5408\u3001\u6587\u5b57\u306e\u9577\u3055\u304c\\(1\\)\u3067\u3042\u308b\u3053\u3068\u3092\u793a\u3057\u3001\u3053\u308c\u306fASCII\u306b\u5bfe\u5fdc\u3057\u307e\u3059\u3002\u3057\u304b\u3057\u3001ASCII\u6587\u5b57\u306e\u6700\u4e0a\u4f4d\u30d3\u30c3\u30c8\u306f\\(0\\)\u3067\u3042\u308b\u3079\u304d\u3067\u3001\u3053\u308c\u306f\u4eee\u5b9a\u3068\u77db\u76fe\u3057\u307e\u3059\u3002

\u56f3 3-8 \u00a0 UTF-8\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u4f8b

UTF-8\u4ee5\u5916\u306b\u3082\u3001\u4ed6\u306e\u4e00\u822c\u7684\u306a\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u65b9\u6cd5\u306b\u306f\u4ee5\u4e0b\u304c\u3042\u308a\u307e\u3059\uff1a

\u30b9\u30c8\u30ec\u30fc\u30b8\u7a7a\u9593\u306e\u89b3\u70b9\u304b\u3089\u3001UTF-8\u3092\u4f7f\u7528\u3057\u3066\u82f1\u8a9e\u6587\u5b57\u3092\u8868\u73fe\u3059\u308b\u3053\u3068\u306f1\u30d0\u30a4\u30c8\u306e\u307f\u304c\u5fc5\u8981\u306a\u305f\u3081\u975e\u5e38\u306b\u52b9\u7387\u7684\u3067\u3059\u3002UTF-16\u3092\u4f7f\u7528\u3057\u3066\u4e00\u90e8\u306e\u975e\u82f1\u8a9e\u6587\u5b57\uff08\u4e2d\u56fd\u8a9e\u306a\u3069\uff09\u3092\u30a8\u30f3\u30b3\u30fc\u30c9\u3059\u308b\u3053\u3068\u306f\u30012\u30d0\u30a4\u30c8\u306e\u307f\u304c\u5fc5\u8981\u306a\u305f\u3081\u3088\u308a\u52b9\u7387\u7684\u306b\u306a\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002\u4e00\u65b9\u3001UTF-8\u3067\u306f3\u30d0\u30a4\u30c8\u304c\u5fc5\u8981\u306b\u306a\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002

\u4e92\u63db\u6027\u306e\u89b3\u70b9\u304b\u3089\u3001UTF-8\u306f\u6700\u3082\u6c4e\u7528\u6027\u304c\u3042\u308a\u3001\u591a\u304f\u306e\u30c4\u30fc\u30eb\u3068\u30e9\u30a4\u30d6\u30e9\u30ea\u304cUTF-8\u3092\u512a\u5148\u7684\u306b\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u3059\u3002

"},{"location":"chapter_data_structure/character_encoding/#345","title":"3.4.5 \u00a0 \u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\u306b\u304a\u3051\u308b\u6587\u5b57\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0","text":"

\u6b74\u53f2\u7684\u306b\u3001\u591a\u304f\u306e\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\u306f\u30d7\u30ed\u30b0\u30e9\u30e0\u5b9f\u884c\u4e2d\u306e\u6587\u5b57\u5217\u51e6\u7406\u306bUTF-16\u3084UTF-32\u306a\u3069\u306e\u56fa\u5b9a\u9577\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u3092\u5229\u7528\u3057\u3066\u3044\u307e\u3057\u305f\u3002\u3053\u308c\u306b\u3088\u308a\u6587\u5b57\u5217\u3092\u914d\u5217\u3068\u3057\u3066\u51e6\u7406\u3067\u304d\u3001\u3044\u304f\u3064\u304b\u306e\u5229\u70b9\u304c\u3042\u308a\u307e\u3059\uff1a

\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\u306b\u304a\u3051\u308b\u6587\u5b57\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u30b9\u30ad\u30fc\u30e0\u306e\u8a2d\u8a08\u306f\u3001\u69d8\u3005\u306a\u8981\u56e0\u3092\u542b\u3080\u8208\u5473\u6df1\u3044\u30c8\u30d4\u30c3\u30af\u3067\u3059\uff1a

\u6587\u5b57\u6570\u306e\u904e\u5c0f\u8a55\u4fa1\u306b\u3088\u308a\u3001\u3053\u308c\u3089\u306e\u8a00\u8a9e\u306f16\u30d3\u30c3\u30c8\u3092\u8d85\u3048\u308bUnicode\u6587\u5b57\u3092\u8868\u73fe\u3059\u308b\u305f\u3081\u306b\u300c\u30b5\u30ed\u30b2\u30fc\u30c8\u30da\u30a2\u300d\u3092\u4f7f\u7528\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3057\u305f\u3002\u3053\u306e\u30a2\u30d7\u30ed\u30fc\u30c1\u306b\u306f\u6b20\u70b9\u304c\u3042\u308a\u307e\u3059\uff1a\u30b5\u30ed\u30b2\u30fc\u30c8\u30da\u30a2\u3092\u542b\u3080\u6587\u5b57\u5217\u306f2\u30d0\u30a4\u30c8\u307e\u305f\u306f4\u30d0\u30a4\u30c8\u3092\u5360\u6709\u3059\u308b\u6587\u5b57\u3092\u6301\u3064\u5834\u5408\u304c\u3042\u308a\u3001\u56fa\u5b9a\u9577\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u306e\u5229\u70b9\u3092\u5931\u3044\u307e\u3059\u3002\u3055\u3089\u306b\u3001\u30b5\u30ed\u30b2\u30fc\u30c8\u30da\u30a2\u306e\u51e6\u7406\u306f\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u306b\u8907\u96d1\u3055\u3068\u30c7\u30d0\u30c3\u30b0\u306e\u56f0\u96e3\u3055\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002

\u3053\u308c\u3089\u306e\u8ab2\u984c\u306b\u5bfe\u51e6\u3059\u308b\u305f\u3081\u3001\u4e00\u90e8\u306e\u8a00\u8a9e\u306f\u4ee3\u66ff\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u6226\u7565\u3092\u63a1\u7528\u3057\u3066\u3044\u307e\u3059\uff1a

\u4e0a\u8a18\u306e\u8b70\u8ad6\u306f\u3001\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\u3067\u306e\u6587\u5b57\u5217\u306e\u683c\u7d0d\u65b9\u6cd5\u306b\u95a2\u3059\u308b\u3082\u306e\u3067\u3042\u308a\u3001**\u30d5\u30a1\u30a4\u30eb\u3067\u306e\u6587\u5b57\u5217\u306e\u683c\u7d0d\u65b9\u6cd5\u3084\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u4e0a\u3067\u306e\u9001\u4fe1\u65b9\u6cd5\u3068\u306f\u7570\u306a\u308b**\u3053\u3068\u306b\u6ce8\u610f\u3059\u308b\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002\u30d5\u30a1\u30a4\u30eb\u30b9\u30c8\u30ec\u30fc\u30b8\u3084\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u9001\u4fe1\u3067\u306f\u3001\u6587\u5b57\u5217\u306f\u901a\u5e38\u3001\u6700\u9069\u306a\u4e92\u63db\u6027\u3068\u7a7a\u9593\u52b9\u7387\u306e\u305f\u3081\u306bUTF-8\u5f62\u5f0f\u3067\u30a8\u30f3\u30b3\u30fc\u30c9\u3055\u308c\u307e\u3059\u3002

"},{"location":"chapter_data_structure/classification_of_data_structure/","title":"3.1 \u00a0 \u30c7\u30fc\u30bf\u69cb\u9020\u306e\u5206\u985e","text":"

\u4e00\u822c\u7684\u306a\u30c7\u30fc\u30bf\u69cb\u9020\u306b\u306f\u3001\u914d\u5217\u3001\u9023\u7d50\u30ea\u30b9\u30c8\u3001\u30b9\u30bf\u30c3\u30af\u3001\u30ad\u30e5\u30fc\u3001\u30cf\u30c3\u30b7\u30e5\u8868\u3001\u6728\u3001\u30d2\u30fc\u30d7\u3001\u30b0\u30e9\u30d5\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u308c\u3089\u306f\u300c\u8ad6\u7406\u69cb\u9020\u300d\u3068\u300c\u7269\u7406\u69cb\u9020\u300d\u306b\u5206\u985e\u3067\u304d\u307e\u3059\u3002

"},{"location":"chapter_data_structure/classification_of_data_structure/#311","title":"3.1.1 \u00a0 \u8ad6\u7406\u69cb\u9020\uff1a\u7dda\u5f62\u3068\u975e\u7dda\u5f62","text":"

\u8ad6\u7406\u69cb\u9020\u306f\u30c7\u30fc\u30bf\u8981\u7d20\u9593\u306e\u8ad6\u7406\u7684\u95a2\u4fc2\u3092\u660e\u3089\u304b\u306b\u3057\u307e\u3059\u3002\u914d\u5217\u3068\u9023\u7d50\u30ea\u30b9\u30c8\u3067\u306f\u3001\u30c7\u30fc\u30bf\u306f\u7279\u5b9a\u306e\u9806\u5e8f\u3067\u914d\u7f6e\u3055\u308c\u3001\u30c7\u30fc\u30bf\u9593\u306e\u7dda\u5f62\u95a2\u4fc2\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002\u4e00\u65b9\u3001\u6728\u3067\u306f\u3001\u30c7\u30fc\u30bf\u306f\u4e0a\u304b\u3089\u4e0b\u3078\u968e\u5c64\u7684\u306b\u914d\u7f6e\u3055\u308c\u3001\u300c\u7956\u5148\u300d\u3068\u300c\u5b50\u5b6b\u300d\u9593\u306e\u6d3e\u751f\u95a2\u4fc2\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002\u305d\u3057\u3066\u3001\u30b0\u30e9\u30d5\u306f\u30ce\u30fc\u30c9\u3068\u30a8\u30c3\u30b8\u304b\u3089\u69cb\u6210\u3055\u308c\u3001\u8907\u96d1\u306a\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u95a2\u4fc2\u3092\u53cd\u6620\u3057\u3066\u3044\u307e\u3059\u3002

\u4e0b\u56f3\u306b\u793a\u3055\u308c\u3066\u3044\u308b\u3088\u3046\u306b\u3001\u8ad6\u7406\u69cb\u9020\u306f\u300c\u7dda\u5f62\u300d\u3068\u300c\u975e\u7dda\u5f62\u300d\u306e2\u3064\u306e\u4e3b\u8981\u30ab\u30c6\u30b4\u30ea\u306b\u5206\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u7dda\u5f62\u69cb\u9020\u306f\u3088\u308a\u76f4\u611f\u7684\u3067\u3001\u30c7\u30fc\u30bf\u304c\u8ad6\u7406\u95a2\u4fc2\u306b\u304a\u3044\u3066\u7dda\u5f62\u306b\u914d\u7f6e\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002\u975e\u7dda\u5f62\u69cb\u9020\u306f\u3001\u9006\u306b\u975e\u7dda\u5f62\u306b\u914d\u7f6e\u3055\u308c\u3066\u3044\u307e\u3059\u3002

\u975e\u7dda\u5f62\u30c7\u30fc\u30bf\u69cb\u9020\u306f\u3001\u3055\u3089\u306b\u6728\u69cb\u9020\u3068\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u69cb\u9020\u306b\u5206\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

\u56f3 3-1 \u00a0 Linear and non-linear data structures

"},{"location":"chapter_data_structure/classification_of_data_structure/#312","title":"3.1.2 \u00a0 \u7269\u7406\u69cb\u9020\uff1a\u9023\u7d9a\u3068\u5206\u6563","text":"

\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u5b9f\u884c\u4e2d\u3001\u51e6\u7406\u3055\u308c\u308b\u30c7\u30fc\u30bf\u306f\u30e1\u30e2\u30ea\u306b\u683c\u7d0d\u3055\u308c\u307e\u3059\u3002\u4e0b\u56f3\u306f\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u306e\u30e1\u30e2\u30ea\u30b9\u30c6\u30a3\u30c3\u30af\u3092\u793a\u3057\u3066\u304a\u308a\u3001\u5404\u9ed2\u3044\u6b63\u65b9\u5f62\u306f\u7269\u7406\u30e1\u30e2\u30ea\u7a7a\u9593\u3067\u3059\u3002\u30e1\u30e2\u30ea\u3092\u5de8\u5927\u306aExcel\u30b9\u30d7\u30ec\u30c3\u30c9\u30b7\u30fc\u30c8\u3068\u8003\u3048\u308b\u3053\u3068\u304c\u3067\u304d\u3001\u5404\u30bb\u30eb\u306f\u4e00\u5b9a\u91cf\u306e\u30c7\u30fc\u30bf\u3092\u683c\u7d0d\u3067\u304d\u307e\u3059\u3002

\u30b7\u30b9\u30c6\u30e0\u306f\u30e1\u30e2\u30ea\u30a2\u30c9\u30ec\u30b9\u306b\u3088\u3063\u3066\u76ee\u6a19\u4f4d\u7f6e\u306e\u30c7\u30fc\u30bf\u306b\u30a2\u30af\u30bb\u30b9\u3057\u307e\u3059\u3002\u4e0b\u56f3\u306b\u793a\u3055\u308c\u3066\u3044\u308b\u3088\u3046\u306b\u3001\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u306f\u7279\u5b9a\u306e\u30eb\u30fc\u30eb\u306b\u5f93\u3063\u3066\u8868\u306e\u5404\u30bb\u30eb\u306b\u4e00\u610f\u306e\u8b58\u5225\u5b50\u3092\u5272\u308a\u5f53\u3066\u3001\u5404\u30e1\u30e2\u30ea\u7a7a\u9593\u304c\u4e00\u610f\u306e\u30e1\u30e2\u30ea\u30a2\u30c9\u30ec\u30b9\u3092\u6301\u3064\u3053\u3068\u3092\u4fdd\u8a3c\u3057\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u30a2\u30c9\u30ec\u30b9\u306b\u3088\u308a\u3001\u30d7\u30ed\u30b0\u30e9\u30e0\u306f\u30e1\u30e2\u30ea\u306b\u683c\u7d0d\u3055\u308c\u305f\u30c7\u30fc\u30bf\u306b\u30a2\u30af\u30bb\u30b9\u3067\u304d\u307e\u3059\u3002

\u56f3 3-2 \u00a0 Memory stick, memory spaces, memory addresses

Tip

\u30e1\u30e2\u30ea\u3092Excel\u30b9\u30d7\u30ec\u30c3\u30c9\u30b7\u30fc\u30c8\u306b\u6bd4\u8f03\u3059\u308b\u3053\u3068\u306f\u7c21\u7565\u5316\u3055\u308c\u305f\u985e\u63a8\u3067\u3042\u308b\u3053\u3068\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u30e1\u30e2\u30ea\u306e\u5b9f\u969b\u306e\u52d5\u4f5c\u30e1\u30ab\u30cb\u30ba\u30e0\u306f\u3088\u308a\u8907\u96d1\u3067\u3001\u30a2\u30c9\u30ec\u30b9\u7a7a\u9593\u3001\u30e1\u30e2\u30ea\u7ba1\u7406\u3001\u30ad\u30e3\u30c3\u30b7\u30e5\u30e1\u30ab\u30cb\u30ba\u30e0\u3001\u4eee\u60f3\u30e1\u30e2\u30ea\u3001\u7269\u7406\u30e1\u30e2\u30ea\u306a\u3069\u306e\u6982\u5ff5\u304c\u95a2\u4fc2\u3057\u3066\u3044\u307e\u3059\u3002

\u30e1\u30e2\u30ea\u306f\u3059\u3079\u3066\u306e\u30d7\u30ed\u30b0\u30e9\u30e0\u306e\u5171\u6709\u30ea\u30bd\u30fc\u30b9\u3067\u3059\u3002\u3042\u308b\u30e1\u30e2\u30ea\u30d6\u30ed\u30c3\u30af\u304c1\u3064\u306e\u30d7\u30ed\u30b0\u30e9\u30e0\u306b\u3088\u3063\u3066\u5360\u6709\u3055\u308c\u308b\u3068\u3001\u4ed6\u306e\u30d7\u30ed\u30b0\u30e9\u30e0\u304c\u540c\u6642\u306b\u4f7f\u7528\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002\u3057\u305f\u304c\u3063\u3066\u3001\u30e1\u30e2\u30ea\u30ea\u30bd\u30fc\u30b9\u306f\u30c7\u30fc\u30bf\u69cb\u9020\u3068\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u8a2d\u8a08\u306b\u304a\u3051\u308b\u91cd\u8981\u306a\u8003\u616e\u4e8b\u9805\u3067\u3059\u3002\u4f8b\u3048\u3070\u3001\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u30d4\u30fc\u30af\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u306f\u3001\u30b7\u30b9\u30c6\u30e0\u306e\u6b8b\u308a\u7a7a\u304d\u30e1\u30e2\u30ea\u3092\u8d85\u3048\u3066\u306f\u3044\u3051\u307e\u305b\u3093\u3002\u9023\u7d9a\u3057\u305f\u30e1\u30e2\u30ea\u30d6\u30ed\u30c3\u30af\u304c\u4e0d\u8db3\u3057\u3066\u3044\u308b\u5834\u5408\u306f\u3001\u975e\u9023\u7d9a\u30e1\u30e2\u30ea\u30d6\u30ed\u30c3\u30af\u306b\u683c\u7d0d\u3067\u304d\u308b\u30c7\u30fc\u30bf\u69cb\u9020\u3092\u9078\u629e\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

\u4e0b\u56f3\u306b\u793a\u3055\u308c\u3066\u3044\u308b\u3088\u3046\u306b\u3001\u7269\u7406\u69cb\u9020\u306f\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u30e1\u30e2\u30ea\u306b\u304a\u3051\u308b\u30c7\u30fc\u30bf\u306e\u683c\u7d0d\u65b9\u6cd5\u3092\u53cd\u6620\u3057\u3001\u9023\u7d9a\u7a7a\u9593\u683c\u7d0d\uff08\u914d\u5217\uff09\u3068\u975e\u9023\u7d9a\u7a7a\u9593\u683c\u7d0d\uff08\u9023\u7d50\u30ea\u30b9\u30c8\uff09\u306b\u5206\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u30022\u3064\u306e\u30bf\u30a4\u30d7\u306e\u7269\u7406\u69cb\u9020\u306f\u3001\u6642\u9593\u52b9\u7387\u3068\u7a7a\u9593\u52b9\u7387\u306e\u89b3\u70b9\u3067\u88dc\u5b8c\u7684\u306a\u7279\u6027\u3092\u793a\u3057\u307e\u3059\u3002

\u56f3 3-3 \u00a0 Contiguous space storage and dispersed space storage

\u3059\u3079\u3066\u306e\u30c7\u30fc\u30bf\u69cb\u9020\u306f\u914d\u5217\u3001\u9023\u7d50\u30ea\u30b9\u30c8\u3001\u307e\u305f\u306f\u305d\u306e\u7d44\u307f\u5408\u308f\u305b\u306b\u57fa\u3065\u3044\u3066\u5b9f\u88c5\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u4f8b\u3048\u3070\u3001\u30b9\u30bf\u30c3\u30af\u3068\u30ad\u30e5\u30fc\u306f\u914d\u5217\u307e\u305f\u306f\u9023\u7d50\u30ea\u30b9\u30c8\u306e\u3069\u3061\u3089\u3067\u3082\u5b9f\u88c5\u3067\u304d\u307e\u3059\u3002\u30cf\u30c3\u30b7\u30e5\u8868\u306e\u5b9f\u88c5\u306b\u306f\u914d\u5217\u3068\u9023\u7d50\u30ea\u30b9\u30c8\u306e\u4e21\u65b9\u304c\u95a2\u4fc2\u3059\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002

\u914d\u5217\u306b\u57fa\u3065\u3044\u3066\u5b9f\u88c5\u3055\u308c\u305f\u30c7\u30fc\u30bf\u69cb\u9020\u306f\u300c\u9759\u7684\u30c7\u30fc\u30bf\u69cb\u9020\u300d\u3068\u3082\u547c\u3070\u308c\u3001\u521d\u671f\u5316\u5f8c\u306b\u9577\u3055\u3092\u5909\u66f4\u3067\u304d\u306a\u3044\u3053\u3068\u3092\u610f\u5473\u3057\u307e\u3059\u3002\u9006\u306b\u3001\u9023\u7d50\u30ea\u30b9\u30c8\u306b\u57fa\u3065\u3044\u305f\u3082\u306e\u306f\u300c\u52d5\u7684\u30c7\u30fc\u30bf\u69cb\u9020\u300d\u3068\u547c\u3070\u308c\u3001\u30d7\u30ed\u30b0\u30e9\u30e0\u5b9f\u884c\u4e2d\u306b\u30b5\u30a4\u30ba\u3092\u8abf\u6574\u3067\u304d\u307e\u3059\u3002

Tip

\u7269\u7406\u69cb\u9020\u3092\u7406\u89e3\u3059\u308b\u306e\u304c\u56f0\u96e3\u306a\u5834\u5408\u306f\u3001\u6b21\u306e\u7ae0\u300c\u914d\u5217\u3068\u9023\u7d50\u30ea\u30b9\u30c8\u300d\u3092\u8aad\u3093\u3067\u304b\u3089\u3001\u3053\u306e\u7bc0\u306b\u623b\u308b\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\u3002

"},{"location":"chapter_data_structure/number_encoding/","title":"3.3 \u00a0 \u6570\u5024\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0 *","text":"

Tip

\u672c\u66f8\u3067\u306f\u3001\u30a2\u30b9\u30bf\u30ea\u30b9\u30af\u300c*\u300d\u304c\u4ed8\u3044\u305f\u7ae0\u306f\u4efb\u610f\u8aad\u66f8\u3067\u3059\u3002\u6642\u9593\u304c\u4e0d\u8db3\u3057\u3066\u3044\u308b\u5834\u5408\u3084\u96e3\u3057\u3044\u3068\u611f\u3058\u308b\u5834\u5408\u306f\u3001\u6700\u521d\u306f\u3053\u308c\u3089\u3092\u30b9\u30ad\u30c3\u30d7\u3057\u3066\u3001\u5fc5\u9808\u306e\u7ae0\u3092\u5b8c\u4e86\u3057\u305f\u5f8c\u306b\u623b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

"},{"location":"chapter_data_structure/number_encoding/#331","title":"3.3.1 \u00a0 \u6574\u6570\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0","text":"

\u524d\u306e\u7bc0\u306e\u8868\u3067\u3001\u3059\u3079\u3066\u306e\u6574\u6570\u578b\u306f\u6b63\u306e\u6570\u3088\u308a\u30821\u3064\u591a\u3044\u8ca0\u306e\u6570\u3092\u8868\u73fe\u3067\u304d\u308b\u3053\u3068\u3092\u89b3\u5bdf\u3057\u307e\u3057\u305f\u3002\u4f8b\u3048\u3070\u3001byte\u306e\u7bc4\u56f2\u306f\\([-128, 127]\\)\u3067\u3059\u3002\u3053\u306e\u73fe\u8c61\u306f\u76f4\u611f\u306b\u53cd\u3059\u308b\u3088\u3046\u306b\u898b\u3048\u3001\u305d\u306e\u6839\u672c\u7684\u306a\u7406\u7531\u306b\u306f\u7b26\u53f7\u7d76\u5bfe\u5024\u30011\u306e\u88dc\u6570\u30012\u306e\u88dc\u6570\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u306e\u77e5\u8b58\u304c\u95a2\u4e0e\u3057\u3066\u3044\u307e\u3059\u3002

\u307e\u305a\u91cd\u8981\u306a\u3053\u3068\u306f\u3001**\u6570\u5024\u306f\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u5185\u30672\u306e\u88dc\u6570\u5f62\u5f0f\u3067\u683c\u7d0d\u3055\u308c\u308b**\u3068\u3044\u3046\u3053\u3068\u3067\u3059\u3002\u306a\u305c\u305d\u3046\u306a\u306e\u304b\u3092\u5206\u6790\u3059\u308b\u524d\u306b\u3001\u3053\u308c\u30893\u3064\u306e\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u65b9\u6cd5\u3092\u5b9a\u7fa9\u3057\u307e\u3057\u3087\u3046\uff1a

\u4ee5\u4e0b\u306e\u56f3\u306f\u3001\u7b26\u53f7\u7d76\u5bfe\u5024\u30011\u306e\u88dc\u6570\u30012\u306e\u88dc\u6570\u9593\u306e\u5909\u63db\u3092\u793a\u3057\u3066\u3044\u307e\u3059\uff1a

\u56f3 3-4 \u00a0 \u7b26\u53f7\u7d76\u5bfe\u5024\u30011\u306e\u88dc\u6570\u30012\u306e\u88dc\u6570\u9593\u306e\u5909\u63db

\u7b26\u53f7\u7d76\u5bfe\u5024\u306f\u6700\u3082\u76f4\u611f\u7684\u3067\u3059\u304c\u3001\u5236\u9650\u304c\u3042\u308a\u307e\u3059\u3002\u4e00\u3064\u306b\u306f\u3001\u7b26\u53f7\u7d76\u5bfe\u5024\u306e\u8ca0\u306e\u6570\u306f\u8a08\u7b97\u3067\u76f4\u63a5\u4f7f\u7528\u3067\u304d\u307e\u305b\u3093\u3002\u4f8b\u3048\u3070\u3001\u7b26\u53f7\u7d76\u5bfe\u5024\u3067\\(1 + (-2)\\)\u3092\u8a08\u7b97\u3059\u308b\u3068\\(-3\\)\u306b\u306a\u308a\u3001\u3053\u308c\u306f\u6b63\u3057\u304f\u3042\u308a\u307e\u305b\u3093\u3002

\\[ \\begin{aligned} & 1 + (-2) \\newline & \\rightarrow 0000 \\; 0001 + 1000 \\; 0010 \\newline & = 1000 \\; 0011 \\newline & \\rightarrow -3 \\end{aligned} \\]

\u3053\u306e\u554f\u984c\u306b\u5bfe\u51e6\u3059\u308b\u305f\u3081\u3001\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u306f1\u306e\u88dc\u6570\u3092\u5c0e\u5165\u3057\u307e\u3057\u305f\u30021\u306e\u88dc\u6570\u306b\u5909\u63db\u3057\u3066\\(1 + (-2)\\)\u3092\u8a08\u7b97\u3057\u3001\u7d50\u679c\u3092\u7b26\u53f7\u7d76\u5bfe\u5024\u306b\u623b\u3059\u3068\u3001\u6b63\u3057\u3044\u7d50\u679c\\(-1\\)\u304c\u5f97\u3089\u308c\u307e\u3059\u3002

\\[ \\begin{aligned} & 1 + (-2) \\newline & \\rightarrow 0000 \\; 0001 \\; \\text{(\u7b26\u53f7\u7d76\u5bfe\u5024)} + 1000 \\; 0010 \\; \\text{(\u7b26\u53f7\u7d76\u5bfe\u5024)} \\newline & = 0000 \\; 0001 \\; \\text{(1\u306e\u88dc\u6570)} + 1111 \\; 1101 \\; \\text{(1\u306e\u88dc\u6570)} \\newline & = 1111 \\; 1110 \\; \\text{(1\u306e\u88dc\u6570)} \\newline & = 1000 \\; 0001 \\; \\text{(\u7b26\u53f7\u7d76\u5bfe\u5024)} \\newline & \\rightarrow -1 \\end{aligned} \\]

\u307e\u305f\u3001\u7b26\u53f7\u7d76\u5bfe\u5024\u3067\u306f0\u306b2\u3064\u306e\u8868\u73fe\u304c\u3042\u308a\u307e\u3059\uff1a\\(+0\\)\u3068\\(-0\\)\u3067\u3059\u3002\u3053\u308c\u306f0\u306b\u5bfe\u3057\u30662\u3064\u306e\u7570\u306a\u308b\u4e8c\u9032\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u304c\u3042\u308b\u3053\u3068\u3092\u610f\u5473\u3057\u3001\u66d6\u6627\u3055\u3092\u5f15\u304d\u8d77\u3053\u3059\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001\u6761\u4ef6\u30c1\u30a7\u30c3\u30af\u3067\u6b63\u3068\u8ca0\u306e0\u3092\u533a\u5225\u3057\u306a\u3044\u3068\u3001\u6b63\u3057\u304f\u306a\u3044\u7d50\u679c\u306b\u306a\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u306e\u66d6\u6627\u3055\u306b\u5bfe\u51e6\u3059\u308b\u306b\u306f\u8ffd\u52a0\u306e\u30c1\u30a7\u30c3\u30af\u304c\u5fc5\u8981\u3067\u3001\u8a08\u7b97\u52b9\u7387\u304c\u4f4e\u4e0b\u3059\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002

\\[ \\begin{aligned} +0 & \\rightarrow 0000 \\; 0000 \\newline -0 & \\rightarrow 1000 \\; 0000 \\end{aligned} \\]

\u7b26\u53f7\u7d76\u5bfe\u5024\u3068\u540c\u69d8\u306b\u30011\u306e\u88dc\u6570\u3082\u6b63\u3068\u8ca0\u306e0\u306e\u66d6\u6627\u3055\u306b\u60a9\u307e\u3055\u308c\u307e\u3059\u3002\u305d\u306e\u305f\u3081\u3001\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u306f\u3055\u3089\u306b2\u306e\u88dc\u6570\u3092\u5c0e\u5165\u3057\u307e\u3057\u305f\u3002\u7b26\u53f7\u7d76\u5bfe\u5024\u30011\u306e\u88dc\u6570\u30012\u306e\u88dc\u6570\u306b\u304a\u3051\u308b\u8ca0\u306e0\u306e\u5909\u63db\u904e\u7a0b\u3092\u89b3\u5bdf\u3057\u3066\u307f\u307e\u3057\u3087\u3046\uff1a

\\[ \\begin{aligned} -0 \\rightarrow \\; & 1000 \\; 0000 \\; \\text{(\u7b26\u53f7\u7d76\u5bfe\u5024)} \\newline = \\; & 1111 \\; 1111 \\; \\text{(1\u306e\u88dc\u6570)} \\newline = 1 \\; & 0000 \\; 0000 \\; \\text{(2\u306e\u88dc\u6570)} \\newline \\end{aligned} \\]

\u8ca0\u306e0\u306e1\u306e\u88dc\u6570\u306b\\(1\\)\u3092\u52a0\u3048\u308b\u3068\u6841\u4e0a\u304c\u308a\u304c\u767a\u751f\u3057\u307e\u3059\u304c\u3001byte\u306e\u9577\u3055\u306f8\u30d3\u30c3\u30c8\u306e\u307f\u306e\u305f\u3081\u30019\u756a\u76ee\u306e\u30d3\u30c3\u30c8\u3078\u306e\u6841\u4e0a\u304c\u308a\\(1\\)\u306f\u7834\u68c4\u3055\u308c\u307e\u3059\u3002\u3057\u305f\u304c\u3063\u3066\u3001**\u8ca0\u306e0\u306e2\u306e\u88dc\u6570\u306f\\(0000 \\; 0000\\)**\u3067\u3001\u6b63\u306e0\u3068\u540c\u3058\u306b\u306a\u308a\u3001\u66d6\u6627\u3055\u304c\u89e3\u6c7a\u3055\u308c\u307e\u3059\u3002

\u6700\u5f8c\u306e\u8b0e\u306f\u3001byte\u306e\\([-128, 127]\\)\u306e\u7bc4\u56f2\u3067\u3001\u8ffd\u52a0\u306e\u8ca0\u306e\u6570\\(-128\\)\u304c\u3042\u308b\u3053\u3068\u3067\u3059\u3002\\([-127, +127]\\)\u306e\u533a\u9593\u3067\u306f\u3001\u3059\u3079\u3066\u306e\u6574\u6570\u306b\u5bfe\u5fdc\u3059\u308b\u7b26\u53f7\u7d76\u5bfe\u5024\u30011\u306e\u88dc\u6570\u30012\u306e\u88dc\u6570\u304c\u3042\u308a\u3001\u76f8\u4e92\u5909\u63db\u304c\u53ef\u80fd\u3067\u3042\u308b\u3053\u3068\u3092\u89b3\u5bdf\u3057\u307e\u3059\u3002

\u3057\u304b\u3057\u30012\u306e\u88dc\u6570\\(1000 \\; 0000\\)\u306f\u5bfe\u5fdc\u3059\u308b\u7b26\u53f7\u7d76\u5bfe\u5024\u3092\u6301\u305f\u306a\u3044\u4f8b\u5916\u3067\u3059\u3002\u5909\u63db\u65b9\u6cd5\u306b\u3088\u308b\u3068\u3001\u305d\u306e\u7b26\u53f7\u7d76\u5bfe\u5024\u306f\\(0000 \\; 0000\\)\u3067\u30010\u3092\u793a\u3057\u307e\u3059\u3002\u3053\u308c\u306f\u77db\u76fe\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002\u306a\u305c\u306a\u3089\u3001\u305d\u306e2\u306e\u88dc\u6570\u306f\u81ea\u5206\u81ea\u8eab\u3092\u8868\u3059\u3079\u304d\u3060\u304b\u3089\u3067\u3059\u3002\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u306f\u3001\u3053\u306e\u7279\u5225\u306a2\u306e\u88dc\u6570\\(1000 \\; 0000\\)\u3092\\(-128\\)\u3092\u8868\u3059\u3082\u306e\u3068\u3057\u3066\u6307\u5b9a\u3057\u3066\u3044\u307e\u3059\u3002\u5b9f\u969b\u30012\u306e\u88dc\u6570\u3067\u306e\\((-1) + (-127)\\)\u306e\u8a08\u7b97\u7d50\u679c\u306f\\(-128\\)\u306b\u306a\u308a\u307e\u3059\u3002

\\[ \\begin{aligned} & (-127) + (-1) \\newline & \\rightarrow 1111 \\; 1111 \\; \\text{(\u7b26\u53f7\u7d76\u5bfe\u5024)} + 1000 \\; 0001 \\; \\text{(\u7b26\u53f7\u7d76\u5bfe\u5024)} \\newline & = 1000 \\; 0000 \\; \\text{(1\u306e\u88dc\u6570)} + 1111 \\; 1110 \\; \\text{(1\u306e\u88dc\u6570)} \\newline & = 1000 \\; 0001 \\; \\text{(2\u306e\u88dc\u6570)} + 1111 \\; 1111 \\; \\text{(2\u306e\u88dc\u6570)} \\newline & = 1000 \\; 0000 \\; \\text{(2\u306e\u88dc\u6570)} \\newline & \\rightarrow -128 \\end{aligned} \\]

\u304a\u6c17\u3065\u304d\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u304c\u3001\u3053\u308c\u3089\u306e\u8a08\u7b97\u306f\u3059\u3079\u3066\u52a0\u7b97\u3067\u3042\u308a\u3001\u91cd\u8981\u306a\u4e8b\u5b9f\u3092\u793a\u5506\u3057\u3066\u3044\u307e\u3059\uff1a\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u306e\u5185\u90e8\u30cf\u30fc\u30c9\u30a6\u30a7\u30a2\u56de\u8def\u306f\u4e3b\u306b\u52a0\u7b97\u6f14\u7b97\u3092\u4e2d\u5fc3\u306b\u8a2d\u8a08\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u52a0\u7b97\u304c\u4e57\u7b97\u3001\u9664\u7b97\u3001\u6e1b\u7b97\u306a\u3069\u306e\u4ed6\u306e\u6f14\u7b97\u3068\u6bd4\u8f03\u3057\u3066\u30cf\u30fc\u30c9\u30a6\u30a7\u30a2\u3067\u5b9f\u88c5\u3057\u3084\u3059\u304f\u3001\u4e26\u5217\u5316\u304c\u5bb9\u6613\u3067\u9ad8\u901f\u8a08\u7b97\u304c\u53ef\u80fd\u3060\u304b\u3089\u3067\u3059\u3002

\u3053\u308c\u306f\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u304c\u52a0\u7b97\u306e\u307f\u3092\u5b9f\u884c\u3067\u304d\u308b\u3053\u3068\u3092\u610f\u5473\u3059\u308b\u3082\u306e\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u52a0\u7b97\u3068\u57fa\u672c\u7684\u306a\u8ad6\u7406\u6f14\u7b97\u3092\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u306f\u69d8\u3005\u306a\u4ed6\u306e\u6570\u5b66\u6f14\u7b97\u3092\u5b9f\u884c\u3067\u304d\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001\u6e1b\u7b97\\(a - b\\)\u306f\\(a + (-b)\\)\u306b\u5909\u63db\u3067\u304d\u3001\u4e57\u7b97\u3068\u9664\u7b97\u306f\u8907\u6570\u306e\u52a0\u7b97\u307e\u305f\u306f\u6e1b\u7b97\u306b\u5909\u63db\u3067\u304d\u307e\u3059\u3002

\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u30672\u306e\u88dc\u6570\u3092\u4f7f\u7528\u3059\u308b\u7406\u7531\u3092\u307e\u3068\u3081\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\uff1a2\u306e\u88dc\u6570\u8868\u73fe\u306b\u3088\u308a\u3001\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u306f\u540c\u3058\u56de\u8def\u3068\u6f14\u7b97\u3092\u4f7f\u7528\u3057\u3066\u6b63\u3068\u8ca0\u306e\u6570\u306e\u52a0\u7b97\u3092\u51e6\u7406\u3067\u304d\u3001\u6e1b\u7b97\u7528\u306e\u7279\u5225\u306a\u30cf\u30fc\u30c9\u30a6\u30a7\u30a2\u56de\u8def\u306e\u5fc5\u8981\u6027\u3092\u6392\u9664\u3057\u3001\u6b63\u3068\u8ca0\u306e0\u306e\u66d6\u6627\u3055\u3092\u56de\u907f\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u30cf\u30fc\u30c9\u30a6\u30a7\u30a2\u8a2d\u8a08\u304c\u5927\u5e45\u306b\u7c21\u7d20\u5316\u3055\u308c\u3001\u8a08\u7b97\u52b9\u7387\u304c\u5411\u4e0a\u3057\u307e\u3059\u3002

2\u306e\u88dc\u6570\u306e\u8a2d\u8a08\u306f\u975e\u5e38\u306b\u5de7\u5999\u3067\u3001\u30b9\u30da\u30fc\u30b9\u306e\u5236\u7d04\u306b\u3088\u308a\u3001\u3053\u3053\u3067\u505c\u6b62\u3057\u307e\u3059\u3002\u8208\u5473\u306e\u3042\u308b\u8aad\u8005\u306f\u3055\u3089\u306b\u63a2\u6c42\u3059\u308b\u3053\u3068\u3092\u5968\u52b1\u3057\u307e\u3059\u3002

"},{"location":"chapter_data_structure/number_encoding/#332","title":"3.3.2 \u00a0 \u6d6e\u52d5\u5c0f\u6570\u70b9\u6570\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0","text":"

\u8208\u5473\u6df1\u3044\u3053\u3068\u306b\u6c17\u3065\u3044\u305f\u304b\u3082\u3057\u308c\u307e\u305b\u3093\uff1a\u540c\u30584\u30d0\u30a4\u30c8\u306e\u9577\u3055\u306b\u3082\u304b\u304b\u308f\u3089\u305a\u3001\u306a\u305cfloat\u306fint\u3068\u6bd4\u8f03\u3057\u3066\u306f\u308b\u304b\u306b\u5927\u304d\u3044\u5024\u306e\u7bc4\u56f2\u3092\u6301\u3064\u306e\u3067\u3057\u3087\u3046\u304b\uff1f\u3053\u308c\u306f\u76f4\u611f\u306b\u53cd\u3059\u308b\u3088\u3046\u306b\u898b\u3048\u307e\u3059\u3002float\u306f\u5206\u6570\u3092\u8868\u73fe\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u305f\u3081\u3001\u7bc4\u56f2\u304c\u7e2e\u5c0f\u3059\u308b\u3068\u4e88\u60f3\u3055\u308c\u308b\u304b\u3089\u3067\u3059\u3002

\u5b9f\u969b\u3001\u3053\u308c\u306f\u6d6e\u52d5\u5c0f\u6570\u70b9\u6570\uff08float\uff09\u3067\u4f7f\u7528\u3055\u308c\u308b\u7570\u306a\u308b\u8868\u73fe\u65b9\u6cd5\u306b\u3088\u308b\u3082\u306e\u3067\u3059\u300232\u30d3\u30c3\u30c8\u306e\u4e8c\u9032\u6570\u3092\u6b21\u306e\u3088\u3046\u306b\u8003\u3048\u3066\u307f\u307e\u3057\u3087\u3046\uff1a

\\[ b_{31} b_{30} b_{29} \\ldots b_2 b_1 b_0 \\]

IEEE 754\u6a19\u6e96\u306b\u3088\u308b\u3068\u300132\u30d3\u30c3\u30c8\u306efloat\u306f\u6b21\u306e3\u3064\u306e\u90e8\u5206\u3067\u69cb\u6210\u3055\u308c\u307e\u3059\uff1a

\u4e8c\u9032float\u6570\u306e\u5024\u306f\u6b21\u306e\u3088\u3046\u306b\u8a08\u7b97\u3055\u308c\u307e\u3059\uff1a

\\[ \\text{val} = (-1)^{b_{31}} \\times 2^{\\left(b_{30} b_{29} \\ldots b_{23}\\right)_2 - 127} \\times \\left(1 . b_{22} b_{21} \\ldots b_0\\right)_2 \\]

\u5341\u9032\u516c\u5f0f\u306b\u5909\u63db\u3059\u308b\u3068\u3001\u6b21\u306e\u3088\u3046\u306b\u306a\u308a\u307e\u3059\uff1a

\\[ \\text{val} = (-1)^{\\mathrm{S}} \\times 2^{\\mathrm{E} - 127} \\times (1 + \\mathrm{N}) \\]

\u5404\u6210\u5206\u306e\u7bc4\u56f2\u306f\uff1a

\\[ \\begin{aligned} \\mathrm{S} \\in & \\{ 0, 1\\}, \\quad \\mathrm{E} \\in \\{ 1, 2, \\dots, 254 \\} \\newline (1 + \\mathrm{N}) = & (1 + \\sum_{i=1}^{23} b_{23-i} \\times 2^{-i}) \\subset [1, 2 - 2^{-23}] \\end{aligned} \\]

\u56f3 3-5 \u00a0 IEEE 754\u6a19\u6e96\u3067\u306e\u6d6e\u52d5\u5c0f\u6570\u70b9\u6570\u306e\u8a08\u7b97\u4f8b

\u4e0a\u306e\u56f3\u3092\u89b3\u5bdf\u3059\u308b\u3068\u3001\u4f8b\u306e\u30c7\u30fc\u30bf\\(\\mathrm{S} = 0\\)\u3001\\(\\mathrm{E} = 124\\)\u3001\\(\\mathrm{N} = 2^{-2} + 2^{-3} = 0.375\\)\u304c\u4e0e\u3048\u3089\u308c\u305f\u5834\u5408\uff1a

\\[ \\text{val} = (-1)^0 \\times 2^{124 - 127} \\times (1 + 0.375) = 0.171875 \\]

\u3053\u308c\u3067\u6700\u521d\u306e\u8cea\u554f\u306b\u7b54\u3048\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\uff1afloat\u306e\u8868\u73fe\u306b\u306f\u6307\u6570\u30d3\u30c3\u30c8\u304c\u542b\u307e\u308c\u3066\u3044\u308b\u305f\u3081\u3001int\u3088\u308a\u3082\u306f\u308b\u304b\u306b\u5927\u304d\u3044\u7bc4\u56f2\u3092\u6301\u3061\u307e\u3059\u3002\u4e0a\u8a18\u306e\u8a08\u7b97\u306b\u57fa\u3065\u304f\u3068\u3001float\u3067\u8868\u73fe\u53ef\u80fd\u306a\u6700\u5927\u6b63\u306e\u6570\u306f\u7d04\\(2^{254 - 127} \\times (2 - 2^{-23}) \\approx 3.4 \\times 10^{38}\\)\u3067\u3001\u6700\u5c0f\u8ca0\u306e\u6570\u306f\u7b26\u53f7\u30d3\u30c3\u30c8\u3092\u5207\u308a\u66ff\u3048\u308b\u3053\u3068\u3067\u5f97\u3089\u308c\u307e\u3059\u3002

\u3057\u304b\u3057\u3001float\u306e\u62e1\u5f35\u3055\u308c\u305f\u7bc4\u56f2\u306e\u30c8\u30ec\u30fc\u30c9\u30aa\u30d5\u306f\u7cbe\u5ea6\u306e\u72a0\u7272\u3067\u3059\u3002\u6574\u6570\u578bint\u306f32\u30d3\u30c3\u30c8\u3059\u3079\u3066\u3092\u6570\u5024\u8868\u73fe\u306b\u4f7f\u7528\u3057\u3001\u5024\u306f\u5747\u7b49\u306b\u5206\u5e03\u3057\u3066\u3044\u307e\u3059\u304c\u3001\u6307\u6570\u30d3\u30c3\u30c8\u306e\u305f\u3081\u3001float\u306e\u5024\u304c\u5927\u304d\u3044\u307b\u3069\u3001\u96a3\u63a5\u3059\u308b\u6570\u5024\u9593\u306e\u5dee\u304c\u5927\u304d\u304f\u306a\u308a\u307e\u3059\u3002

\u4ee5\u4e0b\u306e\u8868\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u6307\u6570\u30d3\u30c3\u30c8\\(\\mathrm{E} = 0\\)\u3068\\(\\mathrm{E} = 255\\)\u306f\u7279\u5225\u306a\u610f\u5473\u3092\u6301\u3061\u30010\u3001\u7121\u9650\u5927\u3001\\(\\mathrm{NaN}\\)\u306a\u3069\u3092\u8868\u73fe\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002

\u8868 3-2 \u00a0 \u6307\u6570\u30d3\u30c3\u30c8\u306e\u610f\u5473

\u6307\u6570\u30d3\u30c3\u30c8E \u4eee\u6570\u30d3\u30c3\u30c8\\(\\mathrm{N} = 0\\) \u4eee\u6570\u30d3\u30c3\u30c8\\(\\mathrm{N} \\ne 0\\) \u8a08\u7b97\u516c\u5f0f \\(0\\) \\(\\pm 0\\) \u975e\u6b63\u898f\u5316\u6570 \\((-1)^{\\mathrm{S}} \\times 2^{-126} \\times (0.\\mathrm{N})\\) \\(1, 2, \\dots, 254\\) \u6b63\u898f\u5316\u6570 \u6b63\u898f\u5316\u6570 \\((-1)^{\\mathrm{S}} \\times 2^{(\\mathrm{E} -127)} \\times (1.\\mathrm{N})\\) \\(255\\) \\(\\pm \\infty\\) \\(\\mathrm{NaN}\\)

\u975e\u6b63\u898f\u5316\u6570\u306f\u6d6e\u52d5\u5c0f\u6570\u70b9\u6570\u306e\u7cbe\u5ea6\u3092\u5927\u5e45\u306b\u5411\u4e0a\u3055\u305b\u308b\u3053\u3068\u306f\u6ce8\u76ee\u306b\u5024\u3057\u307e\u3059\u3002\u6700\u5c0f\u306e\u6b63\u306e\u6b63\u898f\u5316\u6570\u306f\\(2^{-126}\\)\u3067\u3001\u6700\u5c0f\u306e\u6b63\u306e\u975e\u6b63\u898f\u5316\u6570\u306f\\(2^{-126} \\times 2^{-23}\\)\u3067\u3059\u3002

\u500d\u7cbe\u5ea6double\u3082float\u3068\u540c\u69d8\u306e\u8868\u73fe\u65b9\u6cd5\u3092\u4f7f\u7528\u3057\u307e\u3059\u304c\u3001\u7c21\u6f54\u3055\u306e\u305f\u3081\u3053\u3053\u3067\u306f\u8a73\u8ff0\u3057\u307e\u305b\u3093\u3002

"},{"location":"chapter_data_structure/summary/","title":"3.5 \u00a0 \u307e\u3068\u3081","text":""},{"location":"chapter_data_structure/summary/#1","title":"1. \u00a0 \u91cd\u8981\u306a\u30dd\u30a4\u30f3\u30c8","text":""},{"location":"chapter_data_structure/summary/#2-q-a","title":"2. \u00a0 Q & A","text":"

Q: \u306a\u305c\u30cf\u30c3\u30b7\u30e5\u8868\u306f\u7dda\u5f62\u3068\u975e\u7dda\u5f62\u306e\u4e21\u65b9\u306e\u30c7\u30fc\u30bf\u69cb\u9020\u3092\u542b\u3080\u306e\u3067\u3059\u304b\uff1f

\u30cf\u30c3\u30b7\u30e5\u8868\u306e\u57fa\u790e\u69cb\u9020\u306f\u914d\u5217\u3067\u3059\u3002\u30cf\u30c3\u30b7\u30e5\u885d\u7a81\u3092\u89e3\u6c7a\u3059\u308b\u305f\u3081\u306b\u3001\u300c\u30c1\u30a7\u30a4\u30f3\u6cd5\u300d\u3092\u4f7f\u7528\u3059\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059\uff08\u5f8c\u306e\u7bc0\u300c\u30cf\u30c3\u30b7\u30e5\u885d\u7a81\u300d\u3067\u8aac\u660e\uff09\uff1a\u914d\u5217\u306e\u5404\u30d0\u30b1\u30c3\u30c8\u306f\u9023\u7d50\u30ea\u30b9\u30c8\u3092\u6307\u3057\u3001\u305d\u306e\u9577\u3055\u304c\u7279\u5b9a\u306e\u95be\u5024\u3088\u308a\u5927\u304d\u304f\u306a\u308b\u3068\u6728\uff08\u901a\u5e38\u306f\u8d64\u9ed2\u6728\uff09\u306b\u5909\u63db\u3055\u308c\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002 \u683c\u7d0d\u306e\u89b3\u70b9\u304b\u3089\u3001\u30cf\u30c3\u30b7\u30e5\u8868\u306e\u57fa\u790e\u69cb\u9020\u306f\u914d\u5217\u3067\u3001\u5404\u30d0\u30b1\u30c3\u30c8\u306b\u306f\u5024\u3001\u9023\u7d50\u30ea\u30b9\u30c8\u3001\u307e\u305f\u306f\u6728\u304c\u542b\u307e\u308c\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002\u3057\u305f\u304c\u3063\u3066\u3001\u30cf\u30c3\u30b7\u30e5\u8868\u306f\u7dda\u5f62\u30c7\u30fc\u30bf\u69cb\u9020\uff08\u914d\u5217\u3001\u9023\u7d50\u30ea\u30b9\u30c8\uff09\u3068\u975e\u7dda\u5f62\u30c7\u30fc\u30bf\u69cb\u9020\uff08\u6728\uff09\u306e\u4e21\u65b9\u3092\u542b\u3080\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002

Q: char\u578b\u306e\u9577\u3055\u306f1\u30d0\u30a4\u30c8\u3067\u3059\u304b\uff1f

char\u578b\u306e\u9577\u3055\u306f\u3001\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\u306e\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u65b9\u6cd5\u306b\u3088\u3063\u3066\u6c7a\u307e\u308a\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001Java\u3001JavaScript\u3001TypeScript\u3001C#\u306f\u3059\u3079\u3066UTF-16\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\uff08Unicode\u30b3\u30fc\u30c9\u30dd\u30a4\u30f3\u30c8\u3092\u4fdd\u5b58\u3059\u308b\u305f\u3081\uff09\u3092\u4f7f\u7528\u3059\u308b\u305f\u3081\u3001char\u578b\u306e\u9577\u3055\u306f2\u30d0\u30a4\u30c8\u3067\u3059\u3002

Q: \u914d\u5217\u30d9\u30fc\u30b9\u306e\u30c7\u30fc\u30bf\u69cb\u9020\u3092\u300c\u9759\u7684\u30c7\u30fc\u30bf\u69cb\u9020\u300d\u3068\u547c\u3076\u3053\u3068\u306b\u66d6\u6627\u3055\u306f\u3042\u308a\u307e\u305b\u3093\u304b\uff1f\u30b9\u30bf\u30c3\u30af\u3082\u30d7\u30c3\u30b7\u30e5\u3084\u30dd\u30c3\u30d7\u306a\u3069\u306e\u300c\u52d5\u7684\u300d\u64cd\u4f5c\u3092\u5b9f\u884c\u3067\u304d\u307e\u3059\u3002

\u30b9\u30bf\u30c3\u30af\u306f\u52d5\u7684\u306a\u30c7\u30fc\u30bf\u64cd\u4f5c\u3092\u5b9f\u88c5\u3067\u304d\u307e\u3059\u304c\u3001\u30c7\u30fc\u30bf\u69cb\u9020\u306f\u4f9d\u7136\u3068\u3057\u3066\u300c\u9759\u7684\u300d\u3067\u3059\uff08\u9577\u3055\u304c\u56fa\u5b9a\uff09\u3002\u914d\u5217\u30d9\u30fc\u30b9\u306e\u30c7\u30fc\u30bf\u69cb\u9020\u306f\u52d5\u7684\u306b\u8981\u7d20\u3092\u8ffd\u52a0\u307e\u305f\u306f\u524a\u9664\u3067\u304d\u307e\u3059\u304c\u3001\u305d\u306e\u5bb9\u91cf\u306f\u56fa\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u30b9\u30bf\u30c3\u30af\u30b5\u30a4\u30ba\u304c\u4e8b\u524d\u306b\u5272\u308a\u5f53\u3066\u3089\u308c\u305f\u30b5\u30a4\u30ba\u3092\u8d85\u3048\u308b\u5834\u5408\u3001\u53e4\u3044\u914d\u5217\u306f\u65b0\u3057\u304f\u4f5c\u6210\u3055\u308c\u305f\u3088\u308a\u5927\u304d\u306a\u914d\u5217\u306b\u30b3\u30d4\u30fc\u3055\u308c\u307e\u3059\u3002

Q: \u30b9\u30bf\u30c3\u30af\uff08\u30ad\u30e5\u30fc\uff09\u3092\u69cb\u7bc9\u3059\u308b\u969b\u3001\u305d\u306e\u30b5\u30a4\u30ba\u304c\u6307\u5b9a\u3055\u308c\u3066\u3044\u306a\u3044\u306e\u306b\u3001\u306a\u305c\u300c\u9759\u7684\u30c7\u30fc\u30bf\u69cb\u9020\u300d\u306a\u306e\u3067\u3059\u304b\uff1f

\u9ad8\u7d1a\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\u3067\u306f\u3001\u30b9\u30bf\u30c3\u30af\uff08\u30ad\u30e5\u30fc\uff09\u306e\u521d\u671f\u5bb9\u91cf\u3092\u624b\u52d5\u3067\u6307\u5b9a\u3059\u308b\u5fc5\u8981\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u3053\u306e\u30bf\u30b9\u30af\u306f\u30af\u30e9\u30b9\u5185\u3067\u81ea\u52d5\u7684\u306b\u5b8c\u4e86\u3055\u308c\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001Java\u306eArrayList\u306e\u521d\u671f\u5bb9\u91cf\u306f\u901a\u5e3810\u3067\u3059\u3002\u3055\u3089\u306b\u3001\u62e1\u5f35\u64cd\u4f5c\u3082\u81ea\u52d5\u7684\u306b\u5b8c\u4e86\u3055\u308c\u307e\u3059\u3002\u8a73\u7d30\u306b\u3064\u3044\u3066\u306f\u3001\u5f8c\u7d9a\u306e\u300c\u30ea\u30b9\u30c8\u300d\u306e\u7ae0\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002

Q: \u7b26\u53f7\u7d76\u5bfe\u5024\u30922\u306e\u88dc\u6570\u306b\u5909\u63db\u3059\u308b\u65b9\u6cd5\u306f\u300c\u6700\u521d\u306b\u5426\u5b9a\u3057\u3066\u304b\u30891\u3092\u52a0\u3048\u308b\u300d\u3067\u3059\u306e\u3067\u30012\u306e\u88dc\u6570\u3092\u7b26\u53f7\u7d76\u5bfe\u5024\u306b\u5909\u63db\u3059\u308b\u3053\u3068\u306f\u305d\u306e\u9006\u64cd\u4f5c\u300c\u6700\u521d\u306b1\u3092\u6e1b\u7b97\u3057\u3066\u304b\u3089\u5426\u5b9a\u3059\u308b\u300d\u3067\u3042\u308b\u3079\u304d\u3067\u3059\u3002 \u3057\u304b\u3057\u30012\u306e\u88dc\u6570\u3082\u300c\u6700\u521d\u306b\u5426\u5b9a\u3057\u3066\u304b\u30891\u3092\u52a0\u3048\u308b\u300d\u3092\u901a\u3058\u3066\u7b26\u53f7\u7d76\u5bfe\u5024\u306b\u5909\u63db\u3067\u304d\u307e\u3059\u3002\u306a\u305c\u3067\u3059\u304b\uff1f

A: \u3053\u308c\u306f\u3001\u7b26\u53f7\u7d76\u5bfe\u5024\u30682\u306e\u88dc\u6570\u9593\u306e\u76f8\u4e92\u5909\u63db\u304c\u300c\u88dc\u6570\u300d\u306e\u8a08\u7b97\u3068\u7b49\u4fa1\u3060\u304b\u3089\u3067\u3059\u3002\u307e\u305a\u88dc\u6570\u3092\u5b9a\u7fa9\u3057\u307e\u3059\uff1a\\(a + b = c\\)\u3068\u4eee\u5b9a\u3059\u308b\u3068\u3001\\(a\\)\u306f\\(b\\)\u306e\\(c\\)\u306b\u5bfe\u3059\u308b\u88dc\u6570\u3068\u8a00\u3044\u3001\u9006\u306b\\(b\\)\u306f\\(a\\)\u306e\\(c\\)\u306b\u5bfe\u3059\u308b\u88dc\u6570\u3068\u8a00\u3044\u307e\u3059\u3002

\u9577\u3055\\(n = 4\\)\u306e\u4e8c\u9032\u6570\\(0010\\)\u304c\u4e0e\u3048\u3089\u308c\u305f\u5834\u5408\u3001\u3053\u306e\u6570\u304c\u7b26\u53f7\u7d76\u5bfe\u5024\uff08\u7b26\u53f7\u30d3\u30c3\u30c8\u3092\u7121\u8996\uff09\u306e\u5834\u5408\u3001\u305d\u306e2\u306e\u88dc\u6570\u306f\u300c\u6700\u521d\u306b\u5426\u5b9a\u3057\u3066\u304b\u30891\u3092\u52a0\u3048\u308b\u300d\u3053\u3068\u3067\u5f97\u3089\u308c\u307e\u3059\uff1a

\\[ 0010 \\rightarrow 1101 \\rightarrow 1110 \\]

\u7b26\u53f7\u7d76\u5bfe\u5024\u30682\u306e\u88dc\u6570\u306e\u548c\u304c\\(0010 + 1110 = 10000\\)\u3067\u3042\u308b\u3053\u3068\u3092\u89b3\u5bdf\u3057\u307e\u3059\u3002\u3064\u307e\u308a\u30012\u306e\u88dc\u6570\\(1110\\)\u306f\u7b26\u53f7\u7d76\u5bfe\u5024\\(0010\\)\u306e\\(10000\\)\u306b\u5bfe\u3059\u308b\u300c\u88dc\u6570\u300d\u3067\u3059\u3002\u3053\u308c\u306f\u3001\u4e0a\u8a18\u306e\u300c\u6700\u521d\u306b\u5426\u5b9a\u3057\u3066\u304b\u30891\u3092\u52a0\u3048\u308b\u300d\u304c\\(10000\\)\u306b\u5bfe\u3059\u308b\u88dc\u6570\u306e\u8a08\u7b97\u3068\u7b49\u4fa1\u3067\u3042\u308b\u3053\u3068\u3092\u610f\u5473\u3057\u307e\u3059\u3002

\u3067\u306f\u3001\\(1110\\)\u306e\\(10000\\)\u306b\u5bfe\u3059\u308b\u300c\u88dc\u6570\u300d\u306f\u4f55\u3067\u3057\u3087\u3046\u304b\uff1f\u300c\u6700\u521d\u306b\u5426\u5b9a\u3057\u3066\u304b\u30891\u3092\u52a0\u3048\u308b\u300d\u3053\u3068\u3067\u8a08\u7b97\u3067\u304d\u307e\u3059\uff1a

\\[ 1110 \\rightarrow 0001 \\rightarrow 0010 \\]

\u8a00\u3044\u63db\u3048\u308b\u3068\u3001\u7b26\u53f7\u7d76\u5bfe\u5024\u30682\u306e\u88dc\u6570\u306f\u4e92\u3044\u306b\\(10000\\)\u306b\u5bfe\u3059\u308b\u300c\u88dc\u6570\u300d\u3067\u3042\u308b\u305f\u3081\u3001\u300c\u7b26\u53f7\u7d76\u5bfe\u5024\u304b\u30892\u306e\u88dc\u6570\u300d\u3068\u300c2\u306e\u88dc\u6570\u304b\u3089\u7b26\u53f7\u7d76\u5bfe\u5024\u300d\u306f\u540c\u3058\u64cd\u4f5c\uff08\u6700\u521d\u306b\u5426\u5b9a\u3057\u3066\u304b\u30891\u3092\u52a0\u3048\u308b\uff09\u3067\u5b9f\u88c5\u3067\u304d\u307e\u3059\u3002

\u3082\u3061\u308d\u3093\u3001\u300c\u6700\u521d\u306b\u5426\u5b9a\u3057\u3066\u304b\u30891\u3092\u52a0\u3048\u308b\u300d\u306e\u9006\u64cd\u4f5c\u3092\u4f7f\u7528\u3057\u30662\u306e\u88dc\u6570\\(1110\\)\u306e\u7b26\u53f7\u7d76\u5bfe\u5024\u3092\u6c42\u3081\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002\u3064\u307e\u308a\u3001\u300c\u6700\u521d\u306b1\u3092\u6e1b\u7b97\u3057\u3066\u304b\u3089\u5426\u5b9a\u3059\u308b\u300d\uff1a

\\[ 1110 \\rightarrow 1101 \\rightarrow 0010 \\]

\u8981\u7d04\u3059\u308b\u3068\u3001\u300c\u6700\u521d\u306b\u5426\u5b9a\u3057\u3066\u304b\u30891\u3092\u52a0\u3048\u308b\u300d\u3068\u300c\u6700\u521d\u306b1\u3092\u6e1b\u7b97\u3057\u3066\u304b\u3089\u5426\u5b9a\u3059\u308b\u300d\u306f\u4e21\u65b9\u3068\u3082\\(10000\\)\u306b\u5bfe\u3059\u308b\u88dc\u6570\u3092\u8a08\u7b97\u3057\u3066\u304a\u308a\u3001\u7b49\u4fa1\u3067\u3059\u3002

\u672c\u8cea\u7684\u306b\u3001\u300c\u5426\u5b9a\u300d\u64cd\u4f5c\u306f\u5b9f\u969b\u306b\u306f\\(1111\\)\u306b\u5bfe\u3059\u308b\u88dc\u6570\u3092\u6c42\u3081\u308b\u3053\u3068\u3067\u3059\uff08\u7b26\u53f7\u7d76\u5bfe\u5024 + 1\u306e\u88dc\u6570 = 1111\u304c\u5e38\u306b\u6210\u308a\u7acb\u3064\u305f\u3081\uff09\u3002\u305d\u3057\u30661\u306e\u88dc\u6570\u306b1\u3092\u52a0\u3048\u308b\u3053\u3068\u306f\\(10000\\)\u306b\u5bfe\u3059\u308b2\u306e\u88dc\u6570\u3068\u7b49\u3057\u304f\u306a\u308a\u307e\u3059\u3002

\u4e0a\u8a18\u3067\u306f\\(n = 4\\)\u3092\u4f8b\u306b\u53d6\u308a\u307e\u3057\u305f\u304c\u3001\u4efb\u610f\u306e\u6841\u6570\u306e\u4efb\u610f\u306e\u4e8c\u9032\u6570\u306b\u4e00\u822c\u5316\u3067\u304d\u307e\u3059\u3002

"},{"location":"chapter_divide_and_conquer/","title":"\u7b2c 12 \u7ae0 \u00a0 \u5206\u5272\u7d71\u6cbb","text":"

Abstract

\u56f0\u96e3\u306a\u554f\u984c\u306f\u5c64\u3092\u91cd\u306d\u3066\u5206\u89e3\u3055\u308c\u3001\u5404\u5206\u89e3\u306b\u3088\u3063\u3066\u3088\u308a\u5358\u7d14\u306b\u306a\u308a\u307e\u3059\u3002

\u5206\u5272\u7d71\u6cbb\u306f\u6df1\u3044\u771f\u7406\u3092\u660e\u3089\u304b\u306b\u3057\u307e\u3059\uff1a\u5358\u7d14\u3055\u304b\u3089\u59cb\u3081\u308c\u3070\u3001\u8907\u96d1\u3055\u306f\u89e3\u6c7a\u3055\u308c\u308b\u3002

"},{"location":"chapter_divide_and_conquer/#_1","title":"\u7ae0\u306e\u5185\u5bb9","text":""},{"location":"chapter_divide_and_conquer/binary_search_recur/","title":"12.2 \u00a0 \u5206\u5272\u7d71\u6cbb\u691c\u7d22\u6226\u7565","text":"

\u79c1\u305f\u3061\u306f\u691c\u7d22\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u304c\u4e3b\u306b2\u3064\u306e\u30ab\u30c6\u30b4\u30ea\u306b\u5206\u985e\u3055\u308c\u308b\u3053\u3068\u3092\u5b66\u3073\u307e\u3057\u305f\u3002

\u5b9f\u969b\u3001\u6642\u9593\u8a08\u7b97\u91cf\u304c \\(O(\\log n)\\) \u306e\u691c\u7d22\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306f\u901a\u5e38\u5206\u5272\u7d71\u6cbb\u6226\u7565\u306b\u57fa\u3065\u3044\u3066\u3044\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001\u4e8c\u5206\u63a2\u7d22\u3084\u6728\u306a\u3069\u3067\u3059\u3002

\u4e8c\u5206\u63a2\u7d22\u306e\u5206\u5272\u7d71\u6cbb\u6226\u7565\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\u3002

\u5206\u5272\u7d71\u6cbb\u306f\u691c\u7d22\u52b9\u7387\u3092\u5411\u4e0a\u3055\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u306a\u305c\u306a\u3089\u3001\u7dcf\u5f53\u305f\u308a\u691c\u7d22\u306f\u30e9\u30a6\u30f3\u30c9\u3054\u3068\u306b1\u3064\u306e\u9078\u629e\u80a2\u3057\u304b\u9664\u53bb\u3067\u304d\u307e\u305b\u3093\u304c\u3001\u5206\u5272\u7d71\u6cbb\u306f\u9078\u629e\u80a2\u306e\u534a\u5206\u3092\u9664\u53bb\u3067\u304d\u308b\u304b\u3089\u3067\u3059\u3002

"},{"location":"chapter_divide_and_conquer/binary_search_recur/#1","title":"1. \u00a0 \u5206\u5272\u7d71\u6cbb\u306b\u57fa\u3065\u304f\u4e8c\u5206\u63a2\u7d22\u306e\u5b9f\u88c5","text":"

\u524d\u306e\u7ae0\u3067\u306f\u3001\u4e8c\u5206\u63a2\u7d22\u306f\u53cd\u5fa9\u306b\u57fa\u3065\u3044\u3066\u5b9f\u88c5\u3055\u308c\u307e\u3057\u305f\u3002\u4eca\u5ea6\u306f\u3001\u5206\u5272\u7d71\u6cbb\uff08\u518d\u5e30\uff09\u306b\u57fa\u3065\u3044\u3066\u5b9f\u88c5\u3057\u307e\u3059\u3002

Question

\u9577\u3055 \\(n\\) \u306e\u9806\u5e8f\u4ed8\u3051\u3089\u308c\u305f\u914d\u5217 nums \u304c\u4e0e\u3048\u3089\u308c\u3001\u3059\u3079\u3066\u306e\u8981\u7d20\u304c\u4e00\u610f\u3067\u3042\u308b\u5834\u5408\u3001\u8981\u7d20 target \u3092\u898b\u3064\u3051\u3066\u304f\u3060\u3055\u3044\u3002

\u5206\u5272\u7d71\u6cbb\u306e\u89b3\u70b9\u304b\u3089\u3001\u691c\u7d22\u533a\u9593 \\([i, j]\\) \u306b\u5bfe\u5fdc\u3059\u308b\u90e8\u5206\u554f\u984c\u3092 \\(f(i, j)\\) \u3068\u8868\u3057\u307e\u3059\u3002

\u5143\u306e\u554f\u984c \\(f(0, n-1)\\) \u304b\u3089\u958b\u59cb\u3057\u3066\u3001\u4ee5\u4e0b\u306e\u30b9\u30c6\u30c3\u30d7\u3067\u4e8c\u5206\u63a2\u7d22\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002

  1. \u691c\u7d22\u533a\u9593 \\([i, j]\\) \u306e\u4e2d\u70b9 \\(m\\) \u3092\u8a08\u7b97\u3057\u3001\u305d\u308c\u3092\u4f7f\u7528\u3057\u3066\u691c\u7d22\u533a\u9593\u306e\u534a\u5206\u3092\u9664\u53bb\u3057\u307e\u3059\u3002
  2. \u534a\u5206\u306e\u30b5\u30a4\u30ba\u306b\u7e2e\u5c0f\u3055\u308c\u305f\u90e8\u5206\u554f\u984c\u3092\u518d\u5e30\u7684\u306b\u89e3\u6c7a\u3057\u307e\u3059\u3002\u3053\u308c\u306f \\(f(i, m-1)\\) \u307e\u305f\u306f \\(f(m+1, j)\\) \u306b\u306a\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002
  3. target \u304c\u898b\u3064\u304b\u308b\u304b\u533a\u9593\u304c\u7a7a\u306b\u306a\u3063\u3066\u30ea\u30bf\u30fc\u30f3\u3059\u308b\u307e\u3067\u3001\u30b9\u30c6\u30c3\u30d7 1. \u3068 2. \u3092\u7e70\u308a\u8fd4\u3057\u307e\u3059\u3002

\u4ee5\u4e0b\u306e\u56f3\u306f\u3001\u914d\u5217\u5185\u3067\u8981\u7d20 \\(6\\) \u3092\u63a2\u3059\u4e8c\u5206\u63a2\u7d22\u306e\u5206\u5272\u7d71\u6cbb\u904e\u7a0b\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002

\u56f3 12-4 \u00a0 \u4e8c\u5206\u63a2\u7d22\u306e\u5206\u5272\u7d71\u6cbb\u904e\u7a0b

\u5b9f\u88c5\u30b3\u30fc\u30c9\u3067\u306f\u3001\u554f\u984c \\(f(i, j)\\) \u3092\u89e3\u6c7a\u3059\u308b\u305f\u3081\u306b\u518d\u5e30\u95a2\u6570 dfs() \u3092\u5ba3\u8a00\u3057\u307e\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby binary_search_recur.py
def dfs(nums: list[int], target: int, i: int, j: int) -> int:\n    \"\"\"\u4e8c\u5206\u63a2\u7d22\uff1a\u554f\u984c f(i, j)\"\"\"\n    # \u533a\u9593\u304c\u7a7a\u306e\u5834\u5408\u3001\u5bfe\u8c61\u8981\u7d20\u304c\u306a\u3044\u3053\u3068\u3092\u793a\u3059\u305f\u3081\u3001-1 \u3092\u8fd4\u3059\n    if i > j:\n        return -1\n    # \u4e2d\u70b9\u30a4\u30f3\u30c7\u30c3\u30af\u30b9 m \u3092\u8a08\u7b97\n    m = (i + j) // 2\n    if nums[m] < target:\n        # \u518d\u5e30\u90e8\u5206\u554f\u984c f(m+1, j)\n        return dfs(nums, target, m + 1, j)\n    elif nums[m] > target:\n        # \u518d\u5e30\u90e8\u5206\u554f\u984c f(i, m-1)\n        return dfs(nums, target, i, m - 1)\n    else:\n        # \u5bfe\u8c61\u8981\u7d20\u3092\u767a\u898b\u3057\u305f\u305f\u3081\u3001\u305d\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u8fd4\u3059\n        return m\n\ndef binary_search(nums: list[int], target: int) -> int:\n    \"\"\"\u4e8c\u5206\u63a2\u7d22\"\"\"\n    n = len(nums)\n    # \u554f\u984c f(0, n-1) \u3092\u89e3\u304f\n    return dfs(nums, target, 0, n - 1)\n
binary_search_recur.cpp
/* \u4e8c\u5206\u63a2\u7d22\uff1a\u554f\u984c f(i, j) */\nint dfs(vector<int> &nums, int target, int i, int j) {\n    // \u533a\u9593\u304c\u7a7a\u306e\u5834\u5408\u3001\u5bfe\u8c61\u8981\u7d20\u304c\u5b58\u5728\u3057\u306a\u3044\u3053\u3068\u3092\u793a\u3059\u305f\u3081\u3001-1 \u3092\u8fd4\u3059\n    if (i > j) {\n        return -1;\n    }\n    // \u4e2d\u70b9\u30a4\u30f3\u30c7\u30c3\u30af\u30b9 m \u3092\u8a08\u7b97\n    int m = i + (j - i) / 2;\n    if (nums[m] < target) {\n        // \u518d\u5e30\u7684\u306a\u90e8\u5206\u554f\u984c f(m+1, j)\n        return dfs(nums, target, m + 1, j);\n    } else if (nums[m] > target) {\n        // \u518d\u5e30\u7684\u306a\u90e8\u5206\u554f\u984c f(i, m-1)\n        return dfs(nums, target, i, m - 1);\n    } else {\n        // \u5bfe\u8c61\u8981\u7d20\u304c\u898b\u3064\u304b\u3063\u305f\u305f\u3081\u3001\u305d\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u8fd4\u3059\n        return m;\n    }\n}\n\n/* \u4e8c\u5206\u63a2\u7d22 */\nint binarySearch(vector<int> &nums, int target) {\n    int n = nums.size();\n    // \u554f\u984c f(0, n-1) \u3092\u89e3\u304f\n    return dfs(nums, target, 0, n - 1);\n}\n
binary_search_recur.java
/* \u4e8c\u5206\u63a2\u7d22\uff1a\u554f\u984c f(i, j) */\nint dfs(int[] nums, int target, int i, int j) {\n    // \u533a\u9593\u304c\u7a7a\u306e\u5834\u5408\u3001\u5bfe\u8c61\u8981\u7d20\u304c\u5b58\u5728\u3057\u306a\u3044\u3053\u3068\u3092\u793a\u3059\u305f\u3081\u3001-1 \u3092\u8fd4\u3059\n    if (i > j) {\n        return -1;\n    }\n    // \u4e2d\u70b9\u30a4\u30f3\u30c7\u30c3\u30af\u30b9 m \u3092\u8a08\u7b97\n    int m = i + (j - i) / 2;\n    if (nums[m] < target) {\n        // \u518d\u5e30\u7684\u306a\u90e8\u5206\u554f\u984c f(m+1, j)\n        return dfs(nums, target, m + 1, j);\n    } else if (nums[m] > target) {\n        // \u518d\u5e30\u7684\u306a\u90e8\u5206\u554f\u984c f(i, m-1)\n        return dfs(nums, target, i, m - 1);\n    } else {\n        // \u5bfe\u8c61\u8981\u7d20\u304c\u898b\u3064\u304b\u3063\u305f\u305f\u3081\u3001\u305d\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u8fd4\u3059\n        return m;\n    }\n}\n\n/* \u4e8c\u5206\u63a2\u7d22 */\nint binarySearch(int[] nums, int target) {\n    int n = nums.length;\n    // \u554f\u984c f(0, n-1) \u3092\u89e3\u304f\n    return dfs(nums, target, 0, n - 1);\n}\n
binary_search_recur.cs
[class]{binary_search_recur}-[func]{DFS}\n\n[class]{binary_search_recur}-[func]{BinarySearch}\n
binary_search_recur.go
[class]{}-[func]{dfs}\n\n[class]{}-[func]{binarySearch}\n
binary_search_recur.swift
[class]{}-[func]{dfs}\n\n[class]{}-[func]{binarySearch}\n
binary_search_recur.js
[class]{}-[func]{dfs}\n\n[class]{}-[func]{binarySearch}\n
binary_search_recur.ts
[class]{}-[func]{dfs}\n\n[class]{}-[func]{binarySearch}\n
binary_search_recur.dart
[class]{}-[func]{dfs}\n\n[class]{}-[func]{binarySearch}\n
binary_search_recur.rs
[class]{}-[func]{dfs}\n\n[class]{}-[func]{binary_search}\n
binary_search_recur.c
[class]{}-[func]{dfs}\n\n[class]{}-[func]{binarySearch}\n
binary_search_recur.kt
[class]{}-[func]{dfs}\n\n[class]{}-[func]{binarySearch}\n
binary_search_recur.rb
[class]{}-[func]{dfs}\n\n[class]{}-[func]{binary_search}\n
"},{"location":"chapter_divide_and_conquer/build_binary_tree_problem/","title":"12.3 \u00a0 \u4e8c\u5206\u6728\u69cb\u7bc9\u554f\u984c","text":"

Question

\u4e8c\u5206\u6728\u306e\u524d\u9806\u8d70\u67fb preorder \u30b7\u30fc\u30b1\u30f3\u30b9\u3068\u4e2d\u9806\u8d70\u67fb inorder \u30b7\u30fc\u30b1\u30f3\u30b9\u304c\u4e0e\u3048\u3089\u308c\u305f\u5834\u5408\u3001\u4e8c\u5206\u6728\u3092\u69cb\u7bc9\u3057\u3066\u305d\u306e\u30eb\u30fc\u30c8\u30ce\u30fc\u30c9\u3092\u8fd4\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u4e8c\u5206\u6728\u306b\u91cd\u8907\u3059\u308b\u30ce\u30fc\u30c9\u5024\u304c\u306a\u3044\u3068\u4eee\u5b9a\u3057\u307e\u3059\uff08\u4ee5\u4e0b\u306e\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\uff09\u3002

\u56f3 12-5 \u00a0 \u4e8c\u5206\u6728\u69cb\u7bc9\u306e\u30b5\u30f3\u30d7\u30eb\u30c7\u30fc\u30bf

"},{"location":"chapter_divide_and_conquer/build_binary_tree_problem/#1","title":"1. \u00a0 \u5206\u5272\u7d71\u6cbb\u554f\u984c\u304b\u3069\u3046\u304b\u306e\u5224\u5b9a","text":"

preorder \u3068 inorder \u30b7\u30fc\u30b1\u30f3\u30b9\u304b\u3089\u4e8c\u5206\u6728\u3092\u69cb\u7bc9\u3059\u308b\u5143\u306e\u554f\u984c\u306f\u3001\u5178\u578b\u7684\u306a\u5206\u5272\u7d71\u6cbb\u554f\u984c\u3067\u3059\u3002

"},{"location":"chapter_divide_and_conquer/build_binary_tree_problem/#2","title":"2. \u00a0 \u90e8\u5206\u6728\u306e\u5206\u5272\u65b9\u6cd5","text":"

\u4e0a\u8a18\u306e\u5206\u6790\u306b\u57fa\u3065\u3044\u3066\u3001\u3053\u306e\u554f\u984c\u306f\u5206\u5272\u7d71\u6cbb\u3092\u4f7f\u7528\u3057\u3066\u89e3\u6c7a\u3067\u304d\u307e\u3059\u3002\u3057\u304b\u3057\u3001\u524d\u9806\u8d70\u67fb preorder \u30b7\u30fc\u30b1\u30f3\u30b9\u3068\u4e2d\u9806\u8d70\u67fb inorder \u30b7\u30fc\u30b1\u30f3\u30b9\u3092\u4f7f\u7528\u3057\u3066\u5de6\u3068\u53f3\u306e\u90e8\u5206\u6728\u3092\u3069\u306e\u3088\u3046\u306b\u5206\u5272\u3059\u308c\u3070\u3088\u3044\u3067\u3057\u3087\u3046\u304b\uff1f

\u5b9a\u7fa9\u306b\u3088\u308a\u3001preorder \u3068 inorder \u30b7\u30fc\u30b1\u30f3\u30b9\u306e\u4e21\u65b9\u30923\u3064\u306e\u90e8\u5206\u306b\u5206\u5272\u3067\u304d\u307e\u3059\uff1a

\u524d\u306e\u56f3\u306e\u30c7\u30fc\u30bf\u3092\u4f7f\u7528\u3057\u3066\u3001\u6b21\u306e\u56f3\u306b\u793a\u3059\u30b9\u30c6\u30c3\u30d7\u306b\u5f93\u3063\u3066\u5206\u5272\u7d50\u679c\u3092\u53d6\u5f97\u3067\u304d\u307e\u3059\uff1a

  1. \u524d\u9806\u8d70\u67fb\u306e\u6700\u521d\u306e\u8981\u7d203\u304c\u30eb\u30fc\u30c8\u30ce\u30fc\u30c9\u306e\u5024\u3067\u3059\u3002
  2. inorder \u30b7\u30fc\u30b1\u30f3\u30b9\u5185\u3067\u30eb\u30fc\u30c8\u30ce\u30fc\u30c93\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u898b\u3064\u3051\u3001\u3053\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u4f7f\u7528\u3057\u3066 inorder \u3092 [ 9 | 3 \uff5c 1 2 7 ] \u306b\u5206\u5272\u3057\u307e\u3059\u3002
  3. inorder \u30b7\u30fc\u30b1\u30f3\u30b9\u306e\u5206\u5272\u306b\u5f93\u3063\u3066\u3001\u5de6\u3068\u53f3\u306e\u90e8\u5206\u6728\u304c\u305d\u308c\u305e\u308c1\u500b\u30683\u500b\u306e\u30ce\u30fc\u30c9\u3092\u542b\u3080\u3053\u3068\u304c\u7c21\u5358\u306b\u6c7a\u5b9a\u3067\u304d\u308b\u305f\u3081\u3001preorder \u30b7\u30fc\u30b1\u30f3\u30b9\u3092 [ 3 | 9 | 2 1 7 ] \u306b\u5bfe\u5fdc\u3057\u3066\u5206\u5272\u3067\u304d\u307e\u3059\u3002

\u56f3 12-6 \u00a0 \u524d\u9806\u8d70\u67fb\u3068\u4e2d\u9806\u8d70\u67fb\u3067\u306e\u90e8\u5206\u6728\u306e\u5206\u5272

"},{"location":"chapter_divide_and_conquer/build_binary_tree_problem/#3","title":"3. \u00a0 \u5909\u6570\u306b\u57fa\u3065\u304f\u90e8\u5206\u6728\u7bc4\u56f2\u306e\u8a18\u8ff0","text":"

\u4e0a\u8a18\u306e\u5206\u5272\u65b9\u6cd5\u306b\u57fa\u3065\u3044\u3066\u3001preorder \u3068 inorder \u30b7\u30fc\u30b1\u30f3\u30b9\u306b\u304a\u3051\u308b\u30eb\u30fc\u30c8\u3001\u5de6\u306e\u90e8\u5206\u6728\u3001\u53f3\u306e\u90e8\u5206\u6728\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u7bc4\u56f2\u3092\u53d6\u5f97\u3057\u307e\u3057\u305f\u3002\u3053\u308c\u3089\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u7bc4\u56f2\u3092\u8a18\u8ff0\u3059\u308b\u305f\u3081\u306b\u3001\u3044\u304f\u3064\u304b\u306e\u30dd\u30a4\u30f3\u30bf\u5909\u6570\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002

\u4ee5\u4e0b\u306e\u8868\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u3053\u308c\u3089\u306e\u5909\u6570\u306f preorder \u30b7\u30fc\u30b1\u30f3\u30b9\u3067\u306e\u30eb\u30fc\u30c8\u30ce\u30fc\u30c9\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3068 inorder \u30b7\u30fc\u30b1\u30f3\u30b9\u3067\u306e\u90e8\u5206\u6728\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u7bc4\u56f2\u3092\u8868\u3057\u307e\u3059\u3002

\u8868 12-1 \u00a0 \u524d\u9806\u8d70\u67fb\u3068\u4e2d\u9806\u8d70\u67fb\u3067\u306e\u30eb\u30fc\u30c8\u30ce\u30fc\u30c9\u3068\u90e8\u5206\u6728\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9

preorder \u3067\u306e\u30eb\u30fc\u30c8\u30ce\u30fc\u30c9\u30a4\u30f3\u30c7\u30c3\u30af\u30b9 inorder \u3067\u306e\u90e8\u5206\u6728\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u7bc4\u56f2 \u73fe\u5728\u306e\u6728 \\(i\\) \\([l, r]\\) \u5de6\u306e\u90e8\u5206\u6728 \\(i + 1\\) \\([l, m-1]\\) \u53f3\u306e\u90e8\u5206\u6728 \\(i + 1 + (m - l)\\) \\([m+1, r]\\)

\u53f3\u306e\u90e8\u5206\u6728\u306e\u30eb\u30fc\u30c8\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306e \\((m-l)\\) \u306f\u300c\u5de6\u306e\u90e8\u5206\u6728\u306e\u30ce\u30fc\u30c9\u6570\u300d\u3092\u8868\u3059\u3053\u3068\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3088\u308a\u660e\u78ba\u306a\u7406\u89e3\u306e\u305f\u3081\u306b\u3001\u4ee5\u4e0b\u306e\u56f3\u3092\u53c2\u7167\u3059\u308b\u3053\u3068\u304c\u5f79\u7acb\u3064\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002

\u56f3 12-7 \u00a0 \u30eb\u30fc\u30c8\u30ce\u30fc\u30c9\u3068\u5de6\u53f3\u306e\u90e8\u5206\u6728\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9

"},{"location":"chapter_divide_and_conquer/build_binary_tree_problem/#4","title":"4. \u00a0 \u30b3\u30fc\u30c9\u5b9f\u88c5","text":"

\\(m\\) \u306e\u554f\u3044\u5408\u308f\u305b\u306e\u52b9\u7387\u3092\u5411\u4e0a\u3055\u305b\u308b\u305f\u3081\u306b\u3001\u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb hmap \u3092\u4f7f\u7528\u3057\u3066 inorder \u30b7\u30fc\u30b1\u30f3\u30b9\u306e\u8981\u7d20\u304b\u3089\u305d\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3078\u306e\u30de\u30c3\u30d4\u30f3\u30b0\u3092\u683c\u7d0d\u3057\u307e\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby build_tree.py
def dfs(\n    preorder: list[int],\n    inorder_map: dict[int, int],\n    i: int,\n    l: int,\n    r: int,\n) -> TreeNode | None:\n    \"\"\"\u4e8c\u5206\u6728\u306e\u69cb\u7bc9\uff1a\u5206\u5272\u7d71\u6cbb\"\"\"\n    # \u90e8\u5206\u6728\u306e\u533a\u9593\u304c\u7a7a\u306e\u3068\u304d\u7d42\u4e86\n    if r - l < 0:\n        return None\n    # \u30eb\u30fc\u30c8\u30ce\u30fc\u30c9\u3092\u521d\u671f\u5316\n    root = TreeNode(preorder[i])\n    # m \u3092\u30af\u30a8\u30ea\u3057\u3066\u5de6\u90e8\u5206\u6728\u3068\u53f3\u90e8\u5206\u6728\u3092\u5206\u5272\n    m = inorder_map[preorder[i]]\n    # \u90e8\u5206\u554f\u984c\uff1a\u5de6\u90e8\u5206\u6728\u3092\u69cb\u7bc9\n    root.left = dfs(preorder, inorder_map, i + 1, l, m - 1)\n    # \u90e8\u5206\u554f\u984c\uff1a\u53f3\u90e8\u5206\u6728\u3092\u69cb\u7bc9\n    root.right = dfs(preorder, inorder_map, i + 1 + m - l, m + 1, r)\n    # \u30eb\u30fc\u30c8\u30ce\u30fc\u30c9\u3092\u8fd4\u3059\n    return root\n\ndef build_tree(preorder: list[int], inorder: list[int]) -> TreeNode | None:\n    \"\"\"\u4e8c\u5206\u6728\u3092\u69cb\u7bc9\"\"\"\n    # \u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb\u3092\u521d\u671f\u5316\u3001\u4e2d\u9806\u8d70\u67fb\u306e\u8981\u7d20\u304b\u3089\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3078\u306e\u30de\u30c3\u30d4\u30f3\u30b0\u3092\u4fdd\u5b58\n    inorder_map = {val: i for i, val in enumerate(inorder)}\n    root = dfs(preorder, inorder_map, 0, 0, len(inorder) - 1)\n    return root\n
build_tree.cpp
/* \u4e8c\u5206\u6728\u306e\u69cb\u7bc9\uff1a\u5206\u5272\u7d71\u6cbb */\nTreeNode *dfs(vector<int> &preorder, unordered_map<int, int> &inorderMap, int i, int l, int r) {\n    // \u90e8\u5206\u6728\u306e\u533a\u9593\u304c\u7a7a\u306e\u5834\u5408\u306b\u7d42\u4e86\n    if (r - l < 0)\n        return NULL;\n    // \u30eb\u30fc\u30c8\u30ce\u30fc\u30c9\u3092\u521d\u671f\u5316\n    TreeNode *root = new TreeNode(preorder[i]);\n    // m \u3092\u554f\u3044\u5408\u308f\u305b\u3066\u5de6\u53f3\u306e\u90e8\u5206\u6728\u3092\u5206\u5272\n    int m = inorderMap[preorder[i]];\n    // \u90e8\u5206\u554f\u984c\uff1a\u5de6\u306e\u90e8\u5206\u6728\u3092\u69cb\u7bc9\n    root->left = dfs(preorder, inorderMap, i + 1, l, m - 1);\n    // \u90e8\u5206\u554f\u984c\uff1a\u53f3\u306e\u90e8\u5206\u6728\u3092\u69cb\u7bc9\n    root->right = dfs(preorder, inorderMap, i + 1 + m - l, m + 1, r);\n    // \u30eb\u30fc\u30c8\u30ce\u30fc\u30c9\u3092\u8fd4\u3059\n    return root;\n}\n\n/* \u4e8c\u5206\u6728\u306e\u69cb\u7bc9 */\nTreeNode *buildTree(vector<int> &preorder, vector<int> &inorder) {\n    // \u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb\u3092\u521d\u671f\u5316\u3057\u3001\u4e2d\u9593\u9806\u5e8f\u306e\u8981\u7d20\u304b\u3089\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3078\u306e\u30de\u30c3\u30d4\u30f3\u30b0\u3092\u683c\u7d0d\n    unordered_map<int, int> inorderMap;\n    for (int i = 0; i < inorder.size(); i++) {\n        inorderMap[inorder[i]] = i;\n    }\n    TreeNode *root = dfs(preorder, inorderMap, 0, 0, inorder.size() - 1);\n    return root;\n}\n
build_tree.java
/* \u4e8c\u5206\u6728\u306e\u69cb\u7bc9\uff1a\u5206\u5272\u7d71\u6cbb */\nTreeNode dfs(int[] preorder, Map<Integer, Integer> inorderMap, int i, int l, int r) {\n    // \u90e8\u5206\u6728\u306e\u533a\u9593\u304c\u7a7a\u306e\u5834\u5408\u306b\u7d42\u4e86\n    if (r - l < 0)\n        return null;\n    // \u30eb\u30fc\u30c8\u30ce\u30fc\u30c9\u3092\u521d\u671f\u5316\n    TreeNode root = new TreeNode(preorder[i]);\n    // m \u3092\u554f\u3044\u5408\u308f\u305b\u3066\u5de6\u53f3\u306e\u90e8\u5206\u6728\u3092\u5206\u5272\n    int m = inorderMap.get(preorder[i]);\n    // \u90e8\u5206\u554f\u984c\uff1a\u5de6\u306e\u90e8\u5206\u6728\u3092\u69cb\u7bc9\n    root.left = dfs(preorder, inorderMap, i + 1, l, m - 1);\n    // \u90e8\u5206\u554f\u984c\uff1a\u53f3\u306e\u90e8\u5206\u6728\u3092\u69cb\u7bc9\n    root.right = dfs(preorder, inorderMap, i + 1 + m - l, m + 1, r);\n    // \u30eb\u30fc\u30c8\u30ce\u30fc\u30c9\u3092\u8fd4\u3059\n    return root;\n}\n\n/* \u4e8c\u5206\u6728\u306e\u69cb\u7bc9 */\nTreeNode buildTree(int[] preorder, int[] inorder) {\n    // \u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb\u3092\u521d\u671f\u5316\u3057\u3001\u4e2d\u9593\u9806\u5e8f\u306e\u8981\u7d20\u304b\u3089\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3078\u306e\u30de\u30c3\u30d4\u30f3\u30b0\u3092\u683c\u7d0d\n    Map<Integer, Integer> inorderMap = new HashMap<>();\n    for (int i = 0; i < inorder.length; i++) {\n        inorderMap.put(inorder[i], i);\n    }\n    TreeNode root = dfs(preorder, inorderMap, 0, 0, inorder.length - 1);\n    return root;\n}\n
build_tree.cs
[class]{build_tree}-[func]{DFS}\n\n[class]{build_tree}-[func]{BuildTree}\n
build_tree.go
[class]{}-[func]{dfsBuildTree}\n\n[class]{}-[func]{buildTree}\n
build_tree.swift
[class]{}-[func]{dfs}\n\n[class]{}-[func]{buildTree}\n
build_tree.js
[class]{}-[func]{dfs}\n\n[class]{}-[func]{buildTree}\n
build_tree.ts
[class]{}-[func]{dfs}\n\n[class]{}-[func]{buildTree}\n
build_tree.dart
[class]{}-[func]{dfs}\n\n[class]{}-[func]{buildTree}\n
build_tree.rs
[class]{}-[func]{dfs}\n\n[class]{}-[func]{build_tree}\n
build_tree.c
[class]{}-[func]{dfs}\n\n[class]{}-[func]{buildTree}\n
build_tree.kt
[class]{}-[func]{dfs}\n\n[class]{}-[func]{buildTree}\n
build_tree.rb
[class]{}-[func]{dfs}\n\n[class]{}-[func]{build_tree}\n

\u4ee5\u4e0b\u306e\u56f3\u306f\u3001\u4e8c\u5206\u6728\u3092\u69cb\u7bc9\u3059\u308b\u518d\u5e30\u904e\u7a0b\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002\u5404\u30ce\u30fc\u30c9\u306f\u518d\u5e30\u306e\u300c\u4e0b\u964d\u300d\u6bb5\u968e\u3067\u4f5c\u6210\u3055\u308c\u3001\u5404\u30a8\u30c3\u30b8\uff08\u53c2\u7167\uff09\u306f\u300c\u4e0a\u6607\u300d\u6bb5\u968e\u3067\u5f62\u6210\u3055\u308c\u307e\u3059\u3002

<1><2><3><4><5><6><7><8><9>

\u56f3 12-8 \u00a0 \u4e8c\u5206\u6728\u69cb\u7bc9\u306e\u518d\u5e30\u904e\u7a0b

\u5404\u518d\u5e30\u95a2\u6570\u306e preorder \u3068 inorder \u30b7\u30fc\u30b1\u30f3\u30b9\u306e\u5206\u5272\u306f\u4ee5\u4e0b\u306e\u56f3\u306b\u793a\u3055\u308c\u3066\u3044\u307e\u3059\u3002

\u56f3 12-9 \u00a0 \u5404\u518d\u5e30\u95a2\u6570\u3067\u306e\u5206\u5272

\u4e8c\u5206\u6728\u304c \\(n\\) \u500b\u306e\u30ce\u30fc\u30c9\u3092\u6301\u3064\u3068\u4eee\u5b9a\u3059\u308b\u3068\u3001\u5404\u30ce\u30fc\u30c9\u306e\u521d\u671f\u5316\uff08\u518d\u5e30\u95a2\u6570 dfs() \u306e\u547c\u3073\u51fa\u3057\uff09\u306b\u306f \\(O(1)\\) \u6642\u9593\u304c\u304b\u304b\u308a\u307e\u3059\u3002\u3057\u305f\u304c\u3063\u3066\u3001\u5168\u4f53\u306e\u6642\u9593\u8a08\u7b97\u91cf\u306f \\(O(n)\\) \u3067\u3059\u3002

\u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb\u306f inorder \u8981\u7d20\u304b\u3089\u305d\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3078\u306e\u30de\u30c3\u30d4\u30f3\u30b0\u3092\u683c\u7d0d\u3059\u308b\u305f\u3081\u3001\\(O(n)\\) \u30b9\u30da\u30fc\u30b9\u304c\u5fc5\u8981\u3067\u3059\u3002\u6700\u60aa\u306e\u5834\u5408\u3001\u4e8c\u5206\u6728\u304c\u9023\u7d50\u30ea\u30b9\u30c8\u306b\u9000\u5316\u3059\u308b\u3068\u3001\u518d\u5e30\u306e\u6df1\u3055\u306f \\(n\\) \u306b\u9054\u3057\u3001\\(O(n)\\) \u306e\u30b9\u30bf\u30c3\u30af\u30b9\u30da\u30fc\u30b9\u3092\u6d88\u8cbb\u3059\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002\u3057\u305f\u304c\u3063\u3066\u3001\u5168\u4f53\u306e\u7a7a\u9593\u8a08\u7b97\u91cf\u306f \\(O(n)\\) \u3067\u3059\u3002

"},{"location":"chapter_divide_and_conquer/divide_and_conquer/","title":"12.1 \u00a0 \u5206\u5272\u7d71\u6cbb\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0","text":"

\u5206\u5272\u7d71\u6cbb\u306f\u91cd\u8981\u3067\u4eba\u6c17\u306e\u3042\u308b\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u6226\u7565\u3067\u3059\u3002\u540d\u524d\u304c\u793a\u3059\u3088\u3046\u306b\u3001\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306f\u901a\u5e38\u518d\u5e30\u7684\u306b\u5b9f\u88c5\u3055\u308c\u3001\u300c\u5206\u5272\u300d\u3068\u300c\u7d71\u6cbb\u300d\u306e2\u3064\u306e\u30b9\u30c6\u30c3\u30d7\u304b\u3089\u69cb\u6210\u3055\u308c\u307e\u3059\u3002

  1. \u5206\u5272\uff08\u5206\u5272\u6bb5\u968e\uff09\uff1a\u5143\u306e\u554f\u984c\u3092\u518d\u5e30\u7684\u306b2\u3064\u4ee5\u4e0a\u306e\u5c0f\u3055\u306a\u90e8\u5206\u554f\u984c\u306b\u5206\u89e3\u3057\u3001\u6700\u5c0f\u306e\u90e8\u5206\u554f\u984c\u306b\u5230\u9054\u3059\u308b\u307e\u3067\u7d9a\u3051\u307e\u3059\u3002
  2. \u7d71\u6cbb\uff08\u30de\u30fc\u30b8\u6bb5\u968e\uff09\uff1a\u89e3\u6c7a\u65b9\u6cd5\u304c\u65e2\u77e5\u306e\u6700\u5c0f\u306e\u90e8\u5206\u554f\u984c\u304b\u3089\u958b\u59cb\u3057\u3001\u90e8\u5206\u554f\u984c\u306e\u89e3\u3092\u30dc\u30c8\u30e0\u30a2\u30c3\u30d7\u65b9\u5f0f\u3067\u30de\u30fc\u30b8\u3057\u3066\u5143\u306e\u554f\u984c\u306e\u89e3\u3092\u69cb\u7bc9\u3057\u307e\u3059\u3002

\u4ee5\u4e0b\u306e\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u300c\u30de\u30fc\u30b8\u30bd\u30fc\u30c8\u300d\u306f\u5206\u5272\u7d71\u6cbb\u6226\u7565\u306e\u5178\u578b\u7684\u306a\u5fdc\u7528\u306e\u4e00\u3064\u3067\u3059\u3002

  1. \u5206\u5272\uff1a\u5143\u306e\u914d\u5217\uff08\u5143\u306e\u554f\u984c\uff09\u3092\u518d\u5e30\u7684\u306b2\u3064\u306e\u526f\u914d\u5217\uff08\u90e8\u5206\u554f\u984c\uff09\u306b\u5206\u5272\u3057\u3001\u526f\u914d\u5217\u304c1\u3064\u306e\u8981\u7d20\u306e\u307f\u306b\u306a\u308b\u307e\u3067\uff08\u6700\u5c0f\u306e\u90e8\u5206\u554f\u984c\uff09\u7d9a\u3051\u307e\u3059\u3002
  2. \u7d71\u6cbb\uff1a\u9806\u5e8f\u4ed8\u3051\u3089\u308c\u305f\u526f\u914d\u5217\uff08\u90e8\u5206\u554f\u984c\u306e\u89e3\uff09\u3092\u30dc\u30c8\u30e0\u30a2\u30c3\u30d7\u3067\u30de\u30fc\u30b8\u3057\u3066\u3001\u9806\u5e8f\u4ed8\u3051\u3089\u308c\u305f\u5143\u306e\u914d\u5217\uff08\u5143\u306e\u554f\u984c\u306e\u89e3\uff09\u3092\u53d6\u5f97\u3057\u307e\u3059\u3002

\u56f3 12-1 \u00a0 \u30de\u30fc\u30b8\u30bd\u30fc\u30c8\u306e\u5206\u5272\u7d71\u6cbb\u6226\u7565

"},{"location":"chapter_divide_and_conquer/divide_and_conquer/#1211","title":"12.1.1 \u00a0 \u5206\u5272\u7d71\u6cbb\u554f\u984c\u3092\u7279\u5b9a\u3059\u308b\u65b9\u6cd5","text":"

\u554f\u984c\u304c\u5206\u5272\u7d71\u6cbb\u89e3\u6c7a\u306b\u9069\u3057\u3066\u3044\u308b\u304b\u3069\u3046\u304b\u306f\u3001\u901a\u5e38\u4ee5\u4e0b\u306e\u57fa\u6e96\u306b\u57fa\u3065\u3044\u3066\u6c7a\u5b9a\u3067\u304d\u307e\u3059\u3002

  1. \u554f\u984c\u3092\u3088\u308a\u5c0f\u3055\u306a\u3082\u306e\u306b\u5206\u89e3\u3067\u304d\u308b\uff1a\u5143\u306e\u554f\u984c\u3092\u3088\u308a\u5c0f\u3055\u304f\u985e\u4f3c\u3057\u305f\u90e8\u5206\u554f\u984c\u306b\u5206\u5272\u3067\u304d\u3001\u305d\u306e\u3088\u3046\u306a\u904e\u7a0b\u3092\u540c\u3058\u65b9\u6cd5\u3067\u518d\u5e30\u7684\u306b\u5b9f\u884c\u3067\u304d\u307e\u3059\u3002
  2. \u90e8\u5206\u554f\u984c\u306f\u72ec\u7acb\u3057\u3066\u3044\u308b\uff1a\u90e8\u5206\u554f\u984c\u9593\u306b\u91cd\u8907\u304c\u306a\u304f\u3001\u72ec\u7acb\u3057\u3066\u304a\u308a\u3001\u500b\u5225\u306b\u89e3\u6c7a\u3067\u304d\u307e\u3059\u3002
  3. \u90e8\u5206\u554f\u984c\u306e\u89e3\u3092\u30de\u30fc\u30b8\u3067\u304d\u308b\uff1a\u5143\u306e\u554f\u984c\u306e\u89e3\u306f\u3001\u90e8\u5206\u554f\u984c\u306e\u89e3\u3092\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u5c0e\u51fa\u3055\u308c\u307e\u3059\u3002

\u660e\u3089\u304b\u306b\u3001\u30de\u30fc\u30b8\u30bd\u30fc\u30c8\u306f\u3053\u308c\u30893\u3064\u306e\u57fa\u6e96\u3092\u6e80\u305f\u3057\u3066\u3044\u307e\u3059\u3002

  1. \u554f\u984c\u3092\u3088\u308a\u5c0f\u3055\u306a\u3082\u306e\u306b\u5206\u89e3\u3067\u304d\u308b\uff1a\u914d\u5217\uff08\u5143\u306e\u554f\u984c\uff09\u3092\u518d\u5e30\u7684\u306b2\u3064\u306e\u526f\u914d\u5217\uff08\u90e8\u5206\u554f\u984c\uff09\u306b\u5206\u5272\u3057\u307e\u3059\u3002
  2. \u90e8\u5206\u554f\u984c\u306f\u72ec\u7acb\u3057\u3066\u3044\u308b\uff1a\u5404\u526f\u914d\u5217\u306f\u72ec\u7acb\u3057\u3066\u30bd\u30fc\u30c8\u3067\u304d\u307e\u3059\uff08\u90e8\u5206\u554f\u984c\u306f\u72ec\u7acb\u3057\u3066\u89e3\u6c7a\u3067\u304d\u307e\u3059\uff09\u3002
  3. \u90e8\u5206\u554f\u984c\u306e\u89e3\u3092\u30de\u30fc\u30b8\u3067\u304d\u308b\uff1a2\u3064\u306e\u9806\u5e8f\u4ed8\u3051\u3089\u308c\u305f\u526f\u914d\u5217\uff08\u90e8\u5206\u554f\u984c\u306e\u89e3\uff09\u30921\u3064\u306e\u9806\u5e8f\u4ed8\u3051\u3089\u308c\u305f\u914d\u5217\uff08\u5143\u306e\u554f\u984c\u306e\u89e3\uff09\u306b\u30de\u30fc\u30b8\u3067\u304d\u307e\u3059\u3002
"},{"location":"chapter_divide_and_conquer/divide_and_conquer/#1212","title":"12.1.2 \u00a0 \u5206\u5272\u7d71\u6cbb\u306b\u3088\u308b\u52b9\u7387\u306e\u5411\u4e0a","text":"

\u5206\u5272\u7d71\u6cbb\u6226\u7565\u306f\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u554f\u984c\u3092\u52b9\u679c\u7684\u306b\u89e3\u6c7a\u3059\u308b\u3060\u3051\u3067\u306a\u304f\u3001\u3057\u3070\u3057\u3070\u52b9\u7387\u3092\u5411\u4e0a\u3055\u305b\u307e\u3059\u3002\u30bd\u30fc\u30c8\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3067\u306f\u3001\u30af\u30a4\u30c3\u30af\u30bd\u30fc\u30c8\u3001\u30de\u30fc\u30b8\u30bd\u30fc\u30c8\u3001\u30d2\u30fc\u30d7\u30bd\u30fc\u30c8\u306f\u3001\u5206\u5272\u7d71\u6cbb\u6226\u7565\u3092\u9069\u7528\u3057\u3066\u3044\u308b\u305f\u3081\u3001\u9078\u629e\u30bd\u30fc\u30c8\u3001\u30d0\u30d6\u30eb\u30bd\u30fc\u30c8\u3001\u633f\u5165\u30bd\u30fc\u30c8\u3088\u308a\u3082\u9ad8\u901f\u3067\u3059\u3002

\u79c1\u305f\u3061\u306e\u5fc3\u306b\u306f\u7591\u554f\u304c\u3042\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\uff1a\u306a\u305c\u5206\u5272\u7d71\u6cbb\u306f\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u52b9\u7387\u3092\u5411\u4e0a\u3055\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u3001\u305d\u306e\u6839\u672c\u7684\u306a\u8ad6\u7406\u306f\u4f55\u3067\u3059\u304b\uff1f \u3064\u307e\u308a\u3001\u554f\u984c\u3092\u90e8\u5206\u554f\u984c\u306b\u5206\u89e3\u3057\u3001\u305d\u308c\u3089\u3092\u89e3\u6c7a\u3057\u3001\u305d\u308c\u3089\u306e\u89e3\u3092\u7d44\u307f\u5408\u308f\u305b\u3066\u5143\u306e\u554f\u984c\u306b\u5bfe\u51e6\u3059\u308b\u3053\u3068\u304c\u3001\u5143\u306e\u554f\u984c\u3092\u76f4\u63a5\u89e3\u6c7a\u3059\u308b\u3088\u308a\u3082\u52b9\u7387\u7684\u3067\u3042\u308b\u7406\u7531\u306f\u4f55\u3067\u3059\u304b\uff1f\u3053\u306e\u8cea\u554f\u306f2\u3064\u306e\u5074\u9762\u304b\u3089\u5206\u6790\u3067\u304d\u307e\u3059\uff1a\u64cd\u4f5c\u6570\u3068\u4e26\u5217\u8a08\u7b97\u3002

"},{"location":"chapter_divide_and_conquer/divide_and_conquer/#1","title":"1. \u00a0 \u64cd\u4f5c\u6570\u306e\u6700\u9069\u5316","text":"

\u300c\u30d0\u30d6\u30eb\u30bd\u30fc\u30c8\u300d\u3092\u4f8b\u306b\u3068\u308b\u3068\u3001\u9577\u3055 \\(n\\) \u306e\u914d\u5217\u3092\u51e6\u7406\u3059\u308b\u306e\u306b \\(O(n^2)\\) \u6642\u9593\u304c\u5fc5\u8981\u3067\u3059\u3002\u4ee5\u4e0b\u306e\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u914d\u5217\u3092\u4e2d\u70b9\u304b\u30892\u3064\u306e\u526f\u914d\u5217\u306b\u5206\u5272\u3059\u308b\u3068\u3057\u307e\u3059\u3002\u305d\u306e\u3088\u3046\u306a\u5206\u5272\u306b\u306f \\(O(n)\\) \u6642\u9593\u304c\u5fc5\u8981\u3067\u3059\u3002\u5404\u526f\u914d\u5217\u306e\u30bd\u30fc\u30c8\u306b\u306f \\(O((n / 2)^2)\\) \u6642\u9593\u304c\u5fc5\u8981\u3067\u3059\u3002\u305d\u3057\u30662\u3064\u306e\u526f\u914d\u5217\u306e\u30de\u30fc\u30b8\u306b\u306f \\(O(n)\\) \u6642\u9593\u304c\u5fc5\u8981\u3067\u3059\u3002\u3057\u305f\u304c\u3063\u3066\u3001\u5168\u4f53\u306e\u6642\u9593\u8a08\u7b97\u91cf\u306f\uff1a

\\[ O(n + (\\frac{n}{2})^2 \\times 2 + n) = O(\\frac{n^2}{2} + 2n) \\]

\u56f3 12-2 \u00a0 \u914d\u5217\u5206\u5272\u524d\u5f8c\u306e\u30d0\u30d6\u30eb\u30bd\u30fc\u30c8

\u4ee5\u4e0b\u306e\u4e0d\u7b49\u5f0f\u3092\u8a08\u7b97\u3057\u3066\u307f\u307e\u3057\u3087\u3046\u3002\u5de6\u5074\u306f\u5206\u5272\u524d\u306e\u7dcf\u64cd\u4f5c\u6570\u3092\u8868\u3057\u3001\u53f3\u5074\u306f\u5206\u5272\u5f8c\u306e\u7dcf\u64cd\u4f5c\u6570\u3092\u305d\u308c\u305e\u308c\u8868\u3057\u307e\u3059\uff1a

\\[ \\begin{aligned} n^2 & > \\frac{n^2}{2} + 2n \\newline n^2 - \\frac{n^2}{2} - 2n & > 0 \\newline n(n - 4) & > 0 \\end{aligned} \\]

\u3053\u308c\u306f \\(n > 4\\) \u306e\u5834\u5408\u3001\u5206\u5272\u5f8c\u306e\u64cd\u4f5c\u6570\u304c\u5c11\u306a\u304f\u3001\u3088\u308a\u826f\u3044\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306b\u3064\u306a\u304c\u308b\u3053\u3068\u3092\u610f\u5473\u3057\u307e\u3059\u3002\u5206\u5272\u5f8c\u306e\u6642\u9593\u8a08\u7b97\u91cf\u306f\u4f9d\u7136\u3068\u3057\u3066\u4e8c\u6b21 \\(O(n^2)\\) \u3067\u3059\u304c\u3001\u8a08\u7b97\u91cf\u306e\u5b9a\u6570\u4fc2\u6570\u304c\u6e1b\u5c11\u3057\u3066\u3044\u308b\u3053\u3068\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002

\u3055\u3089\u306b\u9032\u3080\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u526f\u914d\u5217\u3092\u305d\u306e\u4e2d\u70b9\u304b\u3089\u3055\u3089\u306b2\u3064\u306e\u526f\u914d\u5217\u306b\u5206\u5272\u3057\u7d9a\u3051\u3066\u3001\u526f\u914d\u5217\u304c1\u3064\u306e\u8981\u7d20\u306e\u307f\u306b\u306a\u308b\u307e\u3067\u7d9a\u3051\u305f\u3089\u3069\u3046\u3067\u3057\u3087\u3046\u304b\uff1f \u3053\u306e\u30a2\u30a4\u30c7\u30a2\u306f\u5b9f\u969b\u306b\u306f\u300c\u30de\u30fc\u30b8\u30bd\u30fc\u30c8\u300d\u3067\u3001\u6642\u9593\u8a08\u7b97\u91cf\u306f \\(O(n \\log n)\\) \u3067\u3059\u3002

\u5c11\u3057\u9055\u3046\u3053\u3068\u3092\u8a66\u3057\u3066\u307f\u307e\u3057\u3087\u3046\u30022\u3064\u3067\u306f\u306a\u304f\u3001\u3088\u308a\u591a\u304f\u306e\u5206\u5272\u306b\u5206\u5272\u3057\u305f\u3089\u3069\u3046\u3067\u3057\u3087\u3046\u304b\uff1f \u4f8b\u3048\u3070\u3001\u5143\u306e\u914d\u5217\u3092 \\(k\\) \u500b\u306e\u526f\u914d\u5217\u306b\u5747\u7b49\u306b\u5206\u5272\u3057\u307e\u3059\u304b\uff1f\u3053\u306e\u30a2\u30d7\u30ed\u30fc\u30c1\u306f\u300c\u30d0\u30b1\u30c3\u30c8\u30bd\u30fc\u30c8\u300d\u3068\u975e\u5e38\u306b\u4f3c\u3066\u304a\u308a\u3001\u5927\u91cf\u306e\u30c7\u30fc\u30bf\u306e\u30bd\u30fc\u30c8\u306b\u975e\u5e38\u306b\u9069\u3057\u3066\u3044\u307e\u3059\u3002\u7406\u8ad6\u7684\u306b\u306f\u3001\u6642\u9593\u8a08\u7b97\u91cf\u306f \\(O(n + k)\\) \u306b\u9054\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

"},{"location":"chapter_divide_and_conquer/divide_and_conquer/#2","title":"2. \u00a0 \u4e26\u5217\u8a08\u7b97\u306b\u3088\u308b\u6700\u9069\u5316","text":"

\u5206\u5272\u7d71\u6cbb\u306b\u3088\u3063\u3066\u751f\u6210\u3055\u308c\u308b\u90e8\u5206\u554f\u984c\u306f\u4e92\u3044\u306b\u72ec\u7acb\u3057\u3066\u3044\u308b\u3053\u3068\u304c\u5206\u304b\u3063\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u305d\u308c\u3089\u3092\u4e26\u5217\u3067\u89e3\u6c7a\u3067\u304d\u308b\u3053\u3068\u3092\u610f\u5473\u3057\u307e\u3059\u3002 \u305d\u306e\u7d50\u679c\u3001\u5206\u5272\u7d71\u6cbb\u306f\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u6642\u9593\u8a08\u7b97\u91cf\u3092\u6e1b\u3089\u3059\u3060\u3051\u3067\u306a\u304f\u3001\u73fe\u4ee3\u306e\u30aa\u30da\u30ec\u30fc\u30c6\u30a3\u30f3\u30b0\u30b7\u30b9\u30c6\u30e0\u306b\u3088\u308b\u4e26\u5217\u6700\u9069\u5316\u3082\u4fc3\u9032\u3057\u307e\u3059\u3002

\u4e26\u5217\u6700\u9069\u5316\u306f\u3001\u8907\u6570\u306e\u30b3\u30a2\u3084\u30d7\u30ed\u30bb\u30c3\u30b5\u3092\u6301\u3064\u74b0\u5883\u3067\u7279\u306b\u52b9\u679c\u7684\u3067\u3059\u3002\u30b7\u30b9\u30c6\u30e0\u304c\u8907\u6570\u306e\u90e8\u5206\u554f\u984c\u3092\u540c\u6642\u306b\u51e6\u7406\u3067\u304d\u308b\u305f\u3081\u3001\u8a08\u7b97\u30ea\u30bd\u30fc\u30b9\u3092\u5b8c\u5168\u306b\u6d3b\u7528\u3057\u3001\u5168\u4f53\u7684\u306a\u5b9f\u884c\u6642\u9593\u304c\u5927\u5e45\u306b\u77ed\u7e2e\u3055\u308c\u307e\u3059\u3002

\u4f8b\u3048\u3070\u3001\u4ee5\u4e0b\u306e\u56f3\u306b\u793a\u3059\u300c\u30d0\u30b1\u30c3\u30c8\u30bd\u30fc\u30c8\u300d\u3067\u306f\u3001\u5927\u91cf\u306e\u30c7\u30fc\u30bf\u3092\u69d8\u3005\u306a\u30d0\u30b1\u30c3\u30c8\u306b\u5747\u7b49\u306b\u5206\u89e3\u3057\u307e\u3059\u3002\u5404\u30d0\u30b1\u30c3\u30c8\u306e\u30bd\u30fc\u30c8\u4f5c\u696d\u306f\u3001\u5229\u7528\u53ef\u80fd\u306a\u8a08\u7b97\u30e6\u30cb\u30c3\u30c8\u306b\u5272\u308a\u5f53\u3066\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u3059\u3079\u3066\u306e\u4f5c\u696d\u304c\u5b8c\u4e86\u3059\u308b\u3068\u3001\u3059\u3079\u3066\u306e\u30bd\u30fc\u30c8\u3055\u308c\u305f\u30d0\u30b1\u30c3\u30c8\u304c\u30de\u30fc\u30b8\u3055\u308c\u3066\u6700\u7d42\u7d50\u679c\u304c\u751f\u6210\u3055\u308c\u307e\u3059\u3002

\u56f3 12-3 \u00a0 \u30d0\u30b1\u30c3\u30c8\u30bd\u30fc\u30c8\u306e\u4e26\u5217\u8a08\u7b97

"},{"location":"chapter_divide_and_conquer/divide_and_conquer/#1213","title":"12.1.3 \u00a0 \u5206\u5272\u7d71\u6cbb\u306e\u4e00\u822c\u7684\u306a\u5fdc\u7528","text":"

\u5206\u5272\u7d71\u6cbb\u306f\u591a\u304f\u306e\u53e4\u5178\u7684\u306a\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u554f\u984c\u3092\u89e3\u6c7a\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002

\u5206\u5272\u7d71\u6cbb\u306f\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3068\u30c7\u30fc\u30bf\u69cb\u9020\u306e\u8a2d\u8a08\u306b\u3082\u5e83\u304f\u5fdc\u7528\u3055\u308c\u3066\u3044\u307e\u3059\u3002

**\u5206\u5272\u7d71\u6cbb\u306f\u5de7\u5999\u306b\u6d78\u900f\u3059\u308b\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u30a2\u30a4\u30c7\u30a2**\u3067\u3042\u308a\u3001\u69d8\u3005\u306a\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3068\u30c7\u30fc\u30bf\u69cb\u9020\u306b\u7d44\u307f\u8fbc\u307e\u308c\u3066\u3044\u308b\u3053\u3068\u304c\u5206\u304b\u308a\u307e\u3059\u3002

"},{"location":"chapter_divide_and_conquer/hanota_problem/","title":"12.4 \u00a0 \u30cf\u30ce\u30a4\u306e\u5854\u554f\u984c","text":"

\u30de\u30fc\u30b8\u30bd\u30fc\u30c8\u3068\u4e8c\u5206\u6728\u69cb\u7bc9\u306e\u4e21\u65b9\u3067\u3001\u5143\u306e\u554f\u984c\u30922\u3064\u306e\u90e8\u5206\u554f\u984c\u306b\u5206\u89e3\u3057\u3001\u305d\u308c\u305e\u308c\u304c\u5143\u306e\u554f\u984c\u306e\u30b5\u30a4\u30ba\u306e\u534a\u5206\u3067\u3057\u305f\u3002\u3057\u304b\u3057\u3001\u30cf\u30ce\u30a4\u306e\u5854\u3067\u306f\u3001\u7570\u306a\u308b\u5206\u89e3\u6226\u7565\u3092\u63a1\u7528\u3057\u307e\u3059\u3002

Question

3\u3064\u306e\u67f1\u304c\u3042\u308a\u3001\u305d\u308c\u305e\u308c A\u3001B\u3001C \u3068\u8868\u8a18\u3055\u308c\u307e\u3059\u3002\u6700\u521d\u3001\u67f1 A \u306b\u306f \\(n\\) \u679a\u306e\u5186\u76e4\u304c\u3042\u308a\u3001\u4e0a\u304b\u3089\u4e0b\u306b\u5411\u304b\u3063\u3066\u6607\u9806\u306e\u30b5\u30a4\u30ba\u3067\u914d\u7f6e\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u79c1\u305f\u3061\u306e\u30bf\u30b9\u30af\u306f\u3001\u3053\u308c\u3089\u306e \\(n\\) \u679a\u306e\u5186\u76e4\u3092\u67f1 C \u306b\u79fb\u52d5\u3057\u3001\u5143\u306e\u9806\u5e8f\u3092\u7dad\u6301\u3059\u308b\u3053\u3068\u3067\u3059\uff08\u4ee5\u4e0b\u306e\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\uff09\u3002\u79fb\u52d5\u4e2d\u306b\u306f\u4ee5\u4e0b\u306e\u30eb\u30fc\u30eb\u304c\u9069\u7528\u3055\u308c\u307e\u3059\uff1a

  1. \u5186\u76e4\u306f\u67f1\u306e\u4e0a\u90e8\u304b\u3089\u306e\u307f\u53d6\u308a\u9664\u304f\u3053\u3068\u304c\u3067\u304d\u3001\u5225\u306e\u67f1\u306e\u4e0a\u90e8\u306b\u7f6e\u304f\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002
  2. \u4e00\u5ea6\u306b\u79fb\u52d5\u3067\u304d\u308b\u306e\u306f1\u679a\u306e\u5186\u76e4\u306e\u307f\u3067\u3059\u3002
  3. \u5c0f\u3055\u3044\u5186\u76e4\u306f\u5e38\u306b\u5927\u304d\u3044\u5186\u76e4\u306e\u4e0a\u306b\u3042\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

\u56f3 12-10 \u00a0 \u30cf\u30ce\u30a4\u306e\u5854\u306e\u4f8b

\u30b5\u30a4\u30ba \\(i\\) \u306e\u30cf\u30ce\u30a4\u306e\u5854\u554f\u984c\u3092 \\(f(i)\\) \u3068\u8868\u8a18\u3057\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001\\(f(3)\\) \u306f3\u679a\u306e\u5186\u76e4\u3092\u67f1 A \u304b\u3089\u67f1 C \u306b\u79fb\u52d5\u3059\u308b\u3053\u3068\u3092\u8868\u3057\u307e\u3059\u3002

"},{"location":"chapter_divide_and_conquer/hanota_problem/#1","title":"1. \u00a0 \u57fa\u672c\u30b1\u30fc\u30b9\u3092\u8003\u3048\u308b","text":"

\u4ee5\u4e0b\u306e\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u554f\u984c \\(f(1)\\)\uff08\u5186\u76e4\u304c1\u679a\u306e\u307f\uff09\u306b\u3064\u3044\u3066\u306f\u3001A \u304b\u3089 C \u306b\u76f4\u63a5\u79fb\u52d5\u3067\u304d\u307e\u3059\u3002

<1><2>

\u56f3 12-11 \u00a0 \u30b5\u30a4\u30ba1\u306e\u554f\u984c\u306e\u89e3

\\(f(2)\\)\uff08\u5186\u76e4\u304c2\u679a\uff09\u306b\u3064\u3044\u3066\u306f\u3001**\u67f1 B \u306e\u52a9\u3051\u3092\u501f\u308a\u3066\u5c0f\u3055\u3044\u5186\u76e4\u3092\u5927\u304d\u3044\u5186\u76e4\u306e\u4e0a\u306b\u4fdd\u3064**\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u4ee5\u4e0b\u306e\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\uff1a

  1. \u307e\u305a\u3001\u5c0f\u3055\u3044\u5186\u76e4\u3092 A \u304b\u3089 B \u306b\u79fb\u52d5\u3057\u307e\u3059\u3002
  2. \u6b21\u306b\u3001\u5927\u304d\u3044\u5186\u76e4\u3092 A \u304b\u3089 C \u306b\u79fb\u52d5\u3057\u307e\u3059\u3002
  3. \u6700\u5f8c\u306b\u3001\u5c0f\u3055\u3044\u5186\u76e4\u3092 B \u304b\u3089 C \u306b\u79fb\u52d5\u3057\u307e\u3059\u3002
<1><2><3><4>

\u56f3 12-12 \u00a0 \u30b5\u30a4\u30ba2\u306e\u554f\u984c\u306e\u89e3

\\(f(2)\\) \u3092\u89e3\u6c7a\u3059\u308b\u904e\u7a0b\u306f\u6b21\u306e\u3088\u3046\u306b\u8981\u7d04\u3067\u304d\u307e\u3059\uff1aB \u306e\u52a9\u3051\u3092\u501f\u308a\u30662\u679a\u306e\u5186\u76e4\u3092 A \u304b\u3089 C \u306b\u79fb\u52d5\u3059\u308b\u3002\u3053\u3053\u3067\u3001C \u3092\u30bf\u30fc\u30b2\u30c3\u30c8\u67f1\u3001B \u3092\u30d0\u30c3\u30d5\u30a1\u67f1\u3068\u547c\u3073\u307e\u3059\u3002

"},{"location":"chapter_divide_and_conquer/hanota_problem/#2","title":"2. \u00a0 \u90e8\u5206\u554f\u984c\u306e\u5206\u89e3","text":"

\u554f\u984c \\(f(3)\\)\uff08\u3064\u307e\u308a\u3001\u5186\u76e4\u304c3\u679a\u306e\u5834\u5408\uff09\u306b\u3064\u3044\u3066\u306f\u3001\u72b6\u6cc1\u304c\u3084\u3084\u8907\u96d1\u306b\u306a\u308a\u307e\u3059\u3002

\u3059\u3067\u306b \\(f(1)\\) \u3068 \\(f(2)\\) \u306e\u89e3\u304c\u5206\u304b\u3063\u3066\u3044\u308b\u306e\u3067\u3001\u5206\u5272\u7d71\u6cbb\u306e\u89b3\u70b9\u3092\u63a1\u7528\u3057\u3001A \u306e\u4e0a\u306e2\u679a\u306e\u5186\u76e4\u30921\u3064\u306e\u5358\u4f4d\u3068\u3057\u3066\u6271\u3044\u3001\u4ee5\u4e0b\u306e\u56f3\u306b\u793a\u3059\u30b9\u30c6\u30c3\u30d7\u3092\u5b9f\u884c\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u30013\u679a\u306e\u5186\u76e4\u3092 A \u304b\u3089 C \u306b\u6b63\u5e38\u306b\u79fb\u52d5\u3067\u304d\u307e\u3059\u3002

  1. B \u3092\u30bf\u30fc\u30b2\u30c3\u30c8\u67f1\u3001C \u3092\u30d0\u30c3\u30d5\u30a1\u67f1\u3068\u3057\u3066\u30012\u679a\u306e\u5186\u76e4\u3092 A \u304b\u3089 B \u306b\u79fb\u52d5\u3057\u307e\u3059\u3002
  2. \u6b8b\u308a\u306e\u5186\u76e4\u3092 A \u304b\u3089\u76f4\u63a5 C \u306b\u79fb\u52d5\u3057\u307e\u3059\u3002
  3. C \u3092\u30bf\u30fc\u30b2\u30c3\u30c8\u67f1\u3001A \u3092\u30d0\u30c3\u30d5\u30a1\u67f1\u3068\u3057\u3066\u30012\u679a\u306e\u5186\u76e4\u3092 B \u304b\u3089 C \u306b\u79fb\u52d5\u3057\u307e\u3059\u3002
<1><2><3><4>

\u56f3 12-13 \u00a0 \u30b5\u30a4\u30ba3\u306e\u554f\u984c\u306e\u89e3

\u672c\u8cea\u7684\u306b\u3001\\(f(3)\\) \u30922\u3064\u306e \\(f(2)\\) \u90e8\u5206\u554f\u984c\u30681\u3064\u306e \\(f(1)\\) \u90e8\u5206\u554f\u984c\u306b\u5206\u89e3\u3057\u307e\u3059\u3002\u3053\u308c\u30893\u3064\u306e\u90e8\u5206\u554f\u984c\u3092\u9806\u6b21\u89e3\u6c7a\u3059\u308b\u3053\u3068\u3067\u3001\u5143\u306e\u554f\u984c\u304c\u89e3\u6c7a\u3055\u308c\u3001\u90e8\u5206\u554f\u984c\u304c\u72ec\u7acb\u3057\u3066\u304a\u308a\u3001\u305d\u308c\u3089\u306e\u89e3\u3092\u30de\u30fc\u30b8\u3067\u304d\u308b\u3053\u3068\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002

\u3053\u3053\u304b\u3089\u3001\u4ee5\u4e0b\u306e\u56f3\u306b\u793a\u3059\u30cf\u30ce\u30a4\u306e\u5854\u306e\u5206\u5272\u7d71\u6cbb\u6226\u7565\u3092\u8981\u7d04\u3067\u304d\u307e\u3059\u3002\u5143\u306e\u554f\u984c \\(f(n)\\) \u30922\u3064\u306e\u90e8\u5206\u554f\u984c \\(f(n-1)\\) \u30681\u3064\u306e\u90e8\u5206\u554f\u984c \\(f(1)\\) \u306b\u5206\u5272\u3057\u3001\u4ee5\u4e0b\u306e\u9806\u5e8f\u3067\u3053\u308c\u30893\u3064\u306e\u90e8\u5206\u554f\u984c\u3092\u89e3\u6c7a\u3057\u307e\u3059\uff1a

  1. C \u3092\u30d0\u30c3\u30d5\u30a1\u3068\u3057\u3066\u4f7f\u7528\u3057\u3001\\(n-1\\) \u679a\u306e\u5186\u76e4\u3092 A \u304b\u3089 B \u306b\u79fb\u52d5\u3057\u307e\u3059\u3002
  2. \u6b8b\u308a\u306e\u5186\u76e4\u3092 A \u304b\u3089\u76f4\u63a5 C \u306b\u79fb\u52d5\u3057\u307e\u3059\u3002
  3. A \u3092\u30d0\u30c3\u30d5\u30a1\u3068\u3057\u3066\u4f7f\u7528\u3057\u3001\\(n-1\\) \u679a\u306e\u5186\u76e4\u3092 B \u304b\u3089 C \u306b\u79fb\u52d5\u3057\u307e\u3059\u3002

\u5404 \\(f(n-1)\\) \u90e8\u5206\u554f\u984c\u306b\u3064\u3044\u3066\u3001\u540c\u3058\u518d\u5e30\u5206\u5272\u3092\u9069\u7528\u3067\u304d\u3001\u6700\u5c0f\u306e\u90e8\u5206\u554f\u984c \\(f(1)\\) \u306b\u5230\u9054\u3059\u308b\u307e\u3067\u7d9a\u3051\u307e\u3059\u3002\\(f(1)\\) \u306f\u5358\u4e00\u306e\u79fb\u52d5\u306e\u307f\u304c\u5fc5\u8981\u3067\u3042\u308b\u3053\u3068\u304c\u3059\u3067\u306b\u5206\u304b\u3063\u3066\u3044\u308b\u305f\u3081\u3001\u89e3\u6c7a\u3059\u308b\u306e\u306f\u7c21\u5358\u3067\u3059\u3002

\u56f3 12-14 \u00a0 \u30cf\u30ce\u30a4\u306e\u5854\u3092\u89e3\u6c7a\u3059\u308b\u305f\u3081\u306e\u5206\u5272\u7d71\u6cbb\u6226\u7565

"},{"location":"chapter_divide_and_conquer/hanota_problem/#3","title":"3. \u00a0 \u30b3\u30fc\u30c9\u5b9f\u88c5","text":"

\u30b3\u30fc\u30c9\u3067\u306f\u3001\u518d\u5e30\u95a2\u6570 dfs(i, src, buf, tar) \u3092\u5b9a\u7fa9\u3057\u307e\u3059\u3002\u3053\u308c\u306f\u67f1 src \u304b\u3089\u4e0a\u306e \\(i\\) \u679a\u306e\u5186\u76e4\u3092\u67f1 tar \u306b\u79fb\u52d5\u3057\u3001\u67f1 buf \u3092\u30d0\u30c3\u30d5\u30a1\u3068\u3057\u3066\u4f7f\u7528\u3057\u307e\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby hanota.py
def move(src: list[int], tar: list[int]):\n    \"\"\"\u5186\u76e4\u3092\u79fb\u52d5\"\"\"\n    # src \u306e\u4e0a\u304b\u3089\u5186\u76e4\u3092\u53d6\u308a\u51fa\u3059\n    pan = src.pop()\n    # \u5186\u76e4\u3092 tar \u306e\u4e0a\u306b\u7f6e\u304f\n    tar.append(pan)\n\ndef dfs(i: int, src: list[int], buf: list[int], tar: list[int]):\n    \"\"\"\u30cf\u30ce\u30a4\u306e\u5854\u554f\u984c f(i) \u3092\u89e3\u304f\"\"\"\n    # src \u306b\u5186\u76e4\u304c 1 \u3064\u3060\u3051\u6b8b\u3063\u3066\u3044\u308b\u5834\u5408\u3001\u305d\u308c\u3092 tar \u306b\u79fb\u52d5\n    if i == 1:\n        move(src, tar)\n        return\n    # \u90e8\u5206\u554f\u984c f(i-1)\uff1atar \u306e\u52a9\u3051\u3092\u501f\u308a\u3066 src \u306e\u4e0a\u306e i-1 \u500b\u306e\u5186\u76e4\u3092 buf \u306b\u79fb\u52d5\n    dfs(i - 1, src, tar, buf)\n    # \u90e8\u5206\u554f\u984c f(1)\uff1a\u6b8b\u308a\u306e 1 \u500b\u306e\u5186\u76e4\u3092 src \u304b\u3089 tar \u306b\u79fb\u52d5\n    move(src, tar)\n    # \u90e8\u5206\u554f\u984c f(i-1)\uff1asrc \u306e\u52a9\u3051\u3092\u501f\u308a\u3066 buf \u306e\u4e0a\u306e i-1 \u500b\u306e\u5186\u76e4\u3092 tar \u306b\u79fb\u52d5\n    dfs(i - 1, buf, src, tar)\n\ndef solve_hanota(A: list[int], B: list[int], C: list[int]):\n    \"\"\"\u30cf\u30ce\u30a4\u306e\u5854\u554f\u984c\u3092\u89e3\u304f\"\"\"\n    n = len(A)\n    # B \u306e\u52a9\u3051\u3092\u501f\u308a\u3066 A \u306e\u4e0a\u306e n \u500b\u306e\u5186\u76e4\u3092 C \u306b\u79fb\u52d5\n    dfs(n, A, B, C)\n
hanota.cpp
/* \u5186\u76e4\u3092\u79fb\u52d5 */\nvoid move(vector<int> &src, vector<int> &tar) {\n    // src \u306e\u6700\u4e0a\u90e8\u304b\u3089\u5186\u76e4\u3092\u53d6\u308a\u51fa\u3059\n    int pan = src.back();\n    src.pop_back();\n    // \u5186\u76e4\u3092 tar \u306e\u6700\u4e0a\u90e8\u306b\u914d\u7f6e\n    tar.push_back(pan);\n}\n\n/* \u30cf\u30ce\u30a4\u306e\u5854\u554f\u984c f(i) \u3092\u89e3\u304f */\nvoid dfs(int i, vector<int> &src, vector<int> &buf, vector<int> &tar) {\n    // src \u306b\u5186\u76e4\u304c1\u3064\u3060\u3051\u6b8b\u3063\u3066\u3044\u308b\u5834\u5408\u3001\u305d\u308c\u3092 tar \u306b\u79fb\u52d5\n    if (i == 1) {\n        move(src, tar);\n        return;\n    }\n    // \u90e8\u5206\u554f\u984c f(i-1)\uff1atar \u306e\u52a9\u3051\u3092\u501f\u308a\u3066\u3001\u4e0a\u4f4d i-1 \u500b\u306e\u5186\u76e4\u3092 src \u304b\u3089 buf \u306b\u79fb\u52d5\n    dfs(i - 1, src, tar, buf);\n    // \u90e8\u5206\u554f\u984c f(1)\uff1a\u6b8b\u308a\u306e1\u3064\u306e\u5186\u76e4\u3092 src \u304b\u3089 tar \u306b\u79fb\u52d5\n    move(src, tar);\n    // \u90e8\u5206\u554f\u984c f(i-1)\uff1asrc \u306e\u52a9\u3051\u3092\u501f\u308a\u3066\u3001\u4e0a\u4f4d i-1 \u500b\u306e\u5186\u76e4\u3092 buf \u304b\u3089 tar \u306b\u79fb\u52d5\n    dfs(i - 1, buf, src, tar);\n}\n\n/* \u30cf\u30ce\u30a4\u306e\u5854\u554f\u984c\u3092\u89e3\u304f */\nvoid solveHanota(vector<int> &A, vector<int> &B, vector<int> &C) {\n    int n = A.size();\n    // B \u306e\u52a9\u3051\u3092\u501f\u308a\u3066\u3001\u4e0a\u4f4d n \u500b\u306e\u5186\u76e4\u3092 A \u304b\u3089 C \u306b\u79fb\u52d5\n    dfs(n, A, B, C);\n}\n
hanota.java
/* \u5186\u76e4\u3092\u79fb\u52d5 */\nvoid move(List<Integer> src, List<Integer> tar) {\n    // src \u306e\u6700\u4e0a\u90e8\u304b\u3089\u5186\u76e4\u3092\u53d6\u308a\u51fa\u3059\n    Integer pan = src.remove(src.size() - 1);\n    // \u5186\u76e4\u3092 tar \u306e\u6700\u4e0a\u90e8\u306b\u914d\u7f6e\n    tar.add(pan);\n}\n\n/* \u30cf\u30ce\u30a4\u306e\u5854\u554f\u984c f(i) \u3092\u89e3\u304f */\nvoid dfs(int i, List<Integer> src, List<Integer> buf, List<Integer> tar) {\n    // src \u306b\u5186\u76e4\u304c1\u3064\u3060\u3051\u6b8b\u3063\u3066\u3044\u308b\u5834\u5408\u3001\u305d\u308c\u3092 tar \u306b\u79fb\u52d5\n    if (i == 1) {\n        move(src, tar);\n        return;\n    }\n    // \u90e8\u5206\u554f\u984c f(i-1)\uff1atar \u306e\u52a9\u3051\u3092\u501f\u308a\u3066\u3001\u4e0a\u4f4d i-1 \u500b\u306e\u5186\u76e4\u3092 src \u304b\u3089 buf \u306b\u79fb\u52d5\n    dfs(i - 1, src, tar, buf);\n    // \u90e8\u5206\u554f\u984c f(1)\uff1a\u6b8b\u308a\u306e1\u3064\u306e\u5186\u76e4\u3092 src \u304b\u3089 tar \u306b\u79fb\u52d5\n    move(src, tar);\n    // \u90e8\u5206\u554f\u984c f(i-1)\uff1asrc \u306e\u52a9\u3051\u3092\u501f\u308a\u3066\u3001\u4e0a\u4f4d i-1 \u500b\u306e\u5186\u76e4\u3092 buf \u304b\u3089 tar \u306b\u79fb\u52d5\n    dfs(i - 1, buf, src, tar);\n}\n\n/* \u30cf\u30ce\u30a4\u306e\u5854\u554f\u984c\u3092\u89e3\u304f */\nvoid solveHanota(List<Integer> A, List<Integer> B, List<Integer> C) {\n    int n = A.size();\n    // B \u306e\u52a9\u3051\u3092\u501f\u308a\u3066\u3001\u4e0a\u4f4d n \u500b\u306e\u5186\u76e4\u3092 A \u304b\u3089 C \u306b\u79fb\u52d5\n    dfs(n, A, B, C);\n}\n
hanota.cs
[class]{hanota}-[func]{Move}\n\n[class]{hanota}-[func]{DFS}\n\n[class]{hanota}-[func]{SolveHanota}\n
hanota.go
[class]{}-[func]{move}\n\n[class]{}-[func]{dfsHanota}\n\n[class]{}-[func]{solveHanota}\n
hanota.swift
[class]{}-[func]{move}\n\n[class]{}-[func]{dfs}\n\n[class]{}-[func]{solveHanota}\n
hanota.js
[class]{}-[func]{move}\n\n[class]{}-[func]{dfs}\n\n[class]{}-[func]{solveHanota}\n
hanota.ts
[class]{}-[func]{move}\n\n[class]{}-[func]{dfs}\n\n[class]{}-[func]{solveHanota}\n
hanota.dart
[class]{}-[func]{move}\n\n[class]{}-[func]{dfs}\n\n[class]{}-[func]{solveHanota}\n
hanota.rs
[class]{}-[func]{move_pan}\n\n[class]{}-[func]{dfs}\n\n[class]{}-[func]{solve_hanota}\n
hanota.c
[class]{}-[func]{move}\n\n[class]{}-[func]{dfs}\n\n[class]{}-[func]{solveHanota}\n
hanota.kt
[class]{}-[func]{move}\n\n[class]{}-[func]{dfs}\n\n[class]{}-[func]{solveHanota}\n
hanota.rb
[class]{}-[func]{move}\n\n[class]{}-[func]{dfs}\n\n[class]{}-[func]{solve_hanota}\n

\u4ee5\u4e0b\u306e\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u30cf\u30ce\u30a4\u306e\u5854\u554f\u984c\u306f\u9ad8\u3055 \\(n\\) \u306e\u518d\u5e30\u6728\u3068\u3057\u3066\u8996\u899a\u5316\u3067\u304d\u307e\u3059\u3002\u5404\u30ce\u30fc\u30c9\u306f\u90e8\u5206\u554f\u984c\u3092\u8868\u3057\u3001dfs() \u306e\u547c\u3073\u51fa\u3057\u306b\u5bfe\u5fdc\u3057\u307e\u3059\u3002\u3057\u305f\u304c\u3063\u3066\u3001\u6642\u9593\u8a08\u7b97\u91cf\u306f \\(O(2^n)\\)\u3001\u7a7a\u9593\u8a08\u7b97\u91cf\u306f \\(O(n)\\) \u3067\u3059\u3002

\u56f3 12-15 \u00a0 \u30cf\u30ce\u30a4\u306e\u5854\u306e\u518d\u5e30\u6728

Quote

\u30cf\u30ce\u30a4\u306e\u5854\u306f\u53e4\u4ee3\u306e\u4f1d\u8aac\u306b\u7531\u6765\u3057\u307e\u3059\u3002\u53e4\u4ee3\u30a4\u30f3\u30c9\u306e\u5bfa\u9662\u3067\u3001\u50e7\u4fb6\u305f\u3061\u306f3\u672c\u306e\u9ad8\u3044\u30c0\u30a4\u30e4\u30e2\u30f3\u30c9\u306e\u67f1\u3068\u3001\u7570\u306a\u308b\u30b5\u30a4\u30ba\u306e \\(64\\) \u679a\u306e\u91d1\u306e\u5186\u76e4\u3092\u6301\u3063\u3066\u3044\u307e\u3057\u305f\u3002\u5f7c\u3089\u306f\u3001\u6700\u5f8c\u306e\u5186\u76e4\u304c\u6b63\u3057\u304f\u7f6e\u304b\u308c\u305f\u3068\u304d\u3001\u4e16\u754c\u304c\u7d42\u308f\u308b\u3068\u4fe1\u3058\u3066\u3044\u307e\u3057\u305f\u3002

\u3057\u304b\u3057\u3001\u50e7\u4fb6\u305f\u3061\u304c1\u79d2\u306b1\u679a\u306e\u5186\u76e4\u3092\u79fb\u52d5\u3057\u305f\u3068\u3057\u3066\u3082\u3001\u7d04 \\(2^{64} \\approx 1.84\u00d710^{19}\\) \u2014\u7d045850\u5104\u5e74\u2014\u304b\u304b\u308a\u3001\u5b87\u5b99\u306e\u5e74\u9f62\u306e\u73fe\u5728\u306e\u63a8\u5b9a\u3092\u306f\u308b\u304b\u306b\u8d85\u3048\u3066\u3044\u307e\u3059\u3002\u3057\u305f\u304c\u3063\u3066\u3001\u3053\u306e\u4f1d\u8aac\u304c\u771f\u5b9f\u3067\u3042\u308c\u3070\u3001\u4e16\u754c\u306e\u7d42\u308f\u308a\u306b\u3064\u3044\u3066\u5fc3\u914d\u3059\u308b\u5fc5\u8981\u306f\u304a\u305d\u3089\u304f\u306a\u3044\u3067\u3057\u3087\u3046\u3002

"},{"location":"chapter_divide_and_conquer/summary/","title":"12.5 \u00a0 \u307e\u3068\u3081","text":""},{"location":"chapter_dynamic_programming/","title":"\u7b2c 14 \u7ae0 \u00a0 \u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0","text":"

Abstract

\u5ddd\u304c\u6d41\u308c\u3066\u6d77\u306b\u6ce8\u3050\u3088\u3046\u306b\u3001

\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u306f\u5c0f\u3055\u306a\u554f\u984c\u306e\u89e3\u3092\u7e54\u308a\u5408\u308f\u305b\u3066\u3001\u3088\u308a\u5927\u304d\u306a\u554f\u984c\u306e\u89e3\u3078\u3068\u5c0e\u304d\u307e\u3059\u3002\u4e00\u6b69\u4e00\u6b69\u9032\u3093\u3067\u3001\u6700\u7d42\u7684\u306a\u7b54\u3048\u304c\u5f85\u3064\u5f7c\u5cb8\u3078\u3068\u5411\u304b\u3044\u307e\u3059\u3002

"},{"location":"chapter_dynamic_programming/#_1","title":"\u7ae0\u306e\u5185\u5bb9","text":""},{"location":"chapter_dynamic_programming/dp_problem_features/","title":"14.2 \u00a0 \u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u554f\u984c\u306e\u7279\u5fb4","text":"

\u524d\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u304c\u554f\u984c\u3092\u90e8\u5206\u554f\u984c\u306b\u5206\u89e3\u3059\u308b\u3053\u3068\u3067\u5143\u306e\u554f\u984c\u3092\u89e3\u6c7a\u3059\u308b\u65b9\u6cd5\u3092\u5b66\u3073\u307e\u3057\u305f\u3002\u5b9f\u969b\u3001\u90e8\u5206\u554f\u984c\u306e\u5206\u89e3\u306f\u4e00\u822c\u7684\u306a\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u30a2\u30d7\u30ed\u30fc\u30c1\u3067\u3042\u308a\u3001\u5206\u5272\u7d71\u6cbb\u6cd5\u3001\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u3001\u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u3067\u306f\u7570\u306a\u308b\u91cd\u70b9\u304c\u3042\u308a\u307e\u3059\u3002

\u5b9f\u969b\u3001\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u306f\u6700\u9069\u5316\u554f\u984c\u3092\u89e3\u6c7a\u3059\u308b\u305f\u3081\u306b\u3088\u304f\u4f7f\u7528\u3055\u308c\u3001\u3053\u308c\u3089\u306f\u91cd\u8907\u3059\u308b\u90e8\u5206\u554f\u984c\u3092\u542b\u3080\u3060\u3051\u3067\u306a\u304f\u3001\u4ed6\u306b2\u3064\u306e\u4e3b\u8981\u306a\u7279\u5fb4\u304c\u3042\u308a\u307e\u3059\uff1a\u6700\u9069\u90e8\u5206\u69cb\u9020\u3068\u7121\u8a18\u61b6\u6027\u3067\u3059\u3002

"},{"location":"chapter_dynamic_programming/dp_problem_features/#1421","title":"14.2.1 \u00a0 \u6700\u9069\u90e8\u5206\u69cb\u9020","text":"

\u968e\u6bb5\u767b\u308a\u554f\u984c\u3092\u5c11\u3057\u4fee\u6b63\u3057\u3066\u3001\u6700\u9069\u90e8\u5206\u69cb\u9020\u306e\u6982\u5ff5\u3092\u5b9f\u8a3c\u3059\u308b\u306e\u306b\u3088\u308a\u9069\u3057\u305f\u3082\u306e\u306b\u3057\u307e\u3059\u3002

\u968e\u6bb5\u767b\u308a\u306e\u6700\u5c0f\u30b3\u30b9\u30c8

\u968e\u6bb5\u304c\u3042\u308a\u3001\u4e00\u5ea6\u306b1\u6bb5\u307e\u305f\u306f2\u6bb5\u4e0a\u308b\u3053\u3068\u304c\u3067\u304d\u3001\u968e\u6bb5\u306e\u5404\u6bb5\u306b\u306f\u305d\u306e\u6bb5\u3067\u652f\u6255\u3046\u5fc5\u8981\u304c\u3042\u308b\u30b3\u30b9\u30c8\u3092\u8868\u3059\u975e\u8ca0\u306e\u6574\u6570\u304c\u3042\u308a\u307e\u3059\u3002\u975e\u8ca0\u306e\u6574\u6570\u914d\u5217 \\(cost\\) \u304c\u4e0e\u3048\u3089\u308c\u3001\\(cost[i]\\) \u306f \\(i\\) \u6bb5\u76ee\u3067\u652f\u6255\u3046\u5fc5\u8981\u304c\u3042\u308b\u30b3\u30b9\u30c8\u3092\u8868\u3057\u3001\\(cost[0]\\) \u306f\u5730\u9762\uff08\u958b\u59cb\u70b9\uff09\u3067\u3059\u3002\u9802\u4e0a\u306b\u5230\u9054\u3059\u308b\u305f\u3081\u306b\u5fc5\u8981\u306a\u6700\u5c0f\u30b3\u30b9\u30c8\u306f\u4f55\u3067\u3059\u304b\uff1f

\u4e0b\u306e\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u30011\u6bb5\u76ee\u30012\u6bb5\u76ee\u30013\u6bb5\u76ee\u306e\u30b3\u30b9\u30c8\u304c\u305d\u308c\u305e\u308c \\(1\\)\u3001\\(10\\)\u3001\\(1\\) \u306e\u5834\u5408\u3001\u5730\u9762\u304b\u30893\u6bb5\u76ee\u306b\u767b\u308b\u6700\u5c0f\u30b3\u30b9\u30c8\u306f \\(2\\) \u3067\u3059\u3002

\u56f3 14-6 \u00a0 3\u6bb5\u76ee\u306b\u767b\u308b\u6700\u5c0f\u30b3\u30b9\u30c8

\\(dp[i]\\) \u3092 \\(i\\) \u6bb5\u76ee\u306b\u767b\u308b\u7d2f\u7a4d\u30b3\u30b9\u30c8\u3068\u3057\u307e\u3059\u3002\\(i\\) \u6bb5\u76ee\u306f \\(i-1\\) \u6bb5\u76ee\u307e\u305f\u306f \\(i-2\\) \u6bb5\u76ee\u304b\u3089\u306e\u307f\u6765\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u305f\u3081\u3001\\(dp[i]\\) \u306f \\(dp[i-1] + cost[i]\\) \u307e\u305f\u306f \\(dp[i-2] + cost[i]\\) \u306e\u3044\u305a\u308c\u304b\u3057\u304b\u3042\u308a\u3048\u307e\u305b\u3093\u3002\u30b3\u30b9\u30c8\u3092\u6700\u5c0f\u5316\u3059\u308b\u305f\u3081\u306b\u30012\u3064\u306e\u3046\u3061\u5c0f\u3055\u3044\u65b9\u3092\u9078\u629e\u3059\u3079\u304d\u3067\u3059\uff1a

\\[ dp[i] = \\min(dp[i-1], dp[i-2]) + cost[i] \\]

\u3053\u308c\u306b\u3088\u308a\u6700\u9069\u90e8\u5206\u69cb\u9020\u306e\u610f\u5473\u304c\u308f\u304b\u308a\u307e\u3059\uff1a\u5143\u306e\u554f\u984c\u306e\u6700\u9069\u89e3\u306f\u90e8\u5206\u554f\u984c\u306e\u6700\u9069\u89e3\u304b\u3089\u69cb\u7bc9\u3055\u308c\u308b\u3002

\u3053\u306e\u554f\u984c\u306f\u660e\u3089\u304b\u306b\u6700\u9069\u90e8\u5206\u69cb\u9020\u3092\u6301\u3063\u3066\u3044\u307e\u3059\uff1a2\u3064\u306e\u90e8\u5206\u554f\u984c \\(dp[i-1]\\) \u3068 \\(dp[i-2]\\) \u306e\u6700\u9069\u89e3\u304b\u3089\u3088\u308a\u826f\u3044\u65b9\u3092\u9078\u629e\u3057\u3001\u305d\u308c\u3092\u4f7f\u7528\u3057\u3066\u5143\u306e\u554f\u984c \\(dp[i]\\) \u306e\u6700\u9069\u89e3\u3092\u69cb\u7bc9\u3057\u307e\u3059\u3002

\u3067\u306f\u3001\u524d\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u306e\u968e\u6bb5\u767b\u308a\u554f\u984c\u306f\u6700\u9069\u90e8\u5206\u69cb\u9020\u3092\u6301\u3063\u3066\u3044\u308b\u3067\u3057\u3087\u3046\u304b\uff1f\u305d\u306e\u76ee\u6a19\u306f\u89e3\u306e\u6570\u3092\u6c42\u3081\u308b\u3053\u3068\u3067\u3001\u3053\u308c\u306f\u6570\u3048\u4e0a\u3052\u554f\u984c\u306e\u3088\u3046\u3067\u3059\u304c\u3001\u5225\u306e\u65b9\u6cd5\u3067\u5c0b\u306d\u3066\u307f\u307e\u3057\u3087\u3046\uff1a\u300c\u89e3\u306e\u6700\u5927\u6570\u3092\u6c42\u3081\u308b\u300d\u3002\u9a5a\u304f\u3053\u3068\u306b\u3001**\u554f\u984c\u304c\u5909\u308f\u3063\u305f\u306b\u3082\u304b\u304b\u308f\u3089\u305a\u3001\u6700\u9069\u90e8\u5206\u69cb\u9020\u304c\u73fe\u308c\u305f**\u3053\u3068\u304c\u308f\u304b\u308a\u307e\u3059\uff1a\\(n\\) \u6bb5\u76ee\u3067\u306e\u89e3\u306e\u6700\u5927\u6570\u306f\u3001\\(n-1\\) \u6bb5\u76ee\u3068 \\(n-2\\) \u6bb5\u76ee\u3067\u306e\u89e3\u306e\u6700\u5927\u6570\u306e\u548c\u306b\u7b49\u3057\u3044\u3067\u3059\u3002\u3057\u305f\u304c\u3063\u3066\u3001\u6700\u9069\u90e8\u5206\u69cb\u9020\u306e\u89e3\u91c8\u306f\u975e\u5e38\u306b\u67d4\u8edf\u3067\u3001\u7570\u306a\u308b\u554f\u984c\u3067\u306f\u7570\u306a\u308b\u610f\u5473\u3092\u6301\u3061\u307e\u3059\u3002

\u72b6\u614b\u9077\u79fb\u65b9\u7a0b\u5f0f\u3068\u521d\u671f\u72b6\u614b \\(dp[1] = cost[1]\\) \u304a\u3088\u3073 \\(dp[2] = cost[2]\\) \u306b\u5f93\u3063\u3066\u3001\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u30b3\u30fc\u30c9\u3092\u5f97\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby min_cost_climbing_stairs_dp.py
def min_cost_climbing_stairs_dp(cost: list[int]) -> int:\n    \"\"\"\u6700\u5c0f\u30b3\u30b9\u30c8\u968e\u6bb5\u767b\u308a\uff1a\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\"\"\"\n    n = len(cost) - 1\n    if n == 1 or n == 2:\n        return cost[n]\n    # dp \u30c6\u30fc\u30d6\u30eb\u3092\u521d\u671f\u5316\u3001\u90e8\u5206\u554f\u984c\u306e\u89e3\u3092\u683c\u7d0d\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\n    dp = [0] * (n + 1)\n    # \u521d\u671f\u72b6\u614b\uff1a\u6700\u5c0f\u306e\u90e8\u5206\u554f\u984c\u306e\u89e3\u3092\u4e8b\u524d\u8a2d\u5b9a\n    dp[1], dp[2] = cost[1], cost[2]\n    # \u72b6\u614b\u9077\u79fb\uff1a\u5c0f\u3055\u3044\u90e8\u5206\u554f\u984c\u304b\u3089\u5927\u304d\u3044\u90e8\u5206\u554f\u984c\u3092\u6bb5\u968e\u7684\u306b\u89e3\u304f\n    for i in range(3, n + 1):\n        dp[i] = min(dp[i - 1], dp[i - 2]) + cost[i]\n    return dp[n]\n
min_cost_climbing_stairs_dp.cpp
/* \u6700\u5c0f\u30b3\u30b9\u30c8\u968e\u6bb5\u767b\u308a\uff1a\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0 */\nint minCostClimbingStairsDP(vector<int> &cost) {\n    int n = cost.size() - 1;\n    if (n == 1 || n == 2)\n        return cost[n];\n    // DP\u30c6\u30fc\u30d6\u30eb\u3092\u521d\u671f\u5316\u3057\u3001\u90e8\u5206\u554f\u984c\u306e\u89e3\u3092\u683c\u7d0d\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\n    vector<int> dp(n + 1);\n    // \u521d\u671f\u72b6\u614b\uff1a\u6700\u5c0f\u306e\u90e8\u5206\u554f\u984c\u306e\u89e3\u3092\u4e8b\u524d\u8a2d\u5b9a\n    dp[1] = cost[1];\n    dp[2] = cost[2];\n    // \u72b6\u614b\u9077\u79fb\uff1a\u5c0f\u3055\u306a\u554f\u984c\u304b\u3089\u5927\u304d\u306a\u90e8\u5206\u554f\u984c\u3092\u6bb5\u968e\u7684\u306b\u89e3\u304f\n    for (int i = 3; i <= n; i++) {\n        dp[i] = min(dp[i - 1], dp[i - 2]) + cost[i];\n    }\n    return dp[n];\n}\n
min_cost_climbing_stairs_dp.java
/* \u6700\u5c0f\u30b3\u30b9\u30c8\u968e\u6bb5\u767b\u308a\uff1a\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0 */\nint minCostClimbingStairsDP(int[] cost) {\n    int n = cost.length - 1;\n    if (n == 1 || n == 2)\n        return cost[n];\n    // DP\u30c6\u30fc\u30d6\u30eb\u3092\u521d\u671f\u5316\u3057\u3001\u90e8\u5206\u554f\u984c\u306e\u89e3\u3092\u683c\u7d0d\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\n    int[] dp = new int[n + 1];\n    // \u521d\u671f\u72b6\u614b\uff1a\u6700\u5c0f\u306e\u90e8\u5206\u554f\u984c\u306e\u89e3\u3092\u4e8b\u524d\u8a2d\u5b9a\n    dp[1] = cost[1];\n    dp[2] = cost[2];\n    // \u72b6\u614b\u9077\u79fb\uff1a\u5c0f\u3055\u306a\u554f\u984c\u304b\u3089\u5927\u304d\u306a\u90e8\u5206\u554f\u984c\u3092\u6bb5\u968e\u7684\u306b\u89e3\u304f\n    for (int i = 3; i <= n; i++) {\n        dp[i] = Math.min(dp[i - 1], dp[i - 2]) + cost[i];\n    }\n    return dp[n];\n}\n
min_cost_climbing_stairs_dp.cs
[class]{min_cost_climbing_stairs_dp}-[func]{MinCostClimbingStairsDP}\n
min_cost_climbing_stairs_dp.go
[class]{}-[func]{minCostClimbingStairsDP}\n
min_cost_climbing_stairs_dp.swift
[class]{}-[func]{minCostClimbingStairsDP}\n
min_cost_climbing_stairs_dp.js
[class]{}-[func]{minCostClimbingStairsDP}\n
min_cost_climbing_stairs_dp.ts
[class]{}-[func]{minCostClimbingStairsDP}\n
min_cost_climbing_stairs_dp.dart
[class]{}-[func]{minCostClimbingStairsDP}\n
min_cost_climbing_stairs_dp.rs
[class]{}-[func]{min_cost_climbing_stairs_dp}\n
min_cost_climbing_stairs_dp.c
[class]{}-[func]{minCostClimbingStairsDP}\n
min_cost_climbing_stairs_dp.kt
[class]{}-[func]{minCostClimbingStairsDP}\n
min_cost_climbing_stairs_dp.rb
[class]{}-[func]{min_cost_climbing_stairs_dp}\n

\u4e0b\u306e\u56f3\u306f\u4e0a\u8a18\u30b3\u30fc\u30c9\u306e\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u30d7\u30ed\u30bb\u30b9\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002

\u56f3 14-7 \u00a0 \u968e\u6bb5\u767b\u308a\u306e\u6700\u5c0f\u30b3\u30b9\u30c8\u306e\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u30d7\u30ed\u30bb\u30b9

\u3053\u306e\u554f\u984c\u3082\u7a7a\u9593\u6700\u9069\u5316\u304c\u53ef\u80fd\u3067\u30011\u6b21\u5143\u30920\u306b\u5727\u7e2e\u3057\u3001\u7a7a\u9593\u8a08\u7b97\u91cf\u3092 \\(O(n)\\) \u304b\u3089 \\(O(1)\\) \u306b\u524a\u6e1b\u3067\u304d\u307e\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby min_cost_climbing_stairs_dp.py
def min_cost_climbing_stairs_dp_comp(cost: list[int]) -> int:\n    \"\"\"\u6700\u5c0f\u30b3\u30b9\u30c8\u968e\u6bb5\u767b\u308a\uff1a\u7a7a\u9593\u6700\u9069\u5316\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\"\"\"\n    n = len(cost) - 1\n    if n == 1 or n == 2:\n        return cost[n]\n    a, b = cost[1], cost[2]\n    for i in range(3, n + 1):\n        a, b = b, min(a, b) + cost[i]\n    return b\n
min_cost_climbing_stairs_dp.cpp
/* \u6700\u5c0f\u30b3\u30b9\u30c8\u968e\u6bb5\u767b\u308a\uff1a\u7a7a\u9593\u6700\u9069\u5316\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0 */\nint minCostClimbingStairsDPComp(vector<int> &cost) {\n    int n = cost.size() - 1;\n    if (n == 1 || n == 2)\n        return cost[n];\n    int a = cost[1], b = cost[2];\n    for (int i = 3; i <= n; i++) {\n        int tmp = b;\n        b = min(a, tmp) + cost[i];\n        a = tmp;\n    }\n    return b;\n}\n
min_cost_climbing_stairs_dp.java
/* \u6700\u5c0f\u30b3\u30b9\u30c8\u968e\u6bb5\u767b\u308a\uff1a\u7a7a\u9593\u6700\u9069\u5316\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0 */\nint minCostClimbingStairsDPComp(int[] cost) {\n    int n = cost.length - 1;\n    if (n == 1 || n == 2)\n        return cost[n];\n    int a = cost[1], b = cost[2];\n    for (int i = 3; i <= n; i++) {\n        int tmp = b;\n        b = Math.min(a, tmp) + cost[i];\n        a = tmp;\n    }\n    return b;\n}\n
min_cost_climbing_stairs_dp.cs
[class]{min_cost_climbing_stairs_dp}-[func]{MinCostClimbingStairsDPComp}\n
min_cost_climbing_stairs_dp.go
[class]{}-[func]{minCostClimbingStairsDPComp}\n
min_cost_climbing_stairs_dp.swift
[class]{}-[func]{minCostClimbingStairsDPComp}\n
min_cost_climbing_stairs_dp.js
[class]{}-[func]{minCostClimbingStairsDPComp}\n
min_cost_climbing_stairs_dp.ts
[class]{}-[func]{minCostClimbingStairsDPComp}\n
min_cost_climbing_stairs_dp.dart
[class]{}-[func]{minCostClimbingStairsDPComp}\n
min_cost_climbing_stairs_dp.rs
[class]{}-[func]{min_cost_climbing_stairs_dp_comp}\n
min_cost_climbing_stairs_dp.c
[class]{}-[func]{minCostClimbingStairsDPComp}\n
min_cost_climbing_stairs_dp.kt
[class]{}-[func]{minCostClimbingStairsDPComp}\n
min_cost_climbing_stairs_dp.rb
[class]{}-[func]{min_cost_climbing_stairs_dp_comp}\n
"},{"location":"chapter_dynamic_programming/dp_problem_features/#1422","title":"14.2.2 \u00a0 \u7121\u8a18\u61b6\u6027","text":"

\u7121\u8a18\u61b6\u6027\u306f\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u304c\u554f\u984c\u89e3\u6c7a\u306b\u52b9\u679c\u7684\u3067\u3042\u308b\u3053\u3068\u3092\u53ef\u80fd\u306b\u3059\u308b\u91cd\u8981\u306a\u7279\u5fb4\u306e1\u3064\u3067\u3059\u3002\u305d\u306e\u5b9a\u7fa9\u306f\uff1a\u7279\u5b9a\u306e\u72b6\u614b\u304c\u4e0e\u3048\u3089\u308c\u305f\u3068\u304d\u3001\u305d\u306e\u5c06\u6765\u306e\u767a\u5c55\u306f\u73fe\u5728\u306e\u72b6\u614b\u306e\u307f\u306b\u95a2\u9023\u3057\u3001\u904e\u53bb\u306b\u7d4c\u9a13\u3057\u305f\u3059\u3079\u3066\u306e\u72b6\u614b\u3068\u306f\u7121\u95a2\u4fc2\u3067\u3042\u308b\u3002

\u968e\u6bb5\u767b\u308a\u554f\u984c\u3092\u4f8b\u306b\u53d6\u308b\u3068\u3001\u72b6\u614b \\(i\\) \u304c\u4e0e\u3048\u3089\u308c\u305f\u3068\u304d\u3001\u305d\u308c\u306f\u72b6\u614b \\(i+1\\) \u3068 \\(i+2\\) \u306b\u767a\u5c55\u3057\u3001\u305d\u308c\u305e\u308c1\u6bb5\u30b8\u30e3\u30f3\u30d7\u30682\u6bb5\u30b8\u30e3\u30f3\u30d7\u306b\u5bfe\u5fdc\u3057\u307e\u3059\u3002\u3053\u308c\u30892\u3064\u306e\u9078\u629e\u3092\u3059\u308b\u3068\u304d\u3001\u72b6\u614b \\(i\\) \u3088\u308a\u524d\u306e\u72b6\u614b\u3092\u8003\u616e\u3059\u308b\u5fc5\u8981\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u306a\u305c\u306a\u3089\u3001\u305d\u308c\u3089\u306f\u72b6\u614b \\(i\\) \u306e\u5c06\u6765\u306b\u5f71\u97ff\u3057\u306a\u3044\u304b\u3089\u3067\u3059\u3002

\u3057\u304b\u3057\u3001\u968e\u6bb5\u767b\u308a\u554f\u984c\u306b\u5236\u7d04\u3092\u8ffd\u52a0\u3059\u308b\u3068\u3001\u72b6\u6cc1\u304c\u5909\u308f\u308a\u307e\u3059\u3002

\u5236\u7d04\u4ed8\u304d\u968e\u6bb5\u767b\u308a

\\(n\\) \u6bb5\u306e\u968e\u6bb5\u304c\u3042\u308a\u3001\u6bce\u56de1\u6bb5\u307e\u305f\u306f2\u6bb5\u4e0a\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u304c\u30011\u6bb5\u30922\u56de\u9023\u7d9a\u3067\u30b8\u30e3\u30f3\u30d7\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002\u9802\u4e0a\u306b\u767b\u308b\u65b9\u6cd5\u306f\u4f55\u901a\u308a\u3042\u308a\u307e\u3059\u304b\uff1f

\u4e0b\u306e\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u30013\u6bb5\u76ee\u306b\u767b\u308b\u5b9f\u884c\u53ef\u80fd\u306a\u9078\u629e\u80a2\u306f2\u3064\u3060\u3051\u3067\u30011\u6bb5\u30923\u56de\u9023\u7d9a\u3067\u30b8\u30e3\u30f3\u30d7\u3059\u308b\u9078\u629e\u80a2\u306f\u5236\u7d04\u6761\u4ef6\u3092\u6e80\u305f\u3055\u306a\u3044\u305f\u3081\u7834\u68c4\u3055\u308c\u307e\u3059\u3002

\u56f3 14-8 \u00a0 \u5236\u7d04\u4ed8\u304d\u30673\u6bb5\u76ee\u306b\u767b\u308b\u5b9f\u884c\u53ef\u80fd\u306a\u9078\u629e\u80a2\u306e\u6570

\u3053\u306e\u554f\u984c\u3067\u306f\u3001\u524d\u56de\u304c1\u6bb5\u30b8\u30e3\u30f3\u30d7\u3060\u3063\u305f\u5834\u5408\u3001\u6b21\u56de\u306f\u5fc5\u305a2\u6bb5\u30b8\u30e3\u30f3\u30d7\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002\u3053\u308c\u306f**\u6b21\u306e\u30b9\u30c6\u30c3\u30d7\u306e\u9078\u629e\u304c\u73fe\u5728\u306e\u72b6\u614b\uff08\u73fe\u5728\u306e\u968e\u6bb5\u6bb5\u6570\uff09\u3060\u3051\u3067\u306f\u72ec\u7acb\u3057\u3066\u6c7a\u5b9a\u3067\u304d\u305a\u3001\u524d\u306e\u72b6\u614b\uff08\u524d\u56de\u306e\u968e\u6bb5\u6bb5\u6570\uff09\u306b\u3082\u4f9d\u5b58\u3059\u308b**\u3053\u3068\u3092\u610f\u5473\u3057\u307e\u3059\u3002

\u3053\u306e\u554f\u984c\u304c\u3082\u306f\u3084\u7121\u8a18\u61b6\u6027\u3092\u6e80\u305f\u3055\u305a\u3001\u72b6\u614b\u9077\u79fb\u65b9\u7a0b\u5f0f \\(dp[i] = dp[i-1] + dp[i-2]\\) \u3082\u5931\u6557\u3059\u308b\u3053\u3068\u306f\u5bb9\u6613\u306b\u308f\u304b\u308a\u307e\u3059\u3002\u306a\u305c\u306a\u3089 \\(dp[i-1]\\) \u306f\u4eca\u56de\u306e1\u6bb5\u30b8\u30e3\u30f3\u30d7\u3092\u8868\u3057\u307e\u3059\u304c\u3001\u591a\u304f\u306e\u300c\u524d\u56de\u304c1\u6bb5\u30b8\u30e3\u30f3\u30d7\u3060\u3063\u305f\u300d\u9078\u629e\u80a2\u3092\u542b\u3093\u3067\u304a\u308a\u3001\u5236\u7d04\u3092\u6e80\u305f\u3059\u305f\u3081\u306b\u306f\u3053\u308c\u3089\u3092\u76f4\u63a5 \\(dp[i]\\) \u306b\u542b\u3081\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002

\u3053\u306e\u305f\u3081\u3001\u72b6\u614b\u5b9a\u7fa9\u3092\u62e1\u5f35\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\uff1a\u72b6\u614b \\([i, j]\\) \u306f \\(i\\) \u6bb5\u76ee\u306b\u3044\u3066\u3001\u524d\u56de\u304c \\(j\\) \u6bb5\u30b8\u30e3\u30f3\u30d7\u3060\u3063\u305f\u3053\u3068\u3092\u8868\u3059\u3002\u3053\u3053\u3067 \\(j \\in \\{1, 2\\}\\) \u3067\u3059\u3002\u3053\u306e\u72b6\u614b\u5b9a\u7fa9\u306f\u524d\u56de\u304c1\u6bb5\u30b8\u30e3\u30f3\u30d7\u3060\u3063\u305f\u304b2\u6bb5\u30b8\u30e3\u30f3\u30d7\u3060\u3063\u305f\u304b\u3092\u52b9\u679c\u7684\u306b\u533a\u5225\u3057\u3001\u73fe\u5728\u306e\u72b6\u614b\u304c\u3069\u3053\u304b\u3089\u6765\u305f\u304b\u3092\u9069\u5207\u306b\u5224\u65ad\u3067\u304d\u307e\u3059\u3002

\u4e0b\u306e\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\\(dp[i, j]\\) \u306f\u72b6\u614b \\([i, j]\\) \u306e\u89e3\u306e\u6570\u3092\u8868\u3057\u307e\u3059\u3002\u3053\u306e\u6642\u70b9\u3067\u3001\u72b6\u614b\u9077\u79fb\u65b9\u7a0b\u5f0f\u306f\u6b21\u306e\u3088\u3046\u306b\u306a\u308a\u307e\u3059\uff1a

\\[ \\begin{cases} dp[i, 1] = dp[i-1, 2] \\\\ dp[i, 2] = dp[i-2, 1] + dp[i-2, 2] \\end{cases} \\]

\u56f3 14-9 \u00a0 \u5236\u7d04\u3092\u8003\u616e\u3057\u305f\u518d\u5e30\u95a2\u4fc2

\u6700\u7d42\u7684\u306b\u3001\\(dp[n, 1] + dp[n, 2]\\) \u3092\u8fd4\u305b\u3070\u3088\u304f\u3001\u3053\u306e2\u3064\u306e\u5408\u8a08\u304c \\(n\\) \u6bb5\u76ee\u306b\u767b\u308b\u89e3\u306e\u7dcf\u6570\u3092\u8868\u3057\u307e\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby climbing_stairs_constraint_dp.py
def climbing_stairs_constraint_dp(n: int) -> int:\n    \"\"\"\u5236\u7d04\u4ed8\u304d\u968e\u6bb5\u767b\u308a\uff1a\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\"\"\"\n    if n == 1 or n == 2:\n        return 1\n    # dp \u30c6\u30fc\u30d6\u30eb\u3092\u521d\u671f\u5316\u3001\u90e8\u5206\u554f\u984c\u306e\u89e3\u3092\u683c\u7d0d\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\n    dp = [[0] * 3 for _ in range(n + 1)]\n    # \u521d\u671f\u72b6\u614b\uff1a\u6700\u5c0f\u306e\u90e8\u5206\u554f\u984c\u306e\u89e3\u3092\u4e8b\u524d\u8a2d\u5b9a\n    dp[1][1], dp[1][2] = 1, 0\n    dp[2][1], dp[2][2] = 0, 1\n    # \u72b6\u614b\u9077\u79fb\uff1a\u5c0f\u3055\u3044\u90e8\u5206\u554f\u984c\u304b\u3089\u5927\u304d\u3044\u90e8\u5206\u554f\u984c\u3092\u6bb5\u968e\u7684\u306b\u89e3\u304f\n    for i in range(3, n + 1):\n        dp[i][1] = dp[i - 1][2]\n        dp[i][2] = dp[i - 2][1] + dp[i - 2][2]\n    return dp[n][1] + dp[n][2]\n
climbing_stairs_constraint_dp.cpp
/* \u5236\u7d04\u4ed8\u304d\u968e\u6bb5\u767b\u308a\uff1a\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0 */\nint climbingStairsConstraintDP(int n) {\n    if (n == 1 || n == 2) {\n        return 1;\n    }\n    // DP\u30c6\u30fc\u30d6\u30eb\u3092\u521d\u671f\u5316\u3057\u3001\u90e8\u5206\u554f\u984c\u306e\u89e3\u3092\u683c\u7d0d\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\n    vector<vector<int>> dp(n + 1, vector<int>(3, 0));\n    // \u521d\u671f\u72b6\u614b\uff1a\u6700\u5c0f\u306e\u90e8\u5206\u554f\u984c\u306e\u89e3\u3092\u4e8b\u524d\u8a2d\u5b9a\n    dp[1][1] = 1;\n    dp[1][2] = 0;\n    dp[2][1] = 0;\n    dp[2][2] = 1;\n    // \u72b6\u614b\u9077\u79fb\uff1a\u5c0f\u3055\u306a\u554f\u984c\u304b\u3089\u5927\u304d\u306a\u90e8\u5206\u554f\u984c\u3092\u6bb5\u968e\u7684\u306b\u89e3\u304f\n    for (int i = 3; i <= n; i++) {\n        dp[i][1] = dp[i - 1][2];\n        dp[i][2] = dp[i - 2][1] + dp[i - 2][2];\n    }\n    return dp[n][1] + dp[n][2];\n}\n
climbing_stairs_constraint_dp.java
/* \u5236\u7d04\u4ed8\u304d\u968e\u6bb5\u767b\u308a\uff1a\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0 */\nint climbingStairsConstraintDP(int n) {\n    if (n == 1 || n == 2) {\n        return 1;\n    }\n    // DP\u30c6\u30fc\u30d6\u30eb\u3092\u521d\u671f\u5316\u3057\u3001\u90e8\u5206\u554f\u984c\u306e\u89e3\u3092\u683c\u7d0d\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\n    int[][] dp = new int[n + 1][3];\n    // \u521d\u671f\u72b6\u614b\uff1a\u6700\u5c0f\u306e\u90e8\u5206\u554f\u984c\u306e\u89e3\u3092\u4e8b\u524d\u8a2d\u5b9a\n    dp[1][1] = 1;\n    dp[1][2] = 0;\n    dp[2][1] = 0;\n    dp[2][2] = 1;\n    // \u72b6\u614b\u9077\u79fb\uff1a\u5c0f\u3055\u306a\u554f\u984c\u304b\u3089\u5927\u304d\u306a\u90e8\u5206\u554f\u984c\u3092\u6bb5\u968e\u7684\u306b\u89e3\u304f\n    for (int i = 3; i <= n; i++) {\n        dp[i][1] = dp[i - 1][2];\n        dp[i][2] = dp[i - 2][1] + dp[i - 2][2];\n    }\n    return dp[n][1] + dp[n][2];\n}\n
climbing_stairs_constraint_dp.cs
[class]{climbing_stairs_constraint_dp}-[func]{ClimbingStairsConstraintDP}\n
climbing_stairs_constraint_dp.go
[class]{}-[func]{climbingStairsConstraintDP}\n
climbing_stairs_constraint_dp.swift
[class]{}-[func]{climbingStairsConstraintDP}\n
climbing_stairs_constraint_dp.js
[class]{}-[func]{climbingStairsConstraintDP}\n
climbing_stairs_constraint_dp.ts
[class]{}-[func]{climbingStairsConstraintDP}\n
climbing_stairs_constraint_dp.dart
[class]{}-[func]{climbingStairsConstraintDP}\n
climbing_stairs_constraint_dp.rs
[class]{}-[func]{climbing_stairs_constraint_dp}\n
climbing_stairs_constraint_dp.c
[class]{}-[func]{climbingStairsConstraintDP}\n
climbing_stairs_constraint_dp.kt
[class]{}-[func]{climbingStairsConstraintDP}\n
climbing_stairs_constraint_dp.rb
[class]{}-[func]{climbing_stairs_constraint_dp}\n

\u4e0a\u8a18\u306e\u30b1\u30fc\u30b9\u3067\u306f\u3001\u524d\u306e\u72b6\u614b\u306e\u307f\u3092\u8003\u616e\u3059\u308c\u3070\u3088\u3044\u305f\u3081\u3001\u72b6\u614b\u5b9a\u7fa9\u3092\u62e1\u5f35\u3059\u308b\u3053\u3068\u3067\u4f9d\u7136\u3068\u3057\u3066\u7121\u8a18\u61b6\u6027\u3092\u6e80\u305f\u3059\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u3057\u304b\u3057\u3001\u4e00\u90e8\u306e\u554f\u984c\u3067\u306f\u975e\u5e38\u306b\u6df1\u523b\u306a\u300c\u72b6\u614b\u52b9\u679c\u300d\u304c\u3042\u308a\u307e\u3059\u3002

\u969c\u5bb3\u7269\u751f\u6210\u4ed8\u304d\u968e\u6bb5\u767b\u308a

\\(n\\) \u6bb5\u306e\u968e\u6bb5\u304c\u3042\u308a\u3001\u6bce\u56de1\u6bb5\u307e\u305f\u306f2\u6bb5\u4e0a\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002**\\(i\\) \u6bb5\u76ee\u306b\u767b\u3063\u305f\u3068\u304d\u3001\u30b7\u30b9\u30c6\u30e0\u304c\u81ea\u52d5\u7684\u306b \\(2i\\) \u6bb5\u76ee\u306b\u969c\u5bb3\u7269\u3092\u7f6e\u304d\u3001\u305d\u306e\u5f8c\u306e\u3059\u3079\u3066\u306e\u30e9\u30a6\u30f3\u30c9\u3067 \\(2i\\) \u6bb5\u76ee\u306b\u30b8\u30e3\u30f3\u30d7\u3059\u308b\u3053\u3068\u304c\u7981\u6b62\u3055\u308c\u308b**\u3068\u898f\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001\u6700\u521d\u306e2\u30e9\u30a6\u30f3\u30c9\u30672\u6bb5\u76ee\u30683\u6bb5\u76ee\u306b\u30b8\u30e3\u30f3\u30d7\u3057\u305f\u5834\u5408\u3001\u305d\u306e\u5f8c\u306f4\u6bb5\u76ee\u30686\u6bb5\u76ee\u306b\u30b8\u30e3\u30f3\u30d7\u3067\u304d\u307e\u305b\u3093\u3002\u9802\u4e0a\u306b\u767b\u308b\u65b9\u6cd5\u306f\u4f55\u901a\u308a\u3042\u308a\u307e\u3059\u304b\uff1f

\u3053\u306e\u554f\u984c\u3067\u306f\u3001\u6b21\u306e\u30b8\u30e3\u30f3\u30d7\u306f\u3059\u3079\u3066\u306e\u904e\u53bb\u306e\u72b6\u614b\u306b\u4f9d\u5b58\u3057\u307e\u3059\u3002\u5404\u30b8\u30e3\u30f3\u30d7\u304c\u3088\u308a\u9ad8\u3044\u6bb5\u306b\u969c\u5bb3\u7269\u3092\u7f6e\u304d\u3001\u5c06\u6765\u306e\u30b8\u30e3\u30f3\u30d7\u306b\u5f71\u97ff\u3059\u308b\u304b\u3089\u3067\u3059\u3002\u3053\u306e\u3088\u3046\u306a\u554f\u984c\u3067\u306f\u3001\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u306f\u3057\u3070\u3057\u3070\u89e3\u6c7a\u306b\u82e6\u52b4\u3057\u307e\u3059\u3002

\u5b9f\u969b\u3001\u591a\u304f\u306e\u8907\u96d1\u306a\u7d44\u307f\u5408\u308f\u305b\u6700\u9069\u5316\u554f\u984c\uff08\u5de1\u56de\u30bb\u30fc\u30eb\u30b9\u30de\u30f3\u554f\u984c\u306a\u3069\uff09\u306f\u7121\u8a18\u61b6\u6027\u3092\u6e80\u305f\u3057\u307e\u305b\u3093\u3002\u3053\u306e\u3088\u3046\u306a\u554f\u984c\u306b\u5bfe\u3057\u3066\u306f\u3001\u901a\u5e38\u3001\u30d2\u30e5\u30fc\u30ea\u30b9\u30c6\u30a3\u30c3\u30af\u63a2\u7d22\u3001\u907a\u4f1d\u7684\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3001\u5f37\u5316\u5b66\u7fd2\u306a\u3069\u306e\u4ed6\u306e\u65b9\u6cd5\u3092\u9078\u629e\u3057\u3066\u3001\u9650\u3089\u308c\u305f\u6642\u9593\u5185\u306b\u4f7f\u7528\u53ef\u80fd\u306a\u5c40\u6240\u6700\u9069\u89e3\u3092\u5f97\u307e\u3059\u3002

"},{"location":"chapter_dynamic_programming/dp_solution_pipeline/","title":"14.3 \u00a0 \u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u554f\u984c\u89e3\u6c7a\u30a2\u30d7\u30ed\u30fc\u30c1","text":"

\u524d\u306e2\u3064\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u554f\u984c\u306e\u4e3b\u8981\u306a\u7279\u5fb4\u3092\u7d39\u4ecb\u3057\u307e\u3057\u305f\u3002\u6b21\u306b\u3001\u3088\u308a\u5b9f\u7528\u7684\u306a2\u3064\u306e\u554f\u984c\u3092\u4e00\u7dd2\u306b\u63a2\u7d22\u3057\u307e\u3057\u3087\u3046\u3002

  1. \u554f\u984c\u304c\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u554f\u984c\u304b\u3069\u3046\u304b\u3092\u3069\u306e\u3088\u3046\u306b\u5224\u65ad\u3059\u308b\u304b\uff1f
  2. \u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u554f\u984c\u3092\u89e3\u6c7a\u3059\u308b\u5b8c\u5168\u306a\u30b9\u30c6\u30c3\u30d7\u306f\u4f55\u304b\uff1f
"},{"location":"chapter_dynamic_programming/dp_solution_pipeline/#1431","title":"14.3.1 \u00a0 \u554f\u984c\u306e\u5224\u5b9a","text":"

\u4e00\u822c\u7684\u306b\u8a00\u3048\u3070\u3001\u554f\u984c\u304c\u91cd\u8907\u3059\u308b\u90e8\u5206\u554f\u984c\u3001\u6700\u9069\u90e8\u5206\u69cb\u9020\u3092\u542b\u307f\u3001\u7121\u8a18\u61b6\u6027\u3092\u793a\u3059\u5834\u5408\u3001\u901a\u5e38\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u89e3\u6cd5\u306b\u9069\u3057\u3066\u3044\u307e\u3059\u3002\u3057\u304b\u3057\u3001\u554f\u984c\u306e\u8aac\u660e\u304b\u3089\u76f4\u63a5\u3053\u308c\u3089\u306e\u7279\u5fb4\u3092\u62bd\u51fa\u3059\u308b\u3053\u3068\u306f\u3057\u3070\u3057\u3070\u56f0\u96e3\u3067\u3059\u3002\u3057\u305f\u304c\u3063\u3066\u3001\u901a\u5e38\u306f\u6761\u4ef6\u3092\u7de9\u548c\u3057\u3001**\u307e\u305a\u554f\u984c\u304c\u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\uff08\u5168\u63a2\u7d22\uff09\u3092\u4f7f\u7528\u3057\u305f\u89e3\u6c7a\u306b\u9069\u3057\u3066\u3044\u308b\u304b\u3069\u3046\u304b\u3092\u89b3\u5bdf**\u3057\u307e\u3059\u3002

**\u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u306b\u9069\u3057\u305f\u554f\u984c\u306f\u901a\u5e38\u300c\u6c7a\u5b9a\u6728\u30e2\u30c7\u30eb\u300d\u306b\u9069\u5408**\u3057\u3001\u3053\u308c\u306f\u6728\u69cb\u9020\u3092\u4f7f\u7528\u3057\u3066\u8a18\u8ff0\u3067\u304d\u3001\u5404\u30ce\u30fc\u30c9\u306f\u6c7a\u5b9a\u3092\u8868\u3057\u3001\u5404\u30d1\u30b9\u306f\u6c7a\u5b9a\u306e\u30b7\u30fc\u30b1\u30f3\u30b9\u3092\u8868\u3057\u307e\u3059\u3002

\u8a00\u3044\u63db\u3048\u308b\u3068\u3001\u554f\u984c\u304c\u660e\u793a\u7684\u306a\u6c7a\u5b9a\u6982\u5ff5\u3092\u542b\u307f\u3001\u89e3\u304c\u4e00\u9023\u306e\u6c7a\u5b9a\u3092\u901a\u3058\u3066\u751f\u6210\u3055\u308c\u308b\u5834\u5408\u3001\u305d\u308c\u306f\u6c7a\u5b9a\u6728\u30e2\u30c7\u30eb\u306b\u9069\u5408\u3057\u3001\u901a\u5e38\u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u3092\u4f7f\u7528\u3057\u3066\u89e3\u6c7a\u3067\u304d\u307e\u3059\u3002

\u3053\u306e\u57fa\u790e\u306e\u4e0a\u3067\u3001\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u554f\u984c\u3092\u5224\u5b9a\u3059\u308b\u305f\u3081\u306e\u300c\u30dc\u30fc\u30ca\u30b9\u30dd\u30a4\u30f3\u30c8\u300d\u304c\u3042\u308a\u307e\u3059\u3002

\u5bfe\u5fdc\u3057\u3066\u3001\u300c\u30da\u30ca\u30eb\u30c6\u30a3\u30dd\u30a4\u30f3\u30c8\u300d\u3082\u3042\u308a\u307e\u3059\u3002

\u554f\u984c\u304c\u6c7a\u5b9a\u6728\u30e2\u30c7\u30eb\u306b\u9069\u5408\u3057\u3001\u6bd4\u8f03\u7684\u660e\u3089\u304b\u306a\u300c\u30dc\u30fc\u30ca\u30b9\u30dd\u30a4\u30f3\u30c8\u300d\u3092\u6301\u3064\u5834\u5408\u3001\u305d\u308c\u304c\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u554f\u984c\u3067\u3042\u308b\u3068\u4eee\u5b9a\u3057\u3001\u89e3\u6c7a\u30d7\u30ed\u30bb\u30b9\u4e2d\u306b\u691c\u8a3c\u3067\u304d\u307e\u3059\u3002

"},{"location":"chapter_dynamic_programming/dp_solution_pipeline/#1432","title":"14.3.2 \u00a0 \u554f\u984c\u89e3\u6c7a\u30b9\u30c6\u30c3\u30d7","text":"

\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u554f\u984c\u89e3\u6c7a\u30d7\u30ed\u30bb\u30b9\u306f\u554f\u984c\u306e\u6027\u8cea\u3068\u96e3\u6613\u5ea6\u306b\u3088\u3063\u3066\u7570\u306a\u308a\u307e\u3059\u304c\u3001\u4e00\u822c\u7684\u306b\u6b21\u306e\u30b9\u30c6\u30c3\u30d7\u306b\u5f93\u3044\u307e\u3059\uff1a\u6c7a\u5b9a\u306e\u8a18\u8ff0\u3001\u72b6\u614b\u306e\u5b9a\u7fa9\u3001\\(dp\\) \u30c6\u30fc\u30d6\u30eb\u306e\u78ba\u7acb\u3001\u72b6\u614b\u9077\u79fb\u65b9\u7a0b\u5f0f\u306e\u5c0e\u51fa\u3001\u5883\u754c\u6761\u4ef6\u306e\u6c7a\u5b9a\u306a\u3069\u3002

\u554f\u984c\u89e3\u6c7a\u30b9\u30c6\u30c3\u30d7\u3092\u3088\u308a\u5177\u4f53\u7684\u306b\u8aac\u660e\u3059\u308b\u305f\u3081\u306b\u3001\u53e4\u5178\u7684\u306a\u554f\u984c\u300c\u6700\u5c0f\u7d4c\u8def\u548c\u300d\u3092\u4f8b\u3068\u3057\u3066\u4f7f\u7528\u3057\u307e\u3059\u3002

Question

\\(n \\times m\\) \u306e\u4e8c\u6b21\u5143\u30b0\u30ea\u30c3\u30c9 grid \u304c\u4e0e\u3048\u3089\u308c\u3001\u30b0\u30ea\u30c3\u30c9\u306e\u5404\u30bb\u30eb\u306b\u306f\u8ca0\u3067\u306a\u3044\u6574\u6570\u304c\u542b\u307e\u308c\u3001\u305d\u306e\u30bb\u30eb\u306e\u30b3\u30b9\u30c8\u3092\u8868\u3057\u307e\u3059\u3002\u30ed\u30dc\u30c3\u30c8\u306f\u5de6\u4e0a\u306e\u30bb\u30eb\u304b\u3089\u59cb\u307e\u308a\u3001\u5404\u30b9\u30c6\u30c3\u30d7\u3067\u4e0b\u307e\u305f\u306f\u53f3\u306b\u306e\u307f\u79fb\u52d5\u3067\u304d\u3001\u53f3\u4e0b\u306e\u30bb\u30eb\u306b\u5230\u9054\u3059\u308b\u307e\u3067\u7d9a\u3051\u307e\u3059\u3002\u5de6\u4e0a\u304b\u3089\u53f3\u4e0b\u3078\u306e\u6700\u5c0f\u7d4c\u8def\u548c\u3092\u8fd4\u3057\u3066\u304f\u3060\u3055\u3044\u3002

\u4e0b\u306e\u56f3\u306f\u4f8b\u3092\u793a\u3057\u3066\u304a\u308a\u3001\u4e0e\u3048\u3089\u308c\u305f\u30b0\u30ea\u30c3\u30c9\u306e\u6700\u5c0f\u7d4c\u8def\u548c\u306f \\(13\\) \u3067\u3059\u3002

\u56f3 14-10 \u00a0 \u6700\u5c0f\u7d4c\u8def\u548c\u306e\u4f8b\u30c7\u30fc\u30bf

\u7b2c1\u30b9\u30c6\u30c3\u30d7\uff1a\u5404\u30e9\u30a6\u30f3\u30c9\u306e\u6c7a\u5b9a\u3092\u8003\u3048\u3001\u72b6\u614b\u3092\u5b9a\u7fa9\u3057\u3001\u305d\u308c\u306b\u3088\u308a \\(dp\\) \u30c6\u30fc\u30d6\u30eb\u3092\u5f97\u308b

\u3053\u306e\u554f\u984c\u306e\u5404\u30e9\u30a6\u30f3\u30c9\u306e\u6c7a\u5b9a\u306f\u3001\u73fe\u5728\u306e\u30bb\u30eb\u304b\u3089\u4e0b\u307e\u305f\u306f\u53f3\u306b1\u30b9\u30c6\u30c3\u30d7\u79fb\u52d5\u3059\u308b\u3053\u3068\u3067\u3059\u3002\u73fe\u5728\u306e\u30bb\u30eb\u306e\u884c\u3068\u5217\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u304c \\([i, j]\\) \u3067\u3042\u308b\u3068\u4eee\u5b9a\u3059\u308b\u3068\u3001\u4e0b\u307e\u305f\u306f\u53f3\u306b\u79fb\u52d5\u3057\u305f\u5f8c\u3001\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306f \\([i+1, j]\\) \u307e\u305f\u306f \\([i, j+1]\\) \u306b\u306a\u308a\u307e\u3059\u3002\u3057\u305f\u304c\u3063\u3066\u3001\u72b6\u614b\u306b\u306f2\u3064\u306e\u5909\u6570\u304c\u542b\u307e\u308c\u308b\u3079\u304d\u3067\u3059\uff1a\u884c\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3068\u5217\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3001\\([i, j]\\) \u3068\u8868\u8a18\u3055\u308c\u307e\u3059\u3002

\u72b6\u614b \\([i, j]\\) \u306f\u90e8\u5206\u554f\u984c\u306b\u5bfe\u5fdc\u3057\u307e\u3059\uff1a\u958b\u59cb\u70b9 \\([0, 0]\\) \u304b\u3089 \\([i, j]\\) \u3078\u306e\u6700\u5c0f\u7d4c\u8def\u548c\u3001\\(dp[i, j]\\) \u3068\u8868\u8a18\u3055\u308c\u307e\u3059\u3002

\u3053\u306e\u3088\u3046\u306b\u3057\u3066\u3001\u4e0b\u306e\u56f3\u306b\u793a\u3059\u4e8c\u6b21\u5143 \\(dp\\) \u884c\u5217\u3092\u5f97\u307e\u3059\u3002\u305d\u306e\u30b5\u30a4\u30ba\u306f\u5165\u529b\u30b0\u30ea\u30c3\u30c9 \\(grid\\) \u3068\u540c\u3058\u3067\u3059\u3002

\u56f3 14-11 \u00a0 \u72b6\u614b\u5b9a\u7fa9\u3068DP\u30c6\u30fc\u30d6\u30eb

Note

\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u3068\u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u306f\u6c7a\u5b9a\u306e\u30b7\u30fc\u30b1\u30f3\u30b9\u3068\u3057\u3066\u8a18\u8ff0\u3067\u304d\u3001\u72b6\u614b\u306f\u3059\u3079\u3066\u306e\u6c7a\u5b9a\u5909\u6570\u304b\u3089\u69cb\u6210\u3055\u308c\u307e\u3059\u3002\u554f\u984c\u89e3\u6c7a\u306e\u9032\u884c\u3092\u8a18\u8ff0\u3059\u308b\u3059\u3079\u3066\u306e\u5909\u6570\u3092\u542b\u3080\u3079\u304d\u3067\u3001\u6b21\u306e\u72b6\u614b\u3092\u5c0e\u51fa\u3059\u308b\u306e\u306b\u5341\u5206\u306a\u60c5\u5831\u3092\u542b\u3093\u3067\u3044\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

\u5404\u72b6\u614b\u306f\u90e8\u5206\u554f\u984c\u306b\u5bfe\u5fdc\u3057\u3001\u3059\u3079\u3066\u306e\u90e8\u5206\u554f\u984c\u306e\u89e3\u3092\u4fdd\u5b58\u3059\u308b\u305f\u3081\u306e \\(dp\\) \u30c6\u30fc\u30d6\u30eb\u3092\u5b9a\u7fa9\u3057\u307e\u3059\u3002\u72b6\u614b\u306e\u5404\u72ec\u7acb\u5909\u6570\u306f \\(dp\\) \u30c6\u30fc\u30d6\u30eb\u306e\u6b21\u5143\u3067\u3059\u3002\u672c\u8cea\u7684\u306b\u3001\\(dp\\) \u30c6\u30fc\u30d6\u30eb\u306f\u72b6\u614b\u3068\u90e8\u5206\u554f\u984c\u306e\u89e3\u306e\u9593\u306e\u30de\u30c3\u30d4\u30f3\u30b0\u3067\u3059\u3002

\u7b2c2\u30b9\u30c6\u30c3\u30d7\uff1a\u6700\u9069\u90e8\u5206\u69cb\u9020\u3092\u7279\u5b9a\u3057\u3001\u72b6\u614b\u9077\u79fb\u65b9\u7a0b\u5f0f\u3092\u5c0e\u51fa\u3059\u308b

\u72b6\u614b \\([i, j]\\) \u306b\u3064\u3044\u3066\u3001\u305d\u308c\u306f\u4e0a\u306e\u30bb\u30eb \\([i-1, j]\\) \u307e\u305f\u306f\u5de6\u306e\u30bb\u30eb \\([i, j-1]\\) \u304b\u3089\u306e\u307f\u5c0e\u51fa\u3067\u304d\u307e\u3059\u3002\u3057\u305f\u304c\u3063\u3066\u3001\u6700\u9069\u90e8\u5206\u69cb\u9020\u306f\uff1a\\([i, j]\\) \u306b\u5230\u9054\u3059\u308b\u6700\u5c0f\u7d4c\u8def\u548c\u306f\u3001\\([i, j-1]\\) \u3068 \\([i-1, j]\\) \u306e\u6700\u5c0f\u7d4c\u8def\u548c\u306e\u5c0f\u3055\u3044\u65b9\u306b\u3088\u3063\u3066\u6c7a\u5b9a\u3055\u308c\u307e\u3059\u3002

\u4e0a\u8a18\u306e\u5206\u6790\u306b\u57fa\u3065\u3044\u3066\u3001\u4e0b\u306e\u56f3\u306b\u793a\u3059\u72b6\u614b\u9077\u79fb\u65b9\u7a0b\u5f0f\u3092\u5c0e\u51fa\u3067\u304d\u307e\u3059\uff1a

\\[ dp[i, j] = \\min(dp[i-1, j], dp[i, j-1]) + grid[i, j] \\]

\u56f3 14-12 \u00a0 \u6700\u9069\u90e8\u5206\u69cb\u9020\u3068\u72b6\u614b\u9077\u79fb\u65b9\u7a0b\u5f0f

Note

\u5b9a\u7fa9\u3055\u308c\u305f \\(dp\\) \u30c6\u30fc\u30d6\u30eb\u306b\u57fa\u3065\u3044\u3066\u3001\u5143\u306e\u554f\u984c\u3068\u90e8\u5206\u554f\u984c\u306e\u95a2\u4fc2\u3092\u8003\u3048\u3001\u90e8\u5206\u554f\u984c\u306e\u6700\u9069\u89e3\u304b\u3089\u5143\u306e\u554f\u984c\u306e\u6700\u9069\u89e3\u3092\u3069\u306e\u3088\u3046\u306b\u69cb\u7bc9\u3059\u308b\u304b\u3001\u3064\u307e\u308a\u6700\u9069\u90e8\u5206\u69cb\u9020\u3092\u898b\u3064\u3051\u307e\u3059\u3002

\u6700\u9069\u90e8\u5206\u69cb\u9020\u3092\u7279\u5b9a\u3057\u305f\u3089\u3001\u305d\u308c\u3092\u4f7f\u7528\u3057\u3066\u72b6\u614b\u9077\u79fb\u65b9\u7a0b\u5f0f\u3092\u69cb\u7bc9\u3067\u304d\u307e\u3059\u3002

\u7b2c3\u30b9\u30c6\u30c3\u30d7\uff1a\u5883\u754c\u6761\u4ef6\u3068\u72b6\u614b\u9077\u79fb\u9806\u5e8f\u3092\u6c7a\u5b9a\u3059\u308b

\u3053\u306e\u554f\u984c\u3067\u306f\u3001\u6700\u521d\u306e\u884c\u306e\u72b6\u614b\u306f\u5de6\u306e\u72b6\u614b\u304b\u3089\u306e\u307f\u6765\u308b\u3053\u3068\u304c\u3067\u304d\u3001\u6700\u521d\u306e\u5217\u306e\u72b6\u614b\u306f\u4e0a\u306e\u72b6\u614b\u304b\u3089\u306e\u307f\u6765\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u305f\u3081\u3001\u6700\u521d\u306e\u884c \\(i = 0\\) \u3068\u6700\u521d\u306e\u5217 \\(j = 0\\) \u304c\u5883\u754c\u6761\u4ef6\u3067\u3059\u3002

\u4e0b\u306e\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u5404\u30bb\u30eb\u306f\u5de6\u306e\u30bb\u30eb\u3068\u4e0a\u306e\u30bb\u30eb\u304b\u3089\u5c0e\u51fa\u3055\u308c\u308b\u305f\u3081\u3001\u30eb\u30fc\u30d7\u3092\u4f7f\u7528\u3057\u3066\u884c\u5217\u3092\u8d70\u67fb\u3057\u3001\u5916\u5074\u306e\u30eb\u30fc\u30d7\u306f\u884c\u3092\u53cd\u5fa9\u3057\u3001\u5185\u5074\u306e\u30eb\u30fc\u30d7\u306f\u5217\u3092\u53cd\u5fa9\u3057\u307e\u3059\u3002

\u56f3 14-13 \u00a0 \u5883\u754c\u6761\u4ef6\u3068\u72b6\u614b\u9077\u79fb\u9806\u5e8f

Note

\u5883\u754c\u6761\u4ef6\u306f\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u3067 \\(dp\\) \u30c6\u30fc\u30d6\u30eb\u3092\u521d\u671f\u5316\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u3001\u63a2\u7d22\u3067\u306f\u679d\u5208\u308a\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002

\u72b6\u614b\u9077\u79fb\u9806\u5e8f\u306e\u6838\u5fc3\u306f\u3001\u73fe\u5728\u306e\u554f\u984c\u306e\u89e3\u3092\u8a08\u7b97\u3059\u308b\u3068\u304d\u3001\u305d\u308c\u304c\u4f9d\u5b58\u3059\u308b\u3059\u3079\u3066\u306e\u5c0f\u3055\u306a\u90e8\u5206\u554f\u984c\u304c\u65e2\u306b\u6b63\u3057\u304f\u8a08\u7b97\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u4fdd\u3059\u308b\u3053\u3068\u3067\u3059\u3002

\u4e0a\u8a18\u306e\u5206\u6790\u306b\u57fa\u3065\u3044\u3066\u3001\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u30b3\u30fc\u30c9\u3092\u76f4\u63a5\u66f8\u304f\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u3057\u304b\u3057\u3001\u90e8\u5206\u554f\u984c\u306e\u5206\u89e3\u306f\u30c8\u30c3\u30d7\u30c0\u30a6\u30f3\u30a2\u30d7\u30ed\u30fc\u30c1\u3067\u3042\u308b\u305f\u3081\u3001\u300c\u529b\u4efb\u305b\u63a2\u7d22 \u2192 \u30e1\u30e2\u5316\u63a2\u7d22 \u2192 \u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u300d\u306e\u9806\u5e8f\u3067\u5b9f\u88c5\u3059\u308b\u3053\u3068\u304c\u7fd2\u6163\u7684\u306a\u601d\u8003\u306b\u3088\u308a\u9069\u5408\u3057\u307e\u3059\u3002

"},{"location":"chapter_dynamic_programming/dp_solution_pipeline/#1-1","title":"1. \u00a0 \u65b9\u6cd51\uff1a\u529b\u4efb\u305b\u63a2\u7d22","text":"

\u72b6\u614b \\([i, j]\\) \u304b\u3089\u63a2\u7d22\u3092\u958b\u59cb\u3057\u3001\u305d\u308c\u3092\u5e38\u306b\u3088\u308a\u5c0f\u3055\u306a\u72b6\u614b \\([i-1, j]\\) \u3068 \\([i, j-1]\\) \u306b\u5206\u89e3\u3057\u307e\u3059\u3002\u518d\u5e30\u95a2\u6570\u306b\u306f\u4ee5\u4e0b\u306e\u8981\u7d20\u304c\u542b\u307e\u308c\u307e\u3059\u3002

\u5b9f\u88c5\u30b3\u30fc\u30c9\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby min_path_sum.py
def min_path_sum_dfs(grid: list[list[int]], i: int, j: int) -> int:\n    \"\"\"\u6700\u5c0f\u30d1\u30b9\u548c\uff1a\u30d6\u30eb\u30fc\u30c8\u30d5\u30a9\u30fc\u30b9\u63a2\u7d22\"\"\"\n    # \u5de6\u4e0a\u306e\u30bb\u30eb\u306e\u5834\u5408\u3001\u63a2\u7d22\u3092\u7d42\u4e86\n    if i == 0 and j == 0:\n        return grid[0][0]\n    # \u884c\u307e\u305f\u306f\u5217\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u304c\u7bc4\u56f2\u5916\u306e\u5834\u5408\u3001+\u221e \u30b3\u30b9\u30c8\u3092\u8fd4\u3059\n    if i < 0 or j < 0:\n        return inf\n    # \u5de6\u4e0a\u304b\u3089 (i-1, j) \u3068 (i, j-1) \u3078\u306e\u6700\u5c0f\u30d1\u30b9\u30b3\u30b9\u30c8\u3092\u8a08\u7b97\n    up = min_path_sum_dfs(grid, i - 1, j)\n    left = min_path_sum_dfs(grid, i, j - 1)\n    # \u5de6\u4e0a\u304b\u3089 (i, j) \u3078\u306e\u6700\u5c0f\u30d1\u30b9\u30b3\u30b9\u30c8\u3092\u8fd4\u3059\n    return min(left, up) + grid[i][j]\n
min_path_sum.cpp
/* \u6700\u5c0f\u30d1\u30b9\u548c\uff1a\u30d6\u30eb\u30fc\u30c8\u30d5\u30a9\u30fc\u30b9\u63a2\u7d22 */\nint minPathSumDFS(vector<vector<int>> &grid, int i, int j) {\n    // \u5de6\u4e0a\u306e\u30bb\u30eb\u306e\u5834\u5408\u3001\u63a2\u7d22\u3092\u7d42\u4e86\n    if (i == 0 && j == 0) {\n        return grid[0][0];\n    }\n    // \u884c\u307e\u305f\u306f\u5217\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u304c\u7bc4\u56f2\u5916\u306e\u5834\u5408\u3001+\u221e \u306e\u30b3\u30b9\u30c8\u3092\u8fd4\u3059\n    if (i < 0 || j < 0) {\n        return INT_MAX;\n    }\n    // \u5de6\u4e0a\u304b\u3089 (i-1, j) \u3068 (i, j-1) \u3078\u306e\u6700\u5c0f\u30d1\u30b9\u30b3\u30b9\u30c8\u3092\u8a08\u7b97\n    int up = minPathSumDFS(grid, i - 1, j);\n    int left = minPathSumDFS(grid, i, j - 1);\n    // \u5de6\u4e0a\u304b\u3089 (i, j) \u3078\u306e\u6700\u5c0f\u30d1\u30b9\u30b3\u30b9\u30c8\u3092\u8fd4\u3059\n    return min(left, up) + grid[i][j];\n}\n
min_path_sum.java
/* \u6700\u5c0f\u30d1\u30b9\u548c\uff1a\u30d6\u30eb\u30fc\u30c8\u30d5\u30a9\u30fc\u30b9\u63a2\u7d22 */\nint minPathSumDFS(int[][] grid, int i, int j) {\n    // \u5de6\u4e0a\u306e\u30bb\u30eb\u306e\u5834\u5408\u3001\u63a2\u7d22\u3092\u7d42\u4e86\n    if (i == 0 && j == 0) {\n        return grid[0][0];\n    }\n    // \u884c\u307e\u305f\u306f\u5217\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u304c\u7bc4\u56f2\u5916\u306e\u5834\u5408\u3001+\u221e \u306e\u30b3\u30b9\u30c8\u3092\u8fd4\u3059\n    if (i < 0 || j < 0) {\n        return Integer.MAX_VALUE;\n    }\n    // \u5de6\u4e0a\u304b\u3089 (i-1, j) \u3068 (i, j-1) \u3078\u306e\u6700\u5c0f\u30d1\u30b9\u30b3\u30b9\u30c8\u3092\u8a08\u7b97\n    int up = minPathSumDFS(grid, i - 1, j);\n    int left = minPathSumDFS(grid, i, j - 1);\n    // \u5de6\u4e0a\u304b\u3089 (i, j) \u3078\u306e\u6700\u5c0f\u30d1\u30b9\u30b3\u30b9\u30c8\u3092\u8fd4\u3059\n    return Math.min(left, up) + grid[i][j];\n}\n
min_path_sum.cs
[class]{min_path_sum}-[func]{MinPathSumDFS}\n
min_path_sum.go
[class]{}-[func]{minPathSumDFS}\n
min_path_sum.swift
[class]{}-[func]{minPathSumDFS}\n
min_path_sum.js
[class]{}-[func]{minPathSumDFS}\n
min_path_sum.ts
[class]{}-[func]{minPathSumDFS}\n
min_path_sum.dart
[class]{}-[func]{minPathSumDFS}\n
min_path_sum.rs
[class]{}-[func]{min_path_sum_dfs}\n
min_path_sum.c
[class]{}-[func]{minPathSumDFS}\n
min_path_sum.kt
[class]{}-[func]{minPathSumDFS}\n
min_path_sum.rb
[class]{}-[func]{min_path_sum_dfs}\n

\u4e0b\u306e\u56f3\u306f \\(dp[2, 1]\\) \u3092\u6839\u3068\u3059\u308b\u518d\u5e30\u6728\u3092\u793a\u3057\u3066\u304a\u308a\u3001\u3044\u304f\u3064\u304b\u306e\u91cd\u8907\u3059\u308b\u90e8\u5206\u554f\u984c\u3092\u542b\u307f\u3001\u305d\u306e\u6570\u306f\u30b0\u30ea\u30c3\u30c9 grid \u306e\u30b5\u30a4\u30ba\u304c\u5897\u52a0\u3059\u308b\u3068\u6025\u6fc0\u306b\u5897\u52a0\u3057\u307e\u3059\u3002

\u672c\u8cea\u7684\u306b\u3001\u91cd\u8907\u3059\u308b\u90e8\u5206\u554f\u984c\u306e\u7406\u7531\u306f\uff1a**\u5de6\u4e0a\u9685\u304b\u3089\u7279\u5b9a\u306e\u30bb\u30eb\u306b\u5230\u9054\u3059\u308b\u8907\u6570\u306e\u30d1\u30b9\u304c\u5b58\u5728\u3059\u308b**\u3053\u3068\u3067\u3059\u3002

\u56f3 14-14 \u00a0 \u529b\u4efb\u305b\u63a2\u7d22\u306e\u518d\u5e30\u6728

\u5404\u72b6\u614b\u306b\u306f\u4e0b\u3068\u53f3\u306e2\u3064\u306e\u9078\u629e\u304c\u3042\u308b\u305f\u3081\u3001\u5de6\u4e0a\u9685\u304b\u3089\u53f3\u4e0b\u9685\u307e\u3067\u306e\u7dcf\u30b9\u30c6\u30c3\u30d7\u6570\u306f \\(m + n - 2\\) \u3067\u3001\u6700\u60aa\u6642\u9593\u8a08\u7b97\u91cf\u306f \\(O(2^{m + n})\\) \u3067\u3059\u3002\u3053\u306e\u8a08\u7b97\u65b9\u6cd5\u306f\u30b0\u30ea\u30c3\u30c9\u30a8\u30c3\u30b8\u8fd1\u304f\u306e\u72b6\u6cc1\u3092\u8003\u616e\u3057\u3066\u3044\u306a\u3044\u3053\u3068\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u30a8\u30c3\u30b8\u306b\u5230\u9054\u3057\u305f\u3068\u304d\u3001\u9078\u629e\u80a2\u304c1\u3064\u3057\u304b\u6b8b\u3089\u306a\u3044\u305f\u3081\u3001\u5b9f\u969b\u306e\u30d1\u30b9\u6570\u306f\u3088\u308a\u5c11\u306a\u304f\u306a\u308a\u307e\u3059\u3002

"},{"location":"chapter_dynamic_programming/dp_solution_pipeline/#2-2","title":"2. \u00a0 \u65b9\u6cd52\uff1a\u30e1\u30e2\u5316\u63a2\u7d22","text":"

\u30b0\u30ea\u30c3\u30c9 grid \u3068\u540c\u3058\u30b5\u30a4\u30ba\u306e\u30e1\u30e2\u30ea\u30b9\u30c8 mem \u3092\u5c0e\u5165\u3057\u3001\u69d8\u3005\u306a\u90e8\u5206\u554f\u984c\u306e\u89e3\u3092\u8a18\u9332\u3057\u3001\u91cd\u8907\u3059\u308b\u90e8\u5206\u554f\u984c\u3092\u679d\u5208\u308a\u3057\u307e\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby min_path_sum.py
def min_path_sum_dfs_mem(\n    grid: list[list[int]], mem: list[list[int]], i: int, j: int\n) -> int:\n    \"\"\"\u6700\u5c0f\u30d1\u30b9\u548c\uff1a\u8a18\u61b6\u5316\u63a2\u7d22\"\"\"\n    # \u5de6\u4e0a\u306e\u30bb\u30eb\u306e\u5834\u5408\u3001\u63a2\u7d22\u3092\u7d42\u4e86\n    if i == 0 and j == 0:\n        return grid[0][0]\n    # \u884c\u307e\u305f\u306f\u5217\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u304c\u7bc4\u56f2\u5916\u306e\u5834\u5408\u3001+\u221e \u30b3\u30b9\u30c8\u3092\u8fd4\u3059\n    if i < 0 or j < 0:\n        return inf\n    # \u8a18\u9332\u304c\u3042\u308b\u5834\u5408\u3001\u305d\u308c\u3092\u8fd4\u3059\n    if mem[i][j] != -1:\n        return mem[i][j]\n    # \u5de6\u3068\u4e0a\u306e\u30bb\u30eb\u304b\u3089\u306e\u6700\u5c0f\u30d1\u30b9\u30b3\u30b9\u30c8\n    up = min_path_sum_dfs_mem(grid, mem, i - 1, j)\n    left = min_path_sum_dfs_mem(grid, mem, i, j - 1)\n    # \u5de6\u4e0a\u304b\u3089 (i, j) \u3078\u306e\u6700\u5c0f\u30d1\u30b9\u30b3\u30b9\u30c8\u3092\u8a18\u9332\u3057\u3066\u8fd4\u3059\n    mem[i][j] = min(left, up) + grid[i][j]\n    return mem[i][j]\n
min_path_sum.cpp
[class]{}-[func]{minPathSumDFSMem}\n
min_path_sum.java
/* \u6700\u5c0f\u30d1\u30b9\u548c\uff1a\u30e1\u30e2\u5316\u63a2\u7d22 */\nint minPathSumDFSMem(int[][] grid, int[][] mem, int i, int j) {\n    // \u5de6\u4e0a\u306e\u30bb\u30eb\u306e\u5834\u5408\u3001\u63a2\u7d22\u3092\u7d42\u4e86\n    if (i == 0 && j == 0) {\n        return grid[0][0];\n    }\n    // \u884c\u307e\u305f\u306f\u5217\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u304c\u7bc4\u56f2\u5916\u306e\u5834\u5408\u3001+\u221e \u306e\u30b3\u30b9\u30c8\u3092\u8fd4\u3059\n    if (i < 0 || j < 0) {\n        return Integer.MAX_VALUE;\n    }\n    // \u8a18\u9332\u304c\u3042\u308b\u5834\u5408\u3001\u305d\u308c\u3092\u8fd4\u3059\n    if (mem[i][j] != -1) {\n        return mem[i][j];\n    }\n    // \u5de6\u3068\u4e0a\u306e\u30bb\u30eb\u304b\u3089\u306e\u6700\u5c0f\u30d1\u30b9\u30b3\u30b9\u30c8\n    int up = minPathSumDFSMem(grid, mem, i - 1, j);\n    int left = minPathSumDFSMem(grid, mem, i, j - 1);\n    // \u5de6\u4e0a\u304b\u3089 (i, j) \u3078\u306e\u6700\u5c0f\u30d1\u30b9\u30b3\u30b9\u30c8\u3092\u8a18\u9332\u3057\u3066\u8fd4\u3059\n    mem[i][j] = Math.min(left, up) + grid[i][j];\n    return mem[i][j];\n}\n
min_path_sum.cs
[class]{min_path_sum}-[func]{MinPathSumDFSMem}\n
min_path_sum.go
[class]{}-[func]{minPathSumDFSMem}\n
min_path_sum.swift
[class]{}-[func]{minPathSumDFSMem}\n
min_path_sum.js
[class]{}-[func]{minPathSumDFSMem}\n
min_path_sum.ts
[class]{}-[func]{minPathSumDFSMem}\n
min_path_sum.dart
[class]{}-[func]{minPathSumDFSMem}\n
min_path_sum.rs
[class]{}-[func]{min_path_sum_dfs_mem}\n
min_path_sum.c
[class]{}-[func]{minPathSumDFSMem}\n
min_path_sum.kt
[class]{}-[func]{minPathSumDFSMem}\n
min_path_sum.rb
[class]{}-[func]{min_path_sum_dfs_mem}\n

\u4e0b\u306e\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u30e1\u30e2\u5316\u3092\u5c0e\u5165\u3057\u305f\u5f8c\u3001\u3059\u3079\u3066\u306e\u90e8\u5206\u554f\u984c\u306e\u89e3\u306f\u4e00\u5ea6\u3060\u3051\u8a08\u7b97\u3055\u308c\u308b\u5fc5\u8981\u304c\u3042\u308b\u305f\u3081\u3001\u6642\u9593\u8a08\u7b97\u91cf\u306f\u72b6\u614b\u306e\u7dcf\u6570\u3001\u3064\u307e\u308a\u30b0\u30ea\u30c3\u30c9\u30b5\u30a4\u30ba \\(O(nm)\\) \u306b\u4f9d\u5b58\u3057\u307e\u3059\u3002

\u56f3 14-15 \u00a0 \u30e1\u30e2\u5316\u63a2\u7d22\u306e\u518d\u5e30\u6728

"},{"location":"chapter_dynamic_programming/dp_solution_pipeline/#3-3","title":"3. \u00a0 \u65b9\u6cd53\uff1a\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0","text":"

\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u89e3\u6cd5\u3092\u53cd\u5fa9\u7684\u306b\u5b9f\u88c5\u3057\u307e\u3059\u3002\u30b3\u30fc\u30c9\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby min_path_sum.py
def min_path_sum_dp(grid: list[list[int]]) -> int:\n    \"\"\"\u6700\u5c0f\u30d1\u30b9\u548c\uff1a\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\"\"\"\n    n, m = len(grid), len(grid[0])\n    # dp \u30c6\u30fc\u30d6\u30eb\u3092\u521d\u671f\u5316\n    dp = [[0] * m for _ in range(n)]\n    dp[0][0] = grid[0][0]\n    # \u72b6\u614b\u9077\u79fb\uff1a\u6700\u521d\u306e\u884c\n    for j in range(1, m):\n        dp[0][j] = dp[0][j - 1] + grid[0][j]\n    # \u72b6\u614b\u9077\u79fb\uff1a\u6700\u521d\u306e\u5217\n    for i in range(1, n):\n        dp[i][0] = dp[i - 1][0] + grid[i][0]\n    # \u72b6\u614b\u9077\u79fb\uff1a\u6b8b\u308a\u306e\u884c\u3068\u5217\n    for i in range(1, n):\n        for j in range(1, m):\n            dp[i][j] = min(dp[i][j - 1], dp[i - 1][j]) + grid[i][j]\n    return dp[n - 1][m - 1]\n
min_path_sum.cpp
/* \u6700\u5c0f\u30d1\u30b9\u548c\uff1a\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0 */\nint minPathSumDP(vector<vector<int>> &grid) {\n    int n = grid.size(), m = grid[0].size();\n    // DP\u30c6\u30fc\u30d6\u30eb\u3092\u521d\u671f\u5316\n    vector<vector<int>> dp(n, vector<int>(m));\n    dp[0][0] = grid[0][0];\n    // \u72b6\u614b\u9077\u79fb\uff1a\u6700\u521d\u306e\u884c\n    for (int j = 1; j < m; j++) {\n        dp[0][j] = dp[0][j - 1] + grid[0][j];\n    }\n    // \u72b6\u614b\u9077\u79fb\uff1a\u6700\u521d\u306e\u5217\n    for (int i = 1; i < n; i++) {\n        dp[i][0] = dp[i - 1][0] + grid[i][0];\n    }\n    // \u72b6\u614b\u9077\u79fb\uff1a\u6b8b\u308a\u306e\u884c\u3068\u5217\n    for (int i = 1; i < n; i++) {\n        for (int j = 1; j < m; j++) {\n            dp[i][j] = min(dp[i][j - 1], dp[i - 1][j]) + grid[i][j];\n        }\n    }\n    return dp[n - 1][m - 1];\n}\n
min_path_sum.java
/* \u6700\u5c0f\u30d1\u30b9\u548c\uff1a\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0 */\nint minPathSumDP(int[][] grid) {\n    int n = grid.length, m = grid[0].length;\n    // DP\u30c6\u30fc\u30d6\u30eb\u3092\u521d\u671f\u5316\n    int[][] dp = new int[n][m];\n    dp[0][0] = grid[0][0];\n    // \u72b6\u614b\u9077\u79fb\uff1a\u6700\u521d\u306e\u884c\n    for (int j = 1; j < m; j++) {\n        dp[0][j] = dp[0][j - 1] + grid[0][j];\n    }\n    // \u72b6\u614b\u9077\u79fb\uff1a\u6700\u521d\u306e\u5217\n    for (int i = 1; i < n; i++) {\n        dp[i][0] = dp[i - 1][0] + grid[i][0];\n    }\n    // \u72b6\u614b\u9077\u79fb\uff1a\u6b8b\u308a\u306e\u884c\u3068\u5217\n    for (int i = 1; i < n; i++) {\n        for (int j = 1; j < m; j++) {\n            dp[i][j] = Math.min(dp[i][j - 1], dp[i - 1][j]) + grid[i][j];\n        }\n    }\n    return dp[n - 1][m - 1];\n}\n
min_path_sum.cs
[class]{min_path_sum}-[func]{MinPathSumDP}\n
min_path_sum.go
[class]{}-[func]{minPathSumDP}\n
min_path_sum.swift
[class]{}-[func]{minPathSumDP}\n
min_path_sum.js
[class]{}-[func]{minPathSumDP}\n
min_path_sum.ts
[class]{}-[func]{minPathSumDP}\n
min_path_sum.dart
[class]{}-[func]{minPathSumDP}\n
min_path_sum.rs
[class]{}-[func]{min_path_sum_dp}\n
min_path_sum.c
[class]{}-[func]{minPathSumDP}\n
min_path_sum.kt
[class]{}-[func]{minPathSumDP}\n
min_path_sum.rb
[class]{}-[func]{min_path_sum_dp}\n

\u4e0b\u306e\u56f3\u306f\u6700\u5c0f\u7d4c\u8def\u548c\u306e\u72b6\u614b\u9077\u79fb\u30d7\u30ed\u30bb\u30b9\u3092\u793a\u3057\u3001\u30b0\u30ea\u30c3\u30c9\u5168\u4f53\u3092\u8d70\u67fb\u3059\u308b\u305f\u3081\u3001\u6642\u9593\u8a08\u7b97\u91cf\u306f \\(O(nm)\\) \u3067\u3059\u3002

\u914d\u5217 dp \u306e\u30b5\u30a4\u30ba\u306f \\(n \\times m\\) \u3067\u3042\u308b\u305f\u3081\u3001\u7a7a\u9593\u8a08\u7b97\u91cf\u306f \\(O(nm)\\) \u3067\u3059\u3002

<1><2><3><4><5><6><7><8><9><10><11><12>

\u56f3 14-16 \u00a0 \u6700\u5c0f\u7d4c\u8def\u548c\u306e\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u30d7\u30ed\u30bb\u30b9

"},{"location":"chapter_dynamic_programming/dp_solution_pipeline/#4","title":"4. \u00a0 \u7a7a\u9593\u6700\u9069\u5316","text":"

\u5404\u30bb\u30eb\u306f\u5de6\u3068\u4e0a\u306e\u30bb\u30eb\u306e\u307f\u306b\u95a2\u9023\u3059\u308b\u305f\u3081\u3001\u5358\u4e00\u884c\u914d\u5217\u3092\u4f7f\u7528\u3057\u3066 \\(dp\\) \u30c6\u30fc\u30d6\u30eb\u3092\u5b9f\u88c5\u3067\u304d\u307e\u3059\u3002

\u914d\u5217 dp \u306f1\u884c\u306e\u72b6\u614b\u306e\u307f\u3092\u8868\u73fe\u3067\u304d\u308b\u305f\u3081\u3001\u6700\u521d\u306e\u5217\u306e\u72b6\u614b\u3092\u4e8b\u524d\u306b\u521d\u671f\u5316\u3067\u304d\u305a\u3001\u5404\u884c\u3092\u8d70\u67fb\u3059\u308b\u3068\u304d\u306b\u66f4\u65b0\u3059\u308b\u3053\u3068\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby min_path_sum.py
def min_path_sum_dp_comp(grid: list[list[int]]) -> int:\n    \"\"\"\u6700\u5c0f\u30d1\u30b9\u548c\uff1a\u7a7a\u9593\u6700\u9069\u5316\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\"\"\"\n    n, m = len(grid), len(grid[0])\n    # dp \u30c6\u30fc\u30d6\u30eb\u3092\u521d\u671f\u5316\n    dp = [0] * m\n    # \u72b6\u614b\u9077\u79fb\uff1a\u6700\u521d\u306e\u884c\n    dp[0] = grid[0][0]\n    for j in range(1, m):\n        dp[j] = dp[j - 1] + grid[0][j]\n    # \u72b6\u614b\u9077\u79fb\uff1a\u6b8b\u308a\u306e\u884c\n    for i in range(1, n):\n        # \u72b6\u614b\u9077\u79fb\uff1a\u6700\u521d\u306e\u5217\n        dp[0] = dp[0] + grid[i][0]\n        # \u72b6\u614b\u9077\u79fb\uff1a\u6b8b\u308a\u306e\u5217\n        for j in range(1, m):\n            dp[j] = min(dp[j - 1], dp[j]) + grid[i][j]\n    return dp[m - 1]\n
min_path_sum.cpp
[class]{}-[func]{minPathSumDPComp}\n
min_path_sum.java
/* \u6700\u5c0f\u30d1\u30b9\u548c\uff1a\u7a7a\u9593\u6700\u9069\u5316\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0 */\nint minPathSumDPComp(int[][] grid) {\n    int n = grid.length, m = grid[0].length;\n    // DP\u30c6\u30fc\u30d6\u30eb\u3092\u521d\u671f\u5316\n    int[] dp = new int[m];\n    // \u72b6\u614b\u9077\u79fb\uff1a\u6700\u521d\u306e\u884c\n    dp[0] = grid[0][0];\n    for (int j = 1; j < m; j++) {\n        dp[j] = dp[j - 1] + grid[0][j];\n    }\n    // \u72b6\u614b\u9077\u79fb\uff1a\u6b8b\u308a\u306e\u884c\n    for (int i = 1; i < n; i++) {\n        // \u72b6\u614b\u9077\u79fb\uff1a\u6700\u521d\u306e\u5217\n        dp[0] = dp[0] + grid[i][0];\n        // \u72b6\u614b\u9077\u79fb\uff1a\u6b8b\u308a\u306e\u5217\n        for (int j = 1; j < m; j++) {\n            dp[j] = Math.min(dp[j - 1], dp[j]) + grid[i][j];\n        }\n    }\n    return dp[m - 1];\n}\n
min_path_sum.cs
[class]{min_path_sum}-[func]{MinPathSumDPComp}\n
min_path_sum.go
[class]{}-[func]{minPathSumDPComp}\n
min_path_sum.swift
[class]{}-[func]{minPathSumDPComp}\n
min_path_sum.js
[class]{}-[func]{minPathSumDPComp}\n
min_path_sum.ts
[class]{}-[func]{minPathSumDPComp}\n
min_path_sum.dart
[class]{}-[func]{minPathSumDPComp}\n
min_path_sum.rs
[class]{}-[func]{min_path_sum_dp_comp}\n
min_path_sum.c
[class]{}-[func]{minPathSumDPComp}\n
min_path_sum.kt
[class]{}-[func]{minPathSumDPComp}\n
min_path_sum.rb
[class]{}-[func]{min_path_sum_dp_comp}\n
"},{"location":"chapter_dynamic_programming/edit_distance_problem/","title":"14.6 \u00a0 \u7de8\u96c6\u8ddd\u96e2\u554f\u984c","text":"

\u7de8\u96c6\u8ddd\u96e2\u306f\u3001\u30ec\u30fc\u30d9\u30f3\u30b7\u30e5\u30bf\u30a4\u30f3\u8ddd\u96e2\u3068\u3082\u547c\u3070\u308c\u3001\u4e00\u3064\u306e\u6587\u5b57\u5217\u3092\u5225\u306e\u6587\u5b57\u5217\u306b\u5909\u63db\u3059\u308b\u305f\u3081\u306b\u5fc5\u8981\u306a\u6700\u5c0f\u4fee\u6b63\u56de\u6570\u3092\u6307\u3057\u3001\u60c5\u5831\u691c\u7d22\u3084\u81ea\u7136\u8a00\u8a9e\u51e6\u7406\u30672\u3064\u306e\u30b7\u30fc\u30b1\u30f3\u30b9\u9593\u306e\u985e\u4f3c\u5ea6\u3092\u6e2c\u5b9a\u3059\u308b\u305f\u3081\u306b\u3088\u304f\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002

Question

2\u3064\u306e\u6587\u5b57\u5217 \\(s\\) \u3068 \\(t\\) \u304c\u4e0e\u3048\u3089\u308c\u305f\u3068\u304d\u3001\\(s\\) \u3092 \\(t\\) \u306b\u5909\u63db\u3059\u308b\u305f\u3081\u306b\u5fc5\u8981\u306a\u6700\u5c0f\u7de8\u96c6\u56de\u6570\u3092\u8fd4\u3057\u3066\u304f\u3060\u3055\u3044\u3002

\u6587\u5b57\u5217\u306b\u5bfe\u3057\u30663\u7a2e\u985e\u306e\u7de8\u96c6\u3092\u5b9f\u884c\u3067\u304d\u307e\u3059\uff1a\u6587\u5b57\u306e\u633f\u5165\u3001\u6587\u5b57\u306e\u524a\u9664\u3001\u307e\u305f\u306f\u6587\u5b57\u3092\u4ed6\u306e\u4efb\u610f\u306e\u6587\u5b57\u306b\u7f6e\u63db\u3002

\u4e0b\u306e\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001kitten \u3092 sitting \u306b\u5909\u63db\u3059\u308b\u306b\u306f3\u56de\u306e\u7de8\u96c6\u304c\u5fc5\u8981\u3067\u30012\u56de\u306e\u7f6e\u63db\u30681\u56de\u306e\u633f\u5165\u3092\u542b\u307f\u307e\u3059\u3002hello \u3092 algo \u306b\u5909\u63db\u3059\u308b\u306b\u306f3\u30b9\u30c6\u30c3\u30d7\u304c\u5fc5\u8981\u3067\u30012\u56de\u306e\u7f6e\u63db\u30681\u56de\u306e\u524a\u9664\u3092\u542b\u307f\u307e\u3059\u3002

\u56f3 14-27 \u00a0 \u7de8\u96c6\u8ddd\u96e2\u306e\u4f8b\u30c7\u30fc\u30bf

\u7de8\u96c6\u8ddd\u96e2\u554f\u984c\u306f\u6c7a\u5b9a\u6728\u30e2\u30c7\u30eb\u3067\u81ea\u7136\u306b\u8aac\u660e\u3067\u304d\u307e\u3059\u3002\u6587\u5b57\u5217\u306f\u6728\u306e\u30ce\u30fc\u30c9\u306b\u5bfe\u5fdc\u3057\u30011\u30e9\u30a6\u30f3\u30c9\u306e\u6c7a\u5b9a\uff08\u7de8\u96c6\u64cd\u4f5c\uff09\u306f\u6728\u306e\u30a8\u30c3\u30b8\u306b\u5bfe\u5fdc\u3057\u307e\u3059\u3002

\u4e0b\u306e\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u64cd\u4f5c\u306b\u5236\u9650\u304c\u306a\u3044\u5834\u5408\u3001\u5404\u30ce\u30fc\u30c9\u306f\u591a\u304f\u306e\u30a8\u30c3\u30b8\u3092\u5c0e\u51fa\u3067\u304d\u3001\u305d\u308c\u305e\u308c\u304c1\u3064\u306e\u64cd\u4f5c\u306b\u5bfe\u5fdc\u3059\u308b\u305f\u3081\u3001hello \u3092 algo \u306b\u5909\u63db\u3059\u308b\u53ef\u80fd\u306a\u7d4c\u8def\u306f\u591a\u6570\u3042\u308a\u307e\u3059\u3002

\u6c7a\u5b9a\u6728\u306e\u89b3\u70b9\u304b\u3089\u3001\u3053\u306e\u554f\u984c\u306e\u76ee\u6a19\u306f\u3001\u30ce\u30fc\u30c9 hello \u3068\u30ce\u30fc\u30c9 algo \u306e\u9593\u306e\u6700\u77ed\u7d4c\u8def\u3092\u898b\u3064\u3051\u308b\u3053\u3068\u3067\u3059\u3002

\u56f3 14-28 \u00a0 \u6c7a\u5b9a\u6728\u30e2\u30c7\u30eb\u306b\u57fa\u3065\u3044\u3066\u8868\u73fe\u3055\u308c\u305f\u7de8\u96c6\u8ddd\u96e2\u554f\u984c

"},{"location":"chapter_dynamic_programming/edit_distance_problem/#1","title":"1. \u00a0 \u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u30a2\u30d7\u30ed\u30fc\u30c1","text":"

\u30b9\u30c6\u30c3\u30d71\uff1a\u5404\u30e9\u30a6\u30f3\u30c9\u306e\u6c7a\u5b9a\u3092\u8003\u3048\u3001\u72b6\u614b\u3092\u5b9a\u7fa9\u3057\u3001\u305d\u308c\u306b\u3088\u308a \\(dp\\) \u30c6\u30fc\u30d6\u30eb\u3092\u5f97\u308b

\u5404\u30e9\u30a6\u30f3\u30c9\u306e\u6c7a\u5b9a\u306f\u3001\u6587\u5b57\u5217 \\(s\\) \u306b\u5bfe\u3057\u30661\u3064\u306e\u7de8\u96c6\u64cd\u4f5c\u3092\u5b9f\u884c\u3059\u308b\u3053\u3068\u3092\u542b\u307f\u307e\u3059\u3002

\u7de8\u96c6\u30d7\u30ed\u30bb\u30b9\u4e2d\u306b\u554f\u984c\u306e\u30b5\u30a4\u30ba\u3092\u6bb5\u968e\u7684\u306b\u7e2e\u5c0f\u3059\u308b\u3053\u3068\u3092\u76ee\u6307\u3057\u3001\u3053\u308c\u306b\u3088\u308a\u90e8\u5206\u554f\u984c\u3092\u69cb\u7bc9\u3067\u304d\u307e\u3059\u3002\u6587\u5b57\u5217 \\(s\\) \u3068 \\(t\\) \u306e\u9577\u3055\u3092\u305d\u308c\u305e\u308c \\(n\\) \u3068 \\(m\\) \u3068\u3057\u307e\u3059\u3002\u307e\u305a\u3001\u4e21\u65b9\u306e\u6587\u5b57\u5217\u306e\u672b\u5c3e\u6587\u5b57 \\(s[n-1]\\) \u3068 \\(t[m-1]\\) \u3092\u8003\u616e\u3057\u307e\u3059\u3002

\u3057\u305f\u304c\u3063\u3066\u3001\u6587\u5b57\u5217 \\(s\\) \u3067\u306e\u5404\u30e9\u30a6\u30f3\u30c9\u306e\u6c7a\u5b9a\uff08\u7de8\u96c6\u64cd\u4f5c\uff09\u306f\u3001\\(s\\) \u3068 \\(t\\) \u3067\u30de\u30c3\u30c1\u3055\u308c\u308b\u6b8b\u308a\u306e\u6587\u5b57\u3092\u5909\u66f4\u3057\u307e\u3059\u3002\u3057\u305f\u304c\u3063\u3066\u3001\u72b6\u614b\u306f \\(s\\) \u3068 \\(t\\) \u3067\u73fe\u5728\u8003\u616e\u3055\u308c\u3066\u3044\u308b \\(i\\) \u756a\u76ee\u3068 \\(j\\) \u756a\u76ee\u306e\u6587\u5b57\u3067\u3042\u308a\u3001\\([i, j]\\) \u3068\u8868\u8a18\u3055\u308c\u307e\u3059\u3002

\u72b6\u614b \\([i, j]\\) \u306f\u90e8\u5206\u554f\u984c\u306b\u5bfe\u5fdc\u3057\u307e\u3059\uff1a\\(s\\) \u306e\u6700\u521d\u306e \\(i\\) \u6587\u5b57\u3092 \\(t\\) \u306e\u6700\u521d\u306e \\(j\\) \u6587\u5b57\u306b\u5909\u66f4\u3059\u308b\u305f\u3081\u306b\u5fc5\u8981\u306a\u6700\u5c0f\u7de8\u96c6\u56de\u6570\u3002

\u3053\u308c\u304b\u3089\u3001\u30b5\u30a4\u30ba \\((i+1) \\times (j+1)\\) \u306e\u4e8c\u6b21\u5143 \\(dp\\) \u30c6\u30fc\u30d6\u30eb\u3092\u5f97\u307e\u3059\u3002

\u30b9\u30c6\u30c3\u30d72\uff1a\u6700\u9069\u90e8\u5206\u69cb\u9020\u3092\u7279\u5b9a\u3057\u3001\u72b6\u614b\u9077\u79fb\u65b9\u7a0b\u5f0f\u3092\u5c0e\u51fa\u3059\u308b

\u90e8\u5206\u554f\u984c \\(dp[i, j]\\) \u3092\u8003\u616e\u3059\u308b\u3068\u3001\u3053\u308c\u306b\u5bfe\u5fdc\u3059\u308b2\u3064\u306e\u6587\u5b57\u5217\u306e\u672b\u5c3e\u6587\u5b57\u306f \\(s[i-1]\\) \u3068 \\(t[j-1]\\) \u3067\u3042\u308a\u3001\u4e0b\u306e\u56f3\u306b\u793a\u3059\u3088\u3046\u306b3\u3064\u306e\u30b7\u30ca\u30ea\u30aa\u306b\u5206\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

  1. \\(s[i-1]\\) \u306e\u5f8c\u306b \\(t[j-1]\\) \u3092\u8ffd\u52a0\u3059\u308b\u3068\u3001\u6b8b\u308a\u306e\u90e8\u5206\u554f\u984c\u306f \\(dp[i, j-1]\\) \u3067\u3059\u3002
  2. \\(s[i-1]\\) \u3092\u524a\u9664\u3059\u308b\u3068\u3001\u6b8b\u308a\u306e\u90e8\u5206\u554f\u984c\u306f \\(dp[i-1, j]\\) \u3067\u3059\u3002
  3. \\(s[i-1]\\) \u3092 \\(t[j-1]\\) \u306b\u7f6e\u63db\u3059\u308b\u3068\u3001\u6b8b\u308a\u306e\u90e8\u5206\u554f\u984c\u306f \\(dp[i-1, j-1]\\) \u3067\u3059\u3002

\u56f3 14-29 \u00a0 \u7de8\u96c6\u8ddd\u96e2\u306e\u72b6\u614b\u9077\u79fb

\u4e0a\u8a18\u306e\u5206\u6790\u306b\u57fa\u3065\u3044\u3066\u3001\u6700\u9069\u90e8\u5206\u69cb\u9020\u3092\u6c7a\u5b9a\u3067\u304d\u307e\u3059\uff1a\\(dp[i, j]\\) \u306e\u6700\u5c0f\u7de8\u96c6\u56de\u6570\u306f\u3001\\(dp[i, j-1]\\)\u3001\\(dp[i-1, j]\\)\u3001\\(dp[i-1, j-1]\\) \u306e\u4e2d\u306e\u6700\u5c0f\u5024\u306b\u7de8\u96c6\u30b9\u30c6\u30c3\u30d7 \\(1\\) \u3092\u52a0\u3048\u305f\u3082\u306e\u3067\u3059\u3002\u5bfe\u5fdc\u3059\u308b\u72b6\u614b\u9077\u79fb\u65b9\u7a0b\u5f0f\u306f\uff1a

\\[ dp[i, j] = \\min(dp[i, j-1], dp[i-1, j], dp[i-1, j-1]) + 1 \\]

\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002\\(s[i-1]\\) \u3068 \\(t[j-1]\\) \u304c\u540c\u3058\u5834\u5408\u3001\u73fe\u5728\u306e\u6587\u5b57\u306b\u5bfe\u3057\u3066\u7de8\u96c6\u306f\u5fc5\u8981\u3042\u308a\u307e\u305b\u3093\u3002\u3053\u306e\u5834\u5408\u3001\u72b6\u614b\u9077\u79fb\u65b9\u7a0b\u5f0f\u306f\uff1a

\\[ dp[i, j] = dp[i-1, j-1] \\]

\u30b9\u30c6\u30c3\u30d73\uff1a\u5883\u754c\u6761\u4ef6\u3068\u72b6\u614b\u9077\u79fb\u306e\u9806\u5e8f\u3092\u6c7a\u5b9a\u3059\u308b

\u4e21\u65b9\u306e\u6587\u5b57\u5217\u304c\u7a7a\u306e\u5834\u5408\u3001\u7de8\u96c6\u56de\u6570\u306f \\(0\\) \u3067\u3059\u3002\u3064\u307e\u308a\u3001\\(dp[0, 0] = 0\\) \u3067\u3059\u3002\\(s\\) \u304c\u7a7a\u3067 \\(t\\) \u304c\u7a7a\u3067\u306a\u3044\u5834\u5408\u3001\u6700\u5c0f\u7de8\u96c6\u56de\u6570\u306f \\(t\\) \u306e\u9577\u3055\u306b\u7b49\u3057\u304f\u3001\u3064\u307e\u308a\u6700\u521d\u306e\u884c \\(dp[0, j] = j\\) \u3067\u3059\u3002\\(s\\) \u304c\u7a7a\u3067\u306a\u304f \\(t\\) \u304c\u7a7a\u306e\u5834\u5408\u3001\u6700\u5c0f\u7de8\u96c6\u56de\u6570\u306f \\(s\\) \u306e\u9577\u3055\u306b\u7b49\u3057\u304f\u3001\u3064\u307e\u308a\u6700\u521d\u306e\u5217 \\(dp[i, 0] = i\\) \u3067\u3059\u3002

\u72b6\u614b\u9077\u79fb\u65b9\u7a0b\u5f0f\u3092\u89b3\u5bdf\u3059\u308b\u3068\u3001\\(dp[i, j]\\) \u306e\u89e3\u6c7a\u306f\u5de6\u3001\u4e0a\u3001\u5de6\u4e0a\u306e\u89e3\u306b\u4f9d\u5b58\u3059\u308b\u305f\u3081\u3001\u4e8c\u91cd\u30eb\u30fc\u30d7\u3092\u4f7f\u7528\u3057\u3066\u6b63\u3057\u3044\u9806\u5e8f\u3067 \\(dp\\) \u30c6\u30fc\u30d6\u30eb\u5168\u4f53\u3092\u8d70\u67fb\u3067\u304d\u307e\u3059\u3002

"},{"location":"chapter_dynamic_programming/edit_distance_problem/#2","title":"2. \u00a0 \u30b3\u30fc\u30c9\u5b9f\u88c5","text":"PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby edit_distance.py
def edit_distance_dp(s: str, t: str) -> int:\n    \"\"\"\u7de8\u96c6\u8ddd\u96e2\uff1a\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\"\"\"\n    n, m = len(s), len(t)\n    dp = [[0] * (m + 1) for _ in range(n + 1)]\n    # \u72b6\u614b\u9077\u79fb\uff1a\u6700\u521d\u306e\u884c\u3068\u6700\u521d\u306e\u5217\n    for i in range(1, n + 1):\n        dp[i][0] = i\n    for j in range(1, m + 1):\n        dp[0][j] = j\n    # \u72b6\u614b\u9077\u79fb\uff1a\u6b8b\u308a\u306e\u884c\u3068\u5217\n    for i in range(1, n + 1):\n        for j in range(1, m + 1):\n            if s[i - 1] == t[j - 1]:\n                # 2 \u3064\u306e\u6587\u5b57\u304c\u7b49\u3057\u3044\u5834\u5408\u3001\u3053\u308c\u3089 2 \u3064\u306e\u6587\u5b57\u3092\u30b9\u30ad\u30c3\u30d7\n                dp[i][j] = dp[i - 1][j - 1]\n            else:\n                # \u6700\u5c0f\u7de8\u96c6\u6570 = 3 \u3064\u306e\u64cd\u4f5c\uff08\u633f\u5165\u3001\u524a\u9664\u3001\u7f6e\u63db\uff09\u304b\u3089\u306e\u6700\u5c0f\u7de8\u96c6\u6570 + 1\n                dp[i][j] = min(dp[i][j - 1], dp[i - 1][j], dp[i - 1][j - 1]) + 1\n    return dp[n][m]\n
edit_distance.cpp
/* \u7de8\u96c6\u8ddd\u96e2\uff1a\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0 */\nint editDistanceDP(string s, string t) {\n    int n = s.length(), m = t.length();\n    vector<vector<int>> dp(n + 1, vector<int>(m + 1, 0));\n    // \u72b6\u614b\u9077\u79fb\uff1a\u6700\u521d\u306e\u884c\u3068\u6700\u521d\u306e\u5217\n    for (int i = 1; i <= n; i++) {\n        dp[i][0] = i;\n    }\n    for (int j = 1; j <= m; j++) {\n        dp[0][j] = j;\n    }\n    // \u72b6\u614b\u9077\u79fb\uff1a\u6b8b\u308a\u306e\u884c\u3068\u5217\n    for (int i = 1; i <= n; i++) {\n        for (int j = 1; j <= m; j++) {\n            if (s[i - 1] == t[j - 1]) {\n                // 2\u3064\u306e\u6587\u5b57\u304c\u7b49\u3057\u3044\u5834\u5408\u3001\u3053\u308c\u30892\u3064\u306e\u6587\u5b57\u3092\u30b9\u30ad\u30c3\u30d7\n                dp[i][j] = dp[i - 1][j - 1];\n            } else {\n                // \u6700\u5c0f\u7de8\u96c6\u6570 = 3\u3064\u306e\u64cd\u4f5c\uff08\u633f\u5165\u3001\u524a\u9664\u3001\u7f6e\u63db\uff09\u304b\u3089\u306e\u6700\u5c0f\u7de8\u96c6\u6570 + 1\n                dp[i][j] = min(min(dp[i][j - 1], dp[i - 1][j]), dp[i - 1][j - 1]) + 1;\n            }\n        }\n    }\n    return dp[n][m];\n}\n
edit_distance.java
/* \u7de8\u96c6\u8ddd\u96e2\uff1a\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0 */\nint editDistanceDP(String s, String t) {\n    int n = s.length(), m = t.length();\n    int[][] dp = new int[n + 1][m + 1];\n    // \u72b6\u614b\u9077\u79fb\uff1a\u6700\u521d\u306e\u884c\u3068\u6700\u521d\u306e\u5217\n    for (int i = 1; i <= n; i++) {\n        dp[i][0] = i;\n    }\n    for (int j = 1; j <= m; j++) {\n        dp[0][j] = j;\n    }\n    // \u72b6\u614b\u9077\u79fb\uff1a\u6b8b\u308a\u306e\u884c\u3068\u5217\n    for (int i = 1; i <= n; i++) {\n        for (int j = 1; j <= m; j++) {\n            if (s.charAt(i - 1) == t.charAt(j - 1)) {\n                // 2\u3064\u306e\u6587\u5b57\u304c\u7b49\u3057\u3044\u5834\u5408\u3001\u3053\u308c\u30892\u3064\u306e\u6587\u5b57\u3092\u30b9\u30ad\u30c3\u30d7\n                dp[i][j] = dp[i - 1][j - 1];\n            } else {\n                // \u6700\u5c0f\u7de8\u96c6\u6570 = 3\u3064\u306e\u64cd\u4f5c\uff08\u633f\u5165\u3001\u524a\u9664\u3001\u7f6e\u63db\uff09\u304b\u3089\u306e\u6700\u5c0f\u7de8\u96c6\u6570 + 1\n                dp[i][j] = Math.min(Math.min(dp[i][j - 1], dp[i - 1][j]), dp[i - 1][j - 1]) + 1;\n            }\n        }\n    }\n    return dp[n][m];\n}\n
edit_distance.cs
[class]{edit_distance}-[func]{EditDistanceDP}\n
edit_distance.go
[class]{}-[func]{editDistanceDP}\n
edit_distance.swift
[class]{}-[func]{editDistanceDP}\n
edit_distance.js
[class]{}-[func]{editDistanceDP}\n
edit_distance.ts
[class]{}-[func]{editDistanceDP}\n
edit_distance.dart
[class]{}-[func]{editDistanceDP}\n
edit_distance.rs
[class]{}-[func]{edit_distance_dp}\n
edit_distance.c
[class]{}-[func]{editDistanceDP}\n
edit_distance.kt
[class]{}-[func]{editDistanceDP}\n
edit_distance.rb
[class]{}-[func]{edit_distance_dp}\n

\u4e0b\u306e\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u7de8\u96c6\u8ddd\u96e2\u554f\u984c\u306e\u72b6\u614b\u9077\u79fb\u30d7\u30ed\u30bb\u30b9\u306f\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u554f\u984c\u3068\u975e\u5e38\u306b\u4f3c\u3066\u304a\u308a\u3001\u4e8c\u6b21\u5143\u30b0\u30ea\u30c3\u30c9\u3092\u57cb\u3081\u308b\u3053\u3068\u3068\u898b\u306a\u3059\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

<1><2><3><4><5><6><7><8><9><10><11><12><13><14><15>

\u56f3 14-30 \u00a0 \u7de8\u96c6\u8ddd\u96e2\u306e\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u30d7\u30ed\u30bb\u30b9

"},{"location":"chapter_dynamic_programming/edit_distance_problem/#3","title":"3. \u00a0 \u7a7a\u9593\u6700\u9069\u5316","text":"

\\(dp[i, j]\\) \u306f\u4e0a\u306e \\(dp[i-1, j]\\)\u3001\u5de6\u306e \\(dp[i, j-1]\\)\u3001\u5de6\u4e0a\u306e \\(dp[i-1, j-1]\\) \u306e\u89e3\u304b\u3089\u5c0e\u51fa\u3055\u308c\u3001\u76f4\u63a5\u8d70\u67fb\u3067\u306f\u5de6\u4e0a\u306e\u89e3 \\(dp[i-1, j-1]\\) \u304c\u5931\u308f\u308c\u3001\u9006\u8d70\u67fb\u3067\u306f\u4e8b\u524d\u306b \\(dp[i, j-1]\\) \u3092\u69cb\u7bc9\u3067\u304d\u306a\u3044\u305f\u3081\u3001\u3069\u3061\u3089\u306e\u8d70\u67fb\u9806\u5e8f\u3082\u5b9f\u884c\u53ef\u80fd\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002

\u3053\u306e\u7406\u7531\u3067\u3001\u5909\u6570 leftup \u3092\u4f7f\u7528\u3057\u3066\u5de6\u4e0a\u306e \\(dp[i-1, j-1]\\) \u304b\u3089\u306e\u89e3\u3092\u4e00\u6642\u7684\u306b\u4fdd\u5b58\u3057\u3001\u5de6\u3068\u4e0a\u306e\u89e3\u306e\u307f\u3092\u8003\u616e\u3059\u308c\u3070\u3088\u304f\u306a\u308a\u307e\u3059\u3002\u3053\u306e\u72b6\u6cc1\u306f\u7121\u5236\u9650\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u554f\u984c\u3068\u4f3c\u3066\u304a\u308a\u3001\u76f4\u63a5\u8d70\u67fb\u304c\u53ef\u80fd\u3067\u3059\u3002\u30b3\u30fc\u30c9\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby edit_distance.py
def edit_distance_dp_comp(s: str, t: str) -> int:\n    \"\"\"\u7de8\u96c6\u8ddd\u96e2\uff1a\u7a7a\u9593\u6700\u9069\u5316\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\"\"\"\n    n, m = len(s), len(t)\n    dp = [0] * (m + 1)\n    # \u72b6\u614b\u9077\u79fb\uff1a\u6700\u521d\u306e\u884c\n    for j in range(1, m + 1):\n        dp[j] = j\n    # \u72b6\u614b\u9077\u79fb\uff1a\u6b8b\u308a\u306e\u884c\n    for i in range(1, n + 1):\n        # \u72b6\u614b\u9077\u79fb\uff1a\u6700\u521d\u306e\u5217\n        leftup = dp[0]  # dp[i-1, j-1] \u3092\u4e00\u6642\u7684\u306b\u4fdd\u5b58\n        dp[0] += 1\n        # \u72b6\u614b\u9077\u79fb\uff1a\u6b8b\u308a\u306e\u5217\n        for j in range(1, m + 1):\n            temp = dp[j]\n            if s[i - 1] == t[j - 1]:\n                # 2 \u3064\u306e\u6587\u5b57\u304c\u7b49\u3057\u3044\u5834\u5408\u3001\u3053\u308c\u3089 2 \u3064\u306e\u6587\u5b57\u3092\u30b9\u30ad\u30c3\u30d7\n                dp[j] = leftup\n            else:\n                # \u6700\u5c0f\u7de8\u96c6\u6570 = 3 \u3064\u306e\u64cd\u4f5c\uff08\u633f\u5165\u3001\u524a\u9664\u3001\u7f6e\u63db\uff09\u304b\u3089\u306e\u6700\u5c0f\u7de8\u96c6\u6570 + 1\n                dp[j] = min(dp[j - 1], dp[j], leftup) + 1\n            leftup = temp  # \u6b21\u306e dp[i-1, j-1] \u306e\u305f\u3081\u306b\u66f4\u65b0\n    return dp[m]\n
edit_distance.cpp
[class]{}-[func]{editDistanceDPComp}\n
edit_distance.java
/* \u7de8\u96c6\u8ddd\u96e2\uff1a\u7a7a\u9593\u6700\u9069\u5316\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0 */\nint editDistanceDPComp(String s, String t) {\n    int n = s.length(), m = t.length();\n    int[] dp = new int[m + 1];\n    // \u72b6\u614b\u9077\u79fb\uff1a\u6700\u521d\u306e\u884c\n    for (int j = 1; j <= m; j++) {\n        dp[j] = j;\n    }\n    // \u72b6\u614b\u9077\u79fb\uff1a\u6b8b\u308a\u306e\u884c\n    for (int i = 1; i <= n; i++) {\n        // \u72b6\u614b\u9077\u79fb\uff1a\u6700\u521d\u306e\u5217\n        int leftup = dp[0]; // dp[i-1, j-1] \u3092\u4e00\u6642\u7684\u306b\u683c\u7d0d\n        dp[0] = i;\n        // \u72b6\u614b\u9077\u79fb\uff1a\u6b8b\u308a\u306e\u5217\n        for (int j = 1; j <= m; j++) {\n            int temp = dp[j];\n            if (s.charAt(i - 1) == t.charAt(j - 1)) {\n                // 2\u3064\u306e\u6587\u5b57\u304c\u7b49\u3057\u3044\u5834\u5408\u3001\u3053\u308c\u30892\u3064\u306e\u6587\u5b57\u3092\u30b9\u30ad\u30c3\u30d7\n                dp[j] = leftup;\n            } else {\n                // \u6700\u5c0f\u7de8\u96c6\u6570 = 3\u3064\u306e\u64cd\u4f5c\uff08\u633f\u5165\u3001\u524a\u9664\u3001\u7f6e\u63db\uff09\u304b\u3089\u306e\u6700\u5c0f\u7de8\u96c6\u6570 + 1\n                dp[j] = Math.min(Math.min(dp[j - 1], dp[j]), leftup) + 1;\n            }\n            leftup = temp; // \u6b21\u306e\u30e9\u30a6\u30f3\u30c9\u306e dp[i-1, j-1] \u306e\u305f\u3081\u306b\u66f4\u65b0\n        }\n    }\n    return dp[m];\n}\n
edit_distance.cs
[class]{edit_distance}-[func]{EditDistanceDPComp}\n
edit_distance.go
[class]{}-[func]{editDistanceDPComp}\n
edit_distance.swift
[class]{}-[func]{editDistanceDPComp}\n
edit_distance.js
[class]{}-[func]{editDistanceDPComp}\n
edit_distance.ts
[class]{}-[func]{editDistanceDPComp}\n
edit_distance.dart
[class]{}-[func]{editDistanceDPComp}\n
edit_distance.rs
[class]{}-[func]{edit_distance_dp_comp}\n
edit_distance.c
[class]{}-[func]{editDistanceDPComp}\n
edit_distance.kt
[class]{}-[func]{editDistanceDPComp}\n
edit_distance.rb
[class]{}-[func]{edit_distance_dp_comp}\n
"},{"location":"chapter_dynamic_programming/intro_to_dynamic_programming/","title":"14.1 \u00a0 \u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u306e\u7d39\u4ecb","text":"

\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u306f\u91cd\u8981\u306a\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u30d1\u30e9\u30c0\u30a4\u30e0\u3067\u3042\u308a\u3001\u554f\u984c\u3092\u4e00\u9023\u306e\u5c0f\u3055\u306a\u90e8\u5206\u554f\u984c\u306b\u5206\u89e3\u3057\u3001\u3053\u308c\u3089\u306e\u90e8\u5206\u554f\u984c\u306e\u89e3\u3092\u4fdd\u5b58\u3059\u308b\u3053\u3068\u3067\u5197\u9577\u306a\u8a08\u7b97\u3092\u907f\u3051\u3001\u6642\u9593\u52b9\u7387\u3092\u5927\u5e45\u306b\u5411\u4e0a\u3055\u305b\u307e\u3059\u3002

\u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u53e4\u5178\u7684\u306a\u554f\u984c\u304b\u3089\u59cb\u3081\u3066\u3001\u307e\u305a\u529b\u4efb\u305b\u306e\u63a2\u7d22\u6cd5\u306b\u3088\u308b\u89e3\u6cd5\u3092\u63d0\u793a\u3057\u3001\u91cd\u8907\u3059\u308b\u90e8\u5206\u554f\u984c\u3092\u7279\u5b9a\u3057\u3066\u304b\u3089\u3001\u3088\u308a\u52b9\u7387\u7684\u306a\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u89e3\u6cd5\u3092\u6bb5\u968e\u7684\u306b\u5c0e\u51fa\u3057\u307e\u3059\u3002

\u968e\u6bb5\u767b\u308a

\\(n\\) \u6bb5\u306e\u968e\u6bb5\u304c\u3042\u308a\u3001\u4e00\u5ea6\u306b \\(1\\) \u6bb5\u307e\u305f\u306f \\(2\\) \u6bb5\u4e0a\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u9802\u4e0a\u306b\u5230\u9054\u3059\u308b\u65b9\u6cd5\u306f\u4f55\u901a\u308a\u3042\u308a\u307e\u3059\u304b\uff1f

\u4e0b\u306e\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\\(3\\) \u6bb5\u306e\u968e\u6bb5\u306e\u9802\u4e0a\u306b\u5230\u9054\u3059\u308b\u65b9\u6cd5\u306f \\(3\\) \u901a\u308a\u3042\u308a\u307e\u3059\u3002

\u56f3 14-1 \u00a0 3\u6bb5\u76ee\u306b\u5230\u9054\u3059\u308b\u65b9\u6cd5\u306e\u6570

\u3053\u306e\u554f\u984c\u306f**\u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u3092\u7528\u3044\u3066\u3059\u3079\u3066\u306e\u53ef\u80fd\u6027\u3092\u7db2\u7f85**\u3059\u308b\u3053\u3068\u3067\u65b9\u6cd5\u306e\u6570\u3092\u8a08\u7b97\u3059\u308b\u3053\u3068\u3092\u76ee\u7684\u3068\u3057\u3066\u3044\u307e\u3059\u3002\u5177\u4f53\u7684\u306b\u306f\u3001\u968e\u6bb5\u767b\u308a\u306e\u554f\u984c\u3092\u591a\u6bb5\u968e\u9078\u629e\u30d7\u30ed\u30bb\u30b9\u3068\u3057\u3066\u8003\u3048\u307e\u3059\uff1a\u5730\u9762\u304b\u3089\u59cb\u3081\u3066\u3001\u6bce\u56de \\(1\\) \u6bb5\u307e\u305f\u306f \\(2\\) \u6bb5\u4e0a\u308b\u304b\u3092\u9078\u629e\u3057\u3001\u968e\u6bb5\u306e\u9802\u4e0a\u306b\u5230\u9054\u3057\u305f\u3089\u65b9\u6cd5\u306e\u6570\u3092\u30ab\u30a6\u30f3\u30c8\u3057\u3001\u9802\u4e0a\u3092\u8d85\u3048\u305f\u5834\u5408\u306f\u30d7\u30eb\u30fc\u30cb\u30f3\u30b0\uff08\u679d\u5208\u308a\uff09\u3092\u884c\u3044\u307e\u3059\u3002\u30b3\u30fc\u30c9\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby climbing_stairs_backtrack.py
def backtrack(choices: list[int], state: int, n: int, res: list[int]) -> int:\n    \"\"\"\u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\"\"\"\n    # n \u6bb5\u76ee\u306b\u767b\u3063\u305f\u3068\u304d\u3001\u89e3\u306e\u6570\u306b 1 \u3092\u52a0\u3048\u308b\n    if state == n:\n        res[0] += 1\n    # \u3059\u3079\u3066\u306e\u9078\u629e\u80a2\u3092\u8d70\u67fb\n    for choice in choices:\n        # \u679d\u5208\u308a\uff1an \u6bb5\u3092\u8d85\u3048\u3066\u767b\u308b\u3053\u3068\u3092\u8a31\u53ef\u3057\u306a\u3044\n        if state + choice > n:\n            continue\n        # \u8a66\u884c\uff1a\u9078\u629e\u3092\u884c\u3044\u3001\u72b6\u614b\u3092\u66f4\u65b0\n        backtrack(choices, state + choice, n, res)\n        # \u64a4\u56de\n\ndef climbing_stairs_backtrack(n: int) -> int:\n    \"\"\"\u968e\u6bb5\u767b\u308a\uff1a\u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\"\"\"\n    choices = [1, 2]  # 1 \u6bb5\u307e\u305f\u306f 2 \u6bb5\u767b\u308b\u3053\u3068\u3092\u9078\u629e\u53ef\u80fd\n    state = 0  # 0 \u6bb5\u76ee\u304b\u3089\u767b\u308a\u59cb\u3081\u308b\n    res = [0]  # res[0] \u3092\u4f7f\u7528\u3057\u3066\u89e3\u306e\u6570\u3092\u8a18\u9332\n    backtrack(choices, state, n, res)\n    return res[0]\n
climbing_stairs_backtrack.cpp
/* \u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0 */\nvoid backtrack(vector<int> &choices, int state, int n, vector<int> &res) {\n    // n\u6bb5\u76ee\u306b\u5230\u9054\u3057\u305f\u3068\u304d\u3001\u89e3\u306e\u6570\u306b1\u3092\u52a0\u3048\u308b\n    if (state == n)\n        res[0]++;\n    // \u3059\u3079\u3066\u306e\u9078\u629e\u80a2\u3092\u8d70\u67fb\n    for (auto &choice : choices) {\n        // \u526a\u5b9a\uff1an\u6bb5\u3092\u8d85\u3048\u3066\u767b\u308b\u3053\u3068\u3092\u8a31\u53ef\u3057\u306a\u3044\n        if (state + choice > n)\n            continue;\n        // \u8a66\u884c\uff1a\u9078\u629e\u3092\u884c\u3044\u3001\u72b6\u614b\u3092\u66f4\u65b0\n        backtrack(choices, state + choice, n, res);\n        // \u64a4\u56de\n    }\n}\n\n/* \u968e\u6bb5\u767b\u308a\uff1a\u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0 */\nint climbingStairsBacktrack(int n) {\n    vector<int> choices = {1, 2}; // 1\u6bb5\u307e\u305f\u306f2\u6bb5\u767b\u308b\u3053\u3068\u3092\u9078\u629e\u53ef\u80fd\n    int state = 0;                // 0\u6bb5\u76ee\u304b\u3089\u767b\u308a\u59cb\u3081\u308b\n    vector<int> res = {0};        // res[0] \u3092\u4f7f\u7528\u3057\u3066\u89e3\u306e\u6570\u3092\u8a18\u9332\n    backtrack(choices, state, n, res);\n    return res[0];\n}\n
climbing_stairs_backtrack.java
/* \u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0 */\nvoid backtrack(List<Integer> choices, int state, int n, List<Integer> res) {\n    // n\u6bb5\u76ee\u306b\u5230\u9054\u3057\u305f\u3068\u304d\u3001\u89e3\u306e\u6570\u306b1\u3092\u52a0\u3048\u308b\n    if (state == n)\n        res.set(0, res.get(0) + 1);\n    // \u3059\u3079\u3066\u306e\u9078\u629e\u80a2\u3092\u8d70\u67fb\n    for (Integer choice : choices) {\n        // \u526a\u5b9a\uff1an\u6bb5\u3092\u8d85\u3048\u3066\u767b\u308b\u3053\u3068\u3092\u8a31\u53ef\u3057\u306a\u3044\n        if (state + choice > n)\n            continue;\n        // \u8a66\u884c\uff1a\u9078\u629e\u3092\u884c\u3044\u3001\u72b6\u614b\u3092\u66f4\u65b0\n        backtrack(choices, state + choice, n, res);\n        // \u64a4\u56de\n    }\n}\n\n/* \u968e\u6bb5\u767b\u308a\uff1a\u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0 */\nint climbingStairsBacktrack(int n) {\n    List<Integer> choices = Arrays.asList(1, 2); // 1\u6bb5\u307e\u305f\u306f2\u6bb5\u767b\u308b\u3053\u3068\u3092\u9078\u629e\u53ef\u80fd\n    int state = 0; // 0\u6bb5\u76ee\u304b\u3089\u767b\u308a\u59cb\u3081\u308b\n    List<Integer> res = new ArrayList<>();\n    res.add(0); // res[0] \u3092\u4f7f\u7528\u3057\u3066\u89e3\u306e\u6570\u3092\u8a18\u9332\n    backtrack(choices, state, n, res);\n    return res.get(0);\n}\n
climbing_stairs_backtrack.cs
[class]{climbing_stairs_backtrack}-[func]{Backtrack}\n\n[class]{climbing_stairs_backtrack}-[func]{ClimbingStairsBacktrack}\n
climbing_stairs_backtrack.go
[class]{}-[func]{backtrack}\n\n[class]{}-[func]{climbingStairsBacktrack}\n
climbing_stairs_backtrack.swift
[class]{}-[func]{backtrack}\n\n[class]{}-[func]{climbingStairsBacktrack}\n
climbing_stairs_backtrack.js
[class]{}-[func]{backtrack}\n\n[class]{}-[func]{climbingStairsBacktrack}\n
climbing_stairs_backtrack.ts
[class]{}-[func]{backtrack}\n\n[class]{}-[func]{climbingStairsBacktrack}\n
climbing_stairs_backtrack.dart
[class]{}-[func]{backtrack}\n\n[class]{}-[func]{climbingStairsBacktrack}\n
climbing_stairs_backtrack.rs
[class]{}-[func]{backtrack}\n\n[class]{}-[func]{climbing_stairs_backtrack}\n
climbing_stairs_backtrack.c
[class]{}-[func]{backtrack}\n\n[class]{}-[func]{climbingStairsBacktrack}\n
climbing_stairs_backtrack.kt
[class]{}-[func]{backtrack}\n\n[class]{}-[func]{climbingStairsBacktrack}\n
climbing_stairs_backtrack.rb
[class]{}-[func]{backtrack}\n\n[class]{}-[func]{climbing_stairs_backtrack}\n
"},{"location":"chapter_dynamic_programming/intro_to_dynamic_programming/#1411-1","title":"14.1.1 \u00a0 \u65b9\u6cd51\uff1a\u529b\u4efb\u305b\u63a2\u7d22","text":"

\u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306f\u554f\u984c\u3092\u660e\u793a\u7684\u306b\u90e8\u5206\u554f\u984c\u306b\u5206\u89e3\u3057\u307e\u305b\u3093\u3002\u4ee3\u308f\u308a\u306b\u3001\u554f\u984c\u3092\u4e00\u9023\u306e\u6c7a\u5b9a\u30b9\u30c6\u30c3\u30d7\u3068\u3057\u3066\u6271\u3044\u3001\u8a66\u884c\u3068\u679d\u5208\u308a\u3092\u901a\u3058\u3066\u3059\u3079\u3066\u306e\u53ef\u80fd\u6027\u3092\u63a2\u7d22\u3057\u307e\u3059\u3002

\u3053\u306e\u554f\u984c\u3092\u5206\u89e3\u30a2\u30d7\u30ed\u30fc\u30c1\u3092\u4f7f\u3063\u3066\u5206\u6790\u3067\u304d\u307e\u3059\u3002\\(dp[i]\\) \u3092 \\(i\\) \u6bb5\u76ee\u306b\u5230\u9054\u3059\u308b\u65b9\u6cd5\u306e\u6570\u3068\u3057\u307e\u3059\u3002\u3053\u306e\u5834\u5408\u3001\\(dp[i]\\) \u304c\u5143\u306e\u554f\u984c\u3067\u3042\u308a\u3001\u305d\u306e\u90e8\u5206\u554f\u984c\u306f\u6b21\u306e\u3088\u3046\u306b\u306a\u308a\u307e\u3059\uff1a

\\[ dp[i-1], dp[i-2], \\dots, dp[2], dp[1] \\]

\u5404\u79fb\u52d5\u306f \\(1\\) \u6bb5\u307e\u305f\u306f \\(2\\) \u6bb5\u3057\u304b\u9032\u3081\u306a\u3044\u305f\u3081\u3001\\(i\\) \u6bb5\u76ee\u306b\u7acb\u3063\u3066\u3044\u308b\u3068\u304d\u3001\u524d\u306e\u30b9\u30c6\u30c3\u30d7\u306f \\(i-1\\) \u6bb5\u76ee\u307e\u305f\u306f \\(i-2\\) \u6bb5\u76ee\u306e\u3044\u305a\u308c\u304b\u306b\u3044\u305f\u306f\u305a\u3067\u3059\u3002\u3064\u307e\u308a\u3001\\(i\\) \u6bb5\u76ee\u306b\u306f \\(i-1\\) \u6bb5\u76ee\u307e\u305f\u306f \\(i-2\\) \u6bb5\u76ee\u304b\u3089\u3057\u304b\u5230\u9054\u3067\u304d\u307e\u305b\u3093\u3002

\u3053\u308c\u306b\u3088\u308a\u91cd\u8981\u306a\u7d50\u8ad6\u304c\u5f97\u3089\u308c\u307e\u3059\uff1a\\(i-1\\) \u6bb5\u76ee\u306b\u5230\u9054\u3059\u308b\u65b9\u6cd5\u306e\u6570\u306b \\(i-2\\) \u6bb5\u76ee\u306b\u5230\u9054\u3059\u308b\u65b9\u6cd5\u306e\u6570\u3092\u52a0\u3048\u305f\u3082\u306e\u304c\u3001\\(i\\) \u6bb5\u76ee\u306b\u5230\u9054\u3059\u308b\u65b9\u6cd5\u306e\u6570\u306b\u7b49\u3057\u3044\u3002\u5f0f\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\uff1a

\\[ dp[i] = dp[i-1] + dp[i-2] \\]

\u3053\u308c\u306f\u3001\u968e\u6bb5\u767b\u308a\u554f\u984c\u306b\u304a\u3044\u3066\u90e8\u5206\u554f\u984c\u9593\u306b\u518d\u5e30\u95a2\u4fc2\u304c\u3042\u308b\u3053\u3068\u3092\u610f\u5473\u3057\u3001\u5143\u306e\u554f\u984c\u306e\u89e3\u306f\u90e8\u5206\u554f\u984c\u306e\u89e3\u304b\u3089\u69cb\u7bc9\u3067\u304d\u307e\u3059\u3002\u4e0b\u306e\u56f3\u306f\u3053\u306e\u518d\u5e30\u95a2\u4fc2\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002

\u56f3 14-2 \u00a0 \u89e3\u306e\u6570\u306e\u518d\u5e30\u95a2\u4fc2

\u518d\u5e30\u5f0f\u306b\u5f93\u3063\u3066\u529b\u4efb\u305b\u63a2\u7d22\u89e3\u6cd5\u3092\u5f97\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\\(dp[n]\\) \u304b\u3089\u59cb\u3081\u3066\u3001**\u3088\u308a\u5927\u304d\u306a\u554f\u984c\u3092\u518d\u5e30\u7684\u306b2\u3064\u306e\u5c0f\u3055\u306a\u90e8\u5206\u554f\u984c\u306e\u548c\u306b\u5206\u89e3**\u3057\u3001\u89e3\u304c\u65e2\u77e5\u306e\u6700\u5c0f\u306e\u90e8\u5206\u554f\u984c \\(dp[1]\\) \u3068 \\(dp[2]\\) \u306b\u5230\u9054\u3059\u308b\u307e\u3067\u7d9a\u3051\u307e\u3059\u3002\\(dp[1] = 1\\) \u3068 \\(dp[2] = 2\\) \u3067\u3001\u305d\u308c\u305e\u308c1\u6bb5\u76ee\u30682\u6bb5\u76ee\u306b\u767b\u308b\u65b9\u6cd5\u304c \\(1\\) \u901a\u308a\u3068 \\(2\\) \u901a\u308a\u3042\u308b\u3053\u3068\u3092\u8868\u3057\u307e\u3059\u3002

\u4ee5\u4e0b\u306e\u30b3\u30fc\u30c9\u3092\u89b3\u5bdf\u3059\u308b\u3068\u3001\u6a19\u6e96\u7684\u306a\u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u30b3\u30fc\u30c9\u3068\u540c\u69d8\u306b\u6df1\u3055\u512a\u5148\u63a2\u7d22\u306b\u5c5e\u3057\u307e\u3059\u304c\u3001\u3088\u308a\u7c21\u6f54\u3067\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby climbing_stairs_dfs.py
def dfs(i: int) -> int:\n    \"\"\"\u63a2\u7d22\"\"\"\n    # \u65e2\u77e5\u306e dp[1] \u3068 dp[2] \u306f\u3001\u305d\u308c\u3089\u3092\u8fd4\u3059\n    if i == 1 or i == 2:\n        return i\n    # dp[i] = dp[i-1] + dp[i-2]\n    count = dfs(i - 1) + dfs(i - 2)\n    return count\n\ndef climbing_stairs_dfs(n: int) -> int:\n    \"\"\"\u968e\u6bb5\u767b\u308a\uff1a\u63a2\u7d22\"\"\"\n    return dfs(n)\n
climbing_stairs_dfs.cpp
/* \u63a2\u7d22 */\nint dfs(int i) {\n    // \u65e2\u77e5\u306e dp[1] \u3068 dp[2] \u3092\u8fd4\u3059\n    if (i == 1 || i == 2)\n        return i;\n    // dp[i] = dp[i-1] + dp[i-2]\n    int count = dfs(i - 1) + dfs(i - 2);\n    return count;\n}\n\n/* \u968e\u6bb5\u767b\u308a\uff1a\u63a2\u7d22 */\nint climbingStairsDFS(int n) {\n    return dfs(n);\n}\n
climbing_stairs_dfs.java
/* \u63a2\u7d22 */\nint dfs(int i) {\n    // \u65e2\u77e5\u306e dp[1] \u3068 dp[2] \u3092\u8fd4\u3059\n    if (i == 1 || i == 2)\n        return i;\n    // dp[i] = dp[i-1] + dp[i-2]\n    int count = dfs(i - 1) + dfs(i - 2);\n    return count;\n}\n\n/* \u968e\u6bb5\u767b\u308a\uff1a\u63a2\u7d22 */\nint climbingStairsDFS(int n) {\n    return dfs(n);\n}\n
climbing_stairs_dfs.cs
[class]{climbing_stairs_dfs}-[func]{DFS}\n\n[class]{climbing_stairs_dfs}-[func]{ClimbingStairsDFS}\n
climbing_stairs_dfs.go
[class]{}-[func]{dfs}\n\n[class]{}-[func]{climbingStairsDFS}\n
climbing_stairs_dfs.swift
[class]{}-[func]{dfs}\n\n[class]{}-[func]{climbingStairsDFS}\n
climbing_stairs_dfs.js
[class]{}-[func]{dfs}\n\n[class]{}-[func]{climbingStairsDFS}\n
climbing_stairs_dfs.ts
[class]{}-[func]{dfs}\n\n[class]{}-[func]{climbingStairsDFS}\n
climbing_stairs_dfs.dart
[class]{}-[func]{dfs}\n\n[class]{}-[func]{climbingStairsDFS}\n
climbing_stairs_dfs.rs
[class]{}-[func]{dfs}\n\n[class]{}-[func]{climbing_stairs_dfs}\n
climbing_stairs_dfs.c
[class]{}-[func]{dfs}\n\n[class]{}-[func]{climbingStairsDFS}\n
climbing_stairs_dfs.kt
[class]{}-[func]{dfs}\n\n[class]{}-[func]{climbingStairsDFS}\n
climbing_stairs_dfs.rb
[class]{}-[func]{dfs}\n\n[class]{}-[func]{climbing_stairs_dfs}\n

\u4e0b\u306e\u56f3\u306f\u529b\u4efb\u305b\u63a2\u7d22\u306b\u3088\u3063\u3066\u5f62\u6210\u3055\u308c\u308b\u518d\u5e30\u6728\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002\u554f\u984c \\(dp[n]\\) \u306b\u3064\u3044\u3066\u3001\u305d\u306e\u518d\u5e30\u6728\u306e\u6df1\u3055\u306f \\(n\\) \u3067\u3001\u6642\u9593\u8a08\u7b97\u91cf\u306f \\(O(2^n)\\) \u3067\u3059\u3002\u3053\u306e\u6307\u6570\u7684\u5897\u52a0\u306b\u3088\u308a\u3001\\(n\\) \u304c\u5927\u304d\u3044\u3068\u30d7\u30ed\u30b0\u30e9\u30e0\u306e\u5b9f\u884c\u304c\u306f\u308b\u304b\u306b\u9045\u304f\u306a\u308a\u3001\u9577\u3044\u5f85\u6a5f\u6642\u9593\u304c\u751f\u3058\u307e\u3059\u3002

\u56f3 14-3 \u00a0 \u968e\u6bb5\u767b\u308a\u306e\u518d\u5e30\u6728

\u4e0a\u306e\u56f3\u3092\u89b3\u5bdf\u3059\u308b\u3068\u3001**\u6307\u6570\u6642\u9593\u8a08\u7b97\u91cf\u306f\u300c\u91cd\u8907\u3059\u308b\u90e8\u5206\u554f\u984c\u300d\u306b\u3088\u3063\u3066\u5f15\u304d\u8d77\u3053\u3055\u308c\u308b**\u3053\u3068\u304c\u308f\u304b\u308a\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001\\(dp[9]\\) \u306f \\(dp[8]\\) \u3068 \\(dp[7]\\) \u306b\u5206\u89e3\u3055\u308c\u3001\\(dp[8]\\) \u306f\u3055\u3089\u306b \\(dp[7]\\) \u3068 \\(dp[6]\\) \u306b\u5206\u89e3\u3055\u308c\u3001\u4e21\u65b9\u3068\u3082\u90e8\u5206\u554f\u984c \\(dp[7]\\) \u3092\u542b\u3093\u3067\u3044\u307e\u3059\u3002

\u3053\u306e\u3088\u3046\u306b\u3001\u90e8\u5206\u554f\u984c\u306b\u306f\u3055\u3089\u306b\u5c0f\u3055\u306a\u91cd\u8907\u3059\u308b\u90e8\u5206\u554f\u984c\u304c\u542b\u307e\u308c\u3001\u3053\u308c\u306f\u7121\u9650\u306b\u7d9a\u304d\u307e\u3059\u3002\u8a08\u7b97\u30ea\u30bd\u30fc\u30b9\u306e\u5927\u90e8\u5206\u304c\u3053\u308c\u3089\u306e\u91cd\u8907\u3059\u308b\u90e8\u5206\u554f\u984c\u306b\u6d6a\u8cbb\u3055\u308c\u3066\u3044\u307e\u3059\u3002

"},{"location":"chapter_dynamic_programming/intro_to_dynamic_programming/#1412-2","title":"14.1.2 \u00a0 \u65b9\u6cd52\uff1a\u30e1\u30e2\u5316\u63a2\u7d22","text":"

\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u52b9\u7387\u3092\u5411\u4e0a\u3055\u305b\u308b\u305f\u3081\u3001**\u3059\u3079\u3066\u306e\u91cd\u8907\u3059\u308b\u90e8\u5206\u554f\u984c\u3092\u4e00\u5ea6\u3060\u3051\u8a08\u7b97\u3057\u305f\u3044**\u3068\u8003\u3048\u307e\u3059\u3002\u3053\u306e\u76ee\u7684\u306e\u305f\u3081\u3001\u5404\u90e8\u5206\u554f\u984c\u306e\u89e3\u3092\u8a18\u9332\u3059\u308b\u914d\u5217 mem \u3092\u5ba3\u8a00\u3057\u3001\u63a2\u7d22\u30d7\u30ed\u30bb\u30b9\u4e2d\u306b\u91cd\u8907\u3059\u308b\u90e8\u5206\u554f\u984c\u3092\u679d\u5208\u308a\u3057\u307e\u3059\u3002

  1. \\(dp[i]\\) \u304c\u521d\u3081\u3066\u8a08\u7b97\u3055\u308c\u308b\u3068\u304d\u3001\u5f8c\u3067\u4f7f\u7528\u3059\u308b\u305f\u3081\u306b mem[i] \u306b\u8a18\u9332\u3057\u307e\u3059\u3002
  2. \\(dp[i]\\) \u3092\u518d\u5ea6\u8a08\u7b97\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u3068\u304d\u3001mem[i] \u304b\u3089\u76f4\u63a5\u7d50\u679c\u3092\u53d6\u5f97\u3067\u304d\u3001\u305d\u306e\u90e8\u5206\u554f\u984c\u306e\u5197\u9577\u306a\u8a08\u7b97\u3092\u907f\u3051\u3089\u308c\u307e\u3059\u3002

\u30b3\u30fc\u30c9\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby climbing_stairs_dfs_mem.py
def dfs(i: int, mem: list[int]) -> int:\n    \"\"\"\u8a18\u61b6\u5316\u63a2\u7d22\"\"\"\n    # \u65e2\u77e5\u306e dp[1] \u3068 dp[2] \u306f\u3001\u305d\u308c\u3089\u3092\u8fd4\u3059\n    if i == 1 or i == 2:\n        return i\n    # dp[i] \u306e\u8a18\u9332\u304c\u3042\u308b\u5834\u5408\u3001\u305d\u308c\u3092\u8fd4\u3059\n    if mem[i] != -1:\n        return mem[i]\n    # dp[i] = dp[i-1] + dp[i-2]\n    count = dfs(i - 1, mem) + dfs(i - 2, mem)\n    # dp[i] \u3092\u8a18\u9332\n    mem[i] = count\n    return count\n\ndef climbing_stairs_dfs_mem(n: int) -> int:\n    \"\"\"\u968e\u6bb5\u767b\u308a\uff1a\u8a18\u61b6\u5316\u63a2\u7d22\"\"\"\n    # mem[i] \u306f i \u6bb5\u76ee\u306b\u767b\u308b\u89e3\u306e\u7dcf\u6570\u3092\u8a18\u9332\u3001-1 \u306f\u8a18\u9332\u306a\u3057\u3092\u610f\u5473\u3059\u308b\n    mem = [-1] * (n + 1)\n    return dfs(n, mem)\n
climbing_stairs_dfs_mem.cpp
/* \u30e1\u30e2\u5316\u63a2\u7d22 */\nint dfs(int i, vector<int> &mem) {\n    // \u65e2\u77e5\u306e dp[1] \u3068 dp[2] \u3092\u8fd4\u3059\n    if (i == 1 || i == 2)\n        return i;\n    // dp[i] \u306e\u8a18\u9332\u304c\u3042\u308b\u5834\u5408\u3001\u305d\u308c\u3092\u8fd4\u3059\n    if (mem[i] != -1)\n        return mem[i];\n    // dp[i] = dp[i-1] + dp[i-2]\n    int count = dfs(i - 1, mem) + dfs(i - 2, mem);\n    // dp[i] \u3092\u8a18\u9332\n    mem[i] = count;\n    return count;\n}\n\n/* \u968e\u6bb5\u767b\u308a\uff1a\u30e1\u30e2\u5316\u63a2\u7d22 */\nint climbingStairsDFSMem(int n) {\n    // mem[i] \u306f i \u6bb5\u76ee\u306b\u767b\u308b\u7dcf\u89e3\u6570\u3092\u8a18\u9332\u3001-1 \u306f\u8a18\u9332\u306a\u3057\u3092\u610f\u5473\u3059\u308b\n    vector<int> mem(n + 1, -1);\n    return dfs(n, mem);\n}\n
climbing_stairs_dfs_mem.java
/* \u30e1\u30e2\u5316\u63a2\u7d22 */\nint dfs(int i, int[] mem) {\n    // \u65e2\u77e5\u306e dp[1] \u3068 dp[2] \u3092\u8fd4\u3059\n    if (i == 1 || i == 2)\n        return i;\n    // dp[i] \u306e\u8a18\u9332\u304c\u3042\u308b\u5834\u5408\u3001\u305d\u308c\u3092\u8fd4\u3059\n    if (mem[i] != -1)\n        return mem[i];\n    // dp[i] = dp[i-1] + dp[i-2]\n    int count = dfs(i - 1, mem) + dfs(i - 2, mem);\n    // dp[i] \u3092\u8a18\u9332\n    mem[i] = count;\n    return count;\n}\n\n/* \u968e\u6bb5\u767b\u308a\uff1a\u30e1\u30e2\u5316\u63a2\u7d22 */\nint climbingStairsDFSMem(int n) {\n    // mem[i] \u306f i \u6bb5\u76ee\u306b\u767b\u308b\u7dcf\u89e3\u6570\u3092\u8a18\u9332\u3001-1 \u306f\u8a18\u9332\u306a\u3057\u3092\u610f\u5473\u3059\u308b\n    int[] mem = new int[n + 1];\n    Arrays.fill(mem, -1);\n    return dfs(n, mem);\n}\n
climbing_stairs_dfs_mem.cs
[class]{climbing_stairs_dfs_mem}-[func]{DFS}\n\n[class]{climbing_stairs_dfs_mem}-[func]{ClimbingStairsDFSMem}\n
climbing_stairs_dfs_mem.go
[class]{}-[func]{dfsMem}\n\n[class]{}-[func]{climbingStairsDFSMem}\n
climbing_stairs_dfs_mem.swift
[class]{}-[func]{dfs}\n\n[class]{}-[func]{climbingStairsDFSMem}\n
climbing_stairs_dfs_mem.js
[class]{}-[func]{dfs}\n\n[class]{}-[func]{climbingStairsDFSMem}\n
climbing_stairs_dfs_mem.ts
[class]{}-[func]{dfs}\n\n[class]{}-[func]{climbingStairsDFSMem}\n
climbing_stairs_dfs_mem.dart
[class]{}-[func]{dfs}\n\n[class]{}-[func]{climbingStairsDFSMem}\n
climbing_stairs_dfs_mem.rs
[class]{}-[func]{dfs}\n\n[class]{}-[func]{climbing_stairs_dfs_mem}\n
climbing_stairs_dfs_mem.c
[class]{}-[func]{dfs}\n\n[class]{}-[func]{climbingStairsDFSMem}\n
climbing_stairs_dfs_mem.kt
[class]{}-[func]{dfs}\n\n[class]{}-[func]{climbingStairsDFSMem}\n
climbing_stairs_dfs_mem.rb
[class]{}-[func]{dfs}\n\n[class]{}-[func]{climbing_stairs_dfs_mem}\n

\u4e0b\u306e\u56f3\u3092\u89b3\u5bdf\u3059\u308b\u3068\u3001**\u30e1\u30e2\u5316\u5f8c\u3001\u3059\u3079\u3066\u306e\u91cd\u8907\u3059\u308b\u90e8\u5206\u554f\u984c\u306f\u4e00\u5ea6\u3060\u3051\u8a08\u7b97\u3055\u308c\u308b\u5fc5\u8981\u304c\u3042\u308a\u3001\u6642\u9593\u8a08\u7b97\u91cf\u3092 \\(O(n)\\) \u306b\u6700\u9069\u5316**\u3057\u307e\u3059\u3002\u3053\u308c\u306f\u5927\u5e45\u306a\u6539\u5584\u3067\u3059\u3002

\u56f3 14-4 \u00a0 \u30e1\u30e2\u5316\u63a2\u7d22\u306b\u3088\u308b\u518d\u5e30\u6728

"},{"location":"chapter_dynamic_programming/intro_to_dynamic_programming/#1413-3","title":"14.1.3 \u00a0 \u65b9\u6cd53\uff1a\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0","text":"

**\u30e1\u30e2\u5316\u63a2\u7d22\u306f\u300c\u30c8\u30c3\u30d7\u30c0\u30a6\u30f3\u300d\u65b9\u5f0f**\u3067\u3059\uff1a\u5143\u306e\u554f\u984c\uff08\u6839\u30ce\u30fc\u30c9\uff09\u304b\u3089\u59cb\u3081\u3066\u3001\u3088\u308a\u5927\u304d\u306a\u90e8\u5206\u554f\u984c\u3092\u3088\u308a\u5c0f\u3055\u306a\u3082\u306e\u306b\u518d\u5e30\u7684\u306b\u5206\u89e3\u3057\u3001\u6700\u5c0f\u306e\u65e2\u77e5\u306e\u90e8\u5206\u554f\u984c\uff08\u8449\u30ce\u30fc\u30c9\uff09\u306e\u89e3\u306b\u5230\u9054\u3059\u308b\u307e\u3067\u7d9a\u3051\u307e\u3059\u3002\u305d\u306e\u5f8c\u3001\u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u306b\u3088\u308a\u90e8\u5206\u554f\u984c\u306e\u89e3\u3092\u53ce\u96c6\u3057\u3001\u5143\u306e\u554f\u984c\u306e\u89e3\u3092\u69cb\u7bc9\u3057\u307e\u3059\u3002

\u4e00\u65b9\u3001**\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u306f\u300c\u30dc\u30c8\u30e0\u30a2\u30c3\u30d7\u300d\u65b9\u5f0f**\u3067\u3059\uff1a\u6700\u5c0f\u306e\u90e8\u5206\u554f\u984c\u306e\u89e3\u304b\u3089\u59cb\u3081\u3066\u3001\u5143\u306e\u554f\u984c\u304c\u89e3\u6c7a\u3055\u308c\u308b\u307e\u3067\u3001\u3088\u308a\u5927\u304d\u306a\u90e8\u5206\u554f\u984c\u306e\u89e3\u3092\u53cd\u5fa9\u7684\u306b\u69cb\u7bc9\u3057\u307e\u3059\u3002

\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u306f\u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u3092\u5fc5\u8981\u3068\u3057\u306a\u3044\u305f\u3081\u3001\u30eb\u30fc\u30d7\u3092\u4f7f\u3063\u305f\u53cd\u5fa9\u306e\u307f\u304c\u5fc5\u8981\u3067\u3001\u518d\u5e30\u306f\u4e0d\u8981\u3067\u3059\u3002\u4ee5\u4e0b\u306e\u30b3\u30fc\u30c9\u3067\u306f\u3001\u914d\u5217 dp \u3092\u521d\u671f\u5316\u3057\u3066\u90e8\u5206\u554f\u984c\u306e\u89e3\u3092\u4fdd\u5b58\u3057\u3001\u30e1\u30e2\u5316\u63a2\u7d22\u306e\u914d\u5217 mem \u3068\u540c\u3058\u8a18\u9332\u6a5f\u80fd\u3092\u679c\u305f\u3057\u307e\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby climbing_stairs_dp.py
def climbing_stairs_dp(n: int) -> int:\n    \"\"\"\u968e\u6bb5\u767b\u308a\uff1a\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\"\"\"\n    if n == 1 or n == 2:\n        return n\n    # dp \u30c6\u30fc\u30d6\u30eb\u3092\u521d\u671f\u5316\u3001\u90e8\u5206\u554f\u984c\u306e\u89e3\u3092\u683c\u7d0d\u3059\u308b\u305f\u3081\u4f7f\u7528\n    dp = [0] * (n + 1)\n    # \u521d\u671f\u72b6\u614b\uff1a\u6700\u5c0f\u306e\u90e8\u5206\u554f\u984c\u306e\u89e3\u3092\u4e8b\u524d\u8a2d\u5b9a\n    dp[1], dp[2] = 1, 2\n    # \u72b6\u614b\u9077\u79fb\uff1a\u5c0f\u3055\u3044\u90e8\u5206\u554f\u984c\u304b\u3089\u5927\u304d\u3044\u90e8\u5206\u554f\u984c\u3092\u6bb5\u968e\u7684\u306b\u89e3\u304f\n    for i in range(3, n + 1):\n        dp[i] = dp[i - 1] + dp[i - 2]\n    return dp[n]\n
climbing_stairs_dp.cpp
/* \u968e\u6bb5\u767b\u308a\uff1a\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0 */\nint climbingStairsDP(int n) {\n    if (n == 1 || n == 2)\n        return n;\n    // DP\u30c6\u30fc\u30d6\u30eb\u3092\u521d\u671f\u5316\u3057\u3001\u90e8\u5206\u554f\u984c\u306e\u89e3\u3092\u683c\u7d0d\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\n    vector<int> dp(n + 1);\n    // \u521d\u671f\u72b6\u614b\uff1a\u6700\u5c0f\u306e\u90e8\u5206\u554f\u984c\u306e\u89e3\u3092\u4e8b\u524d\u8a2d\u5b9a\n    dp[1] = 1;\n    dp[2] = 2;\n    // \u72b6\u614b\u9077\u79fb\uff1a\u5c0f\u3055\u306a\u554f\u984c\u304b\u3089\u5927\u304d\u306a\u90e8\u5206\u554f\u984c\u3092\u6bb5\u968e\u7684\u306b\u89e3\u304f\n    for (int i = 3; i <= n; i++) {\n        dp[i] = dp[i - 1] + dp[i - 2];\n    }\n    return dp[n];\n}\n
climbing_stairs_dp.java
/* \u968e\u6bb5\u767b\u308a\uff1a\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0 */\nint climbingStairsDP(int n) {\n    if (n == 1 || n == 2)\n        return n;\n    // DP\u30c6\u30fc\u30d6\u30eb\u3092\u521d\u671f\u5316\u3057\u3001\u90e8\u5206\u554f\u984c\u306e\u89e3\u3092\u683c\u7d0d\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\n    int[] dp = new int[n + 1];\n    // \u521d\u671f\u72b6\u614b\uff1a\u6700\u5c0f\u306e\u90e8\u5206\u554f\u984c\u306e\u89e3\u3092\u4e8b\u524d\u8a2d\u5b9a\n    dp[1] = 1;\n    dp[2] = 2;\n    // \u72b6\u614b\u9077\u79fb\uff1a\u5c0f\u3055\u306a\u554f\u984c\u304b\u3089\u5927\u304d\u306a\u90e8\u5206\u554f\u984c\u3092\u6bb5\u968e\u7684\u306b\u89e3\u304f\n    for (int i = 3; i <= n; i++) {\n        dp[i] = dp[i - 1] + dp[i - 2];\n    }\n    return dp[n];\n}\n
climbing_stairs_dp.cs
[class]{climbing_stairs_dp}-[func]{ClimbingStairsDP}\n
climbing_stairs_dp.go
[class]{}-[func]{climbingStairsDP}\n
climbing_stairs_dp.swift
[class]{}-[func]{climbingStairsDP}\n
climbing_stairs_dp.js
[class]{}-[func]{climbingStairsDP}\n
climbing_stairs_dp.ts
[class]{}-[func]{climbingStairsDP}\n
climbing_stairs_dp.dart
[class]{}-[func]{climbingStairsDP}\n
climbing_stairs_dp.rs
[class]{}-[func]{climbing_stairs_dp}\n
climbing_stairs_dp.c
[class]{}-[func]{climbingStairsDP}\n
climbing_stairs_dp.kt
[class]{}-[func]{climbingStairsDP}\n
climbing_stairs_dp.rb
[class]{}-[func]{climbing_stairs_dp}\n

\u4e0b\u306e\u56f3\u306f\u4e0a\u8a18\u30b3\u30fc\u30c9\u306e\u5b9f\u884c\u30d7\u30ed\u30bb\u30b9\u3092\u30b7\u30df\u30e5\u30ec\u30fc\u30c8\u3057\u3066\u3044\u307e\u3059\u3002

\u56f3 14-5 \u00a0 \u968e\u6bb5\u767b\u308a\u306e\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u30d7\u30ed\u30bb\u30b9

\u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3068\u540c\u69d8\u306b\u3001\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u3082\u300c\u72b6\u614b\u300d\u306e\u6982\u5ff5\u3092\u4f7f\u7528\u3057\u3066\u554f\u984c\u89e3\u6c7a\u306e\u7279\u5b9a\u306e\u6bb5\u968e\u3092\u8868\u73fe\u3057\u3001\u5404\u72b6\u614b\u306f\u90e8\u5206\u554f\u984c\u3068\u305d\u306e\u5c40\u6240\u6700\u9069\u89e3\u306b\u5bfe\u5fdc\u3057\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001\u968e\u6bb5\u767b\u308a\u554f\u984c\u306e\u72b6\u614b\u306f\u73fe\u5728\u306e\u30b9\u30c6\u30c3\u30d7\u756a\u53f7 \\(i\\) \u3068\u3057\u3066\u5b9a\u7fa9\u3055\u308c\u307e\u3059\u3002

\u4e0a\u8a18\u306e\u5185\u5bb9\u306b\u57fa\u3065\u3044\u3066\u3001\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u3067\u3088\u304f\u4f7f\u7528\u3055\u308c\u308b\u7528\u8a9e\u3092\u307e\u3068\u3081\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

"},{"location":"chapter_dynamic_programming/intro_to_dynamic_programming/#1414","title":"14.1.4 \u00a0 \u7a7a\u9593\u6700\u9069\u5316","text":"

\u6ce8\u610f\u6df1\u3044\u8aad\u8005\u306f**\\(dp[i]\\) \u306f \\(dp[i-1]\\) \u3068 \\(dp[i-2]\\) \u306e\u307f\u306b\u95a2\u9023\u3059\u308b\u305f\u3081\u3001\u3059\u3079\u3066\u306e\u90e8\u5206\u554f\u984c\u306e\u89e3\u3092\u4fdd\u5b58\u3059\u308b\u305f\u3081\u306b\u914d\u5217 dp \u3092\u4f7f\u7528\u3059\u308b\u5fc5\u8981\u304c\u306a\u3044**\u3053\u3068\u306b\u6c17\u3065\u304f\u3067\u3057\u3087\u3046\u3002\u5358\u306b2\u3064\u306e\u5909\u6570\u3092\u4f7f\u3063\u3066\u53cd\u5fa9\u7684\u306b\u9032\u3081\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u30b3\u30fc\u30c9\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby climbing_stairs_dp.py
def climbing_stairs_dp_comp(n: int) -> int:\n    \"\"\"\u968e\u6bb5\u767b\u308a\uff1a\u7a7a\u9593\u6700\u9069\u5316\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\"\"\"\n    if n == 1 or n == 2:\n        return n\n    a, b = 1, 2\n    for _ in range(3, n + 1):\n        a, b = b, a + b\n    return b\n
climbing_stairs_dp.cpp
/* \u968e\u6bb5\u767b\u308a\uff1a\u7a7a\u9593\u6700\u9069\u5316\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0 */\nint climbingStairsDPComp(int n) {\n    if (n == 1 || n == 2)\n        return n;\n    int a = 1, b = 2;\n    for (int i = 3; i <= n; i++) {\n        int tmp = b;\n        b = a + b;\n        a = tmp;\n    }\n    return b;\n}\n
climbing_stairs_dp.java
/* \u968e\u6bb5\u767b\u308a\uff1a\u7a7a\u9593\u6700\u9069\u5316\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0 */\nint climbingStairsDPComp(int n) {\n    if (n == 1 || n == 2)\n        return n;\n    int a = 1, b = 2;\n    for (int i = 3; i <= n; i++) {\n        int tmp = b;\n        b = a + b;\n        a = tmp;\n    }\n    return b;\n}\n
climbing_stairs_dp.cs
[class]{climbing_stairs_dp}-[func]{ClimbingStairsDPComp}\n
climbing_stairs_dp.go
[class]{}-[func]{climbingStairsDPComp}\n
climbing_stairs_dp.swift
[class]{}-[func]{climbingStairsDPComp}\n
climbing_stairs_dp.js
[class]{}-[func]{climbingStairsDPComp}\n
climbing_stairs_dp.ts
[class]{}-[func]{climbingStairsDPComp}\n
climbing_stairs_dp.dart
[class]{}-[func]{climbingStairsDPComp}\n
climbing_stairs_dp.rs
[class]{}-[func]{climbing_stairs_dp_comp}\n
climbing_stairs_dp.c
[class]{}-[func]{climbingStairsDPComp}\n
climbing_stairs_dp.kt
[class]{}-[func]{climbingStairsDPComp}\n
climbing_stairs_dp.rb
[class]{}-[func]{climbing_stairs_dp_comp}\n

\u4e0a\u8a18\u306e\u30b3\u30fc\u30c9\u3092\u89b3\u5bdf\u3059\u308b\u3068\u3001\u914d\u5217 dp \u304c\u5360\u6709\u3057\u3066\u3044\u305f\u7a7a\u9593\u304c\u524a\u9664\u3055\u308c\u308b\u305f\u3081\u3001\u7a7a\u9593\u8a08\u7b97\u91cf\u306f \\(O(n)\\) \u304b\u3089 \\(O(1)\\) \u306b\u524a\u6e1b\u3055\u308c\u307e\u3059\u3002

\u591a\u304f\u306e\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u554f\u984c\u3067\u306f\u3001\u73fe\u5728\u306e\u72b6\u614b\u306f\u9650\u3089\u308c\u305f\u6570\u306e\u524d\u306e\u72b6\u614b\u306e\u307f\u306b\u4f9d\u5b58\u3059\u308b\u305f\u3081\u3001\u5fc5\u8981\u306a\u72b6\u614b\u306e\u307f\u3092\u4fdd\u6301\u3057\u3001\u300c\u6b21\u5143\u524a\u6e1b\u300d\u306b\u3088\u3063\u3066\u30e1\u30e2\u30ea\u7a7a\u9593\u3092\u7bc0\u7d04\u3067\u304d\u307e\u3059\u3002\u3053\u306e\u7a7a\u9593\u6700\u9069\u5316\u6280\u8853\u306f\u300c\u30ed\u30fc\u30ea\u30f3\u30b0\u5909\u6570\u300d\u307e\u305f\u306f\u300c\u30ed\u30fc\u30ea\u30f3\u30b0\u914d\u5217\u300d\u3068\u3057\u3066\u77e5\u3089\u308c\u3066\u3044\u307e\u3059\u3002

"},{"location":"chapter_dynamic_programming/knapsack_problem/","title":"14.4 \u00a0 0-1\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u554f\u984c","text":"

\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u554f\u984c\u306f\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u306e\u512a\u308c\u305f\u5165\u9580\u554f\u984c\u3067\u3042\u308a\u3001\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u3067\u6700\u3082\u4e00\u822c\u7684\u306a\u554f\u984c\u30bf\u30a4\u30d7\u3067\u3059\u30020-1\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u554f\u984c\u3001\u7121\u5236\u9650\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u554f\u984c\u3001\u8907\u6570\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u554f\u984c\u306a\u3069\u3001\u591a\u304f\u306e\u5909\u7a2e\u304c\u3042\u308a\u307e\u3059\u3002

\u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u307e\u305a\u6700\u3082\u4e00\u822c\u7684\u306a0-1\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u554f\u984c\u3092\u89e3\u6c7a\u3057\u307e\u3059\u3002

Question

\\(n\\) \u500b\u306e\u30a2\u30a4\u30c6\u30e0\u304c\u4e0e\u3048\u3089\u308c\u3001\\(i\\) \u756a\u76ee\u306e\u30a2\u30a4\u30c6\u30e0\u306e\u91cd\u91cf\u306f \\(wgt[i-1]\\) \u3067\u5024\u306f \\(val[i-1]\\) \u3067\u3059\u3002\u5bb9\u91cf\u304c \\(cap\\) \u306e\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u304c\u3042\u308a\u307e\u3059\u3002\u5404\u30a2\u30a4\u30c6\u30e0\u306f1\u56de\u306e\u307f\u9078\u629e\u3067\u304d\u307e\u3059\u3002\u5bb9\u91cf\u5236\u9650\u4e0b\u3067\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u306b\u5165\u308c\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u30a2\u30a4\u30c6\u30e0\u306e\u6700\u5927\u5024\u306f\u4f55\u3067\u3059\u304b\uff1f

\u4e0b\u306e\u56f3\u3092\u89b3\u5bdf\u3059\u308b\u3068\u3001\u30a2\u30a4\u30c6\u30e0\u756a\u53f7 \\(i\\) \u306f1\u304b\u3089\u6570\u3048\u59cb\u3081\u3001\u914d\u5217\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306f0\u304b\u3089\u59cb\u307e\u308b\u305f\u3081\u3001\u30a2\u30a4\u30c6\u30e0 \\(i\\) \u306e\u91cd\u91cf\u306f \\(wgt[i-1]\\) \u306b\u5bfe\u5fdc\u3057\u3001\u5024\u306f \\(val[i-1]\\) \u306b\u5bfe\u5fdc\u3057\u307e\u3059\u3002

\u56f3 14-17 \u00a0 0-1\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u306e\u4f8b\u30c7\u30fc\u30bf

0-1\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u554f\u984c\u3092 \\(n\\) \u30e9\u30a6\u30f3\u30c9\u306e\u6c7a\u5b9a\u304b\u3089\u69cb\u6210\u3055\u308c\u308b\u30d7\u30ed\u30bb\u30b9\u3068\u3057\u3066\u8003\u3048\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u5404\u30a2\u30a4\u30c6\u30e0\u306b\u3064\u3044\u3066\u5165\u308c\u306a\u3044\u3001\u307e\u305f\u306f\u5165\u308c\u308b\u3068\u3044\u30462\u3064\u306e\u6c7a\u5b9a\u304c\u3042\u308a\u3001\u3057\u305f\u304c\u3063\u3066\u554f\u984c\u306f\u6c7a\u5b9a\u6728\u30e2\u30c7\u30eb\u306b\u9069\u5408\u3057\u307e\u3059\u3002

\u3053\u306e\u554f\u984c\u306e\u76ee\u7684\u306f\u300c\u9650\u3089\u308c\u305f\u5bb9\u91cf\u306e\u4e0b\u3067\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u306b\u5165\u308c\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u30a2\u30a4\u30c6\u30e0\u306e\u5024\u3092\u6700\u5927\u5316\u3059\u308b\u300d\u3053\u3068\u3067\u3042\u308a\u3001\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u554f\u984c\u3067\u3042\u308b\u53ef\u80fd\u6027\u304c\u9ad8\u3044\u3067\u3059\u3002

\u7b2c1\u30b9\u30c6\u30c3\u30d7\uff1a\u5404\u30e9\u30a6\u30f3\u30c9\u306e\u6c7a\u5b9a\u3092\u8003\u3048\u3001\u72b6\u614b\u3092\u5b9a\u7fa9\u3057\u3001\u305d\u308c\u306b\u3088\u308a \\(dp\\) \u30c6\u30fc\u30d6\u30eb\u3092\u5f97\u308b

\u5404\u30a2\u30a4\u30c6\u30e0\u306b\u3064\u3044\u3066\u3001\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u306b\u5165\u308c\u306a\u3051\u308c\u3070\u5bb9\u91cf\u306f\u5909\u308f\u3089\u305a\u3001\u5165\u308c\u308c\u3070\u5bb9\u91cf\u306f\u6e1b\u5c11\u3057\u307e\u3059\u3002\u3053\u308c\u304b\u3089\u72b6\u614b\u5b9a\u7fa9\u3092\u5f97\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\uff1a\u73fe\u5728\u306e\u30a2\u30a4\u30c6\u30e0\u756a\u53f7 \\(i\\) \u3068\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u5bb9\u91cf \\(c\\)\u3001\\([i, c]\\) \u3068\u8868\u8a18\u3055\u308c\u307e\u3059\u3002

\u72b6\u614b \\([i, c]\\) \u306f\u90e8\u5206\u554f\u984c\u306b\u5bfe\u5fdc\u3057\u307e\u3059\uff1a\u5bb9\u91cf \\(c\\) \u306e\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u3067\u306e\u6700\u521d\u306e \\(i\\) \u500b\u306e\u30a2\u30a4\u30c6\u30e0\u306e\u6700\u5927\u5024\u3001\\(dp[i, c]\\) \u3068\u8868\u8a18\u3055\u308c\u307e\u3059\u3002

\u63a2\u3057\u3066\u3044\u308b\u89e3\u306f \\(dp[n, cap]\\) \u3067\u3042\u308b\u305f\u3081\u3001\u30b5\u30a4\u30ba \\((n+1) \\times (cap+1)\\) \u306e\u4e8c\u6b21\u5143 \\(dp\\) \u30c6\u30fc\u30d6\u30eb\u304c\u5fc5\u8981\u3067\u3059\u3002

\u7b2c2\u30b9\u30c6\u30c3\u30d7\uff1a\u6700\u9069\u90e8\u5206\u69cb\u9020\u3092\u7279\u5b9a\u3057\u3001\u72b6\u614b\u9077\u79fb\u65b9\u7a0b\u5f0f\u3092\u5c0e\u51fa\u3059\u308b

\u30a2\u30a4\u30c6\u30e0 \\(i\\) \u306e\u6c7a\u5b9a\u3092\u884c\u3063\u305f\u5f8c\u3001\u6b8b\u308b\u306e\u306f\u6700\u521d\u306e \\(i-1\\) \u500b\u306e\u30a2\u30a4\u30c6\u30e0\u306e\u6c7a\u5b9a\u306e\u90e8\u5206\u554f\u984c\u3067\u3042\u308a\u3001\u3053\u308c\u306f2\u3064\u306e\u30b1\u30fc\u30b9\u306b\u5206\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

\u4e0a\u8a18\u306e\u5206\u6790\u306b\u3088\u308a\u3001\u3053\u306e\u554f\u984c\u306e\u6700\u9069\u90e8\u5206\u69cb\u9020\u304c\u660e\u3089\u304b\u306b\u306a\u308a\u307e\u3059\uff1a\u6700\u5927\u5024 \\(dp[i, c]\\) \u306f\u3001\u30a2\u30a4\u30c6\u30e0 \\(i\\) \u3092\u5165\u308c\u306a\u3044\u65b9\u6848\u3068\u30a2\u30a4\u30c6\u30e0 \\(i\\) \u3092\u5165\u308c\u308b\u65b9\u6848\u306e2\u3064\u306e\u3046\u3061\u3001\u3088\u308a\u5927\u304d\u306a\u5024\u306b\u7b49\u3057\u3044\u3002\u3053\u308c\u304b\u3089\u72b6\u614b\u9077\u79fb\u65b9\u7a0b\u5f0f\u3092\u5c0e\u51fa\u3067\u304d\u307e\u3059\uff1a

\\[ dp[i, c] = \\max(dp[i-1, c], dp[i-1, c - wgt[i-1]] + val[i-1]) \\]

\u73fe\u5728\u306e\u30a2\u30a4\u30c6\u30e0\u306e\u91cd\u91cf \\(wgt[i - 1]\\) \u304c\u6b8b\u308a\u306e\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u5bb9\u91cf \\(c\\) \u3092\u8d85\u3048\u308b\u5834\u5408\u3001\u552f\u4e00\u306e\u9078\u629e\u80a2\u306f\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u306b\u5165\u308c\u306a\u3044\u3053\u3068\u3067\u3042\u308b\u3053\u3068\u306b\u6ce8\u610f\u3059\u308b\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002

\u7b2c3\u30b9\u30c6\u30c3\u30d7\uff1a\u5883\u754c\u6761\u4ef6\u3068\u72b6\u614b\u9077\u79fb\u306e\u9806\u5e8f\u3092\u6c7a\u5b9a\u3059\u308b

\u30a2\u30a4\u30c6\u30e0\u304c\u306a\u3044\u5834\u5408\u307e\u305f\u306f\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u5bb9\u91cf\u304c \\(0\\) \u306e\u5834\u5408\u3001\u6700\u5927\u5024\u306f \\(0\\) \u3067\u3059\u3002\u3064\u307e\u308a\u3001\u6700\u521d\u306e\u5217 \\(dp[i, 0]\\) \u3068\u6700\u521d\u306e\u884c \\(dp[0, c]\\) \u306f\u3069\u3061\u3089\u3082 \\(0\\) \u306b\u7b49\u3057\u3044\u3067\u3059\u3002

\u73fe\u5728\u306e\u72b6\u614b \\([i, c]\\) \u306f\u76f4\u63a5\u4e0a\u306e\u72b6\u614b \\([i-1, c]\\) \u3068\u5de6\u4e0a\u306e\u72b6\u614b \\([i-1, c-wgt[i-1]]\\) \u304b\u3089\u9077\u79fb\u3059\u308b\u305f\u3081\u30012\u5c64\u306e\u30eb\u30fc\u30d7\u3092\u901a\u3058\u3066 \\(dp\\) \u30c6\u30fc\u30d6\u30eb\u5168\u4f53\u3092\u9806\u5e8f\u901a\u308a\u306b\u8d70\u67fb\u3057\u307e\u3059\u3002

\u4e0a\u8a18\u306e\u5206\u6790\u306b\u5f93\u3063\u3066\u3001\u6b21\u306b\u529b\u4efb\u305b\u63a2\u7d22\u3001\u30e1\u30e2\u5316\u63a2\u7d22\u3001\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u306e\u9806\u5e8f\u3067\u89e3\u6cd5\u3092\u5b9f\u88c5\u3057\u307e\u3059\u3002

"},{"location":"chapter_dynamic_programming/knapsack_problem/#1-1","title":"1. \u00a0 \u65b9\u6cd51\uff1a\u529b\u4efb\u305b\u63a2\u7d22","text":"

\u63a2\u7d22\u30b3\u30fc\u30c9\u306b\u306f\u4ee5\u4e0b\u306e\u8981\u7d20\u304c\u542b\u307e\u308c\u307e\u3059\u3002

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby knapsack.py
def knapsack_dfs(wgt: list[int], val: list[int], i: int, c: int) -> int:\n    \"\"\"0-1 \u30ca\u30c3\u30d7\u30b5\u30c3\u30af\uff1a\u30d6\u30eb\u30fc\u30c8\u30d5\u30a9\u30fc\u30b9\u63a2\u7d22\"\"\"\n    # \u3059\u3079\u3066\u306e\u30a2\u30a4\u30c6\u30e0\u304c\u9078\u629e\u3055\u308c\u305f\u304b\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u306b\u6b8b\u308a\u5bb9\u91cf\u304c\u306a\u3044\u5834\u5408\u3001\u5024 0 \u3092\u8fd4\u3059\n    if i == 0 or c == 0:\n        return 0\n    # \u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u5bb9\u91cf\u3092\u8d85\u3048\u308b\u5834\u5408\u3001\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u306b\u5165\u308c\u306a\u3044\u3053\u3068\u3057\u304b\u9078\u629e\u3067\u304d\u306a\u3044\n    if wgt[i - 1] > c:\n        return knapsack_dfs(wgt, val, i - 1, c)\n    # \u30a2\u30a4\u30c6\u30e0 i \u3092\u5165\u308c\u306a\u3044\u306e\u3068\u5165\u308c\u308b\u306e\u3068\u306e\u6700\u5927\u5024\u3092\u8a08\u7b97\n    no = knapsack_dfs(wgt, val, i - 1, c)\n    yes = knapsack_dfs(wgt, val, i - 1, c - wgt[i - 1]) + val[i - 1]\n    # 2 \u3064\u306e\u9078\u629e\u80a2\u306e\u3046\u3061\u5927\u304d\u3044\u5024\u3092\u8fd4\u3059\n    return max(no, yes)\n
knapsack.cpp
/* 0-1 \u30ca\u30c3\u30d7\u30b5\u30c3\u30af\uff1a\u30d6\u30eb\u30fc\u30c8\u30d5\u30a9\u30fc\u30b9\u63a2\u7d22 */\nint knapsackDFS(vector<int> &wgt, vector<int> &val, int i, int c) {\n    // \u3059\u3079\u3066\u306e\u30a2\u30a4\u30c6\u30e0\u304c\u9078\u629e\u3055\u308c\u305f\u304b\u3001\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u306b\u6b8b\u308a\u5bb9\u91cf\u304c\u306a\u3044\u5834\u5408\u3001\u5024 0 \u3092\u8fd4\u3059\n    if (i == 0 || c == 0) {\n        return 0;\n    }\n    // \u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u306e\u5bb9\u91cf\u3092\u8d85\u3048\u308b\u5834\u5408\u3001\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u306b\u5165\u308c\u306a\u3044\u3053\u3068\u3057\u304b\u9078\u629e\u3067\u304d\u306a\u3044\n    if (wgt[i - 1] > c) {\n        return knapsackDFS(wgt, val, i - 1, c);\n    }\n    // \u30a2\u30a4\u30c6\u30e0 i \u3092\u5165\u308c\u306a\u3044\u5834\u5408\u3068\u5165\u308c\u308b\u5834\u5408\u306e\u6700\u5927\u5024\u3092\u8a08\u7b97\n    int no = knapsackDFS(wgt, val, i - 1, c);\n    int yes = knapsackDFS(wgt, val, i - 1, c - wgt[i - 1]) + val[i - 1];\n    // 2\u3064\u306e\u9078\u629e\u80a2\u306e\u3088\u308a\u5927\u304d\u3044\u5024\u3092\u8fd4\u3059\n    return max(no, yes);\n}\n
knapsack.java
/* 0-1 \u30ca\u30c3\u30d7\u30b5\u30c3\u30af\uff1a\u30d6\u30eb\u30fc\u30c8\u30d5\u30a9\u30fc\u30b9\u63a2\u7d22 */\nint knapsackDFS(int[] wgt, int[] val, int i, int c) {\n    // \u3059\u3079\u3066\u306e\u30a2\u30a4\u30c6\u30e0\u304c\u9078\u629e\u3055\u308c\u305f\u304b\u3001\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u306b\u6b8b\u308a\u5bb9\u91cf\u304c\u306a\u3044\u5834\u5408\u3001\u5024 0 \u3092\u8fd4\u3059\n    if (i == 0 || c == 0) {\n        return 0;\n    }\n    // \u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u306e\u5bb9\u91cf\u3092\u8d85\u3048\u308b\u5834\u5408\u3001\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u306b\u5165\u308c\u306a\u3044\u3053\u3068\u3057\u304b\u9078\u629e\u3067\u304d\u306a\u3044\n    if (wgt[i - 1] > c) {\n        return knapsackDFS(wgt, val, i - 1, c);\n    }\n    // \u30a2\u30a4\u30c6\u30e0 i \u3092\u5165\u308c\u306a\u3044\u5834\u5408\u3068\u5165\u308c\u308b\u5834\u5408\u306e\u6700\u5927\u5024\u3092\u8a08\u7b97\n    int no = knapsackDFS(wgt, val, i - 1, c);\n    int yes = knapsackDFS(wgt, val, i - 1, c - wgt[i - 1]) + val[i - 1];\n    // 2\u3064\u306e\u9078\u629e\u80a2\u306e\u3088\u308a\u5927\u304d\u3044\u5024\u3092\u8fd4\u3059\n    return Math.max(no, yes);\n}\n
knapsack.cs
[class]{knapsack}-[func]{KnapsackDFS}\n
knapsack.go
[class]{}-[func]{knapsackDFS}\n
knapsack.swift
[class]{}-[func]{knapsackDFS}\n
knapsack.js
[class]{}-[func]{knapsackDFS}\n
knapsack.ts
[class]{}-[func]{knapsackDFS}\n
knapsack.dart
[class]{}-[func]{knapsackDFS}\n
knapsack.rs
[class]{}-[func]{knapsack_dfs}\n
knapsack.c
[class]{}-[func]{knapsackDFS}\n
knapsack.kt
[class]{}-[func]{knapsackDFS}\n
knapsack.rb
[class]{}-[func]{knapsack_dfs}\n

\u4e0b\u306e\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u5404\u30a2\u30a4\u30c6\u30e0\u306f\u9078\u629e\u3057\u306a\u3044\u3068\u9078\u629e\u3059\u308b\u3068\u3044\u30462\u3064\u306e\u63a2\u7d22\u5206\u5c90\u3092\u751f\u6210\u3059\u308b\u305f\u3081\u3001\u6642\u9593\u8a08\u7b97\u91cf\u306f \\(O(2^n)\\) \u3067\u3059\u3002

\u518d\u5e30\u6728\u3092\u89b3\u5bdf\u3059\u308b\u3068\u3001\\(dp[1, 10]\\) \u306a\u3069\u306e\u91cd\u8907\u3059\u308b\u90e8\u5206\u554f\u984c\u304c\u3042\u308b\u3053\u3068\u304c\u5bb9\u6613\u306b\u308f\u304b\u308a\u307e\u3059\u3002\u30a2\u30a4\u30c6\u30e0\u304c\u591a\u304f\u3001\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u5bb9\u91cf\u304c\u5927\u304d\u3044\u5834\u5408\u3001\u7279\u306b\u540c\u3058\u91cd\u91cf\u306e\u30a2\u30a4\u30c6\u30e0\u304c\u591a\u3044\u5834\u5408\u3001\u91cd\u8907\u3059\u308b\u90e8\u5206\u554f\u984c\u306e\u6570\u306f\u5927\u5e45\u306b\u5897\u52a0\u3057\u307e\u3059\u3002

\u56f3 14-18 \u00a0 0-1\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u554f\u984c\u306e\u529b\u4efb\u305b\u63a2\u7d22\u518d\u5e30\u6728

"},{"location":"chapter_dynamic_programming/knapsack_problem/#2-2","title":"2. \u00a0 \u65b9\u6cd52\uff1a\u30e1\u30e2\u5316\u63a2\u7d22","text":"

\u91cd\u8907\u3059\u308b\u90e8\u5206\u554f\u984c\u304c\u4e00\u5ea6\u3060\u3051\u8a08\u7b97\u3055\u308c\u308b\u3053\u3068\u3092\u78ba\u4fdd\u3059\u308b\u305f\u3081\u306b\u3001\u90e8\u5206\u554f\u984c\u306e\u89e3\u3092\u8a18\u9332\u3059\u308b\u30e1\u30e2\u5316\u30ea\u30b9\u30c8 mem \u3092\u4f7f\u7528\u3057\u307e\u3059\u3002\u3053\u3053\u3067 mem[i][c] \u306f \\(dp[i, c]\\) \u306b\u5bfe\u5fdc\u3057\u307e\u3059\u3002

\u30e1\u30e2\u5316\u3092\u5c0e\u5165\u3057\u305f\u5f8c\u3001**\u6642\u9593\u8a08\u7b97\u91cf\u306f\u90e8\u5206\u554f\u984c\u306e\u6570\u306b\u4f9d\u5b58**\u3057\u3001\\(O(n \\times cap)\\) \u306b\u306a\u308a\u307e\u3059\u3002\u5b9f\u88c5\u30b3\u30fc\u30c9\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby knapsack.py
def knapsack_dfs_mem(\n    wgt: list[int], val: list[int], mem: list[list[int]], i: int, c: int\n) -> int:\n    \"\"\"0-1 \u30ca\u30c3\u30d7\u30b5\u30c3\u30af\uff1a\u8a18\u61b6\u5316\u63a2\u7d22\"\"\"\n    # \u3059\u3079\u3066\u306e\u30a2\u30a4\u30c6\u30e0\u304c\u9078\u629e\u3055\u308c\u305f\u304b\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u306b\u6b8b\u308a\u5bb9\u91cf\u304c\u306a\u3044\u5834\u5408\u3001\u5024 0 \u3092\u8fd4\u3059\n    if i == 0 or c == 0:\n        return 0\n    # \u8a18\u9332\u304c\u3042\u308b\u5834\u5408\u3001\u305d\u308c\u3092\u8fd4\u3059\n    if mem[i][c] != -1:\n        return mem[i][c]\n    # \u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u5bb9\u91cf\u3092\u8d85\u3048\u308b\u5834\u5408\u3001\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u306b\u5165\u308c\u306a\u3044\u3053\u3068\u3057\u304b\u9078\u629e\u3067\u304d\u306a\u3044\n    if wgt[i - 1] > c:\n        return knapsack_dfs_mem(wgt, val, mem, i - 1, c)\n    # \u30a2\u30a4\u30c6\u30e0 i \u3092\u5165\u308c\u306a\u3044\u306e\u3068\u5165\u308c\u308b\u306e\u3068\u306e\u6700\u5927\u5024\u3092\u8a08\u7b97\n    no = knapsack_dfs_mem(wgt, val, mem, i - 1, c)\n    yes = knapsack_dfs_mem(wgt, val, mem, i - 1, c - wgt[i - 1]) + val[i - 1]\n    # 2 \u3064\u306e\u9078\u629e\u80a2\u306e\u3046\u3061\u5927\u304d\u3044\u5024\u3092\u8a18\u9332\u3057\u3066\u8fd4\u3059\n    mem[i][c] = max(no, yes)\n    return mem[i][c]\n
knapsack.cpp
[class]{}-[func]{knapsackDFSMem}\n
knapsack.java
/* 0-1 \u30ca\u30c3\u30d7\u30b5\u30c3\u30af\uff1a\u30e1\u30e2\u5316\u63a2\u7d22 */\nint knapsackDFSMem(int[] wgt, int[] val, int[][] mem, int i, int c) {\n    // \u3059\u3079\u3066\u306e\u30a2\u30a4\u30c6\u30e0\u304c\u9078\u629e\u3055\u308c\u305f\u304b\u3001\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u306b\u6b8b\u308a\u5bb9\u91cf\u304c\u306a\u3044\u5834\u5408\u3001\u5024 0 \u3092\u8fd4\u3059\n    if (i == 0 || c == 0) {\n        return 0;\n    }\n    // \u8a18\u9332\u304c\u3042\u308b\u5834\u5408\u3001\u305d\u308c\u3092\u8fd4\u3059\n    if (mem[i][c] != -1) {\n        return mem[i][c];\n    }\n    // \u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u306e\u5bb9\u91cf\u3092\u8d85\u3048\u308b\u5834\u5408\u3001\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u306b\u5165\u308c\u306a\u3044\u3053\u3068\u3057\u304b\u9078\u629e\u3067\u304d\u306a\u3044\n    if (wgt[i - 1] > c) {\n        return knapsackDFSMem(wgt, val, mem, i - 1, c);\n    }\n    // \u30a2\u30a4\u30c6\u30e0 i \u3092\u5165\u308c\u306a\u3044\u5834\u5408\u3068\u5165\u308c\u308b\u5834\u5408\u306e\u6700\u5927\u5024\u3092\u8a08\u7b97\n    int no = knapsackDFSMem(wgt, val, mem, i - 1, c);\n    int yes = knapsackDFSMem(wgt, val, mem, i - 1, c - wgt[i - 1]) + val[i - 1];\n    // 2\u3064\u306e\u9078\u629e\u80a2\u306e\u3088\u308a\u5927\u304d\u3044\u5024\u3092\u8a18\u9332\u3057\u3066\u8fd4\u3059\n    mem[i][c] = Math.max(no, yes);\n    return mem[i][c];\n}\n
knapsack.cs
[class]{knapsack}-[func]{KnapsackDFSMem}\n
knapsack.go
[class]{}-[func]{knapsackDFSMem}\n
knapsack.swift
[class]{}-[func]{knapsackDFSMem}\n
knapsack.js
[class]{}-[func]{knapsackDFSMem}\n
knapsack.ts
[class]{}-[func]{knapsackDFSMem}\n
knapsack.dart
[class]{}-[func]{knapsackDFSMem}\n
knapsack.rs
[class]{}-[func]{knapsack_dfs_mem}\n
knapsack.c
[class]{}-[func]{knapsackDFSMem}\n
knapsack.kt
[class]{}-[func]{knapsackDFSMem}\n
knapsack.rb
[class]{}-[func]{knapsack_dfs_mem}\n

\u4e0b\u306e\u56f3\u306f\u30e1\u30e2\u5316\u63a2\u7d22\u3067\u679d\u5208\u308a\u3055\u308c\u308b\u63a2\u7d22\u5206\u5c90\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002

\u56f3 14-19 \u00a0 0-1\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u554f\u984c\u306e\u30e1\u30e2\u5316\u63a2\u7d22\u518d\u5e30\u6728

"},{"location":"chapter_dynamic_programming/knapsack_problem/#3-3","title":"3. \u00a0 \u65b9\u6cd53\uff1a\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0","text":"

\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u306f\u672c\u8cea\u7684\u306b\u72b6\u614b\u9077\u79fb\u4e2d\u306b \\(dp\\) \u30c6\u30fc\u30d6\u30eb\u3092\u57cb\u3081\u308b\u3053\u3068\u3092\u542b\u307f\u307e\u3059\u3002\u30b3\u30fc\u30c9\u306f\u4e0b\u306e\u56f3\u306b\u793a\u3055\u308c\u3066\u3044\u307e\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby knapsack.py
def knapsack_dp(wgt: list[int], val: list[int], cap: int) -> int:\n    \"\"\"0-1 \u30ca\u30c3\u30d7\u30b5\u30c3\u30af\uff1a\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\"\"\"\n    n = len(wgt)\n    # dp \u30c6\u30fc\u30d6\u30eb\u3092\u521d\u671f\u5316\n    dp = [[0] * (cap + 1) for _ in range(n + 1)]\n    # \u72b6\u614b\u9077\u79fb\n    for i in range(1, n + 1):\n        for c in range(1, cap + 1):\n            if wgt[i - 1] > c:\n                # \u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u5bb9\u91cf\u3092\u8d85\u3048\u308b\u5834\u5408\u3001\u30a2\u30a4\u30c6\u30e0 i \u3092\u9078\u629e\u3057\u306a\u3044\n                dp[i][c] = dp[i - 1][c]\n            else:\n                # \u30a2\u30a4\u30c6\u30e0 i \u3092\u9078\u629e\u3057\u306a\u3044\u306e\u3068\u9078\u629e\u3059\u308b\u306e\u3068\u3067\u5927\u304d\u3044\u5024\n                dp[i][c] = max(dp[i - 1][c], dp[i - 1][c - wgt[i - 1]] + val[i - 1])\n    return dp[n][cap]\n
knapsack.cpp
/* 0-1 \u30ca\u30c3\u30d7\u30b5\u30c3\u30af\uff1a\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0 */\nint knapsackDP(vector<int> &wgt, vector<int> &val, int cap) {\n    int n = wgt.size();\n    // DP\u30c6\u30fc\u30d6\u30eb\u3092\u521d\u671f\u5316\n    vector<vector<int>> dp(n + 1, vector<int>(cap + 1, 0));\n    // \u72b6\u614b\u9077\u79fb\n    for (int i = 1; i <= n; i++) {\n        for (int c = 1; c <= cap; c++) {\n            if (wgt[i - 1] > c) {\n                // \u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u306e\u5bb9\u91cf\u3092\u8d85\u3048\u308b\u5834\u5408\u3001\u30a2\u30a4\u30c6\u30e0 i \u3092\u9078\u629e\u3057\u306a\u3044\n                dp[i][c] = dp[i - 1][c];\n            } else {\n                // \u9078\u629e\u3057\u306a\u3044\u5834\u5408\u3068\u30a2\u30a4\u30c6\u30e0 i \u3092\u9078\u629e\u3059\u308b\u5834\u5408\u306e\u3088\u308a\u5927\u304d\u3044\u5024\n                dp[i][c] = max(dp[i - 1][c], dp[i - 1][c - wgt[i - 1]] + val[i - 1]);\n            }\n        }\n    }\n    return dp[n][cap];\n}\n
knapsack.java
/* 0-1 \u30ca\u30c3\u30d7\u30b5\u30c3\u30af\uff1a\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0 */\nint knapsackDP(int[] wgt, int[] val, int cap) {\n    int n = wgt.length;\n    // DP\u30c6\u30fc\u30d6\u30eb\u3092\u521d\u671f\u5316\n    int[][] dp = new int[n + 1][cap + 1];\n    // \u72b6\u614b\u9077\u79fb\n    for (int i = 1; i <= n; i++) {\n        for (int c = 1; c <= cap; c++) {\n            if (wgt[i - 1] > c) {\n                // \u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u306e\u5bb9\u91cf\u3092\u8d85\u3048\u308b\u5834\u5408\u3001\u30a2\u30a4\u30c6\u30e0 i \u3092\u9078\u629e\u3057\u306a\u3044\n                dp[i][c] = dp[i - 1][c];\n            } else {\n                // \u9078\u629e\u3057\u306a\u3044\u5834\u5408\u3068\u30a2\u30a4\u30c6\u30e0 i \u3092\u9078\u629e\u3059\u308b\u5834\u5408\u306e\u3088\u308a\u5927\u304d\u3044\u5024\n                dp[i][c] = Math.max(dp[i - 1][c], dp[i - 1][c - wgt[i - 1]] + val[i - 1]);\n            }\n        }\n    }\n    return dp[n][cap];\n}\n
knapsack.cs
[class]{knapsack}-[func]{KnapsackDP}\n
knapsack.go
[class]{}-[func]{knapsackDP}\n
knapsack.swift
[class]{}-[func]{knapsackDP}\n
knapsack.js
[class]{}-[func]{knapsackDP}\n
knapsack.ts
[class]{}-[func]{knapsackDP}\n
knapsack.dart
[class]{}-[func]{knapsackDP}\n
knapsack.rs
[class]{}-[func]{knapsack_dp}\n
knapsack.c
[class]{}-[func]{knapsackDP}\n
knapsack.kt
[class]{}-[func]{knapsackDP}\n
knapsack.rb
[class]{}-[func]{knapsack_dp}\n

\u4e0b\u306e\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u6642\u9593\u8a08\u7b97\u91cf\u3068\u7a7a\u9593\u8a08\u7b97\u91cf\u306e\u4e21\u65b9\u304c\u914d\u5217 dp \u306e\u30b5\u30a4\u30ba\u3001\u3064\u307e\u308a \\(O(n \\times cap)\\) \u306b\u3088\u3063\u3066\u6c7a\u5b9a\u3055\u308c\u307e\u3059\u3002

<1><2><3><4><5><6><7><8><9><10><11><12><13><14>

\u56f3 14-20 \u00a0 0-1\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u554f\u984c\u306e\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u30d7\u30ed\u30bb\u30b9

"},{"location":"chapter_dynamic_programming/knapsack_problem/#4","title":"4. \u00a0 \u7a7a\u9593\u6700\u9069\u5316","text":"

\u5404\u72b6\u614b\u306f\u4e0a\u306e\u884c\u306e\u72b6\u614b\u306e\u307f\u306b\u95a2\u9023\u3059\u308b\u305f\u3081\u30012\u3064\u306e\u914d\u5217\u3092\u4f7f\u7528\u3057\u3066\u30ed\u30fc\u30ea\u30f3\u30b0\u524d\u9032\u3055\u305b\u3001\u7a7a\u9593\u8a08\u7b97\u91cf\u3092 \\(O(n^2)\\) \u304b\u3089 \\(O(n)\\) \u306b\u524a\u6e1b\u3067\u304d\u307e\u3059\u3002

\u3055\u3089\u306b\u8003\u3048\u3066\u307f\u308b\u3068\u30011\u3064\u306e\u914d\u5217\u3060\u3051\u3067\u7a7a\u9593\u6700\u9069\u5316\u3092\u9054\u6210\u3067\u304d\u308b\u3067\u3057\u3087\u3046\u304b\uff1f\u5404\u72b6\u614b\u304c\u76f4\u63a5\u4e0a\u306e\u30bb\u30eb\u307e\u305f\u306f\u5de6\u4e0a\u306e\u30bb\u30eb\u304b\u3089\u9077\u79fb\u3059\u308b\u3053\u3068\u304c\u89b3\u5bdf\u3067\u304d\u307e\u3059\u3002\u914d\u5217\u304c1\u3064\u3057\u304b\u306a\u3044\u5834\u5408\u3001\\(i\\) \u884c\u76ee\u306e\u8d70\u67fb\u3092\u958b\u59cb\u3059\u308b\u3068\u304d\u3001\u305d\u306e\u914d\u5217\u306f\u307e\u3060 \\(i-1\\) \u884c\u76ee\u306e\u72b6\u614b\u3092\u4fdd\u5b58\u3057\u3066\u3044\u307e\u3059\u3002

\u4e0b\u306e\u56f3\u306f\u5358\u4e00\u914d\u5217\u3067\u306e \\(i = 1\\) \u884c\u76ee\u304b\u3089 \\(i = 2\\) \u884c\u76ee\u3078\u306e\u9077\u79fb\u30d7\u30ed\u30bb\u30b9\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002\u901a\u5e38\u9806\u5e8f\u8d70\u67fb\u3068\u9006\u9806\u8d70\u67fb\u306e\u9055\u3044\u306b\u3064\u3044\u3066\u8003\u3048\u3066\u307f\u3066\u304f\u3060\u3055\u3044\u3002

<1><2><3><4><5><6>

\u56f3 14-21 \u00a0 0-1\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u306e\u7a7a\u9593\u6700\u9069\u5316\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u30d7\u30ed\u30bb\u30b9

\u30b3\u30fc\u30c9\u5b9f\u88c5\u3067\u306f\u3001\u914d\u5217 dp \u306e\u6700\u521d\u306e\u6b21\u5143 \\(i\\) \u3092\u524a\u9664\u3057\u3001\u5185\u5074\u306e\u30eb\u30fc\u30d7\u3092\u9006\u8d70\u67fb\u306b\u5909\u66f4\u3059\u308b\u3060\u3051\u3067\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby knapsack.py
def knapsack_dp_comp(wgt: list[int], val: list[int], cap: int) -> int:\n    \"\"\"0-1 \u30ca\u30c3\u30d7\u30b5\u30c3\u30af\uff1a\u7a7a\u9593\u6700\u9069\u5316\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\"\"\"\n    n = len(wgt)\n    # dp \u30c6\u30fc\u30d6\u30eb\u3092\u521d\u671f\u5316\n    dp = [0] * (cap + 1)\n    # \u72b6\u614b\u9077\u79fb\n    for i in range(1, n + 1):\n        # \u9006\u9806\u3067\u8d70\u67fb\n        for c in range(cap, 0, -1):\n            if wgt[i - 1] > c:\n                # \u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u5bb9\u91cf\u3092\u8d85\u3048\u308b\u5834\u5408\u3001\u30a2\u30a4\u30c6\u30e0 i \u3092\u9078\u629e\u3057\u306a\u3044\n                dp[c] = dp[c]\n            else:\n                # \u30a2\u30a4\u30c6\u30e0 i \u3092\u9078\u629e\u3057\u306a\u3044\u306e\u3068\u9078\u629e\u3059\u308b\u306e\u3068\u3067\u5927\u304d\u3044\u5024\n                dp[c] = max(dp[c], dp[c - wgt[i - 1]] + val[i - 1])\n    return dp[cap]\n
knapsack.cpp
/* 0-1 \u30ca\u30c3\u30d7\u30b5\u30c3\u30af\uff1a\u7a7a\u9593\u6700\u9069\u5316\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0 */\nint knapsackDPComp(vector<int> &wgt, vector<int> &val, int cap) {\n    int n = wgt.size();\n    // DP\u30c6\u30fc\u30d6\u30eb\u3092\u521d\u671f\u5316\n    vector<int> dp(cap + 1, 0);\n    // \u72b6\u614b\u9077\u79fb\n    for (int i = 1; i <= n; i++) {\n        // \u9006\u9806\u3067\u8d70\u67fb\n        for (int c = cap; c >= 1; c--) {\n            if (wgt[i - 1] <= c) {\n                // \u9078\u629e\u3057\u306a\u3044\u5834\u5408\u3068\u30a2\u30a4\u30c6\u30e0 i \u3092\u9078\u629e\u3059\u308b\u5834\u5408\u306e\u3088\u308a\u5927\u304d\u3044\u5024\n                dp[c] = max(dp[c], dp[c - wgt[i - 1]] + val[i - 1]);\n            }\n        }\n    }\n    return dp[cap];\n}\n
knapsack.java
/* 0-1 \u30ca\u30c3\u30d7\u30b5\u30c3\u30af\uff1a\u7a7a\u9593\u6700\u9069\u5316\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0 */\nint knapsackDPComp(int[] wgt, int[] val, int cap) {\n    int n = wgt.length;\n    // DP\u30c6\u30fc\u30d6\u30eb\u3092\u521d\u671f\u5316\n    int[] dp = new int[cap + 1];\n    // \u72b6\u614b\u9077\u79fb\n    for (int i = 1; i <= n; i++) {\n        // \u9006\u9806\u3067\u8d70\u67fb\n        for (int c = cap; c >= 1; c--) {\n            if (wgt[i - 1] <= c) {\n                // \u9078\u629e\u3057\u306a\u3044\u5834\u5408\u3068\u30a2\u30a4\u30c6\u30e0 i \u3092\u9078\u629e\u3059\u308b\u5834\u5408\u306e\u3088\u308a\u5927\u304d\u3044\u5024\n                dp[c] = Math.max(dp[c], dp[c - wgt[i - 1]] + val[i - 1]);\n            }\n        }\n    }\n    return dp[cap];\n}\n
knapsack.cs
[class]{knapsack}-[func]{KnapsackDPComp}\n
knapsack.go
[class]{}-[func]{knapsackDPComp}\n
knapsack.swift
[class]{}-[func]{knapsackDPComp}\n
knapsack.js
[class]{}-[func]{knapsackDPComp}\n
knapsack.ts
[class]{}-[func]{knapsackDPComp}\n
knapsack.dart
[class]{}-[func]{knapsackDPComp}\n
knapsack.rs
[class]{}-[func]{knapsack_dp_comp}\n
knapsack.c
[class]{}-[func]{knapsackDPComp}\n
knapsack.kt
[class]{}-[func]{knapsackDPComp}\n
knapsack.rb
[class]{}-[func]{knapsack_dp_comp}\n
"},{"location":"chapter_dynamic_programming/summary/","title":"14.7 \u00a0 \u307e\u3068\u3081","text":"

\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u554f\u984c

\u7de8\u96c6\u8ddd\u96e2\u554f\u984c

"},{"location":"chapter_dynamic_programming/unbounded_knapsack_problem/","title":"14.5 \u00a0 \u7121\u5236\u9650\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u554f\u984c","text":"

\u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u307e\u305a\u5225\u306e\u4e00\u822c\u7684\u306a\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u554f\u984c\u3067\u3042\u308b\u7121\u5236\u9650\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u3092\u89e3\u6c7a\u3057\u3001\u6b21\u306b\u305d\u306e\u7279\u6b8a\u30b1\u30fc\u30b9\u3067\u3042\u308b\u30b3\u30a4\u30f3\u4ea4\u63db\u554f\u984c\u3092\u63a2\u7d22\u3057\u307e\u3059\u3002

"},{"location":"chapter_dynamic_programming/unbounded_knapsack_problem/#1451","title":"14.5.1 \u00a0 \u7121\u5236\u9650\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u554f\u984c","text":"

Question

\\(n\\) \u500b\u306e\u30a2\u30a4\u30c6\u30e0\u304c\u4e0e\u3048\u3089\u308c\u3001\\(i\\) \u756a\u76ee\u306e\u30a2\u30a4\u30c6\u30e0\u306e\u91cd\u91cf\u306f \\(wgt[i-1]\\) \u3067\u5024\u306f \\(val[i-1]\\) \u3067\u3059\u3002\u5bb9\u91cf\u304c \\(cap\\) \u306e\u30d0\u30c3\u30af\u30d1\u30c3\u30af\u304c\u3042\u308a\u307e\u3059\u3002\u5404\u30a2\u30a4\u30c6\u30e0\u306f\u8907\u6570\u56de\u9078\u629e\u3067\u304d\u307e\u3059\u3002\u5bb9\u91cf\u3092\u8d85\u3048\u308b\u3053\u3068\u306a\u304f\u30d0\u30c3\u30af\u30d1\u30c3\u30af\u306b\u5165\u308c\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u30a2\u30a4\u30c6\u30e0\u306e\u6700\u5927\u5024\u306f\u4f55\u3067\u3059\u304b\uff1f\u4ee5\u4e0b\u306e\u4f8b\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002

\u56f3 14-22 \u00a0 \u7121\u5236\u9650\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u554f\u984c\u306e\u4f8b\u30c7\u30fc\u30bf

"},{"location":"chapter_dynamic_programming/unbounded_knapsack_problem/#1","title":"1. \u00a0 \u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u30a2\u30d7\u30ed\u30fc\u30c1","text":"

\u7121\u5236\u9650\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u554f\u984c\u306f0-1\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u554f\u984c\u3068\u975e\u5e38\u306b\u4f3c\u3066\u304a\u308a\u3001\u552f\u4e00\u306e\u9055\u3044\u306f\u30a2\u30a4\u30c6\u30e0\u3092\u9078\u629e\u3067\u304d\u308b\u56de\u6570\u306b\u5236\u9650\u304c\u306a\u3044\u3053\u3068\u3067\u3059\u3002

\u7121\u5236\u9650\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u554f\u984c\u306e\u30eb\u30fc\u30eb\u306e\u4e0b\u3067\u3001\u72b6\u614b \\([i, c]\\) \u306f2\u3064\u306e\u65b9\u6cd5\u3067\u5909\u5316\u3067\u304d\u307e\u3059\u3002

\u3057\u305f\u304c\u3063\u3066\u3001\u72b6\u614b\u9077\u79fb\u65b9\u7a0b\u5f0f\u306f\u6b21\u306e\u3088\u3046\u306b\u306a\u308a\u307e\u3059\uff1a

\\[ dp[i, c] = \\max(dp[i-1, c], dp[i, c - wgt[i-1]] + val[i-1]) \\]"},{"location":"chapter_dynamic_programming/unbounded_knapsack_problem/#2","title":"2. \u00a0 \u30b3\u30fc\u30c9\u5b9f\u88c5","text":"

2\u3064\u306e\u554f\u984c\u306e\u30b3\u30fc\u30c9\u3092\u6bd4\u8f03\u3059\u308b\u3068\u3001\u72b6\u614b\u9077\u79fb\u304c \\(i-1\\) \u304b\u3089 \\(i\\) \u306b\u5909\u308f\u308a\u3001\u6b8b\u308a\u306f\u5b8c\u5168\u306b\u540c\u4e00\u3067\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby unbounded_knapsack.py
def unbounded_knapsack_dp(wgt: list[int], val: list[int], cap: int) -> int:\n    \"\"\"\u5b8c\u5168\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\uff1a\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\"\"\"\n    n = len(wgt)\n    # dp \u30c6\u30fc\u30d6\u30eb\u3092\u521d\u671f\u5316\n    dp = [[0] * (cap + 1) for _ in range(n + 1)]\n    # \u72b6\u614b\u9077\u79fb\n    for i in range(1, n + 1):\n        for c in range(1, cap + 1):\n            if wgt[i - 1] > c:\n                # \u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u5bb9\u91cf\u3092\u8d85\u3048\u308b\u5834\u5408\u3001\u30a2\u30a4\u30c6\u30e0 i \u3092\u9078\u629e\u3057\u306a\u3044\n                dp[i][c] = dp[i - 1][c]\n            else:\n                # \u30a2\u30a4\u30c6\u30e0 i \u3092\u9078\u629e\u3057\u306a\u3044\u306e\u3068\u9078\u629e\u3059\u308b\u306e\u3068\u3067\u5927\u304d\u3044\u5024\n                dp[i][c] = max(dp[i - 1][c], dp[i][c - wgt[i - 1]] + val[i - 1])\n    return dp[n][cap]\n
unbounded_knapsack.cpp
/* \u5b8c\u5168\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\uff1a\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0 */\nint unboundedKnapsackDP(vector<int> &wgt, vector<int> &val, int cap) {\n    int n = wgt.size();\n    // DP\u30c6\u30fc\u30d6\u30eb\u3092\u521d\u671f\u5316\n    vector<vector<int>> dp(n + 1, vector<int>(cap + 1, 0));\n    // \u72b6\u614b\u9077\u79fb\n    for (int i = 1; i <= n; i++) {\n        for (int c = 1; c <= cap; c++) {\n            if (wgt[i - 1] > c) {\n                // \u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u306e\u5bb9\u91cf\u3092\u8d85\u3048\u308b\u5834\u5408\u3001\u30a2\u30a4\u30c6\u30e0 i \u3092\u9078\u629e\u3057\u306a\u3044\n                dp[i][c] = dp[i - 1][c];\n            } else {\n                // \u9078\u629e\u3057\u306a\u3044\u5834\u5408\u3068\u30a2\u30a4\u30c6\u30e0 i \u3092\u9078\u629e\u3059\u308b\u5834\u5408\u306e\u3088\u308a\u5927\u304d\u3044\u5024\n                dp[i][c] = max(dp[i - 1][c], dp[i][c - wgt[i - 1]] + val[i - 1]);\n            }\n        }\n    }\n    return dp[n][cap];\n}\n
unbounded_knapsack.java
/* \u5b8c\u5168\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\uff1a\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0 */\nint unboundedKnapsackDP(int[] wgt, int[] val, int cap) {\n    int n = wgt.length;\n    // DP\u30c6\u30fc\u30d6\u30eb\u3092\u521d\u671f\u5316\n    int[][] dp = new int[n + 1][cap + 1];\n    // \u72b6\u614b\u9077\u79fb\n    for (int i = 1; i <= n; i++) {\n        for (int c = 1; c <= cap; c++) {\n            if (wgt[i - 1] > c) {\n                // \u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u306e\u5bb9\u91cf\u3092\u8d85\u3048\u308b\u5834\u5408\u3001\u30a2\u30a4\u30c6\u30e0 i \u3092\u9078\u629e\u3057\u306a\u3044\n                dp[i][c] = dp[i - 1][c];\n            } else {\n                // \u9078\u629e\u3057\u306a\u3044\u5834\u5408\u3068\u30a2\u30a4\u30c6\u30e0 i \u3092\u9078\u629e\u3059\u308b\u5834\u5408\u306e\u3088\u308a\u5927\u304d\u3044\u5024\n                dp[i][c] = Math.max(dp[i - 1][c], dp[i][c - wgt[i - 1]] + val[i - 1]);\n            }\n        }\n    }\n    return dp[n][cap];\n}\n
unbounded_knapsack.cs
[class]{unbounded_knapsack}-[func]{UnboundedKnapsackDP}\n
unbounded_knapsack.go
[class]{}-[func]{unboundedKnapsackDP}\n
unbounded_knapsack.swift
[class]{}-[func]{unboundedKnapsackDP}\n
unbounded_knapsack.js
[class]{}-[func]{unboundedKnapsackDP}\n
unbounded_knapsack.ts
[class]{}-[func]{unboundedKnapsackDP}\n
unbounded_knapsack.dart
[class]{}-[func]{unboundedKnapsackDP}\n
unbounded_knapsack.rs
[class]{}-[func]{unbounded_knapsack_dp}\n
unbounded_knapsack.c
[class]{}-[func]{unboundedKnapsackDP}\n
unbounded_knapsack.kt
[class]{}-[func]{unboundedKnapsackDP}\n
unbounded_knapsack.rb
[class]{}-[func]{unbounded_knapsack_dp}\n
"},{"location":"chapter_dynamic_programming/unbounded_knapsack_problem/#3","title":"3. \u00a0 \u7a7a\u9593\u6700\u9069\u5316","text":"

\u73fe\u5728\u306e\u72b6\u614b\u306f\u5de6\u3068\u4e0a\u306e\u72b6\u614b\u304b\u3089\u6765\u308b\u305f\u3081\u3001\u7a7a\u9593\u6700\u9069\u5316\u89e3\u6cd5\u306f \\(dp\\) \u30c6\u30fc\u30d6\u30eb\u306e\u5404\u884c\u306b\u5bfe\u3057\u3066\u524d\u65b9\u8d70\u67fb\u3092\u5b9f\u884c\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

\u3053\u306e\u8d70\u67fb\u9806\u5e8f\u306f0-1\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u306e\u5834\u5408\u3068\u306f\u9006\u3067\u3059\u3002\u9055\u3044\u3092\u7406\u89e3\u3059\u308b\u305f\u3081\u306b\u4e0b\u306e\u56f3\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002

<1><2><3><4><5><6>

\u56f3 14-23 \u00a0 \u7a7a\u9593\u6700\u9069\u5316\u5f8c\u306e\u7121\u5236\u9650\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u554f\u984c\u306e\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u30d7\u30ed\u30bb\u30b9

\u30b3\u30fc\u30c9\u5b9f\u88c5\u306f\u975e\u5e38\u306b\u7c21\u5358\u3067\u3001\u914d\u5217 dp \u306e\u6700\u521d\u306e\u6b21\u5143\u3092\u524a\u9664\u3059\u308b\u3060\u3051\u3067\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby unbounded_knapsack.py
def unbounded_knapsack_dp_comp(wgt: list[int], val: list[int], cap: int) -> int:\n    \"\"\"\u5b8c\u5168\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\uff1a\u7a7a\u9593\u6700\u9069\u5316\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\"\"\"\n    n = len(wgt)\n    # dp \u30c6\u30fc\u30d6\u30eb\u3092\u521d\u671f\u5316\n    dp = [0] * (cap + 1)\n    # \u72b6\u614b\u9077\u79fb\n    for i in range(1, n + 1):\n        # \u9806\u5e8f\u3067\u8d70\u67fb\n        for c in range(1, cap + 1):\n            if wgt[i - 1] > c:\n                # \u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u5bb9\u91cf\u3092\u8d85\u3048\u308b\u5834\u5408\u3001\u30a2\u30a4\u30c6\u30e0 i \u3092\u9078\u629e\u3057\u306a\u3044\n                dp[c] = dp[c]\n            else:\n                # \u30a2\u30a4\u30c6\u30e0 i \u3092\u9078\u629e\u3057\u306a\u3044\u306e\u3068\u9078\u629e\u3059\u308b\u306e\u3068\u3067\u5927\u304d\u3044\u5024\n                dp[c] = max(dp[c], dp[c - wgt[i - 1]] + val[i - 1])\n    return dp[cap]\n
unbounded_knapsack.cpp
/* \u5b8c\u5168\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\uff1a\u7a7a\u9593\u6700\u9069\u5316\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0 */\nint unboundedKnapsackDPComp(vector<int> &wgt, vector<int> &val, int cap) {\n    int n = wgt.size();\n    // DP\u30c6\u30fc\u30d6\u30eb\u3092\u521d\u671f\u5316\n    vector<int> dp(cap + 1, 0);\n    // \u72b6\u614b\u9077\u79fb\n    for (int i = 1; i <= n; i++) {\n        for (int c = 1; c <= cap; c++) {\n            if (wgt[i - 1] > c) {\n                // \u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u306e\u5bb9\u91cf\u3092\u8d85\u3048\u308b\u5834\u5408\u3001\u30a2\u30a4\u30c6\u30e0 i \u3092\u9078\u629e\u3057\u306a\u3044\n                dp[c] = dp[c];\n            } else {\n                // \u9078\u629e\u3057\u306a\u3044\u5834\u5408\u3068\u30a2\u30a4\u30c6\u30e0 i \u3092\u9078\u629e\u3059\u308b\u5834\u5408\u306e\u3088\u308a\u5927\u304d\u3044\u5024\n                dp[c] = max(dp[c], dp[c - wgt[i - 1]] + val[i - 1]);\n            }\n        }\n    }\n    return dp[cap];\n}\n
unbounded_knapsack.java
/* \u5b8c\u5168\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\uff1a\u7a7a\u9593\u6700\u9069\u5316\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0 */\nint unboundedKnapsackDPComp(int[] wgt, int[] val, int cap) {\n    int n = wgt.length;\n    // DP\u30c6\u30fc\u30d6\u30eb\u3092\u521d\u671f\u5316\n    int[] dp = new int[cap + 1];\n    // \u72b6\u614b\u9077\u79fb\n    for (int i = 1; i <= n; i++) {\n        for (int c = 1; c <= cap; c++) {\n            if (wgt[i - 1] > c) {\n                // \u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u306e\u5bb9\u91cf\u3092\u8d85\u3048\u308b\u5834\u5408\u3001\u30a2\u30a4\u30c6\u30e0 i \u3092\u9078\u629e\u3057\u306a\u3044\n                dp[c] = dp[c];\n            } else {\n                // \u9078\u629e\u3057\u306a\u3044\u5834\u5408\u3068\u30a2\u30a4\u30c6\u30e0 i \u3092\u9078\u629e\u3059\u308b\u5834\u5408\u306e\u3088\u308a\u5927\u304d\u3044\u5024\n                dp[c] = Math.max(dp[c], dp[c - wgt[i - 1]] + val[i - 1]);\n            }\n        }\n    }\n    return dp[cap];\n}\n
unbounded_knapsack.cs
[class]{unbounded_knapsack}-[func]{UnboundedKnapsackDPComp}\n
unbounded_knapsack.go
[class]{}-[func]{unboundedKnapsackDPComp}\n
unbounded_knapsack.swift
[class]{}-[func]{unboundedKnapsackDPComp}\n
unbounded_knapsack.js
[class]{}-[func]{unboundedKnapsackDPComp}\n
unbounded_knapsack.ts
[class]{}-[func]{unboundedKnapsackDPComp}\n
unbounded_knapsack.dart
[class]{}-[func]{unboundedKnapsackDPComp}\n
unbounded_knapsack.rs
[class]{}-[func]{unbounded_knapsack_dp_comp}\n
unbounded_knapsack.c
[class]{}-[func]{unboundedKnapsackDPComp}\n
unbounded_knapsack.kt
[class]{}-[func]{unboundedKnapsackDPComp}\n
unbounded_knapsack.rb
[class]{}-[func]{unbounded_knapsack_dp_comp}\n
"},{"location":"chapter_dynamic_programming/unbounded_knapsack_problem/#1452","title":"14.5.2 \u00a0 \u30b3\u30a4\u30f3\u4ea4\u63db\u554f\u984c","text":"

\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u554f\u984c\u306f\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u554f\u984c\u306e\u5927\u304d\u306a\u30af\u30e9\u30b9\u306e\u4ee3\u8868\u3067\u3042\u308a\u3001\u30b3\u30a4\u30f3\u4ea4\u63db\u554f\u984c\u306a\u3069\u591a\u304f\u306e\u5909\u7a2e\u304c\u3042\u308a\u307e\u3059\u3002

Question

\\(n\\) \u7a2e\u985e\u306e\u30b3\u30a4\u30f3\u304c\u4e0e\u3048\u3089\u308c\u3001\\(i\\) \u756a\u76ee\u306e\u7a2e\u985e\u306e\u30b3\u30a4\u30f3\u306e\u984d\u9762\u306f \\(coins[i - 1]\\) \u3067\u3001\u76ee\u6a19\u91d1\u984d\u306f \\(amt\\) \u3067\u3059\u3002\u5404\u7a2e\u985e\u306e\u30b3\u30a4\u30f3\u306f\u8907\u6570\u56de\u9078\u629e\u3067\u304d\u307e\u3059\u3002\u76ee\u6a19\u91d1\u984d\u3092\u69cb\u6210\u3059\u308b\u306e\u306b\u5fc5\u8981\u306a\u6700\u5c0f\u30b3\u30a4\u30f3\u6570\u306f\u4f55\u3067\u3059\u304b\uff1f\u76ee\u6a19\u91d1\u984d\u3092\u69cb\u6210\u3067\u304d\u306a\u3044\u5834\u5408\u306f \\(-1\\) \u3092\u8fd4\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u4ee5\u4e0b\u306e\u4f8b\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002

\u56f3 14-24 \u00a0 \u30b3\u30a4\u30f3\u4ea4\u63db\u554f\u984c\u306e\u4f8b\u30c7\u30fc\u30bf

"},{"location":"chapter_dynamic_programming/unbounded_knapsack_problem/#1_1","title":"1. \u00a0 \u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u30a2\u30d7\u30ed\u30fc\u30c1","text":"

\u30b3\u30a4\u30f3\u4ea4\u63db\u306f\u7121\u5236\u9650\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u554f\u984c\u306e\u7279\u6b8a\u30b1\u30fc\u30b9\u3068\u898b\u306a\u3059\u3053\u3068\u304c\u3067\u304d\u3001\u4ee5\u4e0b\u306e\u985e\u4f3c\u70b9\u3068\u76f8\u9055\u70b9\u3092\u5171\u6709\u3057\u3066\u3044\u307e\u3059\u3002

\u7b2c1\u30b9\u30c6\u30c3\u30d7\uff1a\u5404\u30e9\u30a6\u30f3\u30c9\u306e\u610f\u601d\u6c7a\u5b9a\u3092\u8003\u3048\u3001\u72b6\u614b\u3092\u5b9a\u7fa9\u3057\u3001\u305d\u308c\u306b\u3088\u308a \\(dp\\) \u30c6\u30fc\u30d6\u30eb\u3092\u5c0e\u51fa\u3059\u308b

\u72b6\u614b \\([i, a]\\) \u306f\u90e8\u5206\u554f\u984c\u306b\u5bfe\u5fdc\u3057\u307e\u3059\uff1a\u6700\u521d\u306e \\(i\\) \u7a2e\u985e\u306e\u30b3\u30a4\u30f3\u3092\u4f7f\u7528\u3057\u3066\u91d1\u984d \\(a\\) \u3092\u69cb\u6210\u3067\u304d\u308b\u6700\u5c0f\u30b3\u30a4\u30f3\u6570\u3001\\(dp[i, a]\\) \u3068\u8868\u8a18\u3055\u308c\u307e\u3059\u3002

\u4e8c\u6b21\u5143 \\(dp\\) \u30c6\u30fc\u30d6\u30eb\u306e\u30b5\u30a4\u30ba\u306f \\((n+1) \\times (amt+1)\\) \u3067\u3059\u3002

\u7b2c2\u30b9\u30c6\u30c3\u30d7\uff1a\u6700\u9069\u90e8\u5206\u69cb\u9020\u3092\u7279\u5b9a\u3057\u3001\u72b6\u614b\u9077\u79fb\u65b9\u7a0b\u5f0f\u3092\u5c0e\u51fa\u3059\u308b

\u3053\u306e\u554f\u984c\u306f\u72b6\u614b\u9077\u79fb\u65b9\u7a0b\u5f0f\u306e2\u3064\u306e\u5074\u9762\u3067\u7121\u5236\u9650\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u554f\u984c\u3068\u7570\u306a\u308a\u307e\u3059\u3002

\\[ dp[i, a] = \\min(dp[i-1, a], dp[i, a - coins[i-1]] + 1) \\]

\u7b2c3\u30b9\u30c6\u30c3\u30d7\uff1a\u5883\u754c\u6761\u4ef6\u3068\u72b6\u614b\u9077\u79fb\u9806\u5e8f\u3092\u5b9a\u7fa9\u3059\u308b

\u76ee\u6a19\u91d1\u984d\u304c \\(0\\) \u306e\u5834\u5408\u3001\u305d\u308c\u3092\u69cb\u6210\u3059\u308b\u306e\u306b\u5fc5\u8981\u306a\u6700\u5c0f\u30b3\u30a4\u30f3\u6570\u306f \\(0\\) \u3067\u3042\u308b\u305f\u3081\u3001\u6700\u521d\u306e\u5217\u306e\u3059\u3079\u3066\u306e \\(dp[i, 0]\\) \u306f \\(0\\) \u3067\u3059\u3002

\u30b3\u30a4\u30f3\u304c\u306a\u3044\u5834\u5408\u3001**\u4efb\u610f\u306e\u91d1\u984d >0 \u3092\u69cb\u6210\u3059\u308b\u3053\u3068\u306f\u4e0d\u53ef\u80fd**\u3067\u3042\u308a\u3001\u3053\u308c\u306f\u7121\u52b9\u306a\u89e3\u3067\u3059\u3002\u72b6\u614b\u9077\u79fb\u65b9\u7a0b\u5f0f\u306e \\(\\min()\\) \u95a2\u6570\u304c\u7121\u52b9\u306a\u89e3\u3092\u8a8d\u8b58\u3057\u3066\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\u3067\u304d\u308b\u3088\u3046\u306b\u3001\\(+\\infty\\) \u3092\u4f7f\u7528\u3057\u3066\u305d\u308c\u3089\u3092\u8868\u73fe\u3059\u308b\u3053\u3068\u3092\u691c\u8a0e\u3057\u3001\u3064\u307e\u308a\u6700\u521d\u306e\u884c\u306e\u3059\u3079\u3066\u306e \\(dp[0, a]\\) \u3092 \\(+\\infty\\) \u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002

"},{"location":"chapter_dynamic_programming/unbounded_knapsack_problem/#2_1","title":"2. \u00a0 \u30b3\u30fc\u30c9\u5b9f\u88c5","text":"

\u307b\u3068\u3093\u3069\u306e\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\u306f \\(+\\infty\\) \u5909\u6570\u3092\u63d0\u4f9b\u3057\u3066\u304a\u3089\u305a\u3001\u6574\u6570 int \u306e\u6700\u5927\u5024\u306e\u307f\u3092\u4ee3\u66ff\u3068\u3057\u3066\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u30aa\u30fc\u30d0\u30fc\u30d5\u30ed\u30fc\u304c\u767a\u751f\u3059\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\uff1a\u72b6\u614b\u9077\u79fb\u65b9\u7a0b\u5f0f\u306e \\(+1\\) \u6f14\u7b97\u304c\u30aa\u30fc\u30d0\u30fc\u30d5\u30ed\u30fc\u3059\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002

\u3053\u306e\u7406\u7531\u3067\u3001\u6570\u5024 \\(amt + 1\\) \u3092\u4f7f\u7528\u3057\u3066\u7121\u52b9\u306a\u89e3\u3092\u8868\u3057\u307e\u3059\u3002\u306a\u305c\u306a\u3089\u3001\\(amt\\) \u3092\u69cb\u6210\u3059\u308b\u306e\u306b\u5fc5\u8981\u306a\u6700\u5927\u30b3\u30a4\u30f3\u6570\u306f\u6700\u5927\u3067\u3082 \\(amt\\) \u3060\u304b\u3089\u3067\u3059\u3002\u7d50\u679c\u3092\u8fd4\u3059\u524d\u306b\u3001\\(dp[n, amt]\\) \u304c \\(amt + 1\\) \u306b\u7b49\u3057\u3044\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\u3057\u3001\u305d\u3046\u3067\u3042\u308c\u3070 \\(-1\\) \u3092\u8fd4\u3057\u3001\u76ee\u6a19\u91d1\u984d\u3092\u69cb\u6210\u3067\u304d\u306a\u3044\u3053\u3068\u3092\u793a\u3057\u307e\u3059\u3002\u30b3\u30fc\u30c9\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby coin_change.py
def coin_change_dp(coins: list[int], amt: int) -> int:\n    \"\"\"\u786c\u8ca8\u4ea4\u63db\uff1a\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\"\"\"\n    n = len(coins)\n    MAX = amt + 1\n    # dp \u30c6\u30fc\u30d6\u30eb\u3092\u521d\u671f\u5316\n    dp = [[0] * (amt + 1) for _ in range(n + 1)]\n    # \u72b6\u614b\u9077\u79fb\uff1a\u6700\u521d\u306e\u884c\u3068\u6700\u521d\u306e\u5217\n    for a in range(1, amt + 1):\n        dp[0][a] = MAX\n    # \u72b6\u614b\u9077\u79fb\uff1a\u6b8b\u308a\u306e\u884c\u3068\u5217\n    for i in range(1, n + 1):\n        for a in range(1, amt + 1):\n            if coins[i - 1] > a:\n                # \u76ee\u6a19\u91d1\u984d\u3092\u8d85\u3048\u308b\u5834\u5408\u3001\u786c\u8ca8 i \u3092\u9078\u629e\u3057\u306a\u3044\n                dp[i][a] = dp[i - 1][a]\n            else:\n                # \u786c\u8ca8 i \u3092\u9078\u629e\u3057\u306a\u3044\u306e\u3068\u9078\u629e\u3059\u308b\u306e\u3068\u3067\u5c0f\u3055\u3044\u5024\n                dp[i][a] = min(dp[i - 1][a], dp[i][a - coins[i - 1]] + 1)\n    return dp[n][amt] if dp[n][amt] != MAX else -1\n
coin_change.cpp
/* \u786c\u8ca8\u4e21\u66ff\uff1a\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0 */\nint coinChangeDP(vector<int> &coins, int amt) {\n    int n = coins.size();\n    int MAX = amt + 1;\n    // DP\u30c6\u30fc\u30d6\u30eb\u3092\u521d\u671f\u5316\n    vector<vector<int>> dp(n + 1, vector<int>(amt + 1, 0));\n    // \u72b6\u614b\u9077\u79fb\uff1a\u6700\u521d\u306e\u884c\u3068\u6700\u521d\u306e\u5217\n    for (int a = 1; a <= amt; a++) {\n        dp[0][a] = MAX;\n    }\n    // \u72b6\u614b\u9077\u79fb\uff1a\u6b8b\u308a\u306e\u884c\u3068\u5217\n    for (int i = 1; i <= n; i++) {\n        for (int a = 1; a <= amt; a++) {\n            if (coins[i - 1] > a) {\n                // \u76ee\u6a19\u91d1\u984d\u3092\u8d85\u3048\u308b\u5834\u5408\u3001\u786c\u8ca8 i \u3092\u9078\u629e\u3057\u306a\u3044\n                dp[i][a] = dp[i - 1][a];\n            } else {\n                // \u9078\u629e\u3057\u306a\u3044\u5834\u5408\u3068\u786c\u8ca8 i \u3092\u9078\u629e\u3059\u308b\u5834\u5408\u306e\u3088\u308a\u5c0f\u3055\u3044\u5024\n                dp[i][a] = min(dp[i - 1][a], dp[i][a - coins[i - 1]] + 1);\n            }\n        }\n    }\n    return dp[n][amt] != MAX ? dp[n][amt] : -1;\n}\n
coin_change.java
/* \u786c\u8ca8\u4e21\u66ff\uff1a\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0 */\nint coinChangeDP(int[] coins, int amt) {\n    int n = coins.length;\n    int MAX = amt + 1;\n    // DP\u30c6\u30fc\u30d6\u30eb\u3092\u521d\u671f\u5316\n    int[][] dp = new int[n + 1][amt + 1];\n    // \u72b6\u614b\u9077\u79fb\uff1a\u6700\u521d\u306e\u884c\u3068\u6700\u521d\u306e\u5217\n    for (int a = 1; a <= amt; a++) {\n        dp[0][a] = MAX;\n    }\n    // \u72b6\u614b\u9077\u79fb\uff1a\u6b8b\u308a\u306e\u884c\u3068\u5217\n    for (int i = 1; i <= n; i++) {\n        for (int a = 1; a <= amt; a++) {\n            if (coins[i - 1] > a) {\n                // \u76ee\u6a19\u91d1\u984d\u3092\u8d85\u3048\u308b\u5834\u5408\u3001\u786c\u8ca8 i \u3092\u9078\u629e\u3057\u306a\u3044\n                dp[i][a] = dp[i - 1][a];\n            } else {\n                // \u9078\u629e\u3057\u306a\u3044\u5834\u5408\u3068\u786c\u8ca8 i \u3092\u9078\u629e\u3059\u308b\u5834\u5408\u306e\u3088\u308a\u5c0f\u3055\u3044\u5024\n                dp[i][a] = Math.min(dp[i - 1][a], dp[i][a - coins[i - 1]] + 1);\n            }\n        }\n    }\n    return dp[n][amt] != MAX ? dp[n][amt] : -1;\n}\n
coin_change.cs
[class]{coin_change}-[func]{CoinChangeDP}\n
coin_change.go
[class]{}-[func]{coinChangeDP}\n
coin_change.swift
[class]{}-[func]{coinChangeDP}\n
coin_change.js
[class]{}-[func]{coinChangeDP}\n
coin_change.ts
[class]{}-[func]{coinChangeDP}\n
coin_change.dart
[class]{}-[func]{coinChangeDP}\n
coin_change.rs
[class]{}-[func]{coin_change_dp}\n
coin_change.c
[class]{}-[func]{coinChangeDP}\n
coin_change.kt
[class]{}-[func]{coinChangeDP}\n
coin_change.rb
[class]{}-[func]{coin_change_dp}\n

\u4e0b\u306e\u56f3\u306f\u30b3\u30a4\u30f3\u4ea4\u63db\u554f\u984c\u306e\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u30d7\u30ed\u30bb\u30b9\u3092\u793a\u3057\u3066\u304a\u308a\u3001\u7121\u5236\u9650\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u554f\u984c\u3068\u975e\u5e38\u306b\u4f3c\u3066\u3044\u307e\u3059\u3002

<1><2><3><4><5><6><7><8><9><10><11><12><13><14><15>

\u56f3 14-25 \u00a0 \u30b3\u30a4\u30f3\u4ea4\u63db\u554f\u984c\u306e\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u30d7\u30ed\u30bb\u30b9

"},{"location":"chapter_dynamic_programming/unbounded_knapsack_problem/#3_1","title":"3. \u00a0 \u7a7a\u9593\u6700\u9069\u5316","text":"

\u30b3\u30a4\u30f3\u4ea4\u63db\u554f\u984c\u306e\u7a7a\u9593\u6700\u9069\u5316\u306f\u7121\u5236\u9650\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u554f\u984c\u3068\u540c\u3058\u65b9\u6cd5\u3067\u51e6\u7406\u3055\u308c\u307e\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby coin_change.py
def coin_change_dp_comp(coins: list[int], amt: int) -> int:\n    \"\"\"\u786c\u8ca8\u4ea4\u63db\uff1a\u7a7a\u9593\u6700\u9069\u5316\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\"\"\"\n    n = len(coins)\n    MAX = amt + 1\n    # dp \u30c6\u30fc\u30d6\u30eb\u3092\u521d\u671f\u5316\n    dp = [MAX] * (amt + 1)\n    dp[0] = 0\n    # \u72b6\u614b\u9077\u79fb\n    for i in range(1, n + 1):\n        # \u9806\u5e8f\u3067\u8d70\u67fb\n        for a in range(1, amt + 1):\n            if coins[i - 1] > a:\n                # \u76ee\u6a19\u91d1\u984d\u3092\u8d85\u3048\u308b\u5834\u5408\u3001\u786c\u8ca8 i \u3092\u9078\u629e\u3057\u306a\u3044\n                dp[a] = dp[a]\n            else:\n                # \u786c\u8ca8 i \u3092\u9078\u629e\u3057\u306a\u3044\u306e\u3068\u9078\u629e\u3059\u308b\u306e\u3068\u3067\u5c0f\u3055\u3044\u5024\n                dp[a] = min(dp[a], dp[a - coins[i - 1]] + 1)\n    return dp[amt] if dp[amt] != MAX else -1\n
coin_change.cpp
/* \u786c\u8ca8\u4e21\u66ff\uff1a\u7a7a\u9593\u6700\u9069\u5316\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0 */\nint coinChangeDPComp(vector<int> &coins, int amt) {\n    int n = coins.size();\n    int MAX = amt + 1;\n    // DP\u30c6\u30fc\u30d6\u30eb\u3092\u521d\u671f\u5316\n    vector<int> dp(amt + 1, MAX);\n    dp[0] = 0;\n    // \u72b6\u614b\u9077\u79fb\n    for (int i = 1; i <= n; i++) {\n        for (int a = 1; a <= amt; a++) {\n            if (coins[i - 1] > a) {\n                // \u76ee\u6a19\u91d1\u984d\u3092\u8d85\u3048\u308b\u5834\u5408\u3001\u786c\u8ca8 i \u3092\u9078\u629e\u3057\u306a\u3044\n                dp[a] = dp[a];\n            } else {\n                // \u9078\u629e\u3057\u306a\u3044\u5834\u5408\u3068\u786c\u8ca8 i \u3092\u9078\u629e\u3059\u308b\u5834\u5408\u306e\u3088\u308a\u5c0f\u3055\u3044\u5024\n                dp[a] = min(dp[a], dp[a - coins[i - 1]] + 1);\n            }\n        }\n    }\n    return dp[amt] != MAX ? dp[amt] : -1;\n}\n
coin_change.java
/* \u786c\u8ca8\u4e21\u66ff\uff1a\u7a7a\u9593\u6700\u9069\u5316\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0 */\nint coinChangeDPComp(int[] coins, int amt) {\n    int n = coins.length;\n    int MAX = amt + 1;\n    // DP\u30c6\u30fc\u30d6\u30eb\u3092\u521d\u671f\u5316\n    int[] dp = new int[amt + 1];\n    Arrays.fill(dp, MAX);\n    dp[0] = 0;\n    // \u72b6\u614b\u9077\u79fb\n    for (int i = 1; i <= n; i++) {\n        for (int a = 1; a <= amt; a++) {\n            if (coins[i - 1] > a) {\n                // \u76ee\u6a19\u91d1\u984d\u3092\u8d85\u3048\u308b\u5834\u5408\u3001\u786c\u8ca8 i \u3092\u9078\u629e\u3057\u306a\u3044\n                dp[a] = dp[a];\n            } else {\n                // \u9078\u629e\u3057\u306a\u3044\u5834\u5408\u3068\u786c\u8ca8 i \u3092\u9078\u629e\u3059\u308b\u5834\u5408\u306e\u3088\u308a\u5c0f\u3055\u3044\u5024\n                dp[a] = Math.min(dp[a], dp[a - coins[i - 1]] + 1);\n            }\n        }\n    }\n    return dp[amt] != MAX ? dp[amt] : -1;\n}\n
coin_change.cs
[class]{coin_change}-[func]{CoinChangeDPComp}\n
coin_change.go
[class]{}-[func]{coinChangeDPComp}\n
coin_change.swift
[class]{}-[func]{coinChangeDPComp}\n
coin_change.js
[class]{}-[func]{coinChangeDPComp}\n
coin_change.ts
[class]{}-[func]{coinChangeDPComp}\n
coin_change.dart
[class]{}-[func]{coinChangeDPComp}\n
coin_change.rs
[class]{}-[func]{coin_change_dp_comp}\n
coin_change.c
[class]{}-[func]{coinChangeDPComp}\n
coin_change.kt
[class]{}-[func]{coinChangeDPComp}\n
coin_change.rb
[class]{}-[func]{coin_change_dp_comp}\n
"},{"location":"chapter_dynamic_programming/unbounded_knapsack_problem/#1453-ii","title":"14.5.3 \u00a0 \u30b3\u30a4\u30f3\u4ea4\u63db\u554f\u984cII","text":"

Question

\\(n\\) \u7a2e\u985e\u306e\u30b3\u30a4\u30f3\u304c\u4e0e\u3048\u3089\u308c\u3001\\(i\\) \u756a\u76ee\u306e\u7a2e\u985e\u306e\u30b3\u30a4\u30f3\u306e\u984d\u9762\u306f \\(coins[i - 1]\\) \u3067\u3001\u76ee\u6a19\u91d1\u984d\u306f \\(amt\\) \u3067\u3059\u3002\u5404\u7a2e\u985e\u306e\u30b3\u30a4\u30f3\u306f\u8907\u6570\u56de\u9078\u629e\u3067\u304d\u3001\u76ee\u6a19\u91d1\u984d\u3092\u69cb\u6210\u3067\u304d\u308b\u30b3\u30a4\u30f3\u306e\u7d44\u307f\u5408\u308f\u305b\u306f\u4f55\u901a\u308a\u3042\u308a\u307e\u3059\u304b\u3002\u4ee5\u4e0b\u306e\u4f8b\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002

\u56f3 14-26 \u00a0 \u30b3\u30a4\u30f3\u4ea4\u63db\u554f\u984cII\u306e\u4f8b\u30c7\u30fc\u30bf

"},{"location":"chapter_dynamic_programming/unbounded_knapsack_problem/#1_2","title":"1. \u00a0 \u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u30a2\u30d7\u30ed\u30fc\u30c1","text":"

\u524d\u306e\u554f\u984c\u3068\u6bd4\u8f03\u3057\u3066\u3001\u3053\u306e\u554f\u984c\u306e\u76ee\u6a19\u306f\u7d44\u307f\u5408\u308f\u305b\u306e\u6570\u3092\u6c7a\u5b9a\u3059\u308b\u3053\u3068\u3067\u3042\u308b\u305f\u3081\u3001\u90e8\u5206\u554f\u984c\u306f\u6b21\u306e\u3088\u3046\u306b\u306a\u308a\u307e\u3059\uff1a\u6700\u521d\u306e \\(i\\) \u7a2e\u985e\u306e\u30b3\u30a4\u30f3\u3092\u4f7f\u7528\u3057\u3066\u91d1\u984d \\(a\\) \u3092\u69cb\u6210\u3067\u304d\u308b\u7d44\u307f\u5408\u308f\u305b\u306e\u6570\u3002\\(dp\\) \u30c6\u30fc\u30d6\u30eb\u306f\u30b5\u30a4\u30ba \\((n+1) \\times (amt + 1)\\) \u306e\u4e8c\u6b21\u5143\u884c\u5217\u306e\u307e\u307e\u6b8b\u308a\u307e\u3059\u3002

\u73fe\u5728\u306e\u72b6\u614b\u306e\u7d44\u307f\u5408\u308f\u305b\u6570\u306f\u3001\u73fe\u5728\u306e\u30b3\u30a4\u30f3\u3092\u9078\u629e\u3057\u306a\u3044\u7d44\u307f\u5408\u308f\u305b\u3068\u73fe\u5728\u306e\u30b3\u30a4\u30f3\u3092\u9078\u629e\u3059\u308b\u7d44\u307f\u5408\u308f\u305b\u306e\u5408\u8a08\u3067\u3059\u3002\u72b6\u614b\u9077\u79fb\u65b9\u7a0b\u5f0f\u306f\uff1a

\\[ dp[i, a] = dp[i-1, a] + dp[i, a - coins[i-1]] \\]

\u76ee\u6a19\u91d1\u984d\u304c \\(0\\) \u306e\u5834\u5408\u3001\u76ee\u6a19\u91d1\u984d\u3092\u69cb\u6210\u3059\u308b\u306e\u306b\u30b3\u30a4\u30f3\u306f\u5fc5\u8981\u306a\u3044\u305f\u3081\u3001\u6700\u521d\u306e\u5217\u306e\u3059\u3079\u3066\u306e \\(dp[i, 0]\\) \u306f \\(1\\) \u306b\u521d\u671f\u5316\u3055\u308c\u308b\u3079\u304d\u3067\u3059\u3002\u30b3\u30a4\u30f3\u304c\u306a\u3044\u5834\u5408\u3001\u4efb\u610f\u306e\u91d1\u984d >0 \u3092\u69cb\u6210\u3059\u308b\u3053\u3068\u306f\u4e0d\u53ef\u80fd\u3067\u3042\u308b\u305f\u3081\u3001\u6700\u521d\u306e\u884c\u306e\u3059\u3079\u3066\u306e \\(dp[0, a]\\) \u306f \\(0\\) \u306b\u8a2d\u5b9a\u3055\u308c\u308b\u3079\u304d\u3067\u3059\u3002

"},{"location":"chapter_dynamic_programming/unbounded_knapsack_problem/#2_2","title":"2. \u00a0 \u30b3\u30fc\u30c9\u5b9f\u88c5","text":"PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby coin_change_ii.py
def coin_change_ii_dp(coins: list[int], amt: int) -> int:\n    \"\"\"\u786c\u8ca8\u4ea4\u63db II\uff1a\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\"\"\"\n    n = len(coins)\n    # dp \u30c6\u30fc\u30d6\u30eb\u3092\u521d\u671f\u5316\n    dp = [[0] * (amt + 1) for _ in range(n + 1)]\n    # \u6700\u521d\u306e\u5217\u3092\u521d\u671f\u5316\n    for i in range(n + 1):\n        dp[i][0] = 1\n    # \u72b6\u614b\u9077\u79fb\n    for i in range(1, n + 1):\n        for a in range(1, amt + 1):\n            if coins[i - 1] > a:\n                # \u76ee\u6a19\u91d1\u984d\u3092\u8d85\u3048\u308b\u5834\u5408\u3001\u786c\u8ca8 i \u3092\u9078\u629e\u3057\u306a\u3044\n                dp[i][a] = dp[i - 1][a]\n            else:\n                # \u786c\u8ca8 i \u3092\u9078\u629e\u3057\u306a\u3044\u306e\u3068\u9078\u629e\u3059\u308b\u306e\u3068\u306e\u4e21\u65b9\u306e\u9078\u629e\u80a2\u306e\u548c\n                dp[i][a] = dp[i - 1][a] + dp[i][a - coins[i - 1]]\n    return dp[n][amt]\n
coin_change_ii.cpp
/* \u786c\u8ca8\u4e21\u66ff II\uff1a\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0 */\nint coinChangeIIDP(vector<int> &coins, int amt) {\n    int n = coins.size();\n    // DP\u30c6\u30fc\u30d6\u30eb\u3092\u521d\u671f\u5316\n    vector<vector<int>> dp(n + 1, vector<int>(amt + 1, 0));\n    // \u6700\u521d\u306e\u5217\u3092\u521d\u671f\u5316\n    for (int i = 0; i <= n; i++) {\n        dp[i][0] = 1;\n    }\n    // \u72b6\u614b\u9077\u79fb\n    for (int i = 1; i <= n; i++) {\n        for (int a = 1; a <= amt; a++) {\n            if (coins[i - 1] > a) {\n                // \u76ee\u6a19\u91d1\u984d\u3092\u8d85\u3048\u308b\u5834\u5408\u3001\u786c\u8ca8 i \u3092\u9078\u629e\u3057\u306a\u3044\n                dp[i][a] = dp[i - 1][a];\n            } else {\n                // \u9078\u629e\u3057\u306a\u3044\u5834\u5408\u3068\u786c\u8ca8 i \u3092\u9078\u629e\u3059\u308b\u5834\u5408\u306e2\u3064\u306e\u9078\u629e\u80a2\u306e\u5408\u8a08\n                dp[i][a] = dp[i - 1][a] + dp[i][a - coins[i - 1]];\n            }\n        }\n    }\n    return dp[n][amt];\n}\n
coin_change_ii.java
/* \u786c\u8ca8\u4e21\u66ff II\uff1a\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0 */\nint coinChangeIIDP(int[] coins, int amt) {\n    int n = coins.length;\n    // DP\u30c6\u30fc\u30d6\u30eb\u3092\u521d\u671f\u5316\n    int[][] dp = new int[n + 1][amt + 1];\n    // \u6700\u521d\u306e\u5217\u3092\u521d\u671f\u5316\n    for (int i = 0; i <= n; i++) {\n        dp[i][0] = 1;\n    }\n    // \u72b6\u614b\u9077\u79fb\n    for (int i = 1; i <= n; i++) {\n        for (int a = 1; a <= amt; a++) {\n            if (coins[i - 1] > a) {\n                // \u76ee\u6a19\u91d1\u984d\u3092\u8d85\u3048\u308b\u5834\u5408\u3001\u786c\u8ca8 i \u3092\u9078\u629e\u3057\u306a\u3044\n                dp[i][a] = dp[i - 1][a];\n            } else {\n                // \u9078\u629e\u3057\u306a\u3044\u5834\u5408\u3068\u786c\u8ca8 i \u3092\u9078\u629e\u3059\u308b\u5834\u5408\u306e2\u3064\u306e\u9078\u629e\u80a2\u306e\u5408\u8a08\n                dp[i][a] = dp[i - 1][a] + dp[i][a - coins[i - 1]];\n            }\n        }\n    }\n    return dp[n][amt];\n}\n
coin_change_ii.cs
[class]{coin_change_ii}-[func]{CoinChangeIIDP}\n
coin_change_ii.go
[class]{}-[func]{coinChangeIIDP}\n
coin_change_ii.swift
[class]{}-[func]{coinChangeIIDP}\n
coin_change_ii.js
[class]{}-[func]{coinChangeIIDP}\n
coin_change_ii.ts
[class]{}-[func]{coinChangeIIDP}\n
coin_change_ii.dart
[class]{}-[func]{coinChangeIIDP}\n
coin_change_ii.rs
[class]{}-[func]{coin_change_ii_dp}\n
coin_change_ii.c
[class]{}-[func]{coinChangeIIDP}\n
coin_change_ii.kt
[class]{}-[func]{coinChangeIIDP}\n
coin_change_ii.rb
[class]{}-[func]{coin_change_ii_dp}\n
"},{"location":"chapter_dynamic_programming/unbounded_knapsack_problem/#3_2","title":"3. \u00a0 \u7a7a\u9593\u6700\u9069\u5316","text":"

\u7a7a\u9593\u6700\u9069\u5316\u30a2\u30d7\u30ed\u30fc\u30c1\u306f\u540c\u3058\u3067\u3001\u30b3\u30a4\u30f3\u306e\u6b21\u5143\u3092\u524a\u9664\u3059\u308b\u3060\u3051\u3067\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby coin_change_ii.py
def coin_change_ii_dp_comp(coins: list[int], amt: int) -> int:\n    \"\"\"\u786c\u8ca8\u4ea4\u63db II\uff1a\u7a7a\u9593\u6700\u9069\u5316\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\"\"\"\n    n = len(coins)\n    # dp \u30c6\u30fc\u30d6\u30eb\u3092\u521d\u671f\u5316\n    dp = [0] * (amt + 1)\n    dp[0] = 1\n    # \u72b6\u614b\u9077\u79fb\n    for i in range(1, n + 1):\n        # \u9806\u5e8f\u3067\u8d70\u67fb\n        for a in range(1, amt + 1):\n            if coins[i - 1] > a:\n                # \u76ee\u6a19\u91d1\u984d\u3092\u8d85\u3048\u308b\u5834\u5408\u3001\u786c\u8ca8 i \u3092\u9078\u629e\u3057\u306a\u3044\n                dp[a] = dp[a]\n            else:\n                # \u786c\u8ca8 i \u3092\u9078\u629e\u3057\u306a\u3044\u306e\u3068\u9078\u629e\u3059\u308b\u306e\u3068\u306e\u4e21\u65b9\u306e\u9078\u629e\u80a2\u306e\u548c\n                dp[a] = dp[a] + dp[a - coins[i - 1]]\n    return dp[amt]\n
coin_change_ii.cpp
/* \u786c\u8ca8\u4e21\u66ff II\uff1a\u7a7a\u9593\u6700\u9069\u5316\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0 */\nint coinChangeIIDPComp(vector<int> &coins, int amt) {\n    int n = coins.size();\n    // DP\u30c6\u30fc\u30d6\u30eb\u3092\u521d\u671f\u5316\n    vector<int> dp(amt + 1, 0);\n    dp[0] = 1;\n    // \u72b6\u614b\u9077\u79fb\n    for (int i = 1; i <= n; i++) {\n        for (int a = 1; a <= amt; a++) {\n            if (coins[i - 1] > a) {\n                // \u76ee\u6a19\u91d1\u984d\u3092\u8d85\u3048\u308b\u5834\u5408\u3001\u786c\u8ca8 i \u3092\u9078\u629e\u3057\u306a\u3044\n                dp[a] = dp[a];\n            } else {\n                // \u9078\u629e\u3057\u306a\u3044\u5834\u5408\u3068\u786c\u8ca8 i \u3092\u9078\u629e\u3059\u308b\u5834\u5408\u306e2\u3064\u306e\u9078\u629e\u80a2\u306e\u5408\u8a08\n                dp[a] = dp[a] + dp[a - coins[i - 1]];\n            }\n        }\n    }\n    return dp[amt];\n}\n
coin_change_ii.java
/* \u786c\u8ca8\u4e21\u66ff II\uff1a\u7a7a\u9593\u6700\u9069\u5316\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0 */\nint coinChangeIIDPComp(int[] coins, int amt) {\n    int n = coins.length;\n    // DP\u30c6\u30fc\u30d6\u30eb\u3092\u521d\u671f\u5316\n    int[] dp = new int[amt + 1];\n    dp[0] = 1;\n    // \u72b6\u614b\u9077\u79fb\n    for (int i = 1; i <= n; i++) {\n        for (int a = 1; a <= amt; a++) {\n            if (coins[i - 1] > a) {\n                // \u76ee\u6a19\u91d1\u984d\u3092\u8d85\u3048\u308b\u5834\u5408\u3001\u786c\u8ca8 i \u3092\u9078\u629e\u3057\u306a\u3044\n                dp[a] = dp[a];\n            } else {\n                // \u9078\u629e\u3057\u306a\u3044\u5834\u5408\u3068\u786c\u8ca8 i \u3092\u9078\u629e\u3059\u308b\u5834\u5408\u306e2\u3064\u306e\u9078\u629e\u80a2\u306e\u5408\u8a08\n                dp[a] = dp[a] + dp[a - coins[i - 1]];\n            }\n        }\n    }\n    return dp[amt];\n}\n
coin_change_ii.cs
[class]{coin_change_ii}-[func]{CoinChangeIIDPComp}\n
coin_change_ii.go
[class]{}-[func]{coinChangeIIDPComp}\n
coin_change_ii.swift
[class]{}-[func]{coinChangeIIDPComp}\n
coin_change_ii.js
[class]{}-[func]{coinChangeIIDPComp}\n
coin_change_ii.ts
[class]{}-[func]{coinChangeIIDPComp}\n
coin_change_ii.dart
[class]{}-[func]{coinChangeIIDPComp}\n
coin_change_ii.rs
[class]{}-[func]{coin_change_ii_dp_comp}\n
coin_change_ii.c
[class]{}-[func]{coinChangeIIDPComp}\n
coin_change_ii.kt
[class]{}-[func]{coinChangeIIDPComp}\n
coin_change_ii.rb
[class]{}-[func]{coin_change_ii_dp_comp}\n
"},{"location":"chapter_graph/","title":"\u7b2c 9 \u7ae0 \u00a0 \u30b0\u30e9\u30d5","text":"

Abstract

\u4eba\u751f\u306e\u65c5\u8def\u306b\u304a\u3044\u3066\u3001\u79c1\u305f\u3061\u306e\u4e00\u4eba\u4e00\u4eba\u306f\u30ce\u30fc\u30c9\u3067\u3042\u308a\u3001\u7121\u6570\u306e\u898b\u3048\u306a\u3044\u8fba\u3067\u7d50\u3070\u308c\u3066\u3044\u307e\u3059\u3002

\u4e00\u3064\u4e00\u3064\u306e\u51fa\u4f1a\u3044\u3068\u5225\u308c\u304c\u3001\u3053\u306e\u5e83\u5927\u306a\u4eba\u751f\u306e\u30b0\u30e9\u30d5\u306b\u72ec\u7279\u306e\u5370\u3092\u6b8b\u3057\u3066\u3044\u304d\u307e\u3059\u3002

"},{"location":"chapter_graph/#_1","title":"\u7ae0\u306e\u5185\u5bb9","text":""},{"location":"chapter_graph/graph/","title":"9.1 \u00a0 \u30b0\u30e9\u30d5","text":"

\u30b0\u30e9\u30d5\u306f\u975e\u7dda\u5f62\u30c7\u30fc\u30bf\u69cb\u9020\u306e\u4e00\u7a2e\u3067\u3001\u9802\u70b9\u3068\u8fba\u3067\u69cb\u6210\u3055\u308c\u307e\u3059\u3002\u30b0\u30e9\u30d5\\(G\\)\u306f\u3001\u9802\u70b9\u306e\u96c6\u5408\\(V\\)\u3068\u8fba\u306e\u96c6\u5408\\(E\\)\u306e\u7d44\u307f\u5408\u308f\u305b\u3068\u3057\u3066\u62bd\u8c61\u7684\u306b\u8868\u73fe\u3067\u304d\u307e\u3059\u3002\u4ee5\u4e0b\u306e\u4f8b\u306f\u30015\u3064\u306e\u9802\u70b9\u30687\u3064\u306e\u8fba\u3092\u542b\u3080\u30b0\u30e9\u30d5\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002

\\[ \\begin{aligned} V & = \\{ 1, 2, 3, 4, 5 \\} \\newline E & = \\{ (1,2), (1,3), (1,5), (2,3), (2,4), (2,5), (4,5) \\} \\newline G & = \\{ V, E \\} \\newline \\end{aligned} \\]

\u9802\u70b9\u3092\u30ce\u30fc\u30c9\u3001\u8fba\u3092\u30ce\u30fc\u30c9\u3092\u63a5\u7d9a\u3059\u308b\u53c2\u7167\uff08\u30dd\u30a4\u30f3\u30bf\uff09\u3068\u898b\u306a\u3059\u3068\u3001\u30b0\u30e9\u30d5\u306f\u9023\u7d50\u30ea\u30b9\u30c8\u304b\u3089\u62e1\u5f35\u3055\u308c\u305f\u30c7\u30fc\u30bf\u69cb\u9020\u3068\u3057\u3066\u898b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u4e0b\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u7dda\u5f62\u95a2\u4fc2\uff08\u9023\u7d50\u30ea\u30b9\u30c8\uff09\u3084\u5206\u5272\u7d71\u6cbb\u95a2\u4fc2\uff08\u6728\uff09\u3068\u6bd4\u8f03\u3057\u3066\u3001\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u95a2\u4fc2\uff08\u30b0\u30e9\u30d5\uff09\u306f\u81ea\u7531\u5ea6\u304c\u9ad8\u3044\u305f\u3081\u3001\u3088\u308a\u8907\u96d1\u3067\u3059\u3002

\u56f3 9-1 \u00a0 \u9023\u7d50\u30ea\u30b9\u30c8\u3001\u6728\u3001\u30b0\u30e9\u30d5\u306e\u95a2\u4fc2

"},{"location":"chapter_graph/graph/#911","title":"9.1.1 \u00a0 \u30b0\u30e9\u30d5\u306e\u4e00\u822c\u7684\u306a\u7a2e\u985e\u3068\u7528\u8a9e","text":"

\u30b0\u30e9\u30d5\u306f\u3001\u8fba\u306b\u65b9\u5411\u304c\u3042\u308b\u304b\u3069\u3046\u304b\u306b\u3088\u3063\u3066\u7121\u5411\u30b0\u30e9\u30d5\u3068\u6709\u5411\u30b0\u30e9\u30d5\u306b\u5206\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\uff08\u4e0b\u56f3\u53c2\u7167\uff09\u3002

\u56f3 9-2 \u00a0 \u6709\u5411\u30b0\u30e9\u30d5\u3068\u7121\u5411\u30b0\u30e9\u30d5

\u3059\u3079\u3066\u306e\u9802\u70b9\u304c\u63a5\u7d9a\u3055\u308c\u3066\u3044\u308b\u304b\u3069\u3046\u304b\u306b\u3088\u3063\u3066\u3001\u30b0\u30e9\u30d5\u306f\u9023\u7d50\u30b0\u30e9\u30d5\u3068\u975e\u9023\u7d50\u30b0\u30e9\u30d5\u306b\u5206\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\uff08\u4e0b\u56f3\u53c2\u7167\uff09\u3002

\u56f3 9-3 \u00a0 \u9023\u7d50\u30b0\u30e9\u30d5\u3068\u975e\u9023\u7d50\u30b0\u30e9\u30d5

\u8fba\u306b\u91cd\u307f\u5909\u6570\u3092\u8ffd\u52a0\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u3001\u305d\u306e\u7d50\u679c\u3068\u3057\u3066\u91cd\u307f\u4ed8\u304d\u30b0\u30e9\u30d5\u304c\u751f\u307e\u308c\u307e\u3059\uff08\u4e0b\u56f3\u53c2\u7167\uff09\u3002\u4f8b\u3048\u3070\u3001Instagram\u3067\u306f\u3001\u30b7\u30b9\u30c6\u30e0\u304c\u3042\u306a\u305f\u3068\u4ed6\u306e\u30e6\u30fc\u30b6\u30fc\u3068\u306e\u9593\u306e\u76f8\u4e92\u4f5c\u7528\u30ec\u30d9\u30eb\uff08\u3044\u3044\u306d\u3001\u95b2\u89a7\u3001\u30b3\u30e1\u30f3\u30c8\u306a\u3069\uff09\u306b\u3088\u3063\u3066\u30d5\u30a9\u30ed\u30ef\u30fc\u3068\u30d5\u30a9\u30ed\u30fc\u4e2d\u306e\u30ea\u30b9\u30c8\u3092\u30bd\u30fc\u30c8\u3057\u307e\u3059\u3002\u3053\u306e\u3088\u3046\u306a\u76f8\u4e92\u4f5c\u7528\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306f\u91cd\u307f\u4ed8\u304d\u30b0\u30e9\u30d5\u3067\u8868\u73fe\u3067\u304d\u307e\u3059\u3002

\u56f3 9-4 \u00a0 \u91cd\u307f\u4ed8\u304d\u30b0\u30e9\u30d5\u3068\u91cd\u307f\u306a\u3057\u30b0\u30e9\u30d5

\u30b0\u30e9\u30d5\u30c7\u30fc\u30bf\u69cb\u9020\u306b\u306f\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u4e00\u822c\u7684\u306b\u4f7f\u7528\u3055\u308c\u308b\u7528\u8a9e\u304c\u3042\u308a\u307e\u3059\u3002

"},{"location":"chapter_graph/graph/#912","title":"9.1.2 \u00a0 \u30b0\u30e9\u30d5\u306e\u8868\u73fe","text":"

\u30b0\u30e9\u30d5\u306e\u4e00\u822c\u7684\u306a\u8868\u73fe\u306b\u306f\u300c\u96a3\u63a5\u884c\u5217\u300d\u3068\u300c\u96a3\u63a5\u30ea\u30b9\u30c8\u300d\u304c\u3042\u308a\u307e\u3059\u3002\u4ee5\u4e0b\u306e\u4f8b\u3067\u306f\u7121\u5411\u30b0\u30e9\u30d5\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002

"},{"location":"chapter_graph/graph/#1","title":"1. \u00a0 \u96a3\u63a5\u884c\u5217","text":"

\u30b0\u30e9\u30d5\u306e\u9802\u70b9\u6570\u3092\\(n\\)\u3068\u3059\u308b\u3068\u3001\u96a3\u63a5\u884c\u5217\u306f\\(n \\times n\\)\u306e\u884c\u5217\u3092\u4f7f\u7528\u3057\u3066\u30b0\u30e9\u30d5\u3092\u8868\u73fe\u3057\u307e\u3059\u3002\u5404\u884c\uff08\u5217\uff09\u306f\u9802\u70b9\u3092\u8868\u3057\u3001\u884c\u5217\u8981\u7d20\u306f\u8fba\u3092\u8868\u3057\u30012\u3064\u306e\u9802\u70b9\u9593\u306b\u8fba\u304c\u3042\u308b\u304b\u3069\u3046\u304b\u3092\\(1\\)\u307e\u305f\u306f\\(0\\)\u3067\u793a\u3057\u307e\u3059\u3002

\u4e0b\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u96a3\u63a5\u884c\u5217\u3092\\(M\\)\u3001\u9802\u70b9\u306e\u30ea\u30b9\u30c8\u3092\\(V\\)\u3068\u3059\u308b\u3068\u3001\u884c\u5217\u8981\u7d20\\(M[i, j] = 1\\)\u306f\u9802\u70b9\\(V[i]\\)\u3068\u9802\u70b9\\(V[j]\\)\u306e\u9593\u306b\u8fba\u304c\u3042\u308b\u3053\u3068\u3092\u793a\u3057\u3001\u9006\u306b\\(M[i, j] = 0\\)\u306f2\u3064\u306e\u9802\u70b9\u9593\u306b\u8fba\u304c\u306a\u3044\u3053\u3068\u3092\u793a\u3057\u307e\u3059\u3002

\u56f3 9-5 \u00a0 \u96a3\u63a5\u884c\u5217\u306b\u3088\u308b\u30b0\u30e9\u30d5\u306e\u8868\u73fe

\u96a3\u63a5\u884c\u5217\u306b\u306f\u4ee5\u4e0b\u306e\u7279\u6027\u304c\u3042\u308a\u307e\u3059\u3002

\u96a3\u63a5\u884c\u5217\u3067\u30b0\u30e9\u30d5\u3092\u8868\u73fe\u3059\u308b\u5834\u5408\u3001\u884c\u5217\u8981\u7d20\u306b\u76f4\u63a5\u30a2\u30af\u30bb\u30b9\u3057\u3066\u8fba\u3092\u53d6\u5f97\u3067\u304d\u308b\u305f\u3081\u3001\u8ffd\u52a0\u3001\u524a\u9664\u3001\u691c\u7d22\u3001\u5909\u66f4\u306e\u64cd\u4f5c\u304c\u52b9\u7387\u7684\u3067\u3001\u3059\u3079\u3066\u6642\u9593\u8a08\u7b97\u91cf\\(O(1)\\)\u3067\u3059\u3002\u305f\u3060\u3057\u3001\u884c\u5217\u306e\u7a7a\u9593\u8a08\u7b97\u91cf\u306f\\(O(n^2)\\)\u3067\u3001\u3088\u308a\u591a\u304f\u306e\u30e1\u30e2\u30ea\u3092\u6d88\u8cbb\u3057\u307e\u3059\u3002

"},{"location":"chapter_graph/graph/#2","title":"2. \u00a0 \u96a3\u63a5\u30ea\u30b9\u30c8","text":"

\u96a3\u63a5\u30ea\u30b9\u30c8\u306f\\(n\\)\u500b\u306e\u9023\u7d50\u30ea\u30b9\u30c8\u3092\u4f7f\u7528\u3057\u3066\u30b0\u30e9\u30d5\u3092\u8868\u73fe\u3057\u3001\u5404\u9023\u7d50\u30ea\u30b9\u30c8\u30ce\u30fc\u30c9\u306f\u9802\u70b9\u3092\u8868\u3057\u307e\u3059\u3002\\(i\\)\u756a\u76ee\u306e\u9023\u7d50\u30ea\u30b9\u30c8\u306f\u9802\u70b9\\(i\\)\u306b\u5bfe\u5fdc\u3057\u3001\u3059\u3079\u3066\u306e\u96a3\u63a5\u9802\u70b9\uff08\u305d\u306e\u9802\u70b9\u306b\u63a5\u7d9a\u3055\u308c\u305f\u9802\u70b9\uff09\u3092\u542b\u307f\u307e\u3059\u3002\u4e0b\u56f3\u306f\u96a3\u63a5\u30ea\u30b9\u30c8\u3092\u4f7f\u7528\u3057\u3066\u683c\u7d0d\u3055\u308c\u305f\u30b0\u30e9\u30d5\u306e\u4f8b\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002

\u56f3 9-6 \u00a0 \u96a3\u63a5\u30ea\u30b9\u30c8\u306b\u3088\u308b\u30b0\u30e9\u30d5\u306e\u8868\u73fe

\u96a3\u63a5\u30ea\u30b9\u30c8\u306f\u5b9f\u969b\u306e\u8fba\u306e\u307f\u3092\u683c\u7d0d\u3057\u3001\u8fba\u306e\u7dcf\u6570\u306f\\(n^2\\)\u3088\u308a\u3082\u306f\u308b\u304b\u306b\u5c11\u306a\u3044\u3053\u3068\u304c\u591a\u304f\u3001\u3088\u308a\u7a7a\u9593\u52b9\u7387\u7684\u3067\u3059\u3002\u305f\u3060\u3057\u3001\u96a3\u63a5\u30ea\u30b9\u30c8\u3067\u8fba\u3092\u898b\u3064\u3051\u308b\u306b\u306f\u9023\u7d50\u30ea\u30b9\u30c8\u3092\u8d70\u67fb\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u305f\u3081\u3001\u305d\u306e\u6642\u9593\u52b9\u7387\u306f\u96a3\u63a5\u884c\u5217\u307b\u3069\u826f\u304f\u3042\u308a\u307e\u305b\u3093\u3002

\u4e0a\u56f3\u3092\u89b3\u5bdf\u3059\u308b\u3068\u3001\u96a3\u63a5\u30ea\u30b9\u30c8\u306e\u69cb\u9020\u306f\u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb\u306e\u300c\u30c1\u30a7\u30a4\u30f3\u6cd5\u300d\u3068\u975e\u5e38\u306b\u4f3c\u3066\u3044\u308b\u305f\u3081\u3001\u540c\u69d8\u306e\u65b9\u6cd5\u3092\u4f7f\u7528\u3057\u3066\u52b9\u7387\u3092\u6700\u9069\u5316\u3067\u304d\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001\u9023\u7d50\u30ea\u30b9\u30c8\u304c\u9577\u3044\u5834\u5408\u3001\u305d\u308c\u3092AVL\u6728\u3084\u8d64\u9ed2\u6728\u306b\u5909\u63db\u3057\u3066\u3001\u6642\u9593\u52b9\u7387\u3092\\(O(n)\\)\u304b\u3089\\(O(\\log n)\\)\u306b\u6700\u9069\u5316\u3067\u304d\u307e\u3059\u3002\u9023\u7d50\u30ea\u30b9\u30c8\u3092\u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb\u306b\u5909\u63db\u3059\u308b\u3053\u3068\u3067\u3001\u6642\u9593\u8a08\u7b97\u91cf\u3092\\(O(1)\\)\u306b\u524a\u6e1b\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002

"},{"location":"chapter_graph/graph/#913","title":"9.1.3 \u00a0 \u30b0\u30e9\u30d5\u306e\u4e00\u822c\u7684\u306a\u5fdc\u7528","text":"

\u4e0b\u8868\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u591a\u304f\u306e\u73fe\u5b9f\u4e16\u754c\u306e\u30b7\u30b9\u30c6\u30e0\u306f\u30b0\u30e9\u30d5\u3067\u30e2\u30c7\u30eb\u5316\u3067\u304d\u3001\u5bfe\u5fdc\u3059\u308b\u554f\u984c\u306f\u30b0\u30e9\u30d5\u8a08\u7b97\u554f\u984c\u306b\u524a\u6e1b\u3067\u304d\u307e\u3059\u3002

\u8868 9-1 \u00a0 \u73fe\u5b9f\u751f\u6d3b\u306e\u4e00\u822c\u7684\u306a\u30b0\u30e9\u30d5

\u9802\u70b9 \u8fba \u30b0\u30e9\u30d5\u8a08\u7b97\u554f\u984c \u30bd\u30fc\u30b7\u30e3\u30eb\u30cd\u30c3\u30c8\u30ef\u30fc\u30af \u30e6\u30fc\u30b6\u30fc \u30d5\u30a9\u30ed\u30fc / \u30d5\u30a9\u30ed\u30ef\u30fc\u95a2\u4fc2 \u6f5c\u5728\u7684\u30d5\u30a9\u30ed\u30fc\u63a8\u85a6 \u5730\u4e0b\u9244\u8def\u7dda \u99c5 \u99c5\u9593\u306e\u63a5\u7d9a\u6027 \u6700\u77ed\u30eb\u30fc\u30c8\u63a8\u85a6 \u592a\u967d\u7cfb \u5929\u4f53 \u5929\u4f53\u9593\u306e\u91cd\u529b \u60d1\u661f\u8ecc\u9053\u8a08\u7b97"},{"location":"chapter_graph/graph_operations/","title":"9.2 \u00a0 \u30b0\u30e9\u30d5\u306e\u57fa\u672c\u64cd\u4f5c","text":"

\u30b0\u30e9\u30d5\u306e\u57fa\u672c\u64cd\u4f5c\u306f\u300c\u8fba\u300d\u306b\u5bfe\u3059\u308b\u64cd\u4f5c\u3068\u300c\u9802\u70b9\u300d\u306b\u5bfe\u3059\u308b\u64cd\u4f5c\u306b\u5206\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u300c\u96a3\u63a5\u884c\u5217\u300d\u3068\u300c\u96a3\u63a5\u30ea\u30b9\u30c8\u300d\u306e2\u3064\u306e\u8868\u73fe\u65b9\u6cd5\u306e\u4e0b\u3067\u306f\u3001\u5b9f\u88c5\u304c\u7570\u306a\u308a\u307e\u3059\u3002

"},{"location":"chapter_graph/graph_operations/#921","title":"9.2.1 \u00a0 \u96a3\u63a5\u884c\u5217\u306b\u57fa\u3065\u304f\u5b9f\u88c5","text":"

\\(n\\)\u500b\u306e\u9802\u70b9\u3092\u6301\u3064\u7121\u5411\u30b0\u30e9\u30d5\u304c\u4e0e\u3048\u3089\u308c\u305f\u5834\u5408\u3001\u3055\u307e\u3056\u307e\u306a\u64cd\u4f5c\u306f\u4e0b\u56f3\u306e\u3088\u3046\u306b\u5b9f\u88c5\u3055\u308c\u307e\u3059\u3002

\u96a3\u63a5\u884c\u5217\u306e\u521d\u671f\u5316\u8fba\u306e\u8ffd\u52a0\u8fba\u306e\u524a\u9664\u9802\u70b9\u306e\u8ffd\u52a0\u9802\u70b9\u306e\u524a\u9664

\u56f3 9-7 \u00a0 \u96a3\u63a5\u884c\u5217\u3067\u306e\u521d\u671f\u5316\u3001\u8fba\u306e\u8ffd\u52a0\u3068\u524a\u9664\u3001\u9802\u70b9\u306e\u8ffd\u52a0\u3068\u524a\u9664

\u4ee5\u4e0b\u306f\u96a3\u63a5\u884c\u5217\u3092\u4f7f\u7528\u3057\u3066\u8868\u73fe\u3055\u308c\u305f\u30b0\u30e9\u30d5\u306e\u5b9f\u88c5\u30b3\u30fc\u30c9\u3067\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby graph_adjacency_matrix.py
class GraphAdjMat:\n    \"\"\"\u96a3\u63a5\u884c\u5217\u306b\u57fa\u3065\u304f\u7121\u5411\u30b0\u30e9\u30d5\u30af\u30e9\u30b9\"\"\"\n\n    def __init__(self, vertices: list[int], edges: list[list[int]]):\n        \"\"\"\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\"\"\"\n        # \u9802\u70b9\u30ea\u30b9\u30c8\u3001\u8981\u7d20\u306f\u300c\u9802\u70b9\u5024\u300d\u3092\u8868\u3057\u3001\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306f\u300c\u9802\u70b9\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u300d\u3092\u8868\u3059\n        self.vertices: list[int] = []\n        # \u96a3\u63a5\u884c\u5217\u3001\u884c\u3068\u5217\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306f\u300c\u9802\u70b9\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u300d\u306b\u5bfe\u5fdc\n        self.adj_mat: list[list[int]] = []\n        # \u9802\u70b9\u3092\u8ffd\u52a0\n        for val in vertices:\n            self.add_vertex(val)\n        # \u8fba\u3092\u8ffd\u52a0\n        # edges\u8981\u7d20\u306f\u9802\u70b9\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u8868\u3059\n        for e in edges:\n            self.add_edge(e[0], e[1])\n\n    def size(self) -> int:\n        \"\"\"\u9802\u70b9\u6570\u3092\u53d6\u5f97\"\"\"\n        return len(self.vertices)\n\n    def add_vertex(self, val: int):\n        \"\"\"\u9802\u70b9\u3092\u8ffd\u52a0\"\"\"\n        n = self.size()\n        # \u9802\u70b9\u30ea\u30b9\u30c8\u306b\u65b0\u3057\u3044\u9802\u70b9\u5024\u3092\u8ffd\u52a0\n        self.vertices.append(val)\n        # \u96a3\u63a5\u884c\u5217\u306b\u884c\u3092\u8ffd\u52a0\n        new_row = [0] * n\n        self.adj_mat.append(new_row)\n        # \u96a3\u63a5\u884c\u5217\u306b\u5217\u3092\u8ffd\u52a0\n        for row in self.adj_mat:\n            row.append(0)\n\n    def remove_vertex(self, index: int):\n        \"\"\"\u9802\u70b9\u3092\u524a\u9664\"\"\"\n        if index >= self.size():\n            raise IndexError()\n        # \u9802\u70b9\u30ea\u30b9\u30c8\u304b\u3089`index`\u306e\u9802\u70b9\u3092\u524a\u9664\n        self.vertices.pop(index)\n        # \u96a3\u63a5\u884c\u5217\u304b\u3089`index`\u306e\u884c\u3092\u524a\u9664\n        self.adj_mat.pop(index)\n        # \u96a3\u63a5\u884c\u5217\u304b\u3089`index`\u306e\u5217\u3092\u524a\u9664\n        for row in self.adj_mat:\n            row.pop(index)\n\n    def add_edge(self, i: int, j: int):\n        \"\"\"\u8fba\u3092\u8ffd\u52a0\"\"\"\n        # \u30d1\u30e9\u30e1\u30fc\u30bfi\u3001j\u306f\u9802\u70b9\u8981\u7d20\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306b\u5bfe\u5fdc\n        # \u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306e\u7bc4\u56f2\u5916\u3068\u7b49\u4fa1\u6027\u3092\u51e6\u7406\n        if i < 0 or j < 0 or i >= self.size() or j >= self.size() or i == j:\n            raise IndexError()\n        # \u7121\u5411\u30b0\u30e9\u30d5\u3067\u306f\u3001\u96a3\u63a5\u884c\u5217\u306f\u4e3b\u5bfe\u89d2\u7dda\u306b\u3064\u3044\u3066\u5bfe\u79f0\u3001\u3059\u306a\u308f\u3061 (i, j) == (j, i) \u3092\u6e80\u305f\u3059\n        self.adj_mat[i][j] = 1\n        self.adj_mat[j][i] = 1\n\n    def remove_edge(self, i: int, j: int):\n        \"\"\"\u8fba\u3092\u524a\u9664\"\"\"\n        # \u30d1\u30e9\u30e1\u30fc\u30bfi\u3001j\u306f\u9802\u70b9\u8981\u7d20\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306b\u5bfe\u5fdc\n        # \u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306e\u7bc4\u56f2\u5916\u3068\u7b49\u4fa1\u6027\u3092\u51e6\u7406\n        if i < 0 or j < 0 or i >= self.size() or j >= self.size() or i == j:\n            raise IndexError()\n        self.adj_mat[i][j] = 0\n        self.adj_mat[j][i] = 0\n\n    def print(self):\n        \"\"\"\u96a3\u63a5\u884c\u5217\u3092\u51fa\u529b\"\"\"\n        print(\"\u9802\u70b9\u30ea\u30b9\u30c8 =\", self.vertices)\n        print(\"\u96a3\u63a5\u884c\u5217 =\")\n        print_matrix(self.adj_mat)\n
graph_adjacency_matrix.cpp
/* \u96a3\u63a5\u884c\u5217\u306b\u57fa\u3065\u304f\u7121\u5411\u30b0\u30e9\u30d5\u30af\u30e9\u30b9 */\nclass GraphAdjMat {\n    vector<int> vertices;       // \u9802\u70b9\u30ea\u30b9\u30c8\u3001\u8981\u7d20\u306f\u300c\u9802\u70b9\u5024\u300d\u3092\u8868\u3057\u3001\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306f\u300c\u9802\u70b9\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u300d\u3092\u8868\u3059\n    vector<vector<int>> adjMat; // \u96a3\u63a5\u884c\u5217\u3001\u884c\u3068\u5217\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306f\u300c\u9802\u70b9\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u300d\u306b\u5bfe\u5fdc\n\n  public:\n    /* \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf */\n    GraphAdjMat(const vector<int> &vertices, const vector<vector<int>> &edges) {\n        // \u9802\u70b9\u3092\u8ffd\u52a0\n        for (int val : vertices) {\n            addVertex(val);\n        }\n        // \u8fba\u3092\u8ffd\u52a0\n        // \u8fba\u306e\u8981\u7d20\u306f\u9802\u70b9\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u8868\u3059\n        for (const vector<int> &edge : edges) {\n            addEdge(edge[0], edge[1]);\n        }\n    }\n\n    /* \u9802\u70b9\u6570\u3092\u53d6\u5f97 */\n    int size() const {\n        return vertices.size();\n    }\n\n    /* \u9802\u70b9\u3092\u8ffd\u52a0 */\n    void addVertex(int val) {\n        int n = size();\n        // \u9802\u70b9\u30ea\u30b9\u30c8\u306b\u65b0\u3057\u3044\u9802\u70b9\u5024\u3092\u8ffd\u52a0\n        vertices.push_back(val);\n        // \u96a3\u63a5\u884c\u5217\u306b\u884c\u3092\u8ffd\u52a0\n        adjMat.emplace_back(vector<int>(n, 0));\n        // \u96a3\u63a5\u884c\u5217\u306b\u5217\u3092\u8ffd\u52a0\n        for (vector<int> &row : adjMat) {\n            row.push_back(0);\n        }\n    }\n\n    /* \u9802\u70b9\u3092\u524a\u9664 */\n    void removeVertex(int index) {\n        if (index >= size()) {\n            throw out_of_range(\"Vertex does not exist\");\n        }\n        // \u9802\u70b9\u30ea\u30b9\u30c8\u304b\u3089`index`\u306e\u9802\u70b9\u3092\u524a\u9664\n        vertices.erase(vertices.begin() + index);\n        // \u96a3\u63a5\u884c\u5217\u304b\u3089`index`\u306e\u884c\u3092\u524a\u9664\n        adjMat.erase(adjMat.begin() + index);\n        // \u96a3\u63a5\u884c\u5217\u304b\u3089`index`\u306e\u5217\u3092\u524a\u9664\n        for (vector<int> &row : adjMat) {\n            row.erase(row.begin() + index);\n        }\n    }\n\n    /* \u8fba\u3092\u8ffd\u52a0 */\n    // \u30d1\u30e9\u30e1\u30fc\u30bfi\u3001j\u306f\u9802\u70b9\u8981\u7d20\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306b\u5bfe\u5fdc\n    void addEdge(int i, int j) {\n        // \u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u7bc4\u56f2\u5916\u3068\u7b49\u4fa1\u6027\u3092\u51e6\u7406\n        if (i < 0 || j < 0 || i >= size() || j >= size() || i == j) {\n            throw out_of_range(\"Vertex does not exist\");\n        }\n        // \u7121\u5411\u30b0\u30e9\u30d5\u3067\u306f\u3001\u96a3\u63a5\u884c\u5217\u306f\u4e3b\u5bfe\u89d2\u7dda\u306b\u3064\u3044\u3066\u5bfe\u79f0\u3001\u5373\u3061(i, j) == (j, i)\u3092\u6e80\u305f\u3059\n        adjMat[i][j] = 1;\n        adjMat[j][i] = 1;\n    }\n\n    /* \u8fba\u3092\u524a\u9664 */\n    // \u30d1\u30e9\u30e1\u30fc\u30bfi\u3001j\u306f\u9802\u70b9\u8981\u7d20\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306b\u5bfe\u5fdc\n    void removeEdge(int i, int j) {\n        // \u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u7bc4\u56f2\u5916\u3068\u7b49\u4fa1\u6027\u3092\u51e6\u7406\n        if (i < 0 || j < 0 || i >= size() || j >= size() || i == j) {\n            throw out_of_range(\"Vertex does not exist\");\n        }\n        adjMat[i][j] = 0;\n        adjMat[j][i] = 0;\n    }\n\n    /* \u96a3\u63a5\u884c\u5217\u3092\u5370\u5237 */\n    void print() {\n        cout << \"\u9802\u70b9\u30ea\u30b9\u30c8 = \";\n        printVector(vertices);\n        cout << \"\u96a3\u63a5\u884c\u5217 =\" << endl;\n        printVectorMatrix(adjMat);\n    }\n};\n
graph_adjacency_matrix.java
/* \u96a3\u63a5\u884c\u5217\u306b\u57fa\u3065\u304f\u7121\u5411\u30b0\u30e9\u30d5\u30af\u30e9\u30b9 */\nclass GraphAdjMat {\n    List<Integer> vertices; // \u9802\u70b9\u30ea\u30b9\u30c8\u3001\u8981\u7d20\u306f\u300c\u9802\u70b9\u5024\u300d\u3092\u8868\u3057\u3001\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306f\u300c\u9802\u70b9\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u300d\u3092\u8868\u3059\n    List<List<Integer>> adjMat; // \u96a3\u63a5\u884c\u5217\u3001\u884c\u3068\u5217\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306f\u300c\u9802\u70b9\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u300d\u306b\u5bfe\u5fdc\n\n    /* \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf */\n    public GraphAdjMat(int[] vertices, int[][] edges) {\n        this.vertices = new ArrayList<>();\n        this.adjMat = new ArrayList<>();\n        // \u9802\u70b9\u3092\u8ffd\u52a0\n        for (int val : vertices) {\n            addVertex(val);\n        }\n        // \u8fba\u3092\u8ffd\u52a0\n        // \u8fba\u306e\u8981\u7d20\u306f\u9802\u70b9\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u8868\u3059\n        for (int[] e : edges) {\n            addEdge(e[0], e[1]);\n        }\n    }\n\n    /* \u9802\u70b9\u6570\u3092\u53d6\u5f97 */\n    public int size() {\n        return vertices.size();\n    }\n\n    /* \u9802\u70b9\u3092\u8ffd\u52a0 */\n    public void addVertex(int val) {\n        int n = size();\n        // \u9802\u70b9\u30ea\u30b9\u30c8\u306b\u65b0\u3057\u3044\u9802\u70b9\u5024\u3092\u8ffd\u52a0\n        vertices.add(val);\n        // \u96a3\u63a5\u884c\u5217\u306b\u884c\u3092\u8ffd\u52a0\n        List<Integer> newRow = new ArrayList<>(n);\n        for (int j = 0; j < n; j++) {\n            newRow.add(0);\n        }\n        adjMat.add(newRow);\n        // \u96a3\u63a5\u884c\u5217\u306b\u5217\u3092\u8ffd\u52a0\n        for (List<Integer> row : adjMat) {\n            row.add(0);\n        }\n    }\n\n    /* \u9802\u70b9\u3092\u524a\u9664 */\n    public void removeVertex(int index) {\n        if (index >= size())\n            throw new IndexOutOfBoundsException();\n        // \u9802\u70b9\u30ea\u30b9\u30c8\u304b\u3089 `index` \u306e\u9802\u70b9\u3092\u524a\u9664\n        vertices.remove(index);\n        // \u96a3\u63a5\u884c\u5217\u304b\u3089 `index` \u306e\u884c\u3092\u524a\u9664\n        adjMat.remove(index);\n        // \u96a3\u63a5\u884c\u5217\u304b\u3089 `index` \u306e\u5217\u3092\u524a\u9664\n        for (List<Integer> row : adjMat) {\n            row.remove(index);\n        }\n    }\n\n    /* \u8fba\u3092\u8ffd\u52a0 */\n    // \u30d1\u30e9\u30e1\u30fc\u30bf i\u3001j \u306f\u9802\u70b9\u8981\u7d20\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306b\u5bfe\u5fdc\n    public void addEdge(int i, int j) {\n        // \u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306e\u7bc4\u56f2\u5916\u3068\u7b49\u4fa1\u6027\u3092\u51e6\u7406\n        if (i < 0 || j < 0 || i >= size() || j >= size() || i == j)\n            throw new IndexOutOfBoundsException();\n        // \u7121\u5411\u30b0\u30e9\u30d5\u3067\u306f\u3001\u96a3\u63a5\u884c\u5217\u306f\u4e3b\u5bfe\u89d2\u7dda\u306b\u3064\u3044\u3066\u5bfe\u79f0\u3001\u3059\u306a\u308f\u3061 (i, j) == (j, i) \u3092\u6e80\u305f\u3059\n        adjMat.get(i).set(j, 1);\n        adjMat.get(j).set(i, 1);\n    }\n\n    /* \u8fba\u3092\u524a\u9664 */\n    // \u30d1\u30e9\u30e1\u30fc\u30bf i\u3001j \u306f\u9802\u70b9\u8981\u7d20\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306b\u5bfe\u5fdc\n    public void removeEdge(int i, int j) {\n        // \u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306e\u7bc4\u56f2\u5916\u3068\u7b49\u4fa1\u6027\u3092\u51e6\u7406\n        if (i < 0 || j < 0 || i >= size() || j >= size() || i == j)\n            throw new IndexOutOfBoundsException();\n        adjMat.get(i).set(j, 0);\n        adjMat.get(j).set(i, 0);\n    }\n\n    /* \u96a3\u63a5\u884c\u5217\u3092\u51fa\u529b */\n    public void print() {\n        System.out.print(\"\u9802\u70b9\u30ea\u30b9\u30c8 = \");\n        System.out.println(vertices);\n        System.out.println(\"\u96a3\u63a5\u884c\u5217 =\");\n        PrintUtil.printMatrix(adjMat);\n    }\n}\n
graph_adjacency_matrix.cs
[class]{GraphAdjMat}-[func]{}\n
graph_adjacency_matrix.go
[class]{graphAdjMat}-[func]{}\n
graph_adjacency_matrix.swift
[class]{GraphAdjMat}-[func]{}\n
graph_adjacency_matrix.js
[class]{GraphAdjMat}-[func]{}\n
graph_adjacency_matrix.ts
[class]{GraphAdjMat}-[func]{}\n
graph_adjacency_matrix.dart
[class]{GraphAdjMat}-[func]{}\n
graph_adjacency_matrix.rs
[class]{GraphAdjMat}-[func]{}\n
graph_adjacency_matrix.c
[class]{GraphAdjMat}-[func]{}\n
graph_adjacency_matrix.kt
[class]{GraphAdjMat}-[func]{}\n
graph_adjacency_matrix.rb
[class]{GraphAdjMat}-[func]{}\n
"},{"location":"chapter_graph/graph_operations/#922","title":"9.2.2 \u00a0 \u96a3\u63a5\u30ea\u30b9\u30c8\u306b\u57fa\u3065\u304f\u5b9f\u88c5","text":"

\u7dcf\u8a08\\(n\\)\u500b\u306e\u9802\u70b9\u3068\\(m\\)\u500b\u306e\u8fba\u3092\u6301\u3064\u7121\u5411\u30b0\u30e9\u30d5\u304c\u4e0e\u3048\u3089\u308c\u305f\u5834\u5408\u3001\u3055\u307e\u3056\u307e\u306a\u64cd\u4f5c\u306f\u4e0b\u56f3\u306e\u3088\u3046\u306b\u5b9f\u88c5\u3067\u304d\u307e\u3059\u3002

\u96a3\u63a5\u30ea\u30b9\u30c8\u306e\u521d\u671f\u5316\u8fba\u306e\u8ffd\u52a0\u8fba\u306e\u524a\u9664\u9802\u70b9\u306e\u8ffd\u52a0\u9802\u70b9\u306e\u524a\u9664

\u56f3 9-8 \u00a0 \u96a3\u63a5\u30ea\u30b9\u30c8\u3067\u306e\u521d\u671f\u5316\u3001\u8fba\u306e\u8ffd\u52a0\u3068\u524a\u9664\u3001\u9802\u70b9\u306e\u8ffd\u52a0\u3068\u524a\u9664

\u4ee5\u4e0b\u306f\u96a3\u63a5\u30ea\u30b9\u30c8\u306e\u30b3\u30fc\u30c9\u5b9f\u88c5\u3067\u3059\u3002\u4e0a\u56f3\u3068\u6bd4\u8f03\u3057\u3066\u3001\u5b9f\u969b\u306e\u30b3\u30fc\u30c9\u306b\u306f\u4ee5\u4e0b\u306e\u9055\u3044\u304c\u3042\u308a\u307e\u3059\u3002

\u3055\u3089\u306b\u3001\u96a3\u63a5\u30ea\u30b9\u30c8\u3067\u9802\u70b9\u3092\u8868\u73fe\u3059\u308b\u305f\u3081\u306bVertex\u30af\u30e9\u30b9\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002\u305d\u306e\u7406\u7531\u306f\uff1a\u96a3\u63a5\u884c\u5217\u306e\u3088\u3046\u306b\u30ea\u30b9\u30c8\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u4f7f\u7528\u3057\u3066\u7570\u306a\u308b\u9802\u70b9\u3092\u533a\u5225\u3059\u308b\u5834\u5408\u3001\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\\(i\\)\u306e\u9802\u70b9\u3092\u524a\u9664\u3057\u305f\u3044\u5834\u5408\u3001\u96a3\u63a5\u30ea\u30b9\u30c8\u5168\u4f53\u3092\u8d70\u67fb\u3057\u3001\\(i\\)\u3088\u308a\u5927\u304d\u3044\u3059\u3079\u3066\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u30921\u3064\u305a\u3064\u6e1b\u5c11\u3055\u305b\u308b\u5fc5\u8981\u304c\u3042\u308a\u3001\u3053\u308c\u306f\u975e\u5e38\u306b\u975e\u52b9\u7387\u7684\u3067\u3059\u3002\u3057\u304b\u3057\u3001\u5404\u9802\u70b9\u304c\u4e00\u610f\u306eVertex\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3067\u3042\u308b\u5834\u5408\u3001\u9802\u70b9\u3092\u524a\u9664\u3057\u3066\u3082\u4ed6\u306e\u9802\u70b9\u306b\u5909\u66f4\u3092\u52a0\u3048\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u305b\u3093\u3002

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby graph_adjacency_list.py
class GraphAdjList:\n    \"\"\"\u96a3\u63a5\u30ea\u30b9\u30c8\u306b\u57fa\u3065\u304f\u7121\u5411\u30b0\u30e9\u30d5\u30af\u30e9\u30b9\"\"\"\n\n    def __init__(self, edges: list[list[Vertex]]):\n        \"\"\"\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\"\"\"\n        # \u96a3\u63a5\u30ea\u30b9\u30c8\u3001\u30ad\u30fc: \u9802\u70b9\u3001\u5024: \u305d\u306e\u9802\u70b9\u306e\u96a3\u63a5\u3059\u308b\u5168\u9802\u70b9\n        self.adj_list = dict[Vertex, list[Vertex]]()\n        # \u3059\u3079\u3066\u306e\u9802\u70b9\u3068\u8fba\u3092\u8ffd\u52a0\n        for edge in edges:\n            self.add_vertex(edge[0])\n            self.add_vertex(edge[1])\n            self.add_edge(edge[0], edge[1])\n\n    def size(self) -> int:\n        \"\"\"\u9802\u70b9\u6570\u3092\u53d6\u5f97\"\"\"\n        return len(self.adj_list)\n\n    def add_edge(self, vet1: Vertex, vet2: Vertex):\n        \"\"\"\u8fba\u3092\u8ffd\u52a0\"\"\"\n        if vet1 not in self.adj_list or vet2 not in self.adj_list or vet1 == vet2:\n            raise ValueError()\n        # \u8fba vet1 - vet2 \u3092\u8ffd\u52a0\n        self.adj_list[vet1].append(vet2)\n        self.adj_list[vet2].append(vet1)\n\n    def remove_edge(self, vet1: Vertex, vet2: Vertex):\n        \"\"\"\u8fba\u3092\u524a\u9664\"\"\"\n        if vet1 not in self.adj_list or vet2 not in self.adj_list or vet1 == vet2:\n            raise ValueError()\n        # \u8fba vet1 - vet2 \u3092\u524a\u9664\n        self.adj_list[vet1].remove(vet2)\n        self.adj_list[vet2].remove(vet1)\n\n    def add_vertex(self, vet: Vertex):\n        \"\"\"\u9802\u70b9\u3092\u8ffd\u52a0\"\"\"\n        if vet in self.adj_list:\n            return\n        # \u96a3\u63a5\u30ea\u30b9\u30c8\u306b\u65b0\u3057\u3044\u9023\u7d50\u30ea\u30b9\u30c8\u3092\u8ffd\u52a0\n        self.adj_list[vet] = []\n\n    def remove_vertex(self, vet: Vertex):\n        \"\"\"\u9802\u70b9\u3092\u524a\u9664\"\"\"\n        if vet not in self.adj_list:\n            raise ValueError()\n        # \u96a3\u63a5\u30ea\u30b9\u30c8\u304b\u3089\u9802\u70b9vet\u306b\u5bfe\u5fdc\u3059\u308b\u9023\u7d50\u30ea\u30b9\u30c8\u3092\u524a\u9664\n        self.adj_list.pop(vet)\n        # \u4ed6\u306e\u9802\u70b9\u306e\u9023\u7d50\u30ea\u30b9\u30c8\u3092\u8d70\u67fb\u3057\u3001vet\u3092\u542b\u3080\u3059\u3079\u3066\u306e\u8fba\u3092\u524a\u9664\n        for vertex in self.adj_list:\n            if vet in self.adj_list[vertex]:\n                self.adj_list[vertex].remove(vet)\n\n    def print(self):\n        \"\"\"\u96a3\u63a5\u30ea\u30b9\u30c8\u3092\u51fa\u529b\"\"\"\n        print(\"\u96a3\u63a5\u30ea\u30b9\u30c8 =\")\n        for vertex in self.adj_list:\n            tmp = [v.val for v in self.adj_list[vertex]]\n            print(f\"{vertex.val}: {tmp},\")\n
graph_adjacency_list.cpp
/* \u96a3\u63a5\u30ea\u30b9\u30c8\u306b\u57fa\u3065\u304f\u7121\u5411\u30b0\u30e9\u30d5\u30af\u30e9\u30b9 */\nclass GraphAdjList {\n  public:\n    // \u96a3\u63a5\u30ea\u30b9\u30c8\u3001\u30ad\u30fc\uff1a\u9802\u70b9\u3001\u5024\uff1a\u305d\u306e\u9802\u70b9\u306e\u3059\u3079\u3066\u306e\u96a3\u63a5\u9802\u70b9\n    unordered_map<Vertex *, vector<Vertex *>> adjList;\n\n    /* \u30d9\u30af\u30bf\u30fc\u304b\u3089\u6307\u5b9a\u3055\u308c\u305f\u30ce\u30fc\u30c9\u3092\u524a\u9664 */\n    void remove(vector<Vertex *> &vec, Vertex *vet) {\n        for (int i = 0; i < vec.size(); i++) {\n            if (vec[i] == vet) {\n                vec.erase(vec.begin() + i);\n                break;\n            }\n        }\n    }\n\n    /* \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf */\n    GraphAdjList(const vector<vector<Vertex *>> &edges) {\n        // \u3059\u3079\u3066\u306e\u9802\u70b9\u3068\u8fba\u3092\u8ffd\u52a0\n        for (const vector<Vertex *> &edge : edges) {\n            addVertex(edge[0]);\n            addVertex(edge[1]);\n            addEdge(edge[0], edge[1]);\n        }\n    }\n\n    /* \u9802\u70b9\u6570\u3092\u53d6\u5f97 */\n    int size() {\n        return adjList.size();\n    }\n\n    /* \u8fba\u3092\u8ffd\u52a0 */\n    void addEdge(Vertex *vet1, Vertex *vet2) {\n        if (!adjList.count(vet1) || !adjList.count(vet2) || vet1 == vet2)\n            throw invalid_argument(\"Vertex does not exist\");\n        // \u8fba vet1 - vet2 \u3092\u8ffd\u52a0\n        adjList[vet1].push_back(vet2);\n        adjList[vet2].push_back(vet1);\n    }\n\n    /* \u8fba\u3092\u524a\u9664 */\n    void removeEdge(Vertex *vet1, Vertex *vet2) {\n        if (!adjList.count(vet1) || !adjList.count(vet2) || vet1 == vet2)\n            throw invalid_argument(\"Vertex does not exist\");\n        // \u8fba vet1 - vet2 \u3092\u524a\u9664\n        remove(adjList[vet1], vet2);\n        remove(adjList[vet2], vet1);\n    }\n\n    /* \u9802\u70b9\u3092\u8ffd\u52a0 */\n    void addVertex(Vertex *vet) {\n        if (adjList.count(vet))\n            return;\n        // \u96a3\u63a5\u30ea\u30b9\u30c8\u306b\u65b0\u3057\u3044\u9023\u7d50\u30ea\u30b9\u30c8\u3092\u8ffd\u52a0\n        adjList[vet] = vector<Vertex *>();\n    }\n\n    /* \u9802\u70b9\u3092\u524a\u9664 */\n    void removeVertex(Vertex *vet) {\n        if (!adjList.count(vet))\n            throw invalid_argument(\"Vertex does not exist\");\n        // \u96a3\u63a5\u30ea\u30b9\u30c8\u304b\u3089\u9802\u70b9vet\u306b\u5bfe\u5fdc\u3059\u308b\u9023\u7d50\u30ea\u30b9\u30c8\u3092\u524a\u9664\n        adjList.erase(vet);\n        // \u4ed6\u306e\u9802\u70b9\u306e\u9023\u7d50\u30ea\u30b9\u30c8\u3092\u8d70\u67fb\u3057\u3001vet\u3092\u542b\u3080\u3059\u3079\u3066\u306e\u8fba\u3092\u524a\u9664\n        for (auto &adj : adjList) {\n            remove(adj.second, vet);\n        }\n    }\n\n    /* \u96a3\u63a5\u30ea\u30b9\u30c8\u3092\u5370\u5237 */\n    void print() {\n        cout << \"\u96a3\u63a5\u30ea\u30b9\u30c8 =\" << endl;\n        for (auto &adj : adjList) {\n            const auto &key = adj.first;\n            const auto &vec = adj.second;\n            cout << key->val << \": \";\n            printVector(vetsToVals(vec));\n        }\n    }\n};\n
graph_adjacency_list.java
/* \u96a3\u63a5\u30ea\u30b9\u30c8\u306b\u57fa\u3065\u304f\u7121\u5411\u30b0\u30e9\u30d5\u30af\u30e9\u30b9 */\nclass GraphAdjList {\n    // \u96a3\u63a5\u30ea\u30b9\u30c8\u3001\u30ad\u30fc: \u9802\u70b9\u3001\u5024: \u305d\u306e\u9802\u70b9\u306e\u3059\u3079\u3066\u306e\u96a3\u63a5\u9802\u70b9\n    Map<Vertex, List<Vertex>> adjList;\n\n    /* \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf */\n    public GraphAdjList(Vertex[][] edges) {\n        this.adjList = new HashMap<>();\n        // \u3059\u3079\u3066\u306e\u9802\u70b9\u3068\u8fba\u3092\u8ffd\u52a0\n        for (Vertex[] edge : edges) {\n            addVertex(edge[0]);\n            addVertex(edge[1]);\n            addEdge(edge[0], edge[1]);\n        }\n    }\n\n    /* \u9802\u70b9\u6570\u3092\u53d6\u5f97 */\n    public int size() {\n        return adjList.size();\n    }\n\n    /* \u8fba\u3092\u8ffd\u52a0 */\n    public void addEdge(Vertex vet1, Vertex vet2) {\n        if (!adjList.containsKey(vet1) || !adjList.containsKey(vet2) || vet1 == vet2)\n            throw new IllegalArgumentException();\n        // \u8fba vet1 - vet2 \u3092\u8ffd\u52a0\n        adjList.get(vet1).add(vet2);\n        adjList.get(vet2).add(vet1);\n    }\n\n    /* \u8fba\u3092\u524a\u9664 */\n    public void removeEdge(Vertex vet1, Vertex vet2) {\n        if (!adjList.containsKey(vet1) || !adjList.containsKey(vet2) || vet1 == vet2)\n            throw new IllegalArgumentException();\n        // \u8fba vet1 - vet2 \u3092\u524a\u9664\n        adjList.get(vet1).remove(vet2);\n        adjList.get(vet2).remove(vet1);\n    }\n\n    /* \u9802\u70b9\u3092\u8ffd\u52a0 */\n    public void addVertex(Vertex vet) {\n        if (adjList.containsKey(vet))\n            return;\n        // \u96a3\u63a5\u30ea\u30b9\u30c8\u306b\u65b0\u3057\u3044\u9023\u7d50\u30ea\u30b9\u30c8\u3092\u8ffd\u52a0\n        adjList.put(vet, new ArrayList<>());\n    }\n\n    /* \u9802\u70b9\u3092\u524a\u9664 */\n    public void removeVertex(Vertex vet) {\n        if (!adjList.containsKey(vet))\n            throw new IllegalArgumentException();\n        // \u96a3\u63a5\u30ea\u30b9\u30c8\u304b\u3089\u9802\u70b9 vet \u306b\u5bfe\u5fdc\u3059\u308b\u9023\u7d50\u30ea\u30b9\u30c8\u3092\u524a\u9664\n        adjList.remove(vet);\n        // \u4ed6\u306e\u9802\u70b9\u306e\u9023\u7d50\u30ea\u30b9\u30c8\u3092\u8d70\u67fb\u3057\u3001vet \u3092\u542b\u3080\u3059\u3079\u3066\u306e\u8fba\u3092\u524a\u9664\n        for (List<Vertex> list : adjList.values()) {\n            list.remove(vet);\n        }\n    }\n\n    /* \u96a3\u63a5\u30ea\u30b9\u30c8\u3092\u51fa\u529b */\n    public void print() {\n        System.out.println(\"\u96a3\u63a5\u30ea\u30b9\u30c8 =\");\n        for (Map.Entry<Vertex, List<Vertex>> pair : adjList.entrySet()) {\n            List<Integer> tmp = new ArrayList<>();\n            for (Vertex vertex : pair.getValue())\n                tmp.add(vertex.val);\n            System.out.println(pair.getKey().val + \": \" + tmp + \",\");\n        }\n    }\n}\n
graph_adjacency_list.cs
[class]{GraphAdjList}-[func]{}\n
graph_adjacency_list.go
[class]{graphAdjList}-[func]{}\n
graph_adjacency_list.swift
[class]{GraphAdjList}-[func]{}\n
graph_adjacency_list.js
[class]{GraphAdjList}-[func]{}\n
graph_adjacency_list.ts
[class]{GraphAdjList}-[func]{}\n
graph_adjacency_list.dart
[class]{GraphAdjList}-[func]{}\n
graph_adjacency_list.rs
[class]{GraphAdjList}-[func]{}\n
graph_adjacency_list.c
[class]{AdjListNode}-[func]{}\n\n[class]{GraphAdjList}-[func]{}\n
graph_adjacency_list.kt
[class]{GraphAdjList}-[func]{}\n
graph_adjacency_list.rb
[class]{GraphAdjList}-[func]{}\n
"},{"location":"chapter_graph/graph_operations/#923","title":"9.2.3 \u00a0 \u52b9\u7387\u306e\u6bd4\u8f03","text":"

\u30b0\u30e9\u30d5\u306b\\(n\\)\u500b\u306e\u9802\u70b9\u3068\\(m\\)\u500b\u306e\u8fba\u304c\u3042\u308b\u3068\u4eee\u5b9a\u3059\u308b\u3068\u3001\u4e0b\u8868\u306f\u96a3\u63a5\u884c\u5217\u3068\u96a3\u63a5\u30ea\u30b9\u30c8\u306e\u6642\u9593\u52b9\u7387\u3068\u7a7a\u9593\u52b9\u7387\u3092\u6bd4\u8f03\u3057\u3066\u3044\u307e\u3059\u3002

\u8868 9-2 \u00a0 \u96a3\u63a5\u884c\u5217\u3068\u96a3\u63a5\u30ea\u30b9\u30c8\u306e\u6bd4\u8f03

\u96a3\u63a5\u884c\u5217 \u96a3\u63a5\u30ea\u30b9\u30c8\uff08\u9023\u7d50\u30ea\u30b9\u30c8\uff09 \u96a3\u63a5\u30ea\u30b9\u30c8\uff08\u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb\uff09 \u96a3\u63a5\u6027\u306e\u5224\u5b9a \\(O(1)\\) \\(O(m)\\) \\(O(1)\\) \u8fba\u306e\u8ffd\u52a0 \\(O(1)\\) \\(O(1)\\) \\(O(1)\\) \u8fba\u306e\u524a\u9664 \\(O(1)\\) \\(O(m)\\) \\(O(1)\\) \u9802\u70b9\u306e\u8ffd\u52a0 \\(O(n)\\) \\(O(1)\\) \\(O(1)\\) \u9802\u70b9\u306e\u524a\u9664 \\(O(n^2)\\) \\(O(n + m)\\) \\(O(n)\\) \u30e1\u30e2\u30ea\u7a7a\u9593\u4f7f\u7528\u91cf \\(O(n^2)\\) \\(O(n + m)\\) \\(O(n + m)\\)

\u4e0a\u8868\u3092\u89b3\u5bdf\u3059\u308b\u3068\u3001\u96a3\u63a5\u30ea\u30b9\u30c8\uff08\u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb\uff09\u304c\u6700\u9ad8\u306e\u6642\u9593\u52b9\u7387\u3068\u7a7a\u9593\u52b9\u7387\u3092\u6301\u3063\u3066\u3044\u308b\u3088\u3046\u306b\u898b\u3048\u307e\u3059\u3002\u3057\u304b\u3057\u3001\u5b9f\u969b\u306b\u306f\u3001\u96a3\u63a5\u884c\u5217\u3067\u306e\u8fba\u306b\u5bfe\u3059\u308b\u64cd\u4f5c\u304c\u3088\u308a\u52b9\u7387\u7684\u3067\u3001\u5358\u4e00\u306e\u914d\u5217\u30a2\u30af\u30bb\u30b9\u307e\u305f\u306f\u4ee3\u5165\u64cd\u4f5c\u306e\u307f\u304c\u5fc5\u8981\u3067\u3059\u3002\u5168\u4f53\u7684\u306b\u3001\u96a3\u63a5\u884c\u5217\u306f\u300c\u7a7a\u9593\u3068\u6642\u9593\u306e\u30c8\u30ec\u30fc\u30c9\u30aa\u30d5\u300d\u306e\u539f\u5247\u3092\u4f8b\u793a\u3057\u3001\u96a3\u63a5\u30ea\u30b9\u30c8\u306f\u300c\u6642\u9593\u3068\u7a7a\u9593\u306e\u30c8\u30ec\u30fc\u30c9\u30aa\u30d5\u300d\u3092\u4f8b\u793a\u3057\u3066\u3044\u307e\u3059\u3002

"},{"location":"chapter_graph/graph_traversal/","title":"9.3 \u00a0 \u30b0\u30e9\u30d5\u8d70\u67fb","text":"

\u6728\u306f\u300c\u4e00\u5bfe\u591a\u300d\u306e\u95a2\u4fc2\u3092\u8868\u73fe\u3057\u3001\u30b0\u30e9\u30d5\u306f\u3088\u308a\u9ad8\u3044\u81ea\u7531\u5ea6\u3092\u6301\u3061\u3001\u4efb\u610f\u306e\u300c\u591a\u5bfe\u591a\u300d\u306e\u95a2\u4fc2\u3092\u8868\u73fe\u3067\u304d\u307e\u3059\u3002\u3057\u305f\u304c\u3063\u3066\u3001\u6728\u3092\u30b0\u30e9\u30d5\u306e\u7279\u5225\u306a\u30b1\u30fc\u30b9\u3068\u898b\u306a\u3059\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u660e\u3089\u304b\u306b\u3001\u6728\u306e\u8d70\u67fb\u64cd\u4f5c\u3082\u30b0\u30e9\u30d5\u8d70\u67fb\u64cd\u4f5c\u306e\u7279\u5225\u306a\u30b1\u30fc\u30b9\u3067\u3059\u3002

\u30b0\u30e9\u30d5\u3068\u6728\u306e\u4e21\u65b9\u3067\u3001\u8d70\u67fb\u64cd\u4f5c\u3092\u5b9f\u88c5\u3059\u308b\u305f\u3081\u306b\u63a2\u7d22\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u5fdc\u7528\u304c\u5fc5\u8981\u3067\u3059\u3002\u30b0\u30e9\u30d5\u8d70\u67fb\u306f2\u3064\u306e\u30bf\u30a4\u30d7\u306b\u5206\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\uff1a\u5e45\u512a\u5148\u63a2\u7d22\uff08BFS\uff09\u3068\u6df1\u3055\u512a\u5148\u63a2\u7d22\uff08DFS\uff09\u3067\u3059\u3002

"},{"location":"chapter_graph/graph_traversal/#931","title":"9.3.1 \u00a0 \u5e45\u512a\u5148\u63a2\u7d22","text":"

\u5e45\u512a\u5148\u63a2\u7d22\u306f\u8fd1\u304f\u304b\u3089\u9060\u304f\u3078\u306e\u8d70\u67fb\u65b9\u6cd5\u3067\u3001\u3042\u308b\u9802\u70b9\u304b\u3089\u958b\u59cb\u3057\u3001\u5e38\u306b\u6700\u3082\u8fd1\u3044\u9802\u70b9\u3092\u512a\u5148\u7684\u306b\u8a2a\u554f\u3057\u3001\u5c64\u3054\u3068\u306b\u5916\u5074\u306b\u5c55\u958b\u3057\u3066\u3044\u304d\u307e\u3059\u3002\u4e0b\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u5de6\u4e0a\u306e\u9802\u70b9\u304b\u3089\u958b\u59cb\u3057\u3001\u307e\u305a\u305d\u306e\u9802\u70b9\u306e\u3059\u3079\u3066\u306e\u96a3\u63a5\u9802\u70b9\u3092\u8d70\u67fb\u3057\u3001\u6b21\u306b\u6b21\u306e\u9802\u70b9\u306e\u3059\u3079\u3066\u306e\u96a3\u63a5\u9802\u70b9\u3092\u8d70\u67fb\u3057\u3001\u4ee5\u4e0b\u540c\u69d8\u306b\u3001\u3059\u3079\u3066\u306e\u9802\u70b9\u304c\u8a2a\u554f\u3055\u308c\u308b\u307e\u3067\u7d9a\u3051\u307e\u3059\u3002

\u56f3 9-9 \u00a0 \u30b0\u30e9\u30d5\u306e\u5e45\u512a\u5148\u8d70\u67fb

"},{"location":"chapter_graph/graph_traversal/#1","title":"1. \u00a0 \u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u5b9f\u88c5","text":"

BFS\u306f\u901a\u5e38\u30ad\u30e5\u30fc\u306e\u52a9\u3051\u3092\u501f\u308a\u3066\u5b9f\u88c5\u3055\u308c\u307e\u3059\uff08\u4e0b\u8a18\u306e\u30b3\u30fc\u30c9\u53c2\u7167\uff09\u3002\u30ad\u30e5\u30fc\u306f\u300c\u5148\u5165\u5148\u51fa\u300d\u3067\u3001\u3053\u308c\u306f\u300c\u8fd1\u304f\u304b\u3089\u9060\u304f\u3078\u300d\u8d70\u67fb\u3059\u308bBFS\u306e\u8003\u3048\u65b9\u3068\u4e00\u81f4\u3057\u307e\u3059\u3002

  1. \u958b\u59cb\u9802\u70b9startVet\u3092\u30ad\u30e5\u30fc\u306b\u8ffd\u52a0\u3057\u3001\u30eb\u30fc\u30d7\u3092\u958b\u59cb\u3057\u307e\u3059\u3002
  2. \u30eb\u30fc\u30d7\u306e\u5404\u53cd\u5fa9\u3067\u3001\u30ad\u30e5\u30fc\u306e\u5148\u982d\u306e\u9802\u70b9\u3092\u30dd\u30c3\u30d7\u3057\u3001\u305d\u308c\u3092\u8a2a\u554f\u6e08\u307f\u3068\u3057\u3066\u8a18\u9332\u3057\u3001\u6b21\u306b\u305d\u306e\u9802\u70b9\u306e\u3059\u3079\u3066\u306e\u96a3\u63a5\u9802\u70b9\u3092\u30ad\u30e5\u30fc\u306e\u672b\u5c3e\u306b\u8ffd\u52a0\u3057\u307e\u3059\u3002
  3. \u3059\u3079\u3066\u306e\u9802\u70b9\u304c\u8a2a\u554f\u3055\u308c\u308b\u307e\u3067\u624b\u98062.\u3092\u7e70\u308a\u8fd4\u3057\u307e\u3059\u3002

\u9802\u70b9\u306e\u518d\u8a2a\u554f\u3092\u9632\u3050\u305f\u3081\u306b\u3001\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8visited\u3092\u4f7f\u7528\u3057\u3066\u3069\u306e\u30ce\u30fc\u30c9\u304c\u8a2a\u554f\u3055\u308c\u305f\u304b\u3092\u8a18\u9332\u3057\u307e\u3059\u3002

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby graph_bfs.py
def graph_bfs(graph: GraphAdjList, start_vet: Vertex) -> list[Vertex]:\n    \"\"\"\u5e45\u512a\u5148\u8d70\u67fb\"\"\"\n    # \u96a3\u63a5\u30ea\u30b9\u30c8\u3092\u4f7f\u7528\u3057\u3066\u30b0\u30e9\u30d5\u3092\u8868\u73fe\u3057\u3001\u6307\u5b9a\u3055\u308c\u305f\u9802\u70b9\u306e\u3059\u3079\u3066\u306e\u96a3\u63a5\u9802\u70b9\u3092\u53d6\u5f97\n    # \u9802\u70b9\u8d70\u67fb\u30b7\u30fc\u30b1\u30f3\u30b9\n    res = []\n    # \u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u3001\u8a2a\u554f\u6e08\u307f\u9802\u70b9\u3092\u8a18\u9332\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\n    visited = set[Vertex]([start_vet])\n    # BFS\u3092\u5b9f\u88c5\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u308b\u30ad\u30e5\u30fc\n    que = deque[Vertex]([start_vet])\n    # \u9802\u70b9vet\u304b\u3089\u958b\u59cb\u3057\u3001\u3059\u3079\u3066\u306e\u9802\u70b9\u304c\u8a2a\u554f\u3055\u308c\u308b\u307e\u3067\u30eb\u30fc\u30d7\n    while len(que) > 0:\n        vet = que.popleft()  # \u30ad\u30e5\u30fc\u306e\u5148\u982d\u306e\u9802\u70b9\u3092\u30c7\u30ad\u30e5\u30fc\n        res.append(vet)  # \u8a2a\u554f\u6e08\u307f\u9802\u70b9\u3092\u8a18\u9332\n        # \u305d\u306e\u9802\u70b9\u306e\u3059\u3079\u3066\u306e\u96a3\u63a5\u9802\u70b9\u3092\u8d70\u67fb\n        for adj_vet in graph.adj_list[vet]:\n            if adj_vet in visited:\n                continue  # \u65e2\u306b\u8a2a\u554f\u6e08\u307f\u306e\u9802\u70b9\u3092\u30b9\u30ad\u30c3\u30d7\n            que.append(adj_vet)  # \u672a\u8a2a\u554f\u306e\u9802\u70b9\u306e\u307f\u3092\u30a8\u30f3\u30ad\u30e5\u30fc\n            visited.add(adj_vet)  # \u9802\u70b9\u3092\u8a2a\u554f\u6e08\u307f\u3068\u3057\u3066\u30de\u30fc\u30af\n    # \u9802\u70b9\u8d70\u67fb\u30b7\u30fc\u30b1\u30f3\u30b9\u3092\u8fd4\u3059\n    return res\n
graph_bfs.cpp
/* \u5e45\u512a\u5148\u8d70\u67fb */\n// \u96a3\u63a5\u30ea\u30b9\u30c8\u3092\u4f7f\u7528\u3057\u3066\u30b0\u30e9\u30d5\u3092\u8868\u73fe\u3057\u3001\u6307\u5b9a\u3055\u308c\u305f\u9802\u70b9\u306e\u3059\u3079\u3066\u306e\u96a3\u63a5\u9802\u70b9\u3092\u53d6\u5f97\nvector<Vertex *> graphBFS(GraphAdjList &graph, Vertex *startVet) {\n    // \u9802\u70b9\u8d70\u67fb\u9806\u5e8f\n    vector<Vertex *> res;\n    // \u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u3001\u8a2a\u554f\u6e08\u307f\u9802\u70b9\u3092\u8a18\u9332\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\n    unordered_set<Vertex *> visited = {startVet};\n    // BFS\u3092\u5b9f\u88c5\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u308b\u30ad\u30e5\u30fc\n    queue<Vertex *> que;\n    que.push(startVet);\n    // \u9802\u70b9vet\u304b\u3089\u958b\u59cb\u3057\u3001\u3059\u3079\u3066\u306e\u9802\u70b9\u304c\u8a2a\u554f\u3055\u308c\u308b\u307e\u3067\u30eb\u30fc\u30d7\n    while (!que.empty()) {\n        Vertex *vet = que.front();\n        que.pop();          // \u30ad\u30e5\u30fc\u306e\u5148\u982d\u306e\u9802\u70b9\u3092\u30c7\u30ad\u30e5\u30fc\n        res.push_back(vet); // \u8a2a\u554f\u6e08\u307f\u9802\u70b9\u3092\u8a18\u9332\n        // \u305d\u306e\u9802\u70b9\u306e\u3059\u3079\u3066\u306e\u96a3\u63a5\u9802\u70b9\u3092\u8d70\u67fb\n        for (auto adjVet : graph.adjList[vet]) {\n            if (visited.count(adjVet))\n                continue;            // \u3059\u3067\u306b\u8a2a\u554f\u6e08\u307f\u306e\u9802\u70b9\u3092\u30b9\u30ad\u30c3\u30d7\n            que.push(adjVet);        // \u672a\u8a2a\u554f\u306e\u9802\u70b9\u306e\u307f\u3092\u30a8\u30f3\u30ad\u30e5\u30fc\n            visited.emplace(adjVet); // \u9802\u70b9\u3092\u8a2a\u554f\u6e08\u307f\u3068\u3057\u3066\u30de\u30fc\u30af\n        }\n    }\n    // \u9802\u70b9\u8d70\u67fb\u9806\u5e8f\u3092\u8fd4\u3059\n    return res;\n}\n
graph_bfs.java
/* \u5e45\u512a\u5148\u8d70\u67fb */\n// \u96a3\u63a5\u30ea\u30b9\u30c8\u3092\u4f7f\u7528\u3057\u3066\u30b0\u30e9\u30d5\u3092\u8868\u73fe\u3057\u3001\u6307\u5b9a\u3057\u305f\u9802\u70b9\u306e\u3059\u3079\u3066\u306e\u96a3\u63a5\u9802\u70b9\u3092\u53d6\u5f97\nList<Vertex> graphBFS(GraphAdjList graph, Vertex startVet) {\n    // \u9802\u70b9\u8d70\u67fb\u9806\u5e8f\n    List<Vertex> res = new ArrayList<>();\n    // \u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u3001\u8a2a\u554f\u6e08\u307f\u306e\u9802\u70b9\u3092\u8a18\u9332\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\n    Set<Vertex> visited = new HashSet<>();\n    visited.add(startVet);\n    // BFS \u3092\u5b9f\u88c5\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3059\u308b\u30ad\u30e5\u30fc\n    Queue<Vertex> que = new LinkedList<>();\n    que.offer(startVet);\n    // \u9802\u70b9 vet \u304b\u3089\u958b\u59cb\u3057\u3001\u3059\u3079\u3066\u306e\u9802\u70b9\u304c\u8a2a\u554f\u3055\u308c\u308b\u307e\u3067\u30eb\u30fc\u30d7\n    while (!que.isEmpty()) {\n        Vertex vet = que.poll(); // \u30ad\u30e5\u30fc\u306e\u5148\u982d\u306e\u9802\u70b9\u3092\u30c7\u30ad\u30e5\u30fc\n        res.add(vet);            // \u8a2a\u554f\u3057\u305f\u9802\u70b9\u3092\u8a18\u9332\n        // \u305d\u306e\u9802\u70b9\u306e\u3059\u3079\u3066\u306e\u96a3\u63a5\u9802\u70b9\u3092\u8d70\u67fb\n        for (Vertex adjVet : graph.adjList.get(vet)) {\n            if (visited.contains(adjVet))\n                continue;        // \u3059\u3067\u306b\u8a2a\u554f\u6e08\u307f\u306e\u9802\u70b9\u3092\u30b9\u30ad\u30c3\u30d7\n            que.offer(adjVet);   // \u672a\u8a2a\u554f\u306e\u9802\u70b9\u306e\u307f\u3092\u30a8\u30f3\u30ad\u30e5\u30fc\n            visited.add(adjVet); // \u9802\u70b9\u3092\u8a2a\u554f\u6e08\u307f\u3068\u3057\u3066\u30de\u30fc\u30af\n        }\n    }\n    // \u9802\u70b9\u8d70\u67fb\u9806\u5e8f\u3092\u8fd4\u3059\n    return res;\n}\n
graph_bfs.cs
[class]{graph_bfs}-[func]{GraphBFS}\n
graph_bfs.go
[class]{}-[func]{graphBFS}\n
graph_bfs.swift
[class]{}-[func]{graphBFS}\n
graph_bfs.js
[class]{}-[func]{graphBFS}\n
graph_bfs.ts
[class]{}-[func]{graphBFS}\n
graph_bfs.dart
[class]{}-[func]{graphBFS}\n
graph_bfs.rs
[class]{}-[func]{graph_bfs}\n
graph_bfs.c
[class]{Queue}-[func]{}\n\n[class]{}-[func]{isVisited}\n\n[class]{}-[func]{graphBFS}\n
graph_bfs.kt
[class]{}-[func]{graphBFS}\n
graph_bfs.rb
[class]{}-[func]{graph_bfs}\n

\u30b3\u30fc\u30c9\u306f\u6bd4\u8f03\u7684\u62bd\u8c61\u7684\u3067\u3059\u304c\u3001\u4e0b\u56f3\u3068\u6bd4\u8f03\u3059\u308b\u3053\u3068\u3067\u3088\u308a\u826f\u304f\u7406\u89e3\u3067\u304d\u307e\u3059\u3002

<1><2><3><4><5><6><7><8><9><10><11>

\u56f3 9-10 \u00a0 \u30b0\u30e9\u30d5\u306e\u5e45\u512a\u5148\u63a2\u7d22\u306e\u624b\u9806

\u5e45\u512a\u5148\u8d70\u67fb\u306e\u30b7\u30fc\u30b1\u30f3\u30b9\u306f\u4e00\u610f\u3067\u3059\u304b\uff1f

\u4e00\u610f\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u5e45\u512a\u5148\u8d70\u67fb\u306f\u300c\u8fd1\u304f\u304b\u3089\u9060\u304f\u300d\u306e\u9806\u5e8f\u3067\u8d70\u67fb\u3059\u308b\u3053\u3068\u306e\u307f\u3092\u8981\u6c42\u3057\u3001\u540c\u3058\u8ddd\u96e2\u306e\u9802\u70b9\u306e\u8d70\u67fb\u9806\u5e8f\u306f\u4efb\u610f\u306b\u3067\u304d\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001\u4e0a\u56f3\u3067\u306f\u3001\u9802\u70b9\\(1\\)\u3068\\(3\\)\u306e\u8a2a\u554f\u9806\u5e8f\u3092\u4ea4\u63db\u3067\u304d\u307e\u3059\u3057\u3001\u9802\u70b9\\(2\\)\u3001\\(4\\)\u3001\\(6\\)\u306e\u9806\u5e8f\u3082\u540c\u69d8\u3067\u3059\u3002

"},{"location":"chapter_graph/graph_traversal/#2","title":"2. \u00a0 \u8a08\u7b97\u91cf\u5206\u6790","text":"

\u6642\u9593\u8a08\u7b97\u91cf\uff1a\u3059\u3079\u3066\u306e\u9802\u70b9\u304c\u4e00\u5ea6\u305a\u3064\u30a8\u30f3\u30ad\u30e5\u30fc\u304a\u3088\u3073\u30c7\u30ad\u30e5\u30fc\u3055\u308c\u3001\\(O(|V|)\\)\u6642\u9593\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002\u96a3\u63a5\u9802\u70b9\u3092\u8d70\u67fb\u3059\u308b\u904e\u7a0b\u3067\u3001\u7121\u5411\u30b0\u30e9\u30d5\u3067\u3042\u308b\u305f\u3081\u3001\u3059\u3079\u3066\u306e\u8fba\u304c\\(2\\)\u56de\u8a2a\u554f\u3055\u308c\u3001\\(O(2|E|)\\)\u6642\u9593\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002\u5168\u4f53\u3067\\(O(|V| + |E|)\\)\u6642\u9593\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002

\u7a7a\u9593\u8a08\u7b97\u91cf\uff1a\u30ea\u30b9\u30c8res\u3001\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8visited\u3001\u30ad\u30e5\u30fcque\u306e\u6700\u5927\u9802\u70b9\u6570\u306f\\(|V|\\)\u3067\u3001\\(O(|V|)\\)\u7a7a\u9593\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002

"},{"location":"chapter_graph/graph_traversal/#932","title":"9.3.2 \u00a0 \u6df1\u3055\u512a\u5148\u63a2\u7d22","text":"

\u6df1\u3055\u512a\u5148\u63a2\u7d22\u306f\u53ef\u80fd\u306a\u9650\u308a\u9060\u304f\u307e\u3067\u884c\u304d\u3001\u305d\u308c\u4ee5\u4e0a\u306e\u30d1\u30b9\u304c\u306a\u3044\u5834\u5408\u306b\u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30af\u3059\u308b\u8d70\u67fb\u65b9\u6cd5\u3067\u3059\u3002\u4e0b\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u5de6\u4e0a\u306e\u9802\u70b9\u304b\u3089\u958b\u59cb\u3057\u3001\u305d\u308c\u4ee5\u4e0a\u306e\u30d1\u30b9\u304c\u306a\u304f\u306a\u308b\u307e\u3067\u73fe\u5728\u306e\u9802\u70b9\u306e\u3044\u305a\u308c\u304b\u306e\u96a3\u63a5\u9802\u70b9\u3092\u8a2a\u554f\u3057\u3001\u6b21\u306b\u623b\u3063\u3066\u7d9a\u884c\u3057\u3001\u3059\u3079\u3066\u306e\u9802\u70b9\u304c\u8d70\u67fb\u3055\u308c\u308b\u307e\u3067\u7d9a\u3051\u307e\u3059\u3002

\u56f3 9-11 \u00a0 \u30b0\u30e9\u30d5\u306e\u6df1\u3055\u512a\u5148\u8d70\u67fb

"},{"location":"chapter_graph/graph_traversal/#1_1","title":"1. \u00a0 \u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u5b9f\u88c5","text":"

\u3053\u306e\u300c\u53ef\u80fd\u306a\u9650\u308a\u9060\u304f\u307e\u3067\u884c\u3063\u3066\u304b\u3089\u623b\u308b\u300d\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u30d1\u30e9\u30c0\u30a4\u30e0\u306f\u901a\u5e38\u518d\u5e30\u306b\u57fa\u3065\u3044\u3066\u5b9f\u88c5\u3055\u308c\u307e\u3059\u3002\u5e45\u512a\u5148\u63a2\u7d22\u3068\u540c\u69d8\u306b\u3001\u6df1\u3055\u512a\u5148\u63a2\u7d22\u3067\u3082\u3001\u518d\u8a2a\u554f\u3092\u907f\u3051\u308b\u305f\u3081\u306b\u8a2a\u554f\u6e08\u307f\u9802\u70b9\u3092\u8a18\u9332\u3059\u308b\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8visited\u306e\u52a9\u3051\u304c\u5fc5\u8981\u3067\u3059\u3002

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby graph_dfs.py
def dfs(graph: GraphAdjList, visited: set[Vertex], res: list[Vertex], vet: Vertex):\n    \"\"\"\u6df1\u3055\u512a\u5148\u8d70\u67fb\u306e\u30d8\u30eb\u30d1\u30fc\u95a2\u6570\"\"\"\n    res.append(vet)  # \u8a2a\u554f\u6e08\u307f\u9802\u70b9\u3092\u8a18\u9332\n    visited.add(vet)  # \u9802\u70b9\u3092\u8a2a\u554f\u6e08\u307f\u3068\u3057\u3066\u30de\u30fc\u30af\n    # \u305d\u306e\u9802\u70b9\u306e\u3059\u3079\u3066\u306e\u96a3\u63a5\u9802\u70b9\u3092\u8d70\u67fb\n    for adjVet in graph.adj_list[vet]:\n        if adjVet in visited:\n            continue  # \u65e2\u306b\u8a2a\u554f\u6e08\u307f\u306e\u9802\u70b9\u3092\u30b9\u30ad\u30c3\u30d7\n        # \u96a3\u63a5\u9802\u70b9\u3092\u518d\u5e30\u7684\u306b\u8a2a\u554f\n        dfs(graph, visited, res, adjVet)\n\ndef graph_dfs(graph: GraphAdjList, start_vet: Vertex) -> list[Vertex]:\n    \"\"\"\u6df1\u3055\u512a\u5148\u8d70\u67fb\"\"\"\n    # \u96a3\u63a5\u30ea\u30b9\u30c8\u3092\u4f7f\u7528\u3057\u3066\u30b0\u30e9\u30d5\u3092\u8868\u73fe\u3057\u3001\u6307\u5b9a\u3055\u308c\u305f\u9802\u70b9\u306e\u3059\u3079\u3066\u306e\u96a3\u63a5\u9802\u70b9\u3092\u53d6\u5f97\n    # \u9802\u70b9\u8d70\u67fb\u30b7\u30fc\u30b1\u30f3\u30b9\n    res = []\n    # \u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u3001\u8a2a\u554f\u6e08\u307f\u9802\u70b9\u3092\u8a18\u9332\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\n    visited = set[Vertex]()\n    dfs(graph, visited, res, start_vet)\n    return res\n
graph_dfs.cpp
/* \u6df1\u3055\u512a\u5148\u8d70\u67fb\u30d8\u30eb\u30d1\u30fc\u95a2\u6570 */\nvoid dfs(GraphAdjList &graph, unordered_set<Vertex *> &visited, vector<Vertex *> &res, Vertex *vet) {\n    res.push_back(vet);   // \u8a2a\u554f\u6e08\u307f\u9802\u70b9\u3092\u8a18\u9332\n    visited.emplace(vet); // \u9802\u70b9\u3092\u8a2a\u554f\u6e08\u307f\u3068\u3057\u3066\u30de\u30fc\u30af\n    // \u305d\u306e\u9802\u70b9\u306e\u3059\u3079\u3066\u306e\u96a3\u63a5\u9802\u70b9\u3092\u8d70\u67fb\n    for (Vertex *adjVet : graph.adjList[vet]) {\n        if (visited.count(adjVet))\n            continue; // \u3059\u3067\u306b\u8a2a\u554f\u6e08\u307f\u306e\u9802\u70b9\u3092\u30b9\u30ad\u30c3\u30d7\n        // \u96a3\u63a5\u9802\u70b9\u3092\u518d\u5e30\u7684\u306b\u8a2a\u554f\n        dfs(graph, visited, res, adjVet);\n    }\n}\n\n/* \u6df1\u3055\u512a\u5148\u8d70\u67fb */\n// \u96a3\u63a5\u30ea\u30b9\u30c8\u3092\u4f7f\u7528\u3057\u3066\u30b0\u30e9\u30d5\u3092\u8868\u73fe\u3057\u3001\u6307\u5b9a\u3055\u308c\u305f\u9802\u70b9\u306e\u3059\u3079\u3066\u306e\u96a3\u63a5\u9802\u70b9\u3092\u53d6\u5f97\nvector<Vertex *> graphDFS(GraphAdjList &graph, Vertex *startVet) {\n    // \u9802\u70b9\u8d70\u67fb\u9806\u5e8f\n    vector<Vertex *> res;\n    // \u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u3001\u8a2a\u554f\u6e08\u307f\u9802\u70b9\u3092\u8a18\u9332\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\n    unordered_set<Vertex *> visited;\n    dfs(graph, visited, res, startVet);\n    return res;\n}\n
graph_dfs.java
/* \u6df1\u3055\u512a\u5148\u8d70\u67fb\u306e\u88dc\u52a9\u95a2\u6570 */\nvoid dfs(GraphAdjList graph, Set<Vertex> visited, List<Vertex> res, Vertex vet) {\n    res.add(vet);     // \u8a2a\u554f\u3057\u305f\u9802\u70b9\u3092\u8a18\u9332\n    visited.add(vet); // \u9802\u70b9\u3092\u8a2a\u554f\u6e08\u307f\u3068\u3057\u3066\u30de\u30fc\u30af\n    // \u305d\u306e\u9802\u70b9\u306e\u3059\u3079\u3066\u306e\u96a3\u63a5\u9802\u70b9\u3092\u8d70\u67fb\n    for (Vertex adjVet : graph.adjList.get(vet)) {\n        if (visited.contains(adjVet))\n            continue; // \u3059\u3067\u306b\u8a2a\u554f\u6e08\u307f\u306e\u9802\u70b9\u3092\u30b9\u30ad\u30c3\u30d7\n        // \u96a3\u63a5\u9802\u70b9\u3092\u518d\u5e30\u7684\u306b\u8a2a\u554f\n        dfs(graph, visited, res, adjVet);\n    }\n}\n\n/* \u6df1\u3055\u512a\u5148\u8d70\u67fb */\n// \u96a3\u63a5\u30ea\u30b9\u30c8\u3092\u4f7f\u7528\u3057\u3066\u30b0\u30e9\u30d5\u3092\u8868\u73fe\u3057\u3001\u6307\u5b9a\u3057\u305f\u9802\u70b9\u306e\u3059\u3079\u3066\u306e\u96a3\u63a5\u9802\u70b9\u3092\u53d6\u5f97\nList<Vertex> graphDFS(GraphAdjList graph, Vertex startVet) {\n    // \u9802\u70b9\u8d70\u67fb\u9806\u5e8f\n    List<Vertex> res = new ArrayList<>();\n    // \u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8\u3001\u8a2a\u554f\u6e08\u307f\u306e\u9802\u70b9\u3092\u8a18\u9332\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\n    Set<Vertex> visited = new HashSet<>();\n    dfs(graph, visited, res, startVet);\n    return res;\n}\n
graph_dfs.cs
[class]{graph_dfs}-[func]{DFS}\n\n[class]{graph_dfs}-[func]{GraphDFS}\n
graph_dfs.go
[class]{}-[func]{dfs}\n\n[class]{}-[func]{graphDFS}\n
graph_dfs.swift
[class]{}-[func]{dfs}\n\n[class]{}-[func]{graphDFS}\n
graph_dfs.js
[class]{}-[func]{dfs}\n\n[class]{}-[func]{graphDFS}\n
graph_dfs.ts
[class]{}-[func]{dfs}\n\n[class]{}-[func]{graphDFS}\n
graph_dfs.dart
[class]{}-[func]{dfs}\n\n[class]{}-[func]{graphDFS}\n
graph_dfs.rs
[class]{}-[func]{dfs}\n\n[class]{}-[func]{graph_dfs}\n
graph_dfs.c
[class]{}-[func]{isVisited}\n\n[class]{}-[func]{dfs}\n\n[class]{}-[func]{graphDFS}\n
graph_dfs.kt
[class]{}-[func]{dfs}\n\n[class]{}-[func]{graphDFS}\n
graph_dfs.rb
[class]{}-[func]{dfs}\n\n[class]{}-[func]{graph_dfs}\n

\u6df1\u3055\u512a\u5148\u63a2\u7d22\u306e\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u30d7\u30ed\u30bb\u30b9\u3092\u4e0b\u56f3\u306b\u793a\u3057\u307e\u3059\u3002

\u7406\u89e3\u3092\u6df1\u3081\u308b\u305f\u3081\u3001\u4e0b\u56f3\u3068\u30b3\u30fc\u30c9\u3092\u7d44\u307f\u5408\u308f\u305b\u3066\u3001DFS\u30d7\u30ed\u30bb\u30b9\u5168\u4f53\u3092\u982d\u306e\u4e2d\u3067\u30b7\u30df\u30e5\u30ec\u30fc\u30c8\uff08\u307e\u305f\u306f\u63cf\u753b\uff09\u3059\u308b\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\u3002\u5404\u518d\u5e30\u30e1\u30bd\u30c3\u30c9\u304c\u3044\u3064\u958b\u59cb\u3055\u308c\u3001\u3044\u3064\u623b\u308b\u304b\u3092\u542b\u3081\u3066\u3067\u3059\u3002

<1><2><3><4><5><6><7><8><9><10><11>

\u56f3 9-12 \u00a0 \u30b0\u30e9\u30d5\u306e\u6df1\u3055\u512a\u5148\u63a2\u7d22\u306e\u624b\u9806

\u6df1\u3055\u512a\u5148\u8d70\u67fb\u306e\u30b7\u30fc\u30b1\u30f3\u30b9\u306f\u4e00\u610f\u3067\u3059\u304b\uff1f

\u5e45\u512a\u5148\u8d70\u67fb\u3068\u540c\u69d8\u306b\u3001\u6df1\u3055\u512a\u5148\u8d70\u67fb\u30b7\u30fc\u30b1\u30f3\u30b9\u306e\u9806\u5e8f\u3082\u4e00\u610f\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u3042\u308b\u9802\u70b9\u304c\u4e0e\u3048\u3089\u308c\u305f\u5834\u5408\u3001\u3069\u306e\u65b9\u5411\u3092\u6700\u521d\u306b\u63a2\u7d22\u3059\u308b\u3053\u3068\u3082\u53ef\u80fd\u3067\u3059\u3002\u3064\u307e\u308a\u3001\u96a3\u63a5\u9802\u70b9\u306e\u9806\u5e8f\u306f\u4efb\u610f\u306b\u30b7\u30e3\u30c3\u30d5\u30eb\u3067\u304d\u307e\u3059\u304c\u3001\u3059\u3079\u3066\u6df1\u3055\u512a\u5148\u8d70\u67fb\u306e\u4e00\u90e8\u3067\u3059\u3002

\u6728\u306e\u8d70\u67fb\u3092\u4f8b\u306b\u53d6\u308b\u3068\u3001\u300c\u6839 \\(\\rightarrow\\) \u5de6 \\(\\rightarrow\\) \u53f3\u300d\u3001\u300c\u5de6 \\(\\rightarrow\\) \u6839 \\(\\rightarrow\\) \u53f3\u300d\u3001\u300c\u5de6 \\(\\rightarrow\\) \u53f3 \\(\\rightarrow\\) \u6839\u300d\u306f\u3001\u305d\u308c\u305e\u308c\u524d\u9806\u3001\u4e2d\u9806\u3001\u5f8c\u9806\u8d70\u67fb\u306b\u5bfe\u5fdc\u3057\u307e\u3059\u3002\u3053\u308c\u3089\u306f3\u3064\u306e\u7570\u306a\u308b\u8d70\u67fb\u512a\u5148\u5ea6\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u304c\u30013\u3064\u3059\u3079\u3066\u304c\u6df1\u3055\u512a\u5148\u8d70\u67fb\u3068\u898b\u306a\u3055\u308c\u307e\u3059\u3002

"},{"location":"chapter_graph/graph_traversal/#2_1","title":"2. \u00a0 \u8a08\u7b97\u91cf\u5206\u6790","text":"

\u6642\u9593\u8a08\u7b97\u91cf\uff1a\u3059\u3079\u3066\u306e\u9802\u70b9\u304c\u4e00\u5ea6\u8a2a\u554f\u3055\u308c\u3001\\(O(|V|)\\)\u6642\u9593\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002\u3059\u3079\u3066\u306e\u8fba\u304c2\u56de\u8a2a\u554f\u3055\u308c\u3001\\(O(2|E|)\\)\u6642\u9593\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002\u5168\u4f53\u3067\\(O(|V| + |E|)\\)\u6642\u9593\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002

\u7a7a\u9593\u8a08\u7b97\u91cf\uff1a\u30ea\u30b9\u30c8res\u3001\u30cf\u30c3\u30b7\u30e5\u30bb\u30c3\u30c8visited\u306e\u6700\u5927\u9802\u70b9\u6570\u306f\\(|V|\\)\u3067\u3001\u6700\u5927\u518d\u5e30\u6df1\u5ea6\u306f\\(|V|\\)\u3067\u3059\u3002\u3057\u305f\u304c\u3063\u3066\u3001\\(O(|V|)\\)\u7a7a\u9593\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002

"},{"location":"chapter_graph/summary/","title":"9.4 \u00a0 \u307e\u3068\u3081","text":""},{"location":"chapter_graph/summary/#1","title":"1. \u00a0 \u91cd\u8981\u306a\u5fa9\u7fd2","text":""},{"location":"chapter_graph/summary/#2-q-a","title":"2. \u00a0 Q & A","text":"

Q: \u30d1\u30b9\u306f\u9802\u70b9\u306e\u30b7\u30fc\u30b1\u30f3\u30b9\u3068\u3057\u3066\u5b9a\u7fa9\u3055\u308c\u307e\u3059\u304b\u3001\u305d\u308c\u3068\u3082\u8fba\u306e\u30b7\u30fc\u30b1\u30f3\u30b9\u3068\u3057\u3066\u5b9a\u7fa9\u3055\u308c\u307e\u3059\u304b\uff1f

\u30b0\u30e9\u30d5\u7406\u8ad6\u3067\u306f\u3001\u30b0\u30e9\u30d5\u5185\u306e\u30d1\u30b9\u306f\u9802\u70b9\u306e\u30b7\u30fc\u30b1\u30f3\u30b9\u3092\u7d50\u3076\u6709\u9650\u307e\u305f\u306f\u7121\u9650\u306e\u8fba\u306e\u30b7\u30fc\u30b1\u30f3\u30b9\u3067\u3059\u3002

\u3053\u306e\u6587\u66f8\u3067\u306f\u3001\u30d1\u30b9\u306f\u9802\u70b9\u306e\u30b7\u30fc\u30b1\u30f3\u30b9\u3067\u306f\u306a\u304f\u3001\u8fba\u306e\u30b7\u30fc\u30b1\u30f3\u30b9\u3068\u8003\u3048\u3089\u308c\u307e\u3059\u3002\u3053\u308c\u306f\u30012\u3064\u306e\u9802\u70b9\u3092\u7d50\u3076\u8907\u6570\u306e\u8fba\u304c\u3042\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u3001\u305d\u306e\u5834\u5408\u5404\u8fba\u304c\u30d1\u30b9\u306b\u5bfe\u5fdc\u3059\u308b\u305f\u3081\u3067\u3059\u3002

Q: \u975e\u9023\u7d50\u30b0\u30e9\u30d5\u3067\u306f\u3001\u8d70\u67fb\u3067\u304d\u306a\u3044\u70b9\u304c\u3042\u308a\u307e\u3059\u304b\uff1f

\u975e\u9023\u7d50\u30b0\u30e9\u30d5\u3067\u306f\u3001\u7279\u5b9a\u306e\u70b9\u304b\u3089\u5230\u9054\u3067\u304d\u306a\u3044\u9802\u70b9\u304c\u5c11\u306a\u304f\u3068\u30821\u3064\u3042\u308a\u307e\u3059\u3002\u975e\u9023\u7d50\u30b0\u30e9\u30d5\u3092\u8d70\u67fb\u3059\u308b\u306b\u306f\u3001\u30b0\u30e9\u30d5\u306e\u3059\u3079\u3066\u306e\u9023\u7d50\u6210\u5206\u3092\u8d70\u67fb\u3059\u308b\u305f\u3081\u306b\u8907\u6570\u306e\u958b\u59cb\u70b9\u3092\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

Q: \u96a3\u63a5\u30ea\u30b9\u30c8\u3067\u3001\u300c\u305d\u306e\u9802\u70b9\u306b\u63a5\u7d9a\u3055\u308c\u305f\u3059\u3079\u3066\u306e\u9802\u70b9\u300d\u306e\u9806\u5e8f\u306f\u91cd\u8981\u3067\u3059\u304b\uff1f

\u4efb\u610f\u306e\u9806\u5e8f\u3067\u69cb\u3044\u307e\u305b\u3093\u3002\u305f\u3060\u3057\u3001\u5b9f\u969b\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u306f\u3001\u9802\u70b9\u304c\u8ffd\u52a0\u3055\u308c\u305f\u9806\u5e8f\u3084\u9802\u70b9\u5024\u306e\u9806\u5e8f\u306a\u3069\u3001\u7279\u5b9a\u306e\u30eb\u30fc\u30eb\u306b\u5f93\u3063\u3066\u305d\u308c\u3089\u3092\u30bd\u30fc\u30c8\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u7279\u5b9a\u306e\u6975\u5024\u3092\u6301\u3064\u9802\u70b9\u3092\u7d20\u65e9\u304f\u898b\u3064\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

"},{"location":"chapter_greedy/","title":"\u7b2c 15 \u7ae0 \u00a0 \u8caa\u6b32\u6cd5","text":"

Abstract

\u3072\u307e\u308f\u308a\u306f\u592a\u967d\u306e\u65b9\u3092\u5411\u304d\u3001\u5e38\u306b\u81ea\u5206\u306b\u3068\u3063\u3066\u6700\u5927\u306e\u6210\u9577\u3092\u6c42\u3081\u307e\u3059\u3002

\u8caa\u6b32\u306a\u6226\u7565\u306f\u3001\u4e00\u9023\u306e\u5358\u7d14\u306a\u9078\u629e\u3092\u901a\u3058\u3066\u3001\u6bb5\u968e\u7684\u306b\u6700\u826f\u306e\u7b54\u3048\u3078\u3068\u5c0e\u304d\u307e\u3059\u3002

"},{"location":"chapter_greedy/#_1","title":"\u7ae0\u306e\u5185\u5bb9","text":""},{"location":"chapter_greedy/fractional_knapsack_problem/","title":"15.2 \u00a0 \u5206\u6570\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u554f\u984c","text":"

Question

\\(n\\) \u500b\u306e\u30a2\u30a4\u30c6\u30e0\u304c\u4e0e\u3048\u3089\u308c\u3001\\(i\\) \u756a\u76ee\u306e\u30a2\u30a4\u30c6\u30e0\u306e\u91cd\u91cf\u306f \\(wgt[i-1]\\) \u3067\u5024\u306f \\(val[i-1]\\) \u3067\u3059\u3002\u5bb9\u91cf\u304c \\(cap\\) \u306e\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u304c\u3042\u308a\u307e\u3059\u3002\u5404\u30a2\u30a4\u30c6\u30e0\u306f1\u56de\u306e\u307f\u9078\u629e\u3067\u304d\u307e\u3059\u304c\u3001\u30a2\u30a4\u30c6\u30e0\u306e\u4e00\u90e8\u3092\u9078\u629e\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u3001\u305d\u306e\u5024\u306f\u9078\u629e\u3055\u308c\u305f\u91cd\u91cf\u306e\u5272\u5408\u306b\u57fa\u3065\u3044\u3066\u8a08\u7b97\u3055\u308c\u307e\u3059\u3002\u9650\u3089\u308c\u305f\u5bb9\u91cf\u306e\u4e0b\u3067\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u5185\u306e\u30a2\u30a4\u30c6\u30e0\u306e\u6700\u5927\u5024\u306f\u4f55\u3067\u3059\u304b\uff1f\u4f8b\u3092\u4e0b\u306e\u56f3\u306b\u793a\u3057\u307e\u3059\u3002

\u56f3 15-3 \u00a0 \u5206\u6570\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u554f\u984c\u306e\u4f8b\u30c7\u30fc\u30bf

\u5206\u6570\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u554f\u984c\u306f\u5168\u4f53\u7684\u306b0-1\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u554f\u984c\u3068\u975e\u5e38\u306b\u4f3c\u3066\u304a\u308a\u3001\u73fe\u5728\u306e\u30a2\u30a4\u30c6\u30e0 \\(i\\) \u3068\u5bb9\u91cf \\(c\\) \u3092\u542b\u307f\u3001\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u306e\u9650\u3089\u308c\u305f\u5bb9\u91cf\u5185\u3067\u5024\u3092\u6700\u5927\u5316\u3059\u308b\u3053\u3068\u3092\u76ee\u7684\u3068\u3057\u3066\u3044\u307e\u3059\u3002

\u9055\u3044\u306f\u3001\u3053\u306e\u554f\u984c\u3067\u306f\u30a2\u30a4\u30c6\u30e0\u306e\u4e00\u90e8\u306e\u307f\u3092\u9078\u629e\u3067\u304d\u308b\u3053\u3068\u3067\u3059\u3002\u4e0b\u306e\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u30a2\u30a4\u30c6\u30e0\u3092\u4efb\u610f\u306b\u5206\u5272\u3057\u3001\u91cd\u91cf\u306e\u5272\u5408\u306b\u57fa\u3065\u3044\u3066\u5bfe\u5fdc\u3059\u308b\u5024\u3092\u8a08\u7b97\u3067\u304d\u307e\u3059\u3002

  1. \u30a2\u30a4\u30c6\u30e0 \\(i\\) \u306b\u3064\u3044\u3066\u3001\u305d\u306e\u5358\u4f4d\u91cd\u91cf\u3042\u305f\u308a\u306e\u5024\u306f \\(val[i-1] / wgt[i-1]\\) \u3067\u3001\u5358\u4f4d\u5024\u3068\u547c\u3070\u308c\u307e\u3059\u3002
  2. \u91cd\u91cf \\(w\\) \u306e\u30a2\u30a4\u30c6\u30e0 \\(i\\) \u306e\u4e00\u90e8\u3092\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u306b\u5165\u308c\u308b\u3068\u3059\u308b\u3068\u3001\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u306b\u8ffd\u52a0\u3055\u308c\u308b\u5024\u306f \\(w \\times val[i-1] / wgt[i-1]\\) \u3067\u3059\u3002

\u56f3 15-4 \u00a0 \u30a2\u30a4\u30c6\u30e0\u306e\u5358\u4f4d\u91cd\u91cf\u3042\u305f\u308a\u306e\u5024

"},{"location":"chapter_greedy/fractional_knapsack_problem/#1","title":"1. \u00a0 \u8caa\u6b32\u6226\u7565\u306e\u6c7a\u5b9a","text":"

\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u5185\u306e\u30a2\u30a4\u30c6\u30e0\u306e\u7dcf\u5024\u3092\u6700\u5927\u5316\u3059\u308b\u3053\u3068\u306f\u3001\u672c\u8cea\u7684\u306b\u5358\u4f4d\u91cd\u91cf\u3042\u305f\u308a\u306e\u5024\u3092\u6700\u5927\u5316\u3059\u308b\u3053\u3068\u3092\u610f\u5473\u3057\u307e\u3059\u3002\u3053\u308c\u304b\u3089\u3001\u4e0b\u306e\u56f3\u306b\u793a\u3059\u8caa\u6b32\u6226\u7565\u3092\u5c0e\u51fa\u3067\u304d\u307e\u3059\u3002

  1. \u30a2\u30a4\u30c6\u30e0\u3092\u5358\u4f4d\u5024\u306e\u9ad8\u3044\u9806\u304b\u3089\u4f4e\u3044\u9806\u306b\u30bd\u30fc\u30c8\u3057\u307e\u3059\u3002
  2. \u3059\u3079\u3066\u306e\u30a2\u30a4\u30c6\u30e0\u3092\u53cd\u5fa9\u3057\u3001**\u5404\u30e9\u30a6\u30f3\u30c9\u3067\u6700\u3082\u9ad8\u3044\u5358\u4f4d\u5024\u3092\u6301\u3064\u30a2\u30a4\u30c6\u30e0\u3092\u8caa\u6b32\u306b\u9078\u629e**\u3057\u307e\u3059\u3002
  3. \u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u306e\u6b8b\u308a\u5bb9\u91cf\u304c\u4e0d\u5341\u5206\u306a\u5834\u5408\u3001\u73fe\u5728\u306e\u30a2\u30a4\u30c6\u30e0\u306e\u4e00\u90e8\u3092\u4f7f\u7528\u3057\u3066\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u3092\u6e80\u305f\u3057\u307e\u3059\u3002

\u56f3 15-5 \u00a0 \u5206\u6570\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u554f\u984c\u306e\u8caa\u6b32\u6226\u7565

"},{"location":"chapter_greedy/fractional_knapsack_problem/#2","title":"2. \u00a0 \u30b3\u30fc\u30c9\u5b9f\u88c5","text":"

\u30a2\u30a4\u30c6\u30e0\u3092\u5358\u4f4d\u5024\u3067\u30bd\u30fc\u30c8\u3059\u308b\u305f\u3081\u306b Item \u30af\u30e9\u30b9\u3092\u4f5c\u6210\u3057\u307e\u3057\u305f\u3002\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u304c\u6e80\u305f\u3055\u308c\u308b\u307e\u3067\u30eb\u30fc\u30d7\u3057\u3066\u8caa\u6b32\u306a\u9078\u629e\u3092\u884c\u3044\u3001\u305d\u306e\u5f8c\u7d42\u4e86\u3057\u3066\u89e3\u3092\u8fd4\u3057\u307e\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby fractional_knapsack.py
class Item:\n    \"\"\"\u30a2\u30a4\u30c6\u30e0\"\"\"\n\n    def __init__(self, w: int, v: int):\n        self.w = w  # \u30a2\u30a4\u30c6\u30e0\u306e\u91cd\u91cf\n        self.v = v  # \u30a2\u30a4\u30c6\u30e0\u306e\u4fa1\u5024\n\ndef fractional_knapsack(wgt: list[int], val: list[int], cap: int) -> int:\n    \"\"\"\u5206\u6570\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\uff1a\u8caa\u6b32\u6cd5\"\"\"\n    # \u30a2\u30a4\u30c6\u30e0\u30ea\u30b9\u30c8\u3092\u4f5c\u6210\u30012 \u3064\u306e\u5c5e\u6027\u3092\u542b\u3080\uff1a\u91cd\u91cf\u3001\u4fa1\u5024\n    items = [Item(w, v) for w, v in zip(wgt, val)]\n    # \u5358\u4f4d\u4fa1\u5024 item.v / item.w \u3067\u9ad8\u3044\u9806\u306b\u30bd\u30fc\u30c8\n    items.sort(key=lambda item: item.v / item.w, reverse=True)\n    # \u8caa\u6b32\u9078\u629e\u3092\u30eb\u30fc\u30d7\n    res = 0\n    for item in items:\n        if item.w <= cap:\n            # \u6b8b\u308a\u5bb9\u91cf\u304c\u5341\u5206\u306a\u5834\u5408\u3001\u30a2\u30a4\u30c6\u30e0\u5168\u4f53\u3092\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u306b\u5165\u308c\u308b\n            res += item.v\n            cap -= item.w\n        else:\n            # \u6b8b\u308a\u5bb9\u91cf\u304c\u4e0d\u5341\u5206\u306a\u5834\u5408\u3001\u30a2\u30a4\u30c6\u30e0\u306e\u4e00\u90e8\u3092\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u306b\u5165\u308c\u308b\n            res += (item.v / item.w) * cap\n            # \u6b8b\u308a\u5bb9\u91cf\u304c\u306a\u304f\u306a\u3063\u305f\u305f\u3081\u3001\u30eb\u30fc\u30d7\u3092\u4e2d\u65ad\n            break\n    return res\n
fractional_knapsack.cpp
/* \u30a2\u30a4\u30c6\u30e0 */\nclass Item {\n  public:\n    int w; // \u30a2\u30a4\u30c6\u30e0\u306e\u91cd\u91cf\n    int v; // \u30a2\u30a4\u30c6\u30e0\u306e\u4fa1\u5024\n\n    Item(int w, int v) : w(w), v(v) {\n    }\n};\n\n/* \u5206\u6570\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\uff1a\u8caa\u6b32\u6cd5 */\ndouble fractionalKnapsack(vector<int> &wgt, vector<int> &val, int cap) {\n    // \u30a2\u30a4\u30c6\u30e0\u30ea\u30b9\u30c8\u3092\u4f5c\u6210\u30012\u3064\u306e\u5c5e\u6027\u3092\u542b\u3080\uff1a\u91cd\u91cf\u3001\u4fa1\u5024\n    vector<Item> items;\n    for (int i = 0; i < wgt.size(); i++) {\n        items.push_back(Item(wgt[i], val[i]));\n    }\n    // \u5358\u4f4d\u4fa1\u5024 item.v / item.w \u3067\u9ad8\u3044\u9806\u306b\u30bd\u30fc\u30c8\n    sort(items.begin(), items.end(), [](Item &a, Item &b) { return (double)a.v / a.w > (double)b.v / b.w; });\n    // \u8caa\u6b32\u9078\u629e\u3092\u30eb\u30fc\u30d7\n    double res = 0;\n    for (auto &item : items) {\n        if (item.w <= cap) {\n            // \u6b8b\u308a\u5bb9\u91cf\u304c\u5341\u5206\u306a\u5834\u5408\u3001\u30a2\u30a4\u30c6\u30e0\u5168\u4f53\u3092\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u306b\u5165\u308c\u308b\n            res += item.v;\n            cap -= item.w;\n        } else {\n            // \u6b8b\u308a\u5bb9\u91cf\u304c\u4e0d\u5341\u5206\u306a\u5834\u5408\u3001\u30a2\u30a4\u30c6\u30e0\u306e\u4e00\u90e8\u3092\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u306b\u5165\u308c\u308b\n            res += (double)item.v / item.w * cap;\n            // \u6b8b\u308a\u5bb9\u91cf\u304c\u306a\u304f\u306a\u3063\u305f\u305f\u3081\u3001\u30eb\u30fc\u30d7\u3092\u4e2d\u65ad\n            break;\n        }\n    }\n    return res;\n}\n
fractional_knapsack.java
/* \u30a2\u30a4\u30c6\u30e0 */\nclass Item {\n    int w; // \u30a2\u30a4\u30c6\u30e0\u306e\u91cd\u91cf\n    int v; // \u30a2\u30a4\u30c6\u30e0\u306e\u4fa1\u5024\n\n    public Item(int w, int v) {\n        this.w = w;\n        this.v = v;\n    }\n}\n\n/* \u5206\u6570\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\uff1a\u8caa\u6b32\u6cd5 */\ndouble fractionalKnapsack(int[] wgt, int[] val, int cap) {\n    // \u30a2\u30a4\u30c6\u30e0\u30ea\u30b9\u30c8\u3092\u4f5c\u6210\u30012\u3064\u306e\u5c5e\u6027\u3092\u542b\u3080\uff1a\u91cd\u91cf\u3001\u4fa1\u5024\n    Item[] items = new Item[wgt.length];\n    for (int i = 0; i < wgt.length; i++) {\n        items[i] = new Item(wgt[i], val[i]);\n    }\n    // \u5358\u4f4d\u4fa1\u5024 item.v / item.w \u3067\u9ad8\u3044\u9806\u306b\u30bd\u30fc\u30c8\n    Arrays.sort(items, Comparator.comparingDouble(item -> -((double) item.v / item.w)));\n    // \u8caa\u6b32\u9078\u629e\u3092\u30eb\u30fc\u30d7\n    double res = 0;\n    for (Item item : items) {\n        if (item.w <= cap) {\n            // \u6b8b\u308a\u5bb9\u91cf\u304c\u5341\u5206\u306a\u5834\u5408\u3001\u30a2\u30a4\u30c6\u30e0\u5168\u4f53\u3092\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u306b\u5165\u308c\u308b\n            res += item.v;\n            cap -= item.w;\n        } else {\n            // \u6b8b\u308a\u5bb9\u91cf\u304c\u4e0d\u5341\u5206\u306a\u5834\u5408\u3001\u30a2\u30a4\u30c6\u30e0\u306e\u4e00\u90e8\u3092\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u306b\u5165\u308c\u308b\n            res += (double) item.v / item.w * cap;\n            // \u6b8b\u308a\u5bb9\u91cf\u304c\u306a\u304f\u306a\u3063\u305f\u305f\u3081\u3001\u30eb\u30fc\u30d7\u3092\u4e2d\u65ad\n            break;\n        }\n    }\n    return res;\n}\n
fractional_knapsack.cs
[class]{Item}-[func]{}\n\n[class]{fractional_knapsack}-[func]{FractionalKnapsack}\n
fractional_knapsack.go
[class]{Item}-[func]{}\n\n[class]{}-[func]{fractionalKnapsack}\n
fractional_knapsack.swift
[class]{Item}-[func]{}\n\n[class]{}-[func]{fractionalKnapsack}\n
fractional_knapsack.js
[class]{Item}-[func]{}\n\n[class]{}-[func]{fractionalKnapsack}\n
fractional_knapsack.ts
[class]{Item}-[func]{}\n\n[class]{}-[func]{fractionalKnapsack}\n
fractional_knapsack.dart
[class]{Item}-[func]{}\n\n[class]{}-[func]{fractionalKnapsack}\n
fractional_knapsack.rs
[class]{Item}-[func]{}\n\n[class]{}-[func]{fractional_knapsack}\n
fractional_knapsack.c
[class]{Item}-[func]{}\n\n[class]{}-[func]{fractionalKnapsack}\n
fractional_knapsack.kt
[class]{Item}-[func]{}\n\n[class]{}-[func]{fractionalKnapsack}\n
fractional_knapsack.rb
[class]{Item}-[func]{}\n\n[class]{}-[func]{fractional_knapsack}\n

\u30bd\u30fc\u30c8\u4ee5\u5916\u306b\u3001\u6700\u60aa\u306e\u5834\u5408\u3001\u30a2\u30a4\u30c6\u30e0\u306e\u30ea\u30b9\u30c8\u5168\u4f53\u3092\u8d70\u67fb\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u305f\u3081\u3001\u6642\u9593\u8a08\u7b97\u91cf\u306f \\(O(n)\\) \u3067\u3059\u3002\u3053\u3053\u3067 \\(n\\) \u306f\u30a2\u30a4\u30c6\u30e0\u306e\u6570\u3067\u3059\u3002

Item \u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u30ea\u30b9\u30c8\u304c\u521d\u671f\u5316\u3055\u308c\u308b\u305f\u3081\u3001\u7a7a\u9593\u8a08\u7b97\u91cf\u306f \\(O(n)\\) \u3067\u3059\u3002

"},{"location":"chapter_greedy/fractional_knapsack_problem/#3","title":"3. \u00a0 \u6b63\u3057\u3055\u306e\u8a3c\u660e","text":"

\u80cc\u7406\u6cd5\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002\u30a2\u30a4\u30c6\u30e0 \\(x\\) \u304c\u6700\u9ad8\u306e\u5358\u4f4d\u5024\u3092\u6301\u3061\u3001\u3042\u308b\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u304c\u6700\u5927\u5024 res \u3092\u751f\u6210\u3059\u308b\u304c\u3001\u89e3\u306b\u30a2\u30a4\u30c6\u30e0 \\(x\\) \u304c\u542b\u307e\u308c\u3066\u3044\u306a\u3044\u3068\u4eee\u5b9a\u3057\u307e\u3059\u3002

\u4eca\u3001\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u304b\u3089\u4efb\u610f\u306e\u30a2\u30a4\u30c6\u30e0\u306e\u5358\u4f4d\u91cd\u91cf\u3092\u53d6\u308a\u9664\u304d\u3001\u30a2\u30a4\u30c6\u30e0 \\(x\\) \u306e\u5358\u4f4d\u91cd\u91cf\u3067\u7f6e\u304d\u63db\u3048\u307e\u3059\u3002\u30a2\u30a4\u30c6\u30e0 \\(x\\) \u306e\u5358\u4f4d\u5024\u304c\u6700\u9ad8\u3067\u3042\u308b\u305f\u3081\u3001\u7f6e\u304d\u63db\u3048\u5f8c\u306e\u7dcf\u5024\u306f\u78ba\u5b9f\u306b res \u3088\u308a\u5927\u304d\u304f\u306a\u308a\u307e\u3059\u3002\u3053\u308c\u306f res \u304c\u6700\u9069\u89e3\u3067\u3042\u308b\u3068\u3044\u3046\u4eee\u5b9a\u3068\u77db\u76fe\u3057\u3001\u6700\u9069\u89e3\u306b\u306f\u5fc5\u305a\u30a2\u30a4\u30c6\u30e0 \\(x\\) \u304c\u542b\u307e\u308c\u308b\u3053\u3068\u3092\u8a3c\u660e\u3057\u307e\u3059\u3002

\u3053\u306e\u89e3\u306e\u4ed6\u306e\u30a2\u30a4\u30c6\u30e0\u306b\u3064\u3044\u3066\u3082\u3001\u4e0a\u8a18\u306e\u77db\u76fe\u3092\u69cb\u7bc9\u3067\u304d\u307e\u3059\u3002\u5168\u4f53\u7684\u306b\u3001**\u5358\u4f4d\u5024\u304c\u3088\u308a\u5927\u304d\u3044\u30a2\u30a4\u30c6\u30e0\u306f\u5e38\u306b\u3088\u308a\u826f\u3044\u9078\u629e**\u3067\u3042\u308a\u3001\u8caa\u6b32\u6226\u7565\u304c\u52b9\u679c\u7684\u3067\u3042\u308b\u3053\u3068\u3092\u8a3c\u660e\u3057\u307e\u3059\u3002

\u4e0b\u306e\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u30a2\u30a4\u30c6\u30e0\u306e\u91cd\u91cf\u3068\u5358\u4f4d\u5024\u3092\u305d\u308c\u305e\u308c\u4e8c\u6b21\u5143\u30c1\u30e3\u30fc\u30c8\u306e\u6a2a\u8ef8\u3068\u7e26\u8ef8\u3068\u898b\u306a\u3059\u3068\u3001\u5206\u6570\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u554f\u984c\u306f\u300c\u9650\u3089\u308c\u305f\u6a2a\u8ef8\u7bc4\u56f2\u5185\u3067\u56f2\u307e\u308c\u308b\u6700\u5927\u9762\u7a4d\u3092\u6c42\u3081\u308b\u300d\u3053\u3068\u306b\u5909\u63db\u3067\u304d\u307e\u3059\u3002\u3053\u306e\u985e\u63a8\u306f\u3001\u5e7e\u4f55\u5b66\u7684\u89b3\u70b9\u304b\u3089\u8caa\u6b32\u6226\u7565\u306e\u52b9\u679c\u3092\u7406\u89e3\u3059\u308b\u306e\u306b\u5f79\u7acb\u3061\u307e\u3059\u3002

\u56f3 15-6 \u00a0 \u5206\u6570\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u554f\u984c\u306e\u5e7e\u4f55\u5b66\u7684\u8868\u73fe

"},{"location":"chapter_greedy/greedy_algorithm/","title":"15.1 \u00a0 \u8caa\u6b32\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0","text":"

\u8caa\u6b32\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306f\u6700\u9069\u5316\u554f\u984c\u3092\u89e3\u6c7a\u3059\u308b\u305f\u3081\u306e\u4e00\u822c\u7684\u306a\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3067\u3001\u57fa\u672c\u7684\u306b\u554f\u984c\u306e\u5404\u610f\u601d\u6c7a\u5b9a\u6bb5\u968e\u3067\u6700\u3082\u826f\u3044\u9078\u629e\u3092\u3059\u308b\u3053\u3068\u3001\u3064\u307e\u308a\u5c40\u6240\u7684\u306b\u6700\u9069\u306a\u6c7a\u5b9a\u3092\u8caa\u6b32\u306b\u884c\u3044\u3001\u30b0\u30ed\u30fc\u30d0\u30eb\u306b\u6700\u9069\u306a\u89e3\u3092\u898b\u3064\u3051\u308b\u3053\u3068\u3092\u671b\u307f\u307e\u3059\u3002\u8caa\u6b32\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306f\u7c21\u6f54\u3067\u52b9\u7387\u7684\u3067\u3042\u308a\u3001\u591a\u304f\u306e\u5b9f\u7528\u7684\u306a\u554f\u984c\u3067\u5e83\u304f\u4f7f\u7528\u3055\u308c\u3066\u3044\u307e\u3059\u3002

\u8caa\u6b32\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3068\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u306f\u3001\u3069\u3061\u3089\u3082\u6700\u9069\u5316\u554f\u984c\u3092\u89e3\u6c7a\u3059\u308b\u305f\u3081\u306b\u3088\u304f\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002\u4e21\u8005\u306f\u6700\u9069\u90e8\u5206\u69cb\u9020\u306e\u6027\u8cea\u306b\u4f9d\u5b58\u3059\u308b\u306a\u3069\u3001\u3044\u304f\u3064\u304b\u306e\u985e\u4f3c\u70b9\u3092\u5171\u6709\u3057\u3066\u3044\u307e\u3059\u304c\u3001\u52d5\u4f5c\u65b9\u6cd5\u304c\u7570\u306a\u308a\u307e\u3059\u3002

\u307e\u305a\u3001\u300c\u5b8c\u5168\u30ca\u30c3\u30d7\u30b5\u30c3\u30af\u554f\u984c\u300d\u306e\u7ae0\u3067\u7d39\u4ecb\u3055\u308c\u305f\u300c\u30b3\u30a4\u30f3\u4ea4\u63db\u300d\u306e\u4f8b\u3092\u901a\u3058\u3066\u8caa\u6b32\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u52d5\u4f5c\u539f\u7406\u3092\u7406\u89e3\u3057\u307e\u3057\u3087\u3046\u3002\u3059\u3067\u306b\u3088\u304f\u77e5\u3063\u3066\u3044\u308b\u3068\u601d\u3044\u307e\u3059\u3002

Question

\\(n\\) \u7a2e\u985e\u306e\u30b3\u30a4\u30f3\u304c\u4e0e\u3048\u3089\u308c\u3001\\(i\\) \u756a\u76ee\u306e\u7a2e\u985e\u306e\u30b3\u30a4\u30f3\u306e\u984d\u9762\u306f \\(coins[i - 1]\\) \u3067\u3001\u76ee\u6a19\u91d1\u984d\u306f \\(amt\\) \u3067\u3059\u3002\u5404\u7a2e\u985e\u306e\u30b3\u30a4\u30f3\u306f\u7121\u5236\u9650\u306b\u5229\u7528\u53ef\u80fd\u3067\u3001\u76ee\u6a19\u91d1\u984d\u3092\u69cb\u6210\u3059\u308b\u306e\u306b\u5fc5\u8981\u306a\u6700\u5c0f\u30b3\u30a4\u30f3\u6570\u306f\u4f55\u3067\u3059\u304b\uff1f\u76ee\u6a19\u91d1\u984d\u3092\u69cb\u6210\u3067\u304d\u306a\u3044\u5834\u5408\u306f \\(-1\\) \u3092\u8fd4\u3057\u3066\u304f\u3060\u3055\u3044\u3002

\u3053\u306e\u554f\u984c\u3067\u63a1\u7528\u3055\u308c\u308b\u8caa\u6b32\u6226\u7565\u3092\u4e0b\u306e\u56f3\u306b\u793a\u3057\u307e\u3059\u3002\u76ee\u6a19\u91d1\u984d\u304c\u4e0e\u3048\u3089\u308c\u305f\u3068\u304d\u3001**\u305d\u308c\u306b\u6700\u3082\u8fd1\u304f\u3001\u305d\u308c\u3092\u8d85\u3048\u306a\u3044\u30b3\u30a4\u30f3\u3092\u8caa\u6b32\u306b\u9078\u629e**\u3057\u3001\u76ee\u6a19\u91d1\u984d\u304c\u6e80\u305f\u3055\u308c\u308b\u307e\u3067\u3053\u306e\u30b9\u30c6\u30c3\u30d7\u3092\u7e70\u308a\u8fd4\u3057\u307e\u3059\u3002

\u56f3 15-1 \u00a0 \u30b3\u30a4\u30f3\u4ea4\u63db\u306e\u8caa\u6b32\u6226\u7565

\u5b9f\u88c5\u30b3\u30fc\u30c9\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby coin_change_greedy.py
def coin_change_greedy(coins: list[int], amt: int) -> int:\n    \"\"\"\u786c\u8ca8\u4ea4\u63db\uff1a\u8caa\u6b32\u6cd5\"\"\"\n    # coins \u30ea\u30b9\u30c8\u304c\u30bd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308b\u3068\u4eee\u5b9a\n    i = len(coins) - 1\n    count = 0\n    # \u6b8b\u308a\u91d1\u984d\u304c\u306a\u304f\u306a\u308b\u307e\u3067\u8caa\u6b32\u9078\u629e\u3092\u30eb\u30fc\u30d7\n    while amt > 0:\n        # \u6b8b\u308a\u91d1\u984d\u306b\u6700\u3082\u8fd1\u304f\u3001\u305d\u308c\u3088\u308a\u5c0f\u3055\u3044\u786c\u8ca8\u3092\u898b\u3064\u3051\u308b\n        while i > 0 and coins[i] > amt:\n            i -= 1\n        # coins[i] \u3092\u9078\u629e\n        amt -= coins[i]\n        count += 1\n    # \u5b9f\u884c\u53ef\u80fd\u306a\u89e3\u304c\u898b\u3064\u304b\u3089\u306a\u3044\u5834\u5408\u3001-1 \u3092\u8fd4\u3059\n    return count if amt == 0 else -1\n
coin_change_greedy.cpp
/* \u786c\u8ca8\u4e21\u66ff\uff1a\u8caa\u6b32\u6cd5 */\nint coinChangeGreedy(vector<int> &coins, int amt) {\n    // \u786c\u8ca8\u30ea\u30b9\u30c8\u304c\u9806\u5e8f\u4ed8\u3051\u3055\u308c\u3066\u3044\u308b\u3068\u4eee\u5b9a\n    int i = coins.size() - 1;\n    int count = 0;\n    // \u6b8b\u308a\u91d1\u984d\u304c\u306a\u304f\u306a\u308b\u307e\u3067\u8caa\u6b32\u9078\u629e\u3092\u30eb\u30fc\u30d7\n    while (amt > 0) {\n        // \u6b8b\u308a\u91d1\u984d\u306b\u8fd1\u304f\u3001\u305d\u308c\u4ee5\u4e0b\u306e\u6700\u5c0f\u786c\u8ca8\u3092\u898b\u3064\u3051\u308b\n        while (i > 0 && coins[i] > amt) {\n            i--;\n        }\n        // coins[i] \u3092\u9078\u629e\n        amt -= coins[i];\n        count++;\n    }\n    // \u5b9f\u884c\u53ef\u80fd\u306a\u89e3\u304c\u898b\u3064\u304b\u3089\u306a\u3044\u5834\u5408\u3001-1 \u3092\u8fd4\u3059\n    return amt == 0 ? count : -1;\n}\n
coin_change_greedy.java
/* \u786c\u8ca8\u4e21\u66ff\uff1a\u8caa\u6b32\u6cd5 */\nint coinChangeGreedy(int[] coins, int amt) {\n    // \u786c\u8ca8\u30ea\u30b9\u30c8\u304c\u9806\u5e8f\u4ed8\u3051\u3055\u308c\u3066\u3044\u308b\u3068\u4eee\u5b9a\n    int i = coins.length - 1;\n    int count = 0;\n    // \u6b8b\u308a\u91d1\u984d\u304c\u306a\u304f\u306a\u308b\u307e\u3067\u8caa\u6b32\u9078\u629e\u3092\u30eb\u30fc\u30d7\n    while (amt > 0) {\n        // \u6b8b\u308a\u91d1\u984d\u306b\u8fd1\u304f\u3001\u305d\u308c\u4ee5\u4e0b\u306e\u6700\u5c0f\u786c\u8ca8\u3092\u898b\u3064\u3051\u308b\n        while (i > 0 && coins[i] > amt) {\n            i--;\n        }\n        // coins[i] \u3092\u9078\u629e\n        amt -= coins[i];\n        count++;\n    }\n    // \u5b9f\u884c\u53ef\u80fd\u306a\u89e3\u304c\u898b\u3064\u304b\u3089\u306a\u3044\u5834\u5408\u3001-1 \u3092\u8fd4\u3059\n    return amt == 0 ? count : -1;\n}\n
coin_change_greedy.cs
[class]{coin_change_greedy}-[func]{CoinChangeGreedy}\n
coin_change_greedy.go
[class]{}-[func]{coinChangeGreedy}\n
coin_change_greedy.swift
[class]{}-[func]{coinChangeGreedy}\n
coin_change_greedy.js
[class]{}-[func]{coinChangeGreedy}\n
coin_change_greedy.ts
[class]{}-[func]{coinChangeGreedy}\n
coin_change_greedy.dart
[class]{}-[func]{coinChangeGreedy}\n
coin_change_greedy.rs
[class]{}-[func]{coin_change_greedy}\n
coin_change_greedy.c
[class]{}-[func]{coinChangeGreedy}\n
coin_change_greedy.kt
[class]{}-[func]{coinChangeGreedy}\n
coin_change_greedy.rb
[class]{}-[func]{coin_change_greedy}\n

\u611f\u5606\u3059\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\uff1a\u306a\u3093\u3066\u7c21\u6f54\u306a\u3093\u3060\uff01\u8caa\u6b32\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306f\u7d0410\u884c\u306e\u30b3\u30fc\u30c9\u3067\u30b3\u30a4\u30f3\u4ea4\u63db\u554f\u984c\u3092\u89e3\u6c7a\u3057\u307e\u3059\u3002

"},{"location":"chapter_greedy/greedy_algorithm/#1511","title":"15.1.1 \u00a0 \u8caa\u6b32\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u5229\u70b9\u3068\u5236\u9650","text":"

\u8caa\u6b32\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306f\u76f4\u63a5\u7684\u3067\u5b9f\u88c5\u304c\u7c21\u5358\u3067\u3042\u308b\u3060\u3051\u3067\u306a\u304f\u3001\u901a\u5e38\u975e\u5e38\u306b\u52b9\u7387\u7684\u3067\u3082\u3042\u308a\u307e\u3059\u3002\u4e0a\u8a18\u306e\u30b3\u30fc\u30c9\u3067\u3001\u6700\u5c0f\u306e\u30b3\u30a4\u30f3\u984d\u9762\u3092 \\(\\min(coins)\\) \u3068\u3059\u308b\u3068\u3001\u8caa\u6b32\u306a\u9078\u629e\u30eb\u30fc\u30d7\u306f\u6700\u5927 \\(amt / \\min(coins)\\) \u56de\u5b9f\u884c\u3055\u308c\u3001\u6642\u9593\u8a08\u7b97\u91cf\u306f \\(O(amt / \\min(coins))\\) \u306b\u306a\u308a\u307e\u3059\u3002\u3053\u308c\u306f\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u89e3\u6cd5\u306e\u6642\u9593\u8a08\u7b97\u91cf \\(O(n \\times amt)\\) \u3088\u308a\u3082\u4e00\u6841\u5c0f\u3055\u3044\u3067\u3059\u3002

\u3057\u304b\u3057\u3001\u4e00\u90e8\u306e\u30b3\u30a4\u30f3\u984d\u9762\u306e\u7d44\u307f\u5408\u308f\u305b\u3067\u306f\u3001\u8caa\u6b32\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306f\u6700\u9069\u89e3\u3092\u898b\u3064\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3002\u4e0b\u306e\u56f3\u306f2\u3064\u306e\u4f8b\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002

\u56f3 15-2 \u00a0 \u8caa\u6b32\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u304c\u6700\u9069\u89e3\u3092\u898b\u3064\u3051\u3089\u308c\u306a\u3044\u4f8b

\u3053\u308c\u306f\u3001\u30b3\u30a4\u30f3\u4ea4\u63db\u554f\u984c\u306b\u304a\u3044\u3066\u3001\u8caa\u6b32\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u304c\u30b0\u30ed\u30fc\u30d0\u30eb\u306b\u6700\u9069\u306a\u89e3\u3092\u898b\u3064\u3051\u308b\u3053\u3068\u3092\u4fdd\u8a3c\u3067\u304d\u305a\u3001\u975e\u5e38\u306b\u60aa\u3044\u89e3\u3092\u898b\u3064\u3051\u308b\u53ef\u80fd\u6027\u304c\u3042\u308b\u3053\u3068\u3092\u610f\u5473\u3057\u307e\u3059\u3002\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u306e\u65b9\u304c\u9069\u3057\u3066\u3044\u307e\u3059\u3002

\u4e00\u822c\u7684\u306b\u3001\u8caa\u6b32\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u9069\u7528\u6027\u306f2\u3064\u306e\u30ab\u30c6\u30b4\u30ea\u306b\u5206\u985e\u3055\u308c\u307e\u3059\u3002

  1. \u6700\u9069\u89e3\u3092\u898b\u3064\u3051\u308b\u3053\u3068\u304c\u4fdd\u8a3c\u3055\u308c\u308b\uff1a\u3053\u308c\u3089\u306e\u5834\u5408\u3001\u8caa\u6b32\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306f\u3057\u3070\u3057\u3070\u6700\u826f\u306e\u9078\u629e\u3067\u3001\u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u3084\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u3088\u308a\u3082\u52b9\u7387\u7684\u3067\u3042\u308b\u50be\u5411\u304c\u3042\u308a\u307e\u3059\u3002
  2. \u6e96\u6700\u9069\u89e3\u3092\u898b\u3064\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff1a\u8caa\u6b32\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306f\u3053\u3053\u3067\u3082\u9069\u7528\u53ef\u80fd\u3067\u3059\u3002\u591a\u304f\u306e\u8907\u96d1\u306a\u554f\u984c\u3067\u306f\u3001\u30b0\u30ed\u30fc\u30d0\u30eb\u6700\u9069\u89e3\u3092\u898b\u3064\u3051\u308b\u3053\u3068\u306f\u975e\u5e38\u306b\u56f0\u96e3\u3067\u3042\u308a\u3001\u9ad8\u52b9\u7387\u306e\u6e96\u6700\u9069\u89e3\u3092\u898b\u3064\u3051\u308b\u3053\u3068\u3082\u975e\u5e38\u306b\u4fa1\u5024\u304c\u3042\u308a\u307e\u3059\u3002
"},{"location":"chapter_greedy/greedy_algorithm/#1512","title":"15.1.2 \u00a0 \u8caa\u6b32\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u7279\u5fb4","text":"

\u305d\u308c\u3067\u306f\u3001\u3069\u306e\u3088\u3046\u306a\u554f\u984c\u304c\u8caa\u6b32\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3067\u89e3\u6c7a\u3059\u308b\u306e\u306b\u9069\u3057\u3066\u3044\u308b\u306e\u3067\u3057\u3087\u3046\u304b\uff1f\u8a00\u3044\u63db\u3048\u308c\u3070\u3001\u3069\u306e\u3088\u3046\u306a\u6761\u4ef6\u4e0b\u3067\u8caa\u6b32\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306f\u6700\u9069\u89e3\u3092\u898b\u3064\u3051\u308b\u3053\u3068\u3092\u4fdd\u8a3c\u3067\u304d\u308b\u306e\u3067\u3057\u3087\u3046\u304b\uff1f

\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u3068\u6bd4\u8f03\u3057\u3066\u3001\u8caa\u6b32\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306f\u3088\u308a\u53b3\u3057\u3044\u4f7f\u7528\u6761\u4ef6\u3092\u6301\u3061\u3001\u4e3b\u306b\u554f\u984c\u306e2\u3064\u306e\u6027\u8cea\u306b\u7126\u70b9\u3092\u5f53\u3066\u3066\u3044\u307e\u3059\u3002

\u6700\u9069\u90e8\u5206\u69cb\u9020\u306f\u300c\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u300d\u306e\u7ae0\u3067\u3059\u3067\u306b\u7d39\u4ecb\u3055\u308c\u3066\u3044\u308b\u305f\u3081\u3001\u3053\u3053\u3067\u306f\u3053\u308c\u4ee5\u4e0a\u8b70\u8ad6\u3057\u307e\u305b\u3093\u3002\u4e00\u90e8\u306e\u554f\u984c\u306b\u306f\u660e\u3089\u304b\u306a\u6700\u9069\u90e8\u5206\u69cb\u9020\u304c\u3042\u308a\u307e\u305b\u3093\u304c\u3001\u305d\u308c\u3067\u3082\u8caa\u6b32\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3092\u4f7f\u7528\u3057\u3066\u89e3\u6c7a\u3067\u304d\u308b\u3053\u3068\u306b\u6ce8\u610f\u3059\u308b\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002

\u4e3b\u306b\u8caa\u6b32\u9078\u629e\u6027\u3092\u6c7a\u5b9a\u3059\u308b\u65b9\u6cd5\u3092\u63a2\u7d22\u3057\u307e\u3059\u3002\u305d\u306e\u8a18\u8ff0\u306f\u5358\u7d14\u306b\u898b\u3048\u307e\u3059\u304c\u3001\u5b9f\u969b\u306b\u306f\u3001\u591a\u304f\u306e\u554f\u984c\u306e\u8caa\u6b32\u9078\u629e\u6027\u3092\u8a3c\u660e\u3059\u308b\u3053\u3068\u306f\u5bb9\u6613\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002

\u4f8b\u3048\u3070\u3001\u30b3\u30a4\u30f3\u4ea4\u63db\u554f\u984c\u3067\u306f\u3001\u8caa\u6b32\u9078\u629e\u6027\u3092\u53cd\u8a3c\u3059\u308b\u305f\u3081\u306b\u53cd\u4f8b\u3092\u7c21\u5358\u306b\u6319\u3052\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u304c\u3001\u305d\u308c\u3092\u8a3c\u660e\u3059\u308b\u3053\u3068\u306f\u306f\u308b\u304b\u306b\u56f0\u96e3\u3067\u3059\u3002**\u30b3\u30a4\u30f3\u306e\u7d44\u307f\u5408\u308f\u305b\u304c\u8caa\u6b32\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3092\u4f7f\u7528\u3057\u3066\u89e3\u6c7a\u3067\u304d\u308b\u305f\u3081\u306b\u306f\u3001\u3069\u306e\u3088\u3046\u306a\u6761\u4ef6\u3092\u6e80\u305f\u3059\u5fc5\u8981\u304c\u3042\u308b\u304b**\u3068\u5c0b\u306d\u3089\u308c\u305f\u5834\u5408\u3001\u53b3\u5bc6\u306a\u6570\u5b66\u7684\u8a3c\u660e\u3092\u63d0\u4f9b\u3059\u308b\u3053\u3068\u304c\u56f0\u96e3\u3067\u3042\u308b\u305f\u3081\u3001\u3057\u3070\u3057\u3070\u76f4\u611f\u3084\u4f8b\u306b\u983c\u3063\u3066\u66d6\u6627\u306a\u7b54\u3048\u3092\u63d0\u4f9b\u3057\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002

Quote

\u3042\u308b\u8ad6\u6587\u3067\u306f\u3001\u30b3\u30a4\u30f3\u306e\u7d44\u307f\u5408\u308f\u305b\u304c\u4efb\u610f\u306e\u91d1\u984d\u306b\u5bfe\u3057\u3066\u8caa\u6b32\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3092\u4f7f\u7528\u3057\u3066\u6700\u9069\u89e3\u3092\u898b\u3064\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u304b\u3069\u3046\u304b\u3092\u5224\u5b9a\u3059\u308b\u305f\u3081\u306e\u6642\u9593\u8a08\u7b97\u91cf \\(O(n^3)\\) \u306e\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u304c\u63d0\u793a\u3055\u308c\u3066\u3044\u307e\u3059\u3002

Pearson, D. A polynomial-time algorithm for the change-making problem[J]. Operations Research Letters, 2005, 33(3): 231-234.

"},{"location":"chapter_greedy/greedy_algorithm/#1513","title":"15.1.3 \u00a0 \u8caa\u6b32\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306b\u3088\u308b\u554f\u984c\u89e3\u6c7a\u306e\u30b9\u30c6\u30c3\u30d7","text":"

\u8caa\u6b32\u554f\u984c\u306e\u554f\u984c\u89e3\u6c7a\u30d7\u30ed\u30bb\u30b9\u306f\u3001\u4e00\u822c\u7684\u306b\u4ee5\u4e0b\u306e3\u3064\u306e\u30b9\u30c6\u30c3\u30d7\u306b\u5206\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

  1. \u554f\u984c\u5206\u6790\uff1a\u554f\u984c\u306e\u7279\u5fb4\u3092\u6574\u7406\u3057\u7406\u89e3\u3059\u308b\u3002\u72b6\u614b\u5b9a\u7fa9\u3001\u6700\u9069\u5316\u76ee\u6a19\u3001\u5236\u7d04\u306a\u3069\u3092\u542b\u307f\u307e\u3059\u3002\u3053\u306e\u30b9\u30c6\u30c3\u30d7\u306f\u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u3084\u52d5\u7684\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u3067\u3082\u95a2\u4e0e\u3057\u307e\u3059\u3002
  2. \u8caa\u6b32\u6226\u7565\u306e\u6c7a\u5b9a\uff1a\u5404\u30b9\u30c6\u30c3\u30d7\u3067\u8caa\u6b32\u306a\u9078\u629e\u3092\u3059\u308b\u65b9\u6cd5\u3092\u6c7a\u5b9a\u3059\u308b\u3002\u3053\u306e\u6226\u7565\u306f\u5404\u30b9\u30c6\u30c3\u30d7\u3067\u554f\u984c\u306e\u898f\u6a21\u3092\u7e2e\u5c0f\u3057\u3001\u6700\u7d42\u7684\u306b\u554f\u984c\u5168\u4f53\u3092\u89e3\u6c7a\u3067\u304d\u307e\u3059\u3002
  3. \u6b63\u78ba\u6027\u306e\u8a3c\u660e\uff1a\u901a\u5e38\u3001\u554f\u984c\u304c\u8caa\u6b32\u9078\u629e\u6027\u3068\u6700\u9069\u90e8\u5206\u69cb\u9020\u306e\u4e21\u65b9\u3092\u6301\u3064\u3053\u3068\u3092\u8a3c\u660e\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u306e\u30b9\u30c6\u30c3\u30d7\u306b\u306f\u3001\u5e30\u7d0d\u6cd5\u3084\u80cc\u7406\u6cd5\u306a\u3069\u306e\u6570\u5b66\u7684\u8a3c\u660e\u304c\u5fc5\u8981\u306a\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002

\u8caa\u6b32\u6226\u7565\u306e\u6c7a\u5b9a\u306f\u554f\u984c\u89e3\u6c7a\u306e\u6838\u5fc3\u30b9\u30c6\u30c3\u30d7\u3067\u3059\u304c\u3001\u5b9f\u88c5\u306f\u5bb9\u6613\u3067\u306f\u306a\u3044\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002\u4e3b\u306a\u7406\u7531\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\u3002

\u6b63\u78ba\u6027\u3092\u78ba\u4fdd\u3059\u308b\u305f\u3081\u306b\u3001\u8caa\u6b32\u6226\u7565\u306b\u5bfe\u3057\u3066\u53b3\u5bc6\u306a\u6570\u5b66\u7684\u8a3c\u660e\u3092\u63d0\u4f9b\u3059\u3079\u304d\u3067\u3001\u901a\u5e38\u306f\u80cc\u7406\u6cd5\u3084\u6570\u5b66\u7684\u5e30\u7d0d\u6cd5\u3092\u542b\u307f\u307e\u3059\u3002

\u3057\u304b\u3057\u3001\u6b63\u78ba\u6027\u3092\u8a3c\u660e\u3059\u308b\u3053\u3068\u306f\u5bb9\u6613\u306a\u4f5c\u696d\u3067\u306f\u306a\u3044\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002\u9014\u65b9\u306b\u66ae\u308c\u305f\u5834\u5408\u3001\u901a\u5e38\u306f\u30c6\u30b9\u30c8\u30b1\u30fc\u30b9\u306b\u57fa\u3065\u3044\u3066\u30b3\u30fc\u30c9\u3092\u30c7\u30d0\u30c3\u30b0\u3057\u3001\u8caa\u6b32\u6226\u7565\u3092\u6bb5\u968e\u7684\u306b\u4fee\u6b63\u3057\u691c\u8a3c\u3059\u308b\u3053\u3068\u3092\u9078\u629e\u3057\u307e\u3059\u3002

"},{"location":"chapter_greedy/greedy_algorithm/#1514","title":"15.1.4 \u00a0 \u8caa\u6b32\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3067\u89e3\u6c7a\u3055\u308c\u308b\u5178\u578b\u7684\u306a\u554f\u984c","text":"

\u8caa\u6b32\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306f\u3001\u8caa\u6b32\u9078\u629e\u3068\u6700\u9069\u90e8\u5206\u69cb\u9020\u306e\u6027\u8cea\u3092\u6e80\u305f\u3059\u6700\u9069\u5316\u554f\u984c\u306b\u3088\u304f\u9069\u7528\u3055\u308c\u307e\u3059\u3002\u4ee5\u4e0b\u306f\u5178\u578b\u7684\u306a\u8caa\u6b32\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u554f\u984c\u306e\u3044\u304f\u3064\u304b\u3067\u3059\u3002

"},{"location":"chapter_greedy/max_capacity_problem/","title":"15.3 \u00a0 \u6700\u5927\u5bb9\u91cf\u554f\u984c","text":"

Question

\u914d\u5217 \\(ht\\) \u3092\u5165\u529b\u3057\u307e\u3059\u3002\u5404\u8981\u7d20\u306f\u5782\u76f4\u4ed5\u5207\u308a\u306e\u9ad8\u3055\u3092\u8868\u3057\u307e\u3059\u3002\u914d\u5217\u5185\u306e\u4efb\u610f\u306e2\u3064\u306e\u4ed5\u5207\u308a\u3068\u3001\u305d\u308c\u3089\u306e\u9593\u306e\u30b9\u30da\u30fc\u30b9\u306b\u3088\u3063\u3066\u30b3\u30f3\u30c6\u30ca\u3092\u5f62\u6210\u3067\u304d\u307e\u3059\u3002

\u30b3\u30f3\u30c6\u30ca\u306e\u5bb9\u91cf\u306f\u9ad8\u3055\u3068\u5e45\u306e\u7a4d\uff08\u9762\u7a4d\uff09\u3067\u3001\u9ad8\u3055\u306f\u77ed\u3044\u65b9\u306e\u4ed5\u5207\u308a\u306b\u3088\u3063\u3066\u6c7a\u5b9a\u3055\u308c\u3001\u5e45\u306f2\u3064\u306e\u4ed5\u5207\u308a\u306e\u914d\u5217\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306e\u5dee\u3067\u3059\u3002

\u30b3\u30f3\u30c6\u30ca\u306e\u5bb9\u91cf\u3092\u6700\u5927\u5316\u3059\u308b2\u3064\u306e\u4ed5\u5207\u308a\u3092\u914d\u5217\u304b\u3089\u9078\u629e\u3057\u3001\u3053\u306e\u6700\u5927\u5bb9\u91cf\u3092\u8fd4\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u4f8b\u3092\u4e0b\u306e\u56f3\u306b\u793a\u3057\u307e\u3059\u3002

\u56f3 15-7 \u00a0 \u6700\u5927\u5bb9\u91cf\u554f\u984c\u306e\u4f8b\u30c7\u30fc\u30bf

\u30b3\u30f3\u30c6\u30ca\u306f\u4efb\u610f\u306e2\u3064\u306e\u4ed5\u5207\u308a\u306b\u3088\u3063\u3066\u5f62\u6210\u3055\u308c\u308b\u305f\u3081\u3001\u3053\u306e\u554f\u984c\u306e\u72b6\u614b\u306f2\u3064\u306e\u4ed5\u5207\u308a\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3067\u8868\u73fe\u3055\u308c\u3001\\([i, j]\\) \u3068\u8868\u8a18\u3055\u308c\u307e\u3059\u3002

\u554f\u984c\u306e\u8a18\u8ff0\u306b\u3088\u308c\u3070\u3001\u5bb9\u91cf\u306f\u9ad8\u3055\u3068\u5e45\u306e\u7a4d\u306b\u7b49\u3057\u304f\u3001\u9ad8\u3055\u306f\u77ed\u3044\u65b9\u306e\u4ed5\u5207\u308a\u306b\u3088\u3063\u3066\u6c7a\u5b9a\u3055\u308c\u3001\u5e45\u306f2\u3064\u306e\u4ed5\u5207\u308a\u306e\u914d\u5217\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306e\u5dee\u3067\u3059\u3002\u5bb9\u91cf \\(cap[i, j]\\) \u306e\u5f0f\u306f\uff1a

\\[ cap[i, j] = \\min(ht[i], ht[j]) \\times (j - i) \\]

\u914d\u5217\u306e\u9577\u3055\u3092 \\(n\\) \u3068\u4eee\u5b9a\u3059\u308b\u3068\u30012\u3064\u306e\u4ed5\u5207\u308a\u306e\u7d44\u307f\u5408\u308f\u305b\u6570\uff08\u72b6\u614b\u306e\u7dcf\u6570\uff09\u306f \\(C_n^2 = \\frac{n(n - 1)}{2}\\) \u3067\u3059\u3002\u6700\u3082\u76f4\u63a5\u7684\u306a\u30a2\u30d7\u30ed\u30fc\u30c1\u306f**\u3059\u3079\u3066\u306e\u53ef\u80fd\u306a\u72b6\u614b\u3092\u5217\u6319\u3059\u308b**\u3053\u3068\u3067\u3001\u6642\u9593\u8a08\u7b97\u91cf\u306f \\(O(n^2)\\) \u306b\u306a\u308a\u307e\u3059\u3002

"},{"location":"chapter_greedy/max_capacity_problem/#1","title":"1. \u00a0 \u8caa\u6b32\u6226\u7565\u306e\u6c7a\u5b9a","text":"

\u3053\u306e\u554f\u984c\u306b\u306f\u3088\u308a\u52b9\u7387\u7684\u306a\u89e3\u6cd5\u304c\u3042\u308a\u307e\u3059\u3002\u4e0b\u306e\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u30a4\u30f3\u30c7\u30c3\u30af\u30b9 \\(i < j\\) \u304b\u3064\u9ad8\u3055 \\(ht[i] < ht[j]\\) \u306e\u72b6\u614b \\([i, j]\\) \u3092\u9078\u629e\u3057\u307e\u3059\u3002\u3064\u307e\u308a\u3001\\(i\\) \u306f\u77ed\u3044\u4ed5\u5207\u308a\u3001\\(j\\) \u306f\u9ad8\u3044\u4ed5\u5207\u308a\u3067\u3059\u3002

\u56f3 15-8 \u00a0 \u521d\u671f\u72b6\u614b

\u4e0b\u306e\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u9ad8\u3044\u4ed5\u5207\u308a \\(j\\) \u3092\u77ed\u3044\u4ed5\u5207\u308a \\(i\\) \u306b\u8fd1\u3065\u3051\u3066\u79fb\u52d5\u3059\u308b\u3068\u3001\u5bb9\u91cf\u306f\u78ba\u5b9f\u306b\u6e1b\u5c11\u3057\u307e\u3059\u3002

\u3053\u308c\u306f\u3001\u9ad8\u3044\u4ed5\u5207\u308a \\(j\\) \u3092\u79fb\u52d5\u3059\u308b\u3068\u3001\u5e45 \\(j-i\\) \u304c\u78ba\u5b9f\u306b\u6e1b\u5c11\u3059\u308b\u305f\u3081\u3067\u3059\u3002\u9ad8\u3055\u306f\u77ed\u3044\u4ed5\u5207\u308a\u306b\u3088\u3063\u3066\u6c7a\u5b9a\u3055\u308c\u308b\u305f\u3081\u3001\u9ad8\u3055\u306f\u540c\u3058\u307e\u307e\uff08\\(i\\) \u304c\u77ed\u3044\u4ed5\u5207\u308a\u306e\u307e\u307e\uff09\u304b\u6e1b\u5c11\uff08\u79fb\u52d5\u3057\u305f \\(j\\) \u304c\u77ed\u3044\u4ed5\u5207\u308a\u306b\u306a\u308b\uff09\u3057\u304b\u3042\u308a\u307e\u305b\u3093\u3002

\u56f3 15-9 \u00a0 \u9ad8\u3044\u4ed5\u5207\u308a\u3092\u5185\u5074\u306b\u79fb\u52d5\u3057\u305f\u5f8c\u306e\u72b6\u614b

\u9006\u306b\u3001\u77ed\u3044\u4ed5\u5207\u308a \\(i\\) \u3092\u5185\u5074\u306b\u79fb\u52d5\u3059\u308b\u3053\u3068\u306b\u3088\u3063\u3066\u306e\u307f\u5bb9\u91cf\u3092\u5897\u52a0\u3055\u305b\u308b\u3053\u3068\u304c\u53ef\u80fd\u3067\u3059\u3002\u5e45\u306f\u78ba\u5b9f\u306b\u6e1b\u5c11\u3057\u307e\u3059\u304c\u3001\u9ad8\u3055\u304c\u5897\u52a0\u3059\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\uff08\u79fb\u52d5\u3057\u305f\u77ed\u3044\u4ed5\u5207\u308a \\(i\\) \u304c\u9ad8\u304f\u306a\u308b\u5834\u5408\uff09\u3002\u4f8b\u3048\u3070\u3001\u4e0b\u306e\u56f3\u3067\u306f\u3001\u77ed\u3044\u4ed5\u5207\u308a\u3092\u79fb\u52d5\u3057\u305f\u5f8c\u306b\u9762\u7a4d\u304c\u5897\u52a0\u3057\u3066\u3044\u307e\u3059\u3002

\u56f3 15-10 \u00a0 \u77ed\u3044\u4ed5\u5207\u308a\u3092\u5185\u5074\u306b\u79fb\u52d5\u3057\u305f\u5f8c\u306e\u72b6\u614b

\u3053\u308c\u306b\u3088\u308a\u3001\u3053\u306e\u554f\u984c\u306e\u8caa\u6b32\u6226\u7565\u304c\u5c0e\u304b\u308c\u307e\u3059\uff1a\u30b3\u30f3\u30c6\u30ca\u306e\u4e21\u7aef\u306b2\u3064\u306e\u30dd\u30a4\u30f3\u30bf\u3092\u521d\u671f\u5316\u3057\u3001\u5404\u30e9\u30a6\u30f3\u30c9\u3067\u77ed\u3044\u4ed5\u5207\u308a\u306b\u5bfe\u5fdc\u3059\u308b\u30dd\u30a4\u30f3\u30bf\u3092\u5185\u5074\u306b\u79fb\u52d5\u3057\u30012\u3064\u306e\u30dd\u30a4\u30f3\u30bf\u304c\u51fa\u4f1a\u3046\u307e\u3067\u7d9a\u3051\u307e\u3059\u3002

\u4e0b\u306e\u56f3\u306f\u8caa\u6b32\u6226\u7565\u306e\u5b9f\u884c\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002

  1. \u6700\u521d\u306b\u3001\u30dd\u30a4\u30f3\u30bf \\(i\\) \u3068 \\(j\\) \u304c\u914d\u5217\u306e\u4e21\u7aef\u306b\u914d\u7f6e\u3055\u308c\u307e\u3059\u3002
  2. \u73fe\u5728\u306e\u72b6\u614b\u306e\u5bb9\u91cf \\(cap[i, j]\\) \u3092\u8a08\u7b97\u3057\u3001\u6700\u5927\u5bb9\u91cf\u3092\u66f4\u65b0\u3057\u307e\u3059\u3002
  3. \u4ed5\u5207\u308a \\(i\\) \u3068 \\(j\\) \u306e\u9ad8\u3055\u3092\u6bd4\u8f03\u3057\u3001\u77ed\u3044\u4ed5\u5207\u308a\u30921\u30b9\u30c6\u30c3\u30d7\u5185\u5074\u306b\u79fb\u52d5\u3057\u307e\u3059\u3002
  4. \\(i\\) \u3068 \\(j\\) \u304c\u51fa\u4f1a\u3046\u307e\u3067\u30b9\u30c6\u30c3\u30d7 2. \u3068 3. \u3092\u7e70\u308a\u8fd4\u3057\u307e\u3059\u3002
<1><2><3><4><5><6><7><8><9>

\u56f3 15-11 \u00a0 \u6700\u5927\u5bb9\u91cf\u554f\u984c\u306e\u8caa\u6b32\u30d7\u30ed\u30bb\u30b9

"},{"location":"chapter_greedy/max_capacity_problem/#2","title":"2. \u00a0 \u5b9f\u88c5","text":"

\u30b3\u30fc\u30c9\u306f\u6700\u5927 \\(n\\) \u56de\u30eb\u30fc\u30d7\u3059\u308b\u305f\u3081\u3001\u6642\u9593\u8a08\u7b97\u91cf\u306f \\(O(n)\\) \u3067\u3059\u3002

\u5909\u6570 \\(i\\)\u3001\\(j\\)\u3001\\(res\\) \u306f\u4e00\u5b9a\u91cf\u306e\u8ffd\u52a0\u30b9\u30da\u30fc\u30b9\u3092\u4f7f\u7528\u3059\u308b\u305f\u3081\u3001\u7a7a\u9593\u8a08\u7b97\u91cf\u306f \\(O(1)\\) \u3067\u3059\u3002

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby max_capacity.py
def max_capacity(ht: list[int]) -> int:\n    \"\"\"\u6700\u5927\u5bb9\u91cf\uff1a\u8caa\u6b32\u6cd5\"\"\"\n    # i\u3001j \u3092\u521d\u671f\u5316\u3001\u914d\u5217\u306e\u4e21\u7aef\u3067\u5206\u5272\u3055\u305b\u308b\n    i, j = 0, len(ht) - 1\n    # \u521d\u671f\u6700\u5927\u5bb9\u91cf\u306f 0\n    res = 0\n    # 2 \u3064\u306e\u677f\u304c\u51fa\u4f1a\u3046\u307e\u3067\u8caa\u6b32\u9078\u629e\u3092\u30eb\u30fc\u30d7\n    while i < j:\n        # \u6700\u5927\u5bb9\u91cf\u3092\u66f4\u65b0\n        cap = min(ht[i], ht[j]) * (j - i)\n        res = max(res, cap)\n        # \u77ed\u3044\u677f\u3092\u5185\u5074\u306b\u79fb\u52d5\n        if ht[i] < ht[j]:\n            i += 1\n        else:\n            j -= 1\n    return res\n
max_capacity.cpp
/* \u6700\u5927\u5bb9\u91cf\uff1a\u8caa\u6b32\u6cd5 */\nint maxCapacity(vector<int> &ht) {\n    // i\u3001j \u3092\u521d\u671f\u5316\u3057\u3001\u914d\u5217\u306e\u4e21\u7aef\u3067\u5206\u5272\u3055\u305b\u308b\n    int i = 0, j = ht.size() - 1;\n    // \u521d\u671f\u6700\u5927\u5bb9\u91cf\u306f 0\n    int res = 0;\n    // 2\u3064\u306e\u677f\u304c\u51fa\u4f1a\u3046\u307e\u3067\u8caa\u6b32\u9078\u629e\u3092\u30eb\u30fc\u30d7\n    while (i < j) {\n        // \u6700\u5927\u5bb9\u91cf\u3092\u66f4\u65b0\n        int cap = min(ht[i], ht[j]) * (j - i);\n        res = max(res, cap);\n        // \u3088\u308a\u77ed\u3044\u677f\u3092\u5185\u5074\u306b\u79fb\u52d5\n        if (ht[i] < ht[j]) {\n            i++;\n        } else {\n            j--;\n        }\n    }\n    return res;\n}\n
max_capacity.java
/* \u6700\u5927\u5bb9\u91cf\uff1a\u8caa\u6b32\u6cd5 */\nint maxCapacity(int[] ht) {\n    // i\u3001j \u3092\u521d\u671f\u5316\u3057\u3001\u914d\u5217\u306e\u4e21\u7aef\u3067\u5206\u5272\u3055\u305b\u308b\n    int i = 0, j = ht.length - 1;\n    // \u521d\u671f\u6700\u5927\u5bb9\u91cf\u306f 0\n    int res = 0;\n    // 2\u3064\u306e\u677f\u304c\u51fa\u4f1a\u3046\u307e\u3067\u8caa\u6b32\u9078\u629e\u3092\u30eb\u30fc\u30d7\n    while (i < j) {\n        // \u6700\u5927\u5bb9\u91cf\u3092\u66f4\u65b0\n        int cap = Math.min(ht[i], ht[j]) * (j - i);\n        res = Math.max(res, cap);\n        // \u3088\u308a\u77ed\u3044\u677f\u3092\u5185\u5074\u306b\u79fb\u52d5\n        if (ht[i] < ht[j]) {\n            i++;\n        } else {\n            j--;\n        }\n    }\n    return res;\n}\n
max_capacity.cs
[class]{max_capacity}-[func]{MaxCapacity}\n
max_capacity.go
[class]{}-[func]{maxCapacity}\n
max_capacity.swift
[class]{}-[func]{maxCapacity}\n
max_capacity.js
[class]{}-[func]{maxCapacity}\n
max_capacity.ts
[class]{}-[func]{maxCapacity}\n
max_capacity.dart
[class]{}-[func]{maxCapacity}\n
max_capacity.rs
[class]{}-[func]{max_capacity}\n
max_capacity.c
[class]{}-[func]{maxCapacity}\n
max_capacity.kt
[class]{}-[func]{maxCapacity}\n
max_capacity.rb
[class]{}-[func]{max_capacity}\n
"},{"location":"chapter_greedy/max_capacity_problem/#3","title":"3. \u00a0 \u6b63\u3057\u3055\u306e\u8a3c\u660e","text":"

\u8caa\u6b32\u6cd5\u304c\u5217\u6319\u3088\u308a\u3082\u9ad8\u901f\u3067\u3042\u308b\u7406\u7531\u306f\u3001\u5404\u30e9\u30a6\u30f3\u30c9\u306e\u8caa\u6b32\u9078\u629e\u304c\u4e00\u90e8\u306e\u72b6\u614b\u3092\u300c\u30b9\u30ad\u30c3\u30d7\u300d\u3059\u308b\u304b\u3089\u3067\u3059\u3002

\u4f8b\u3048\u3070\u3001\\(i\\) \u304c\u77ed\u3044\u4ed5\u5207\u308a\u3067 \\(j\\) \u304c\u9ad8\u3044\u4ed5\u5207\u308a\u3067\u3042\u308b\u72b6\u614b \\(cap[i, j]\\) \u306e\u4e0b\u3067\u3001\u77ed\u3044\u4ed5\u5207\u308a \\(i\\) \u3092\u8caa\u6b32\u306b1\u30b9\u30c6\u30c3\u30d7\u5185\u5074\u306b\u79fb\u52d5\u3059\u308b\u3068\u3001\u4e0b\u306e\u56f3\u306b\u793a\u3059\u300c\u30b9\u30ad\u30c3\u30d7\u3055\u308c\u305f\u300d\u72b6\u614b\u306b\u3064\u306a\u304c\u308a\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u3053\u308c\u3089\u306e\u72b6\u614b\u306e\u5bb9\u91cf\u3092\u5f8c\u3067\u691c\u8a3c\u3067\u304d\u306a\u3044\u3053\u3068\u3092\u610f\u5473\u3057\u307e\u3059\u3002

\\[ cap[i, i+1], cap[i, i+2], \\dots, cap[i, j-2], cap[i, j-1] \\]

\u56f3 15-12 \u00a0 \u77ed\u3044\u4ed5\u5207\u308a\u306e\u79fb\u52d5\u306b\u3088\u3063\u3066\u30b9\u30ad\u30c3\u30d7\u3055\u308c\u308b\u72b6\u614b

\u89b3\u5bdf\u3059\u308b\u3068\u3001\u3053\u308c\u3089\u306e\u30b9\u30ad\u30c3\u30d7\u3055\u308c\u305f\u72b6\u614b\u306f\u5b9f\u969b\u306b\u306f\u9ad8\u3044\u4ed5\u5207\u308a \\(j\\) \u304c\u5185\u5074\u306b\u79fb\u52d5\u3057\u305f\u3059\u3079\u3066\u306e\u72b6\u614b**\u3067\u3059\u3002\u9ad8\u3044\u4ed5\u5207\u308a\u3092\u5185\u5074\u306b\u79fb\u52d5\u3059\u308b\u3068\u5bb9\u91cf\u304c\u78ba\u5b9f\u306b\u6e1b\u5c11\u3059\u308b\u3053\u3068\u3092\u3059\u3067\u306b\u8a3c\u660e\u3057\u307e\u3057\u305f\u3002\u3057\u305f\u304c\u3063\u3066\u3001\u30b9\u30ad\u30c3\u30d7\u3055\u308c\u305f\u72b6\u614b\u306f\u6700\u9069\u89e3\u3067\u3042\u308b\u53ef\u80fd\u6027\u304c\u306a\u304f\u3001**\u305d\u308c\u3089\u3092\u30b9\u30ad\u30c3\u30d7\u3057\u3066\u3082\u6700\u9069\u89e3\u3092\u898b\u9003\u3059\u3053\u3068\u306f\u3042\u308a\u307e\u305b\u3093\u3002

\u5206\u6790\u306b\u3088\u308a\u3001\u77ed\u3044\u4ed5\u5207\u308a\u3092\u79fb\u52d5\u3059\u308b\u64cd\u4f5c\u306f\u300c\u5b89\u5168\u300d\u3067\u3042\u308a\u3001\u8caa\u6b32\u6226\u7565\u304c\u52b9\u679c\u7684\u3067\u3042\u308b\u3053\u3068\u304c\u793a\u3055\u308c\u307e\u3059\u3002

"},{"location":"chapter_greedy/max_product_cutting_problem/","title":"15.4 \u00a0 \u6700\u5927\u7a4d\u5207\u65ad\u554f\u984c","text":"

Question

\u6b63\u306e\u6574\u6570 \\(n\\) \u304c\u4e0e\u3048\u3089\u308c\u305f\u3068\u304d\u3001\u305d\u308c\u3092\u5408\u8a08\u304c \\(n\\) \u306b\u306a\u308b\u5c11\u306a\u304f\u3068\u30822\u3064\u306e\u6b63\u306e\u6574\u6570\u306b\u5206\u5272\u3057\u3001\u3053\u308c\u3089\u306e\u6574\u6570\u306e\u6700\u5927\u7a4d\u3092\u6c42\u3081\u3066\u304f\u3060\u3055\u3044\u3002\u4e0b\u306e\u56f3\u306b\u793a\u3059\u3068\u304a\u308a\u3067\u3059\u3002

\u56f3 15-13 \u00a0 \u6700\u5927\u7a4d\u5207\u65ad\u554f\u984c\u306e\u5b9a\u7fa9

\\(n\\) \u3092 \\(m\\) \u500b\u306e\u6574\u6570\u56e0\u5b50\u306b\u5206\u5272\u3059\u308b\u3068\u4eee\u5b9a\u3057\u3001\\(i\\) \u756a\u76ee\u306e\u56e0\u5b50\u3092 \\(n_i\\) \u3068\u8868\u8a18\u3059\u308b\u3068\u3001

\\[ n = \\sum_{i=1}^{m}n_i \\]

\u3053\u306e\u554f\u984c\u306e\u76ee\u6a19\u306f\u3001\u3059\u3079\u3066\u306e\u6574\u6570\u56e0\u5b50\u306e\u6700\u5927\u7a4d\u3092\u898b\u3064\u3051\u308b\u3053\u3068\u3067\u3059\u3002\u3059\u306a\u308f\u3061\u3001

\\[ \\max(\\prod_{i=1}^{m}n_i) \\]

\u8003\u616e\u3059\u3079\u304d\u70b9\uff1a\u5206\u5272\u6570 \\(m\\) \u306f\u3069\u306e\u7a0b\u5ea6\u5927\u304d\u304f\u3059\u3079\u304d\u304b\u3001\u5404 \\(n_i\\) \u306f\u4f55\u3067\u3042\u308b\u3079\u304d\u304b\uff1f

"},{"location":"chapter_greedy/max_product_cutting_problem/#1","title":"1. \u00a0 \u8caa\u6b32\u6226\u7565\u306e\u6c7a\u5b9a","text":"

\u7d4c\u9a13\u7684\u306b\u30012\u3064\u306e\u6574\u6570\u306e\u7a4d\u306f\u591a\u304f\u306e\u5834\u5408\u305d\u306e\u548c\u3088\u308a\u3082\u5927\u304d\u304f\u306a\u308a\u307e\u3059\u3002\\(n\\) \u304b\u3089\u56e0\u5b50 \\(2\\) \u3092\u5206\u5272\u3059\u308b\u3068\u4eee\u5b9a\u3059\u308b\u3068\u3001\u305d\u306e\u7a4d\u306f \\(2(n-2)\\) \u3067\u3059\u3002\u3053\u306e\u7a4d\u3092 \\(n\\) \u3068\u6bd4\u8f03\u3057\u307e\u3059\uff1a

\\[ \\begin{aligned} 2(n-2) & \\geq n \\newline 2n - n - 4 & \\geq 0 \\newline n & \\geq 4 \\end{aligned} \\]

\u4e0b\u306e\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\\(n \\geq 4\\) \u306e\u3068\u304d\u3001\\(2\\) \u3092\u5206\u5272\u3059\u308b\u3068\u7a4d\u304c\u5897\u52a0\u3057\u307e\u3059\u3002\u3053\u308c\u306f4\u4ee5\u4e0a\u306e\u6574\u6570\u3092\u5206\u5272\u3059\u3079\u304d\u3067\u3042\u308b\u3053\u3068\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002

\u8caa\u6b32\u6226\u75651\uff1a\u5206\u5272\u30b9\u30ad\u30fc\u30e0\u304c \\(\\geq 4\\) \u306e\u56e0\u5b50\u3092\u542b\u3080\u5834\u5408\u3001\u305d\u308c\u3089\u306f\u3055\u3089\u306b\u5206\u5272\u3055\u308c\u308b\u3079\u304d\u3067\u3059\u3002\u6700\u7d42\u7684\u306a\u5206\u5272\u306f\u56e0\u5b50 \\(1\\)\u3001\\(2\\)\u3001\\(3\\) \u306e\u307f\u3092\u542b\u3080\u3079\u304d\u3067\u3059\u3002

\u56f3 15-14 \u00a0 \u5206\u5272\u306b\u3088\u308b\u7a4d\u306e\u5897\u52a0

\u6b21\u306b\u3001\u3069\u306e\u56e0\u5b50\u304c\u6700\u9069\u304b\u3092\u8003\u616e\u3057\u307e\u3059\u3002\u56e0\u5b50 \\(1\\)\u3001\\(2\\)\u3001\\(3\\) \u306e\u4e2d\u3067\u3001\u660e\u3089\u304b\u306b \\(1\\) \u304c\u6700\u60aa\u3067\u3059\u3002\\(1 \\times (n-1) < n\\) \u304c\u5e38\u306b\u6210\u308a\u7acb\u3064\u305f\u3081\u3001\\(1\\) \u3092\u5206\u5272\u3059\u308b\u3068\u5b9f\u969b\u306b\u7a4d\u304c\u6e1b\u5c11\u3057\u307e\u3059\u3002

\u4e0b\u306e\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\\(n = 6\\) \u306e\u3068\u304d\u3001\\(3 \\times 3 > 2 \\times 2 \\times 2\\) \u3067\u3059\u3002\u3053\u308c\u306f \\(3\\) \u3092\u5206\u5272\u3059\u308b\u65b9\u304c \\(2\\) \u3092\u5206\u5272\u3059\u308b\u3088\u308a\u3082\u826f\u3044\u3053\u3068\u3092\u610f\u5473\u3057\u307e\u3059\u3002

\u8caa\u6b32\u6226\u75652\uff1a\u5206\u5272\u30b9\u30ad\u30fc\u30e0\u306b\u306f\u6700\u5927\u30672\u3064\u306e \\(2\\) \u304c\u3042\u308b\u3079\u304d\u3067\u3059\u30023\u3064\u306e \\(2\\) \u306f\u5e38\u306b2\u3064\u306e \\(3\\) \u306b\u7f6e\u304d\u63db\u3048\u3066\u3088\u308a\u9ad8\u3044\u7a4d\u3092\u5f97\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u304b\u3089\u3067\u3059\u3002

\u56f3 15-15 \u00a0 \u6700\u9069\u306a\u5206\u5272\u56e0\u5b50

\u4e0a\u8a18\u304b\u3089\u3001\u4ee5\u4e0b\u306e\u8caa\u6b32\u6226\u7565\u3092\u5c0e\u51fa\u3067\u304d\u307e\u3059\u3002

  1. \u5165\u529b\u6574\u6570 \\(n\\) \u306b\u3064\u3044\u3066\u3001\u4f59\u308a\u304c \\(0\\)\u3001\\(1\\)\u3001\u307e\u305f\u306f \\(2\\) \u306b\u306a\u308b\u307e\u3067\u56e0\u5b50 \\(3\\) \u3092\u7d99\u7d9a\u7684\u306b\u5206\u5272\u3057\u307e\u3059\u3002
  2. \u4f59\u308a\u304c \\(0\\) \u306e\u5834\u5408\u3001\\(n\\) \u304c \\(3\\) \u306e\u500d\u6570\u3067\u3042\u308b\u3053\u3068\u3092\u610f\u5473\u3059\u308b\u305f\u3081\u3001\u305d\u308c\u4ee5\u4e0a\u306e\u884c\u52d5\u306f\u53d6\u308a\u307e\u305b\u3093\u3002
  3. \u4f59\u308a\u304c \\(2\\) \u306e\u5834\u5408\u3001\u3055\u3089\u306b\u5206\u5272\u3092\u7d9a\u3051\u305a\u3001\u305d\u306e\u307e\u307e\u4fdd\u6301\u3057\u307e\u3059\u3002
  4. \u4f59\u308a\u304c \\(1\\) \u306e\u5834\u5408\u3001\\(2 \\times 2 > 1 \\times 3\\) \u3067\u3042\u308b\u305f\u3081\u3001\u6700\u5f8c\u306e \\(3\\) \u3092 \\(2\\) \u306b\u7f6e\u304d\u63db\u3048\u308b\u3079\u304d\u3067\u3059\u3002
"},{"location":"chapter_greedy/max_product_cutting_problem/#2","title":"2. \u00a0 \u30b3\u30fc\u30c9\u5b9f\u88c5","text":"

\u4e0b\u306e\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u6574\u6570\u3092\u5206\u5272\u3059\u308b\u305f\u3081\u306b\u30eb\u30fc\u30d7\u3092\u4f7f\u7528\u3059\u308b\u5fc5\u8981\u306f\u306a\u304f\u3001\u5e8a\u9664\u7b97\u6f14\u7b97\u3092\u4f7f\u7528\u3057\u3066 \\(3\\) \u306e\u6570 \\(a\\) \u3092\u53d6\u5f97\u3057\u3001\u5270\u4f59\u6f14\u7b97\u3092\u4f7f\u7528\u3057\u3066\u4f59\u308a \\(b\\) \u3092\u53d6\u5f97\u3067\u304d\u307e\u3059\u3002\u3057\u305f\u304c\u3063\u3066\uff1a

\\[ n = 3a + b \\]

\\(n \\leq 3\\) \u306e\u5883\u754c\u30b1\u30fc\u30b9\u3067\u306f\u3001\\(1\\) \u3092\u5206\u5272\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u3001\u7a4d\u306f \\(1 \\times (n - 1)\\) \u3067\u3042\u308b\u3053\u3068\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby max_product_cutting.py
def max_product_cutting(n: int) -> int:\n    \"\"\"\u5207\u65ad\u306e\u6700\u5927\u7a4d\uff1a\u8caa\u6b32\u6cd5\"\"\"\n    # n <= 3 \u306e\u5834\u5408\u30011 \u3092\u5207\u308a\u51fa\u3059\u5fc5\u8981\u304c\u3042\u308b\n    if n <= 3:\n        return 1 * (n - 1)\n    # \u8caa\u6b32\u7684\u306b 3 \u3092\u5207\u308a\u51fa\u3059\u3001a \u306f 3 \u306e\u500b\u6570\u3001b \u306f\u4f59\u308a\n    a, b = n // 3, n % 3\n    if b == 1:\n        # \u4f59\u308a\u304c 1 \u306e\u5834\u5408\u30011 * 3 \u306e\u30da\u30a2\u3092 2 * 2 \u306b\u5909\u63db\n        return int(math.pow(3, a - 1)) * 2 * 2\n    if b == 2:\n        # \u4f59\u308a\u304c 2 \u306e\u5834\u5408\u3001\u4f55\u3082\u3057\u306a\u3044\n        return int(math.pow(3, a)) * 2\n    # \u4f59\u308a\u304c 0 \u306e\u5834\u5408\u3001\u4f55\u3082\u3057\u306a\u3044\n    return int(math.pow(3, a))\n
max_product_cutting.cpp
/* \u6700\u5927\u7a4d\u5207\u65ad\uff1a\u8caa\u6b32\u6cd5 */\nint maxProductCutting(int n) {\n    // n <= 3 \u306e\u5834\u5408\u30011 \u3092\u5207\u308a\u51fa\u3059\u5fc5\u8981\u304c\u3042\u308b\n    if (n <= 3) {\n        return 1 * (n - 1);\n    }\n    // \u8caa\u6b32\u306b 3 \u3092\u5207\u308a\u51fa\u3059\u3002a \u306f 3 \u306e\u500b\u6570\u3001b \u306f\u4f59\u308a\n    int a = n / 3;\n    int b = n % 3;\n    if (b == 1) {\n        // \u4f59\u308a\u304c 1 \u306e\u5834\u5408\u30011 * 3 \u306e\u30da\u30a2\u3092 2 * 2 \u306b\u5909\u63db\n        return (int)pow(3, a - 1) * 2 * 2;\n    }\n    if (b == 2) {\n        // \u4f59\u308a\u304c 2 \u306e\u5834\u5408\u3001\u4f55\u3082\u3057\u306a\u3044\n        return (int)pow(3, a) * 2;\n    }\n    // \u4f59\u308a\u304c 0 \u306e\u5834\u5408\u3001\u4f55\u3082\u3057\u306a\u3044\n    return (int)pow(3, a);\n}\n
max_product_cutting.java
/* \u6700\u5927\u7a4d\u5207\u65ad\uff1a\u8caa\u6b32\u6cd5 */\nint maxProductCutting(int n) {\n    // n <= 3 \u306e\u5834\u5408\u30011 \u3092\u5207\u308a\u51fa\u3059\u5fc5\u8981\u304c\u3042\u308b\n    if (n <= 3) {\n        return 1 * (n - 1);\n    }\n    // \u8caa\u6b32\u306b 3 \u3092\u5207\u308a\u51fa\u3059\u3002a \u306f 3 \u306e\u500b\u6570\u3001b \u306f\u4f59\u308a\n    int a = n / 3;\n    int b = n % 3;\n    if (b == 1) {\n        // \u4f59\u308a\u304c 1 \u306e\u5834\u5408\u30011 * 3 \u306e\u30da\u30a2\u3092 2 * 2 \u306b\u5909\u63db\n        return (int) Math.pow(3, a - 1) * 2 * 2;\n    }\n    if (b == 2) {\n        // \u4f59\u308a\u304c 2 \u306e\u5834\u5408\u3001\u4f55\u3082\u3057\u306a\u3044\n        return (int) Math.pow(3, a) * 2;\n    }\n    // \u4f59\u308a\u304c 0 \u306e\u5834\u5408\u3001\u4f55\u3082\u3057\u306a\u3044\n    return (int) Math.pow(3, a);\n}\n
max_product_cutting.cs
[class]{max_product_cutting}-[func]{MaxProductCutting}\n
max_product_cutting.go
[class]{}-[func]{maxProductCutting}\n
max_product_cutting.swift
[class]{}-[func]{maxProductCutting}\n
max_product_cutting.js
[class]{}-[func]{maxProductCutting}\n
max_product_cutting.ts
[class]{}-[func]{maxProductCutting}\n
max_product_cutting.dart
[class]{}-[func]{maxProductCutting}\n
max_product_cutting.rs
[class]{}-[func]{max_product_cutting}\n
max_product_cutting.c
[class]{}-[func]{maxProductCutting}\n
max_product_cutting.kt
[class]{}-[func]{maxProductCutting}\n
max_product_cutting.rb
[class]{}-[func]{max_product_cutting}\n

\u56f3 15-16 \u00a0 \u5207\u65ad\u5f8c\u306e\u6700\u5927\u7a4d\u306e\u8a08\u7b97\u65b9\u6cd5

\u6642\u9593\u8a08\u7b97\u91cf\u306f\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\u306e\u3079\u304d\u4e57\u6f14\u7b97\u306e\u5b9f\u88c5\u306b\u4f9d\u5b58\u3057\u307e\u3059\u3002Python\u3067\u306f\u3001\u3088\u304f\u4f7f\u7528\u3055\u308c\u308b\u3079\u304d\u4e57\u8a08\u7b97\u95a2\u6570\u306f3\u7a2e\u985e\u3042\u308a\u307e\u3059\uff1a

\u5909\u6570 \\(a\\) \u3068 \\(b\\) \u306f\u4e00\u5b9a\u30b5\u30a4\u30ba\u306e\u8ffd\u52a0\u30b9\u30da\u30fc\u30b9\u3092\u4f7f\u7528\u3059\u308b\u305f\u3081\u3001\u7a7a\u9593\u8a08\u7b97\u91cf\u306f \\(O(1)\\) \u3067\u3059\u3002

"},{"location":"chapter_greedy/max_product_cutting_problem/#3","title":"3. \u00a0 \u6b63\u3057\u3055\u306e\u8a3c\u660e","text":"

\u80cc\u7406\u6cd5\u3092\u4f7f\u7528\u3057\u3001\\(n \\geq 3\\) \u306e\u30b1\u30fc\u30b9\u306e\u307f\u3092\u5206\u6790\u3057\u307e\u3059\u3002

  1. \u3059\u3079\u3066\u306e\u56e0\u5b50 \\(\\leq 3\\)\uff1a\u6700\u9069\u5206\u5272\u30b9\u30ad\u30fc\u30e0\u304c\u56e0\u5b50 \\(x \\geq 4\\) \u3092\u542b\u3080\u3068\u4eee\u5b9a\u3059\u308b\u3068\u3001\u305d\u308c\u3092\u78ba\u5b9f\u306b \\(2(x-2)\\) \u306b\u3055\u3089\u306b\u5206\u5272\u3067\u304d\u3001\u3088\u308a\u5927\u304d\u306a\u7a4d\u3092\u5f97\u3089\u308c\u307e\u3059\u3002\u3053\u308c\u306f\u4eee\u5b9a\u3068\u77db\u76fe\u3057\u307e\u3059\u3002
  2. \u5206\u5272\u30b9\u30ad\u30fc\u30e0\u306b \\(1\\) \u304c\u542b\u307e\u308c\u306a\u3044\uff1a\u6700\u9069\u5206\u5272\u30b9\u30ad\u30fc\u30e0\u304c\u56e0\u5b50 \\(1\\) \u3092\u542b\u3080\u3068\u4eee\u5b9a\u3059\u308b\u3068\u3001\u305d\u308c\u3092\u78ba\u5b9f\u306b\u5225\u306e\u56e0\u5b50\u3068\u7d50\u5408\u3057\u3066\u3088\u308a\u5927\u304d\u306a\u7a4d\u3092\u5f97\u3089\u308c\u307e\u3059\u3002\u3053\u308c\u306f\u4eee\u5b9a\u3068\u77db\u76fe\u3057\u307e\u3059\u3002
  3. \u5206\u5272\u30b9\u30ad\u30fc\u30e0\u306b\u306f\u6700\u5927\u30672\u3064\u306e \\(2\\) \u304c\u542b\u307e\u308c\u308b\uff1a\u6700\u9069\u5206\u5272\u30b9\u30ad\u30fc\u30e0\u304c3\u3064\u306e \\(2\\) \u3092\u542b\u3080\u3068\u4eee\u5b9a\u3059\u308b\u3068\u3001\u305d\u308c\u3089\u3092\u78ba\u5b9f\u306b2\u3064\u306e \\(3\\) \u306b\u7f6e\u304d\u63db\u3048\u3066\u3001\u3088\u308a\u9ad8\u3044\u7a4d\u3092\u9054\u6210\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306f\u4eee\u5b9a\u3068\u77db\u76fe\u3057\u307e\u3059\u3002
"},{"location":"chapter_greedy/summary/","title":"15.5 \u00a0 \u307e\u3068\u3081","text":""},{"location":"chapter_hashing/","title":"\u7b2c 6 \u7ae0 \u00a0 \u30cf\u30c3\u30b7\u30e5\u8868","text":"

Abstract

\u30b3\u30f3\u30d4\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u306e\u4e16\u754c\u306b\u304a\u3044\u3066\u3001\u30cf\u30c3\u30b7\u30e5\u8868\u306f\u8ce2\u3044\u53f8\u66f8\u306e\u3088\u3046\u306a\u3082\u306e\u3067\u3059\u3002

\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u756a\u53f7\u306e\u8a08\u7b97\u65b9\u6cd5\u3092\u7406\u89e3\u3057\u3001\u76ee\u7684\u306e\u672c\u3092\u8fc5\u901f\u306b\u53d6\u5f97\u3059\u308b\u3053\u3068\u3092\u53ef\u80fd\u306b\u3057\u307e\u3059\u3002

"},{"location":"chapter_hashing/#_1","title":"\u7ae0\u306e\u5185\u5bb9","text":""},{"location":"chapter_hashing/hash_algorithm/","title":"6.3 \u00a0 \u30cf\u30c3\u30b7\u30e5\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0","text":"

\u524d\u306e2\u3064\u306e\u7bc0\u3067\u306f\u3001\u30cf\u30c3\u30b7\u30e5\u8868\u306e\u52d5\u4f5c\u539f\u7406\u3068\u30cf\u30c3\u30b7\u30e5\u885d\u7a81\u3092\u51e6\u7406\u3059\u308b\u65b9\u6cd5\u3092\u7d39\u4ecb\u3057\u307e\u3057\u305f\u3002\u3057\u304b\u3057\u3001\u30aa\u30fc\u30d7\u30f3\u30a2\u30c9\u30ec\u30b9\u6cd5\u3068\u9023\u9396\u6cd5\u306f\u3069\u3061\u3089\u3082**\u885d\u7a81\u304c\u767a\u751f\u3057\u305f\u969b\u306b\u30cf\u30c3\u30b7\u30e5\u8868\u304c\u6b63\u5e38\u306b\u6a5f\u80fd\u3059\u308b\u3053\u3068\u306e\u307f\u3092\u4fdd\u8a3c\u3067\u304d\u3001\u30cf\u30c3\u30b7\u30e5\u885d\u7a81\u306e\u767a\u751f\u983b\u5ea6\u3092\u6e1b\u3089\u3059\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093**\u3002

\u30cf\u30c3\u30b7\u30e5\u885d\u7a81\u304c\u3042\u307e\u308a\u306b\u3082\u983b\u7e41\u306b\u767a\u751f\u3059\u308b\u3068\u3001\u30cf\u30c3\u30b7\u30e5\u8868\u306e\u6027\u80fd\u306f\u5287\u7684\u306b\u60aa\u5316\u3057\u307e\u3059\u3002\u4e0b\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u9023\u9396\u6cd5\u30cf\u30c3\u30b7\u30e5\u8868\u3067\u306f\u3001\u7406\u60f3\u7684\u306a\u30b1\u30fc\u30b9\u3067\u306f\u30ad\u30fc\u5024\u30da\u30a2\u304c\u30d0\u30b1\u30c3\u30c8\u9593\u306b\u5747\u7b49\u306b\u5206\u6563\u3055\u308c\u3001\u6700\u9069\u306a\u30af\u30a8\u30ea\u52b9\u7387\u3092\u5b9f\u73fe\u3057\u307e\u3059\u3002\u6700\u60aa\u306e\u30b1\u30fc\u30b9\u3067\u306f\u3001\u3059\u3079\u3066\u306e\u30ad\u30fc\u5024\u30da\u30a2\u304c\u540c\u3058\u30d0\u30b1\u30c3\u30c8\u306b\u683c\u7d0d\u3055\u308c\u3001\u6642\u9593\u8a08\u7b97\u91cf\u304c\\(O(n)\\)\u306b\u60aa\u5316\u3057\u307e\u3059\u3002

\u56f3 6-8 \u00a0 \u30cf\u30c3\u30b7\u30e5\u885d\u7a81\u306e\u7406\u60f3\u7684\u304a\u3088\u3073\u6700\u60aa\u306e\u30b1\u30fc\u30b9

\u30ad\u30fc\u5024\u30da\u30a2\u306e\u5206\u5e03\u306f\u30cf\u30c3\u30b7\u30e5\u95a2\u6570\u306b\u3088\u3063\u3066\u6c7a\u5b9a\u3055\u308c\u307e\u3059\u3002\u30cf\u30c3\u30b7\u30e5\u95a2\u6570\u306e\u8a08\u7b97\u30b9\u30c6\u30c3\u30d7\u3092\u601d\u3044\u51fa\u3059\u3068\u3001\u307e\u305a\u30cf\u30c3\u30b7\u30e5\u5024\u3092\u8a08\u7b97\u3057\u3001\u6b21\u306b\u914d\u5217\u9577\u3067\u5270\u4f59\u3092\u53d6\u308a\u307e\u3059\uff1a

index = hash(key) % capacity\n

\u4e0a\u8a18\u306e\u5f0f\u3092\u89b3\u5bdf\u3059\u308b\u3068\u3001\u30cf\u30c3\u30b7\u30e5\u8868\u306e\u5bb9\u91cfcapacity\u304c\u56fa\u5b9a\u3055\u308c\u3066\u3044\u308b\u5834\u5408\u3001\u30cf\u30c3\u30b7\u30e5\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0hash()\u304c\u51fa\u529b\u5024\u3092\u6c7a\u5b9a\u3057\u3001\u305d\u308c\u306b\u3088\u3063\u3066\u30cf\u30c3\u30b7\u30e5\u8868\u306b\u304a\u3051\u308b\u30ad\u30fc\u5024\u30da\u30a2\u306e\u5206\u5e03\u3092\u6c7a\u5b9a\u3057\u307e\u3059\u3002

\u3053\u308c\u306f\u3001\u30cf\u30c3\u30b7\u30e5\u885d\u7a81\u306e\u78ba\u7387\u3092\u6e1b\u3089\u3059\u305f\u3081\u306b\u3001\u30cf\u30c3\u30b7\u30e5\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0hash()\u306e\u8a2d\u8a08\u306b\u7126\u70b9\u3092\u5f53\u3066\u308b\u3079\u304d\u3067\u3042\u308b\u3053\u3068\u3092\u610f\u5473\u3057\u307e\u3059\u3002

"},{"location":"chapter_hashing/hash_algorithm/#631","title":"6.3.1 \u00a0 \u30cf\u30c3\u30b7\u30e5\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u76ee\u6a19","text":"

\u300c\u9ad8\u901f\u3067\u5b89\u5b9a\u3057\u305f\u300d\u30cf\u30c3\u30b7\u30e5\u8868\u30c7\u30fc\u30bf\u69cb\u9020\u3092\u5b9f\u73fe\u3059\u308b\u305f\u3081\u306b\u3001\u30cf\u30c3\u30b7\u30e5\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306f\u4ee5\u4e0b\u306e\u7279\u6027\u3092\u6301\u3064\u3079\u304d\u3067\u3059\uff1a

\u5b9f\u969b\u3001\u30cf\u30c3\u30b7\u30e5\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306f\u30cf\u30c3\u30b7\u30e5\u8868\u306e\u5b9f\u88c5\u3060\u3051\u3067\u306a\u304f\u3001\u4ed6\u306e\u5206\u91ce\u3067\u3082\u5e83\u304f\u5fdc\u7528\u3055\u308c\u3066\u3044\u307e\u3059\u3002

\u6697\u53f7\u5316\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u306f\u3001\u30cf\u30c3\u30b7\u30e5\u5024\u304b\u3089\u5143\u306e\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u63a8\u6e2c\u3059\u308b\u306a\u3069\u306e\u9006\u884c\u5206\u6790\u3092\u9632\u3050\u305f\u3081\u306b\u3001\u30cf\u30c3\u30b7\u30e5\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306f\u3088\u308a\u9ad8\u3044\u30ec\u30d9\u30eb\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u6a5f\u80fd\u304c\u5fc5\u8981\u3067\u3059\u3002

**\u300c\u5747\u7b49\u5206\u6563\u300d\u3068\u300c\u885d\u7a81\u8010\u6027\u300d\u306f2\u3064\u306e\u5225\u3005\u306e\u6982\u5ff5**\u3067\u3042\u308b\u3053\u3068\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u5747\u7b49\u5206\u6563\u3092\u6e80\u305f\u3057\u3066\u3082\u3001\u5fc5\u305a\u3057\u3082\u885d\u7a81\u8010\u6027\u304c\u3042\u308b\u3068\u306f\u9650\u308a\u307e\u305b\u3093\u3002\u4f8b\u3048\u3070\u3001\u30e9\u30f3\u30c0\u30e0\u306a\u5165\u529bkey\u306e\u4e0b\u3067\u3001\u30cf\u30c3\u30b7\u30e5\u95a2\u6570key % 100\u306f\u5747\u7b49\u306b\u5206\u6563\u3055\u308c\u305f\u51fa\u529b\u3092\u751f\u6210\u3067\u304d\u307e\u3059\u3002\u3057\u304b\u3057\u3001\u3053\u306e\u30cf\u30c3\u30b7\u30e5\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306f\u904e\u5ea6\u306b\u30b7\u30f3\u30d7\u30eb\u3067\u3001\u4e0b\u4e8c\u6841\u304c\u540c\u3058\u3059\u3079\u3066\u306ekey\u306f\u540c\u3058\u51fa\u529b\u3092\u6301\u3064\u305f\u3081\u3001\u30cf\u30c3\u30b7\u30e5\u5024\u304b\u3089\u4f7f\u7528\u53ef\u80fd\u306akey\u3092\u7c21\u5358\u306b\u63a8\u6e2c\u3067\u304d\u3001\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u7834\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

"},{"location":"chapter_hashing/hash_algorithm/#632","title":"6.3.2 \u00a0 \u30cf\u30c3\u30b7\u30e5\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u8a2d\u8a08","text":"

\u30cf\u30c3\u30b7\u30e5\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u8a2d\u8a08\u306f\u591a\u304f\u306e\u8981\u56e0\u3092\u8003\u616e\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u8907\u96d1\u306a\u554f\u984c\u3067\u3059\u3002\u3057\u304b\u3057\u3001\u8981\u6c42\u304c\u5c11\u306a\u3044\u4e00\u90e8\u306e\u30b7\u30ca\u30ea\u30aa\u3067\u306f\u3001\u3044\u304f\u3064\u304b\u306e\u7c21\u5358\u306a\u30cf\u30c3\u30b7\u30e5\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3092\u8a2d\u8a08\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby simple_hash.py
def add_hash(key: str) -> int:\n    \"\"\"\u52a0\u6cd5\u30cf\u30c3\u30b7\u30e5\"\"\"\n    hash = 0\n    modulus = 1000000007\n    for c in key:\n        hash += ord(c)\n    return hash % modulus\n\ndef mul_hash(key: str) -> int:\n    \"\"\"\u4e57\u6cd5\u30cf\u30c3\u30b7\u30e5\"\"\"\n    hash = 0\n    modulus = 1000000007\n    for c in key:\n        hash = 31 * hash + ord(c)\n    return hash % modulus\n\ndef xor_hash(key: str) -> int:\n    \"\"\"XOR\u30cf\u30c3\u30b7\u30e5\"\"\"\n    hash = 0\n    modulus = 1000000007\n    for c in key:\n        hash ^= ord(c)\n    return hash % modulus\n\ndef rot_hash(key: str) -> int:\n    \"\"\"\u56de\u8ee2\u30cf\u30c3\u30b7\u30e5\"\"\"\n    hash = 0\n    modulus = 1000000007\n    for c in key:\n        hash = (hash << 4) ^ (hash >> 28) ^ ord(c)\n    return hash % modulus\n
simple_hash.cpp
/* \u52a0\u7b97\u30cf\u30c3\u30b7\u30e5 */\nint addHash(string key) {\n    long long hash = 0;\n    const int MODULUS = 1000000007;\n    for (unsigned char c : key) {\n        hash = (hash + (int)c) % MODULUS;\n    }\n    return (int)hash;\n}\n\n/* \u4e57\u7b97\u30cf\u30c3\u30b7\u30e5 */\nint mulHash(string key) {\n    long long hash = 0;\n    const int MODULUS = 1000000007;\n    for (unsigned char c : key) {\n        hash = (31 * hash + (int)c) % MODULUS;\n    }\n    return (int)hash;\n}\n\n/* XOR\u30cf\u30c3\u30b7\u30e5 */\nint xorHash(string key) {\n    int hash = 0;\n    const int MODULUS = 1000000007;\n    for (unsigned char c : key) {\n        hash ^= (int)c;\n    }\n    return hash & MODULUS;\n}\n\n/* \u56de\u8ee2\u30cf\u30c3\u30b7\u30e5 */\nint rotHash(string key) {\n    long long hash = 0;\n    const int MODULUS = 1000000007;\n    for (unsigned char c : key) {\n        hash = ((hash << 4) ^ (hash >> 28) ^ (int)c) % MODULUS;\n    }\n    return (int)hash;\n}\n
simple_hash.java
/* \u52a0\u7b97\u30cf\u30c3\u30b7\u30e5 */\nint addHash(String key) {\n    long hash = 0;\n    final int MODULUS = 1000000007;\n    for (char c : key.toCharArray()) {\n        hash = (hash + (int) c) % MODULUS;\n    }\n    return (int) hash;\n}\n\n/* \u4e57\u7b97\u30cf\u30c3\u30b7\u30e5 */\nint mulHash(String key) {\n    long hash = 0;\n    final int MODULUS = 1000000007;\n    for (char c : key.toCharArray()) {\n        hash = (31 * hash + (int) c) % MODULUS;\n    }\n    return (int) hash;\n}\n\n/* XOR\u30cf\u30c3\u30b7\u30e5 */\nint xorHash(String key) {\n    int hash = 0;\n    final int MODULUS = 1000000007;\n    for (char c : key.toCharArray()) {\n        hash ^= (int) c;\n    }\n    return hash & MODULUS;\n}\n\n/* \u56de\u8ee2\u30cf\u30c3\u30b7\u30e5 */\nint rotHash(String key) {\n    long hash = 0;\n    final int MODULUS = 1000000007;\n    for (char c : key.toCharArray()) {\n        hash = ((hash << 4) ^ (hash >> 28) ^ (int) c) % MODULUS;\n    }\n    return (int) hash;\n}\n
simple_hash.cs
[class]{simple_hash}-[func]{AddHash}\n\n[class]{simple_hash}-[func]{MulHash}\n\n[class]{simple_hash}-[func]{XorHash}\n\n[class]{simple_hash}-[func]{RotHash}\n
simple_hash.go
[class]{}-[func]{addHash}\n\n[class]{}-[func]{mulHash}\n\n[class]{}-[func]{xorHash}\n\n[class]{}-[func]{rotHash}\n
simple_hash.swift
[class]{}-[func]{addHash}\n\n[class]{}-[func]{mulHash}\n\n[class]{}-[func]{xorHash}\n\n[class]{}-[func]{rotHash}\n
simple_hash.js
[class]{}-[func]{addHash}\n\n[class]{}-[func]{mulHash}\n\n[class]{}-[func]{xorHash}\n\n[class]{}-[func]{rotHash}\n
simple_hash.ts
[class]{}-[func]{addHash}\n\n[class]{}-[func]{mulHash}\n\n[class]{}-[func]{xorHash}\n\n[class]{}-[func]{rotHash}\n
simple_hash.dart
[class]{}-[func]{addHash}\n\n[class]{}-[func]{mulHash}\n\n[class]{}-[func]{xorHash}\n\n[class]{}-[func]{rotHash}\n
simple_hash.rs
[class]{}-[func]{add_hash}\n\n[class]{}-[func]{mul_hash}\n\n[class]{}-[func]{xor_hash}\n\n[class]{}-[func]{rot_hash}\n
simple_hash.c
[class]{}-[func]{addHash}\n\n[class]{}-[func]{mulHash}\n\n[class]{}-[func]{xorHash}\n\n[class]{}-[func]{rotHash}\n
simple_hash.kt
[class]{}-[func]{addHash}\n\n[class]{}-[func]{mulHash}\n\n[class]{}-[func]{xorHash}\n\n[class]{}-[func]{rotHash}\n
simple_hash.rb
[class]{}-[func]{add_hash}\n\n[class]{}-[func]{mul_hash}\n\n[class]{}-[func]{xor_hash}\n\n[class]{}-[func]{rot_hash}\n

\u5404\u30cf\u30c3\u30b7\u30e5\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u6700\u5f8c\u306e\u30b9\u30c6\u30c3\u30d7\u304c\u5927\u304d\u306a\u7d20\u6570\\(1000000007\\)\u306e\u5270\u4f59\u3092\u53d6\u308b\u3053\u3068\u3067\u3001\u30cf\u30c3\u30b7\u30e5\u5024\u304c\u9069\u5207\u306a\u7bc4\u56f2\u5185\u306b\u3042\u308b\u3053\u3068\u3092\u4fdd\u8a3c\u3057\u3066\u3044\u308b\u3053\u3068\u304c\u89b3\u5bdf\u3055\u308c\u307e\u3059\u3002\u306a\u305c\u7d20\u6570\u306e\u5270\u4f59\u3092\u53d6\u308b\u3053\u3068\u304c\u5f37\u8abf\u3055\u308c\u308b\u306e\u304b\u3001\u307e\u305f\u306f\u5408\u6210\u6570\u306e\u5270\u4f59\u3092\u53d6\u308b\u3053\u3068\u306e\u6b20\u70b9\u306f\u4f55\u304b\u3092\u8003\u3048\u308b\u4fa1\u5024\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u308c\u306f\u8208\u5473\u6df1\u3044\u8cea\u554f\u3067\u3059\u3002

\u7d50\u8ad6\u3068\u3057\u3066\uff1a\u5927\u304d\u306a\u7d20\u6570\u3092\u5270\u4f59\u3068\u3057\u3066\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u30cf\u30c3\u30b7\u30e5\u5024\u306e\u5747\u7b49\u5206\u6563\u3092\u6700\u5927\u5316\u3067\u304d\u307e\u3059\u3002\u7d20\u6570\u306f\u4ed6\u306e\u6570\u3068\u5171\u901a\u56e0\u5b50\u3092\u6301\u305f\u306a\u3044\u305f\u3081\u3001\u5270\u4f59\u6f14\u7b97\u306b\u3088\u3063\u3066\u5f15\u304d\u8d77\u3053\u3055\u308c\u308b\u5468\u671f\u7684\u30d1\u30bf\u30fc\u30f3\u3092\u6e1b\u3089\u3057\u3001\u30cf\u30c3\u30b7\u30e5\u885d\u7a81\u3092\u56de\u907f\u3067\u304d\u307e\u3059\u3002

\u4f8b\u3048\u3070\u3001\u5408\u6210\u6570\\(9\\)\u3092\u5270\u4f59\u3068\u3057\u3066\u9078\u629e\u3059\u308b\u3068\u3057\u307e\u3059\u3002\u3053\u308c\u306f\\(3\\)\u3067\u5272\u308a\u5207\u308c\u308b\u305f\u3081\u3001\\(3\\)\u3067\u5272\u308a\u5207\u308c\u308b\u3059\u3079\u3066\u306ekey\u306f\u30cf\u30c3\u30b7\u30e5\u5024\\(0\\)\u3001\\(3\\)\u3001\\(6\\)\u306b\u30de\u30c3\u30d4\u30f3\u30b0\u3055\u308c\u307e\u3059\u3002

\\[ \\begin{aligned} \\text{modulus} & = 9 \\newline \\text{key} & = \\{ 0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, \\dots \\} \\newline \\text{hash} & = \\{ 0, 3, 6, 0, 3, 6, 0, 3, 6, 0, 3, 6,\\dots \\} \\end{aligned} \\]

\u5165\u529bkey\u304c\u305f\u307e\u305f\u307e\u3053\u306e\u7a2e\u306e\u7b49\u5dee\u6570\u5217\u5206\u5e03\u3092\u6301\u3064\u5834\u5408\u3001\u30cf\u30c3\u30b7\u30e5\u5024\u304c\u30af\u30e9\u30b9\u30bf\u30fc\u3057\u3001\u30cf\u30c3\u30b7\u30e5\u885d\u7a81\u3092\u60aa\u5316\u3055\u305b\u307e\u3059\u3002\u4eca\u5ea6\u306fmodulus\u3092\u7d20\u6570\\(13\\)\u306b\u7f6e\u304d\u63db\u3048\u308b\u3068\u3057\u307e\u3059\u3002key\u3068modulus\u306e\u9593\u306b\u5171\u901a\u56e0\u5b50\u304c\u306a\u3044\u305f\u3081\u3001\u51fa\u529b\u30cf\u30c3\u30b7\u30e5\u5024\u306e\u5747\u7b49\u6027\u304c\u5927\u5e45\u306b\u6539\u5584\u3055\u308c\u307e\u3059\u3002

\\[ \\begin{aligned} \\text{modulus} & = 13 \\newline \\text{key} & = \\{ 0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, \\dots \\} \\newline \\text{hash} & = \\{ 0, 3, 6, 9, 12, 2, 5, 8, 11, 1, 4, 7, \\dots \\} \\end{aligned} \\]

key\u304c\u30e9\u30f3\u30c0\u30e0\u3067\u5747\u7b49\u306b\u5206\u6563\u3055\u308c\u308b\u3053\u3068\u304c\u4fdd\u8a3c\u3055\u308c\u3066\u3044\u308b\u5834\u5408\u3001\u5270\u4f59\u3068\u3057\u3066\u7d20\u6570\u307e\u305f\u306f\u5408\u6210\u6570\u3092\u9078\u629e\u3057\u3066\u3082\u3001\u4e21\u65b9\u3068\u3082\u5747\u7b49\u306b\u5206\u6563\u3055\u308c\u305f\u30cf\u30c3\u30b7\u30e5\u5024\u3092\u751f\u6210\u3067\u304d\u308b\u3053\u3068\u306f\u6ce8\u76ee\u306b\u5024\u3057\u307e\u3059\u3002\u3057\u304b\u3057\u3001key\u306e\u5206\u5e03\u306b\u3042\u308b\u7a2e\u306e\u5468\u671f\u6027\u304c\u3042\u308b\u5834\u5408\u3001\u5408\u6210\u6570\u306e\u5270\u4f59\u306f\u30af\u30e9\u30b9\u30bf\u30ea\u30f3\u30b0\u3092\u5f15\u304d\u8d77\u3053\u3057\u3084\u3059\u304f\u306a\u308a\u307e\u3059\u3002

\u8981\u7d04\u3059\u308b\u3068\u3001\u901a\u5e38\u306f\u7d20\u6570\u3092\u5270\u4f59\u3068\u3057\u3066\u9078\u629e\u3057\u3001\u3053\u306e\u7d20\u6570\u306f\u5468\u671f\u7684\u30d1\u30bf\u30fc\u30f3\u3092\u53ef\u80fd\u306a\u9650\u308a\u6392\u9664\u3057\u3001\u30cf\u30c3\u30b7\u30e5\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u5805\u7262\u6027\u3092\u5411\u4e0a\u3055\u305b\u308b\u305f\u3081\u306b\u5341\u5206\u5927\u304d\u304f\u3042\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

"},{"location":"chapter_hashing/hash_algorithm/#633","title":"6.3.3 \u00a0 \u4e00\u822c\u7684\u306a\u30cf\u30c3\u30b7\u30e5\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0","text":"

\u4e0a\u8a18\u3067\u8a00\u53ca\u3057\u305f\u7c21\u5358\u306a\u30cf\u30c3\u30b7\u30e5\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306f\u304b\u306a\u308a\u300c\u8106\u5f31\u300d\u3067\u3001\u30cf\u30c3\u30b7\u30e5\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u8a2d\u8a08\u76ee\u6a19\u304b\u3089\u7a0b\u9060\u3044\u3053\u3068\u306f\u96e3\u3057\u304f\u3042\u308a\u307e\u305b\u3093\u3002\u4f8b\u3048\u3070\u3001\u52a0\u7b97\u3068XOR\u306f\u4ea4\u63db\u6cd5\u5247\u306b\u5f93\u3046\u305f\u3081\u3001\u52a0\u7b97\u30cf\u30c3\u30b7\u30e5\u3068XOR\u30cf\u30c3\u30b7\u30e5\u306f\u540c\u3058\u5185\u5bb9\u3060\u304c\u9806\u5e8f\u304c\u7570\u306a\u308b\u6587\u5b57\u5217\u3092\u533a\u5225\u3067\u304d\u305a\u3001\u30cf\u30c3\u30b7\u30e5\u885d\u7a81\u3092\u60aa\u5316\u3055\u305b\u3001\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u554f\u984c\u3092\u5f15\u304d\u8d77\u3053\u3059\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002

\u5b9f\u969b\u306b\u306f\u3001\u901a\u5e38MD5\u3001SHA-1\u3001SHA-2\u3001SHA-3\u306a\u3069\u306e\u6a19\u6e96\u30cf\u30c3\u30b7\u30e5\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002\u3053\u308c\u3089\u306f\u4efb\u610f\u306e\u9577\u3055\u306e\u5165\u529b\u30c7\u30fc\u30bf\u3092\u56fa\u5b9a\u9577\u306e\u30cf\u30c3\u30b7\u30e5\u5024\u306b\u30de\u30c3\u30d4\u30f3\u30b0\u3067\u304d\u307e\u3059\u3002

\u904e\u53bb1\u4e16\u7d00\u306b\u308f\u305f\u3063\u3066\u3001\u30cf\u30c3\u30b7\u30e5\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306f\u7d99\u7d9a\u7684\u306a\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u3068\u6700\u9069\u5316\u306e\u30d7\u30ed\u30bb\u30b9\u306b\u3042\u308a\u307e\u3057\u305f\u3002\u4e00\u90e8\u306e\u7814\u7a76\u8005\u306f\u30cf\u30c3\u30b7\u30e5\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u6027\u80fd\u5411\u4e0a\u306b\u52aa\u3081\u3001\u30cf\u30c3\u30ab\u30fc\u3092\u542b\u3080\u4ed6\u306e\u4eba\u3005\u306f\u30cf\u30c3\u30b7\u30e5\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u554f\u984c\u3092\u898b\u3064\u3051\u308b\u3053\u3068\u306b\u5c02\u5ff5\u3057\u3066\u3044\u307e\u3059\u3002\u4ee5\u4e0b\u306e\u8868\u306f\u3001\u5b9f\u7528\u7684\u306a\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u4e00\u822c\u7684\u306b\u4f7f\u7528\u3055\u308c\u308b\u30cf\u30c3\u30b7\u30e5\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002

\u8868 6-2 \u00a0 \u4e00\u822c\u7684\u306a\u30cf\u30c3\u30b7\u30e5\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0

MD5 SHA-1 SHA-2 SHA-3 \u30ea\u30ea\u30fc\u30b9\u5e74 1992 1995 2002 2008 \u51fa\u529b\u9577 128 bit 160 bit 256/512 bit 224/256/384/512 bit \u30cf\u30c3\u30b7\u30e5\u885d\u7a81 \u983b\u7e41 \u983b\u7e41 \u307e\u308c \u307e\u308c \u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30ec\u30d9\u30eb \u4f4e\u3001\u653b\u6483\u306b\u6210\u529f\u3057\u3066\u3044\u308b \u4f4e\u3001\u653b\u6483\u306b\u6210\u529f\u3057\u3066\u3044\u308b \u9ad8 \u9ad8 \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3 \u653e\u68c4\u3001\u30c7\u30fc\u30bf\u6574\u5408\u6027\u30c1\u30a7\u30c3\u30af\u306b\u307e\u3060\u4f7f\u7528 \u653e\u68c4 \u6697\u53f7\u901a\u8ca8\u53d6\u5f15\u691c\u8a3c\u3001\u30c7\u30b8\u30bf\u30eb\u7f72\u540d\u306a\u3069 SHA-2\u306e\u4ee3\u66ff\u3068\u3057\u3066\u4f7f\u7528\u53ef\u80fd"},{"location":"chapter_hashing/hash_algorithm/#_1","title":"\u30c7\u30fc\u30bf\u69cb\u9020\u306b\u304a\u3051\u308b\u30cf\u30c3\u30b7\u30e5\u5024","text":"

\u30cf\u30c3\u30b7\u30e5\u8868\u306e\u30ad\u30fc\u306f\u6574\u6570\u3001\u5c0f\u6570\u3001\u6587\u5b57\u5217\u306a\u3069\u306e\u3055\u307e\u3056\u307e\u306a\u30c7\u30fc\u30bf\u578b\u306b\u3067\u304d\u308b\u3053\u3068\u3092\u77e5\u3063\u3066\u3044\u307e\u3059\u3002\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\u306f\u901a\u5e38\u3001\u3053\u308c\u3089\u306e\u30c7\u30fc\u30bf\u578b\u306b\u5bfe\u3057\u3066\u7d44\u307f\u8fbc\u307f\u306e\u30cf\u30c3\u30b7\u30e5\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3092\u63d0\u4f9b\u3057\u3001\u30cf\u30c3\u30b7\u30e5\u8868\u306e\u30d0\u30b1\u30c3\u30c8\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u8a08\u7b97\u3057\u307e\u3059\u3002Python\u3092\u4f8b\u306b\u53d6\u308b\u3068\u3001hash()\u95a2\u6570\u3092\u4f7f\u7528\u3057\u3066\u3055\u307e\u3056\u307e\u306a\u30c7\u30fc\u30bf\u578b\u306e\u30cf\u30c3\u30b7\u30e5\u5024\u3092\u8a08\u7b97\u3067\u304d\u307e\u3059\u3002

Tip

\u7570\u306a\u308b\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\u306b\u304a\u3051\u308b\u7d44\u307f\u8fbc\u307f\u30cf\u30c3\u30b7\u30e5\u5024\u8a08\u7b97\u95a2\u6570\u306e\u5b9a\u7fa9\u3068\u65b9\u6cd5\u306f\u7570\u306a\u308b\u3053\u3068\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002

PythonC++JavaC#GoSwiftJSTSDartRustCKotlin built_in_hash.py
num = 3\nhash_num = hash(num)\n# \u6574\u65703\u306e\u30cf\u30c3\u30b7\u30e5\u5024\u306f3\n\nbol = True\nhash_bol = hash(bol)\n# \u30d6\u30fc\u30eb\u5024True\u306e\u30cf\u30c3\u30b7\u30e5\u5024\u306f1\n\ndec = 3.14159\nhash_dec = hash(dec)\n# \u5c0f\u65703.14159\u306e\u30cf\u30c3\u30b7\u30e5\u5024\u306f326484311674566659\n\nstr = \"Hello \u7b97\u6cd5\"\nhash_str = hash(str)\n# \u6587\u5b57\u5217\"Hello \u7b97\u6cd5\"\u306e\u30cf\u30c3\u30b7\u30e5\u5024\u306f4617003410720528961\n\ntup = (12836, \"\u5c0f\u54c8\")\nhash_tup = hash(tup)\n# \u30bf\u30d7\u30eb(12836, '\u5c0f\u54c8')\u306e\u30cf\u30c3\u30b7\u30e5\u5024\u306f1029005403108185979\n\nobj = ListNode(0)\nhash_obj = hash(obj)\n# ListNode\u30aa\u30d6\u30b8\u30a7\u30af\u30c80x1058fd810\u306e\u30cf\u30c3\u30b7\u30e5\u5024\u306f274267521\n
built_in_hash.cpp
int num = 3;\nsize_t hashNum = hash<int>()(num);\n// \u6574\u65703\u306e\u30cf\u30c3\u30b7\u30e5\u5024\u306f3\n\nbool bol = true;\nsize_t hashBol = hash<bool>()(bol);\n// \u30d6\u30fc\u30eb\u50241\u306e\u30cf\u30c3\u30b7\u30e5\u5024\u306f1\n\ndouble dec = 3.14159;\nsize_t hashDec = hash<double>()(dec);\n// \u5c0f\u65703.14159\u306e\u30cf\u30c3\u30b7\u30e5\u5024\u306f4614256650576692846\n\nstring str = \"Hello \u7b97\u6cd5\";\nsize_t hashStr = hash<string>()(str);\n// \u6587\u5b57\u5217\"Hello \u7b97\u6cd5\"\u306e\u30cf\u30c3\u30b7\u30e5\u5024\u306f15466937326284535026\n\n// C++\u3067\u306f\u3001\u7d44\u307f\u8fbc\u307fstd::hash()\u306f\u57fa\u672c\u30c7\u30fc\u30bf\u578b\u306e\u30cf\u30c3\u30b7\u30e5\u5024\u306e\u307f\u3092\u63d0\u4f9b\n// \u914d\u5217\u3068\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u30cf\u30c3\u30b7\u30e5\u5024\u306f\u5225\u9014\u5b9f\u88c5\u304c\u5fc5\u8981\n
built_in_hash.java
int num = 3;\nint hashNum = Integer.hashCode(num);\n// \u6574\u65703\u306e\u30cf\u30c3\u30b7\u30e5\u5024\u306f3\n\nboolean bol = true;\nint hashBol = Boolean.hashCode(bol);\n// \u30d6\u30fc\u30eb\u5024true\u306e\u30cf\u30c3\u30b7\u30e5\u5024\u306f1231\n\ndouble dec = 3.14159;\nint hashDec = Double.hashCode(dec);\n// \u5c0f\u65703.14159\u306e\u30cf\u30c3\u30b7\u30e5\u5024\u306f-1340954729\n\nString str = \"Hello \u7b97\u6cd5\";\nint hashStr = str.hashCode();\n// \u6587\u5b57\u5217\"Hello \u7b97\u6cd5\"\u306e\u30cf\u30c3\u30b7\u30e5\u5024\u306f-727081396\n\nObject[] arr = { 12836, \"\u5c0f\u54c8\" };\nint hashTup = Arrays.hashCode(arr);\n// \u914d\u5217[12836, \u5c0f\u54c8]\u306e\u30cf\u30c3\u30b7\u30e5\u5024\u306f1151158\n\nListNode obj = new ListNode(0);\nint hashObj = obj.hashCode();\n// ListNode\u30aa\u30d6\u30b8\u30a7\u30af\u30c8utils.ListNode@7dc5e7b4\u306e\u30cf\u30c3\u30b7\u30e5\u5024\u306f2110121908\n
built_in_hash.cs
int num = 3;\nint hashNum = num.GetHashCode();\n// \u6574\u65703\u306e\u30cf\u30c3\u30b7\u30e5\u5024\u306f3;\n\nbool bol = true;\nint hashBol = bol.GetHashCode();\n// \u30d6\u30fc\u30eb\u5024true\u306e\u30cf\u30c3\u30b7\u30e5\u5024\u306f1;\n\ndouble dec = 3.14159;\nint hashDec = dec.GetHashCode();\n// \u5c0f\u65703.14159\u306e\u30cf\u30c3\u30b7\u30e5\u5024\u306f-1340954729;\n\nstring str = \"Hello \u7b97\u6cd5\";\nint hashStr = str.GetHashCode();\n// \u6587\u5b57\u5217\"Hello \u7b97\u6cd5\"\u306e\u30cf\u30c3\u30b7\u30e5\u5024\u306f-586107568;\n\nobject[] arr = [12836, \"\u5c0f\u54c8\"];\nint hashTup = arr.GetHashCode();\n// \u914d\u5217[12836, \u5c0f\u54c8]\u306e\u30cf\u30c3\u30b7\u30e5\u5024\u306f42931033;\n\nListNode obj = new(0);\nint hashObj = obj.GetHashCode();\n// ListNode\u30aa\u30d6\u30b8\u30a7\u30af\u30c80\u306e\u30cf\u30c3\u30b7\u30e5\u5024\u306f39053774;\n
built_in_hash.go
// Go\u306b\u306f\u7d44\u307f\u8fbc\u307f\u306e\u30cf\u30c3\u30b7\u30e5\u30b3\u30fc\u30c9\u95a2\u6570\u304c\u63d0\u4f9b\u3055\u308c\u3066\u3044\u307e\u305b\u3093\n
built_in_hash.swift
let num = 3\nlet hashNum = num.hashValue\n// \u6574\u65703\u306e\u30cf\u30c3\u30b7\u30e5\u5024\u306f9047044699613009734\n\nlet bol = true\nlet hashBol = bol.hashValue\n// \u30d6\u30fc\u30eb\u5024true\u306e\u30cf\u30c3\u30b7\u30e5\u5024\u306f-4431640247352757451\n\nlet dec = 3.14159\nlet hashDec = dec.hashValue\n// \u5c0f\u65703.14159\u306e\u30cf\u30c3\u30b7\u30e5\u5024\u306f-2465384235396674631\n\nlet str = \"Hello \u7b97\u6cd5\"\nlet hashStr = str.hashValue\n// \u6587\u5b57\u5217\"Hello \u7b97\u6cd5\"\u306e\u30cf\u30c3\u30b7\u30e5\u5024\u306f-7850626797806988787\n\nlet arr = [AnyHashable(12836), AnyHashable(\"\u5c0f\u54c8\")]\nlet hashTup = arr.hashValue\n// \u914d\u5217[AnyHashable(12836), AnyHashable(\"\u5c0f\u54c8\")]\u306e\u30cf\u30c3\u30b7\u30e5\u5024\u306f-2308633508154532996\n\nlet obj = ListNode(x: 0)\nlet hashObj = obj.hashValue\n// ListNode\u30aa\u30d6\u30b8\u30a7\u30af\u30c8utils.ListNode\u306e\u30cf\u30c3\u30b7\u30e5\u5024\u306f-2434780518035996159\n
built_in_hash.js
// JavaScript\u306b\u306f\u7d44\u307f\u8fbc\u307f\u306e\u30cf\u30c3\u30b7\u30e5\u30b3\u30fc\u30c9\u95a2\u6570\u304c\u63d0\u4f9b\u3055\u308c\u3066\u3044\u307e\u305b\u3093\n
built_in_hash.ts
// TypeScript\u306b\u306f\u7d44\u307f\u8fbc\u307f\u306e\u30cf\u30c3\u30b7\u30e5\u30b3\u30fc\u30c9\u95a2\u6570\u304c\u63d0\u4f9b\u3055\u308c\u3066\u3044\u307e\u305b\u3093\n
built_in_hash.dart
int num = 3;\nint hashNum = num.hashCode;\n// \u6574\u65703\u306e\u30cf\u30c3\u30b7\u30e5\u5024\u306f34803\n\nbool bol = true;\nint hashBol = bol.hashCode;\n// \u30d6\u30fc\u30eb\u5024true\u306e\u30cf\u30c3\u30b7\u30e5\u5024\u306f1231\n\ndouble dec = 3.14159;\nint hashDec = dec.hashCode;\n// \u5c0f\u65703.14159\u306e\u30cf\u30c3\u30b7\u30e5\u5024\u306f2570631074981783\n\nString str = \"Hello \u7b97\u6cd5\";\nint hashStr = str.hashCode;\n// \u6587\u5b57\u5217\"Hello \u7b97\u6cd5\"\u306e\u30cf\u30c3\u30b7\u30e5\u5024\u306f468167534\n\nList arr = [12836, \"\u5c0f\u54c8\"];\nint hashArr = arr.hashCode;\n// \u914d\u5217[12836, \u5c0f\u54c8]\u306e\u30cf\u30c3\u30b7\u30e5\u5024\u306f976512528\n\nListNode obj = new ListNode(0);\nint hashObj = obj.hashCode;\n// ListNode\u30aa\u30d6\u30b8\u30a7\u30af\u30c8Instance of 'ListNode'\u306e\u30cf\u30c3\u30b7\u30e5\u5024\u306f1033450432\n
built_in_hash.rs
use std::collections::hash_map::DefaultHasher;\nuse std::hash::{Hash, Hasher};\n\nlet num = 3;\nlet mut num_hasher = DefaultHasher::new();\nnum.hash(&mut num_hasher);\nlet hash_num = num_hasher.finish();\n// \u6574\u65703\u306e\u30cf\u30c3\u30b7\u30e5\u5024\u306f568126464209439262\n\nlet bol = true;\nlet mut bol_hasher = DefaultHasher::new();\nbol.hash(&mut bol_hasher);\nlet hash_bol = bol_hasher.finish();\n// \u30d6\u30fc\u30eb\u5024true\u306e\u30cf\u30c3\u30b7\u30e5\u5024\u306f4952851536318644461\n\nlet dec: f32 = 3.14159;\nlet mut dec_hasher = DefaultHasher::new();\ndec.to_bits().hash(&mut dec_hasher);\nlet hash_dec = dec_hasher.finish();\n// \u5c0f\u65703.14159\u306e\u30cf\u30c3\u30b7\u30e5\u5024\u306f2566941990314602357\n\nlet str = \"Hello \u7b97\u6cd5\";\nlet mut str_hasher = DefaultHasher::new();\nstr.hash(&mut str_hasher);\nlet hash_str = str_hasher.finish();\n// \u6587\u5b57\u5217\"Hello \u7b97\u6cd5\"\u306e\u30cf\u30c3\u30b7\u30e5\u5024\u306f16092673739211250988\n\nlet arr = (&12836, &\"\u5c0f\u54c8\");\nlet mut tup_hasher = DefaultHasher::new();\narr.hash(&mut tup_hasher);\nlet hash_tup = tup_hasher.finish();\n// \u30bf\u30d7\u30eb(12836, \"\u5c0f\u54c8\")\u306e\u30cf\u30c3\u30b7\u30e5\u5024\u306f1885128010422702749\n\nlet node = ListNode::new(42);\nlet mut hasher = DefaultHasher::new();\nnode.borrow().val.hash(&mut hasher);\nlet hash = hasher.finish();\n// ListNode\u30aa\u30d6\u30b8\u30a7\u30af\u30c8RefCell { value: ListNode { val: 42, next: None } }\u306e\u30cf\u30c3\u30b7\u30e5\u5024\u306f15387811073369036852\n
built_in_hash.c
// C\u306b\u306f\u7d44\u307f\u8fbc\u307f\u306e\u30cf\u30c3\u30b7\u30e5\u30b3\u30fc\u30c9\u95a2\u6570\u304c\u63d0\u4f9b\u3055\u308c\u3066\u3044\u307e\u305b\u3093\n
built_in_hash.kt
\n

\u591a\u304f\u306e\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\u3067\u306f\u3001\u4e0d\u5909\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u307f\u304c\u30cf\u30c3\u30b7\u30e5\u8868\u306ekey\u3068\u3057\u3066\u6a5f\u80fd\u3067\u304d\u307e\u3059\u3002\u30ea\u30b9\u30c8\uff08\u52d5\u7684\u914d\u5217\uff09\u3092key\u3068\u3057\u3066\u4f7f\u7528\u3059\u308b\u5834\u5408\u3001\u30ea\u30b9\u30c8\u306e\u5185\u5bb9\u304c\u5909\u66f4\u3055\u308c\u308b\u3068\u3001\u305d\u306e\u30cf\u30c3\u30b7\u30e5\u5024\u3082\u5909\u66f4\u3055\u308c\u3001\u30cf\u30c3\u30b7\u30e5\u8868\u3067\u5143\u306evalue\u3092\u898b\u3064\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u306a\u304f\u306a\u308a\u307e\u3059\u3002

\u30ab\u30b9\u30bf\u30e0\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\uff08\u9023\u7d50\u30ea\u30b9\u30c8\u30ce\u30fc\u30c9\u306a\u3069\uff09\u306e\u30e1\u30f3\u30d0\u30fc\u5909\u6570\u306f\u53ef\u5909\u3067\u3059\u304c\u3001\u30cf\u30c3\u30b7\u30e5\u53ef\u80fd\u3067\u3059\u3002\u3053\u308c\u306f\u3001\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u30cf\u30c3\u30b7\u30e5\u5024\u304c\u901a\u5e38\u305d\u306e\u30e1\u30e2\u30ea\u30a2\u30c9\u30ec\u30b9\u306b\u57fa\u3065\u3044\u3066\u751f\u6210\u3055\u308c\u308b\u305f\u3081\u3067\u3059\u3002\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u5185\u5bb9\u304c\u5909\u66f4\u3055\u308c\u3066\u3082\u3001\u30e1\u30e2\u30ea\u30a2\u30c9\u30ec\u30b9\u306f\u540c\u3058\u307e\u307e\u306a\u306e\u3067\u3001\u30cf\u30c3\u30b7\u30e5\u5024\u306f\u5909\u66f4\u3055\u308c\u307e\u305b\u3093\u3002

\u7570\u306a\u308b\u30b3\u30f3\u30bd\u30fc\u30eb\u3067\u51fa\u529b\u3055\u308c\u308b\u30cf\u30c3\u30b7\u30e5\u5024\u304c\u7570\u306a\u308b\u3053\u3068\u306b\u6c17\u3065\u3044\u305f\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002\u3053\u308c\u306f\u3001Python\u30a4\u30f3\u30bf\u30fc\u30d7\u30ea\u30bf\u30fc\u304c\u8d77\u52d5\u3059\u308b\u305f\u3073\u306b\u6587\u5b57\u5217\u30cf\u30c3\u30b7\u30e5\u95a2\u6570\u306b\u30e9\u30f3\u30c0\u30e0\u30bd\u30eb\u30c8\u3092\u8ffd\u52a0\u3059\u308b\u305f\u3081\u3067\u3059\u3002\u3053\u306e\u30a2\u30d7\u30ed\u30fc\u30c1\u306fHashDoS\u653b\u6483\u3092\u52b9\u679c\u7684\u306b\u9632\u304e\u3001\u30cf\u30c3\u30b7\u30e5\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u3092\u5411\u4e0a\u3055\u305b\u307e\u3059\u3002

"},{"location":"chapter_hashing/hash_collision/","title":"6.2 \u00a0 \u30cf\u30c3\u30b7\u30e5\u885d\u7a81","text":"

\u524d\u7bc0\u3067\u8ff0\u3079\u305f\u3088\u3046\u306b\u3001**\u307b\u3068\u3093\u3069\u306e\u5834\u5408\u3001\u30cf\u30c3\u30b7\u30e5\u95a2\u6570\u306e\u5165\u529b\u7a7a\u9593\u306f\u51fa\u529b\u7a7a\u9593\u3088\u308a\u3082\u306f\u308b\u304b\u306b\u5927\u304d\u3044**\u305f\u3081\u3001\u7406\u8ad6\u7684\u306b\u306f\u30cf\u30c3\u30b7\u30e5\u885d\u7a81\u306f\u907f\u3051\u3089\u308c\u307e\u305b\u3093\u3002\u4f8b\u3048\u3070\u3001\u5165\u529b\u7a7a\u9593\u304c\u3059\u3079\u3066\u306e\u6574\u6570\u3067\u3001\u51fa\u529b\u7a7a\u9593\u304c\u914d\u5217\u5bb9\u91cf\u306e\u30b5\u30a4\u30ba\u306e\u5834\u5408\u3001\u8907\u6570\u306e\u6574\u6570\u304c\u5fc5\u7136\u7684\u306b\u540c\u3058\u30d0\u30b1\u30c3\u30c8\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306b\u30de\u30c3\u30d4\u30f3\u30b0\u3055\u308c\u307e\u3059\u3002

\u30cf\u30c3\u30b7\u30e5\u885d\u7a81\u306f\u8aa4\u3063\u305f\u30af\u30a8\u30ea\u7d50\u679c\u306b\u3064\u306a\u304c\u308a\u3001\u30cf\u30c3\u30b7\u30e5\u8868\u306e\u4f7f\u3044\u3084\u3059\u3055\u306b\u6df1\u523b\u306a\u5f71\u97ff\u3092\u4e0e\u3048\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u306e\u554f\u984c\u306b\u5bfe\u51e6\u3059\u308b\u305f\u3081\u306b\u3001\u30cf\u30c3\u30b7\u30e5\u885d\u7a81\u304c\u767a\u751f\u3059\u308b\u305f\u3073\u306b\u3001\u885d\u7a81\u304c\u6d88\u3048\u308b\u307e\u3067\u30cf\u30c3\u30b7\u30e5\u8868\u306e\u30ea\u30b5\u30a4\u30ba\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002\u3053\u306e\u30a2\u30d7\u30ed\u30fc\u30c1\u306f\u975e\u5e38\u306b\u30b7\u30f3\u30d7\u30eb\u3067\u76f4\u63a5\u7684\u3067\u3042\u308a\u3001\u3046\u307e\u304f\u6a5f\u80fd\u3057\u307e\u3059\u3002\u3057\u304b\u3057\u3001\u30c6\u30fc\u30d6\u30eb\u306e\u62e1\u5f35\u306b\u306f\u5927\u91cf\u306e\u30c7\u30fc\u30bf\u79fb\u884c\u3068\u30cf\u30c3\u30b7\u30e5\u30b3\u30fc\u30c9\u306e\u518d\u8a08\u7b97\u304c\u542b\u307e\u308c\u3001\u3053\u308c\u3089\u306f\u9ad8\u30b3\u30b9\u30c8\u3067\u3042\u308b\u305f\u3081\u3001\u975e\u5e38\u306b\u975e\u52b9\u7387\u7684\u306b\u898b\u3048\u307e\u3059\u3002\u52b9\u7387\u3092\u5411\u4e0a\u3055\u305b\u308b\u305f\u3081\u306b\u3001\u4ee5\u4e0b\u306e\u6226\u7565\u3092\u63a1\u7528\u3067\u304d\u307e\u3059\uff1a

  1. **\u30cf\u30c3\u30b7\u30e5\u885d\u7a81\u304c\u767a\u751f\u3057\u305f\u5834\u5408\u3067\u3082\u3001\u30bf\u30fc\u30b2\u30c3\u30c8\u8981\u7d20\u306e\u691c\u7d22\u304c\u9069\u5207\u306b\u6a5f\u80fd\u3059\u308b**\u3088\u3046\u306b\u30cf\u30c3\u30b7\u30e5\u8868\u306e\u30c7\u30fc\u30bf\u69cb\u9020\u3092\u6539\u5584\u3059\u308b\u3002
  2. \u6df1\u523b\u306a\u885d\u7a81\u304c\u89b3\u5bdf\u3055\u308c\u3001\u5fc5\u8981\u306b\u306a\u308b\u524d\u306b\u3001\u62e1\u5f35\u306f\u6700\u5f8c\u306e\u624b\u6bb5\u3068\u3059\u308b\u3002

\u30cf\u30c3\u30b7\u30e5\u8868\u306e\u69cb\u9020\u3092\u6539\u5584\u3059\u308b\u4e3b\u306a\u65b9\u6cd5\u306f2\u3064\u3042\u308a\u307e\u3059\uff1a\u300c\u9023\u9396\u6cd5\u300d\u3068\u300c\u30aa\u30fc\u30d7\u30f3\u30a2\u30c9\u30ec\u30b9\u6cd5\u300d\u3067\u3059\u3002

"},{"location":"chapter_hashing/hash_collision/#621","title":"6.2.1 \u00a0 \u9023\u9396\u6cd5","text":"

\u5143\u306e\u30cf\u30c3\u30b7\u30e5\u8868\u3067\u306f\u3001\u5404\u30d0\u30b1\u30c3\u30c8\u306f1\u3064\u306e\u30ad\u30fc\u5024\u30da\u30a2\u306e\u307f\u3092\u683c\u7d0d\u3067\u304d\u307e\u3059\u3002\u9023\u9396\u6cd5\u306f\u5358\u4e00\u306e\u8981\u7d20\u3092\u9023\u7d50\u30ea\u30b9\u30c8\u306b\u5909\u63db\u3057\u3001\u30ad\u30fc\u5024\u30da\u30a2\u3092\u30ea\u30b9\u30c8\u30ce\u30fc\u30c9\u3068\u3057\u3066\u6271\u3044\u3001\u885d\u7a81\u3059\u308b\u3059\u3079\u3066\u306e\u30ad\u30fc\u5024\u30da\u30a2\u3092\u540c\u3058\u9023\u7d50\u30ea\u30b9\u30c8\u306b\u683c\u7d0d\u3057\u307e\u3059\u3002\u4e0b\u56f3\u306f\u9023\u9396\u6cd5\u3092\u4f7f\u7528\u3057\u305f\u30cf\u30c3\u30b7\u30e5\u8868\u306e\u4f8b\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002

\u56f3 6-5 \u00a0 \u9023\u9396\u6cd5\u30cf\u30c3\u30b7\u30e5\u8868

\u9023\u9396\u6cd5\u3067\u5b9f\u88c5\u3055\u308c\u305f\u30cf\u30c3\u30b7\u30e5\u8868\u306e\u64cd\u4f5c\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u5909\u66f4\u3055\u308c\u307e\u3059\uff1a

\u9023\u9396\u6cd5\u306b\u306f\u4ee5\u4e0b\u306e\u5236\u9650\u304c\u3042\u308a\u307e\u3059\uff1a

\u4ee5\u4e0b\u306e\u30b3\u30fc\u30c9\u306f\u9023\u9396\u6cd5\u30cf\u30c3\u30b7\u30e5\u8868\u306e\u7c21\u5358\u306a\u5b9f\u88c5\u3092\u63d0\u4f9b\u3057\u3001\u6ce8\u610f\u3059\u3079\u304d2\u3064\u306e\u70b9\u304c\u3042\u308a\u307e\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby hash_map_chaining.py
class HashMapChaining:\n    \"\"\"\u30c1\u30a7\u30fc\u30f3\u30a2\u30c9\u30ec\u30b9\u6cd5\u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb\"\"\"\n\n    def __init__(self):\n        \"\"\"\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\"\"\"\n        self.size = 0  # \u30ad\u30fc\u5024\u30da\u30a2\u306e\u6570\n        self.capacity = 4  # \u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb\u306e\u5bb9\u91cf\n        self.load_thres = 2.0 / 3.0  # \u62e1\u5f35\u3092\u30c8\u30ea\u30ac\u30fc\u3059\u308b\u8ca0\u8377\u7387\u306e\u95be\u5024\n        self.extend_ratio = 2  # \u62e1\u5f35\u306e\u500d\u6570\n        self.buckets = [[] for _ in range(self.capacity)]  # \u30d0\u30b1\u30c3\u30c8\u914d\u5217\n\n    def hash_func(self, key: int) -> int:\n        \"\"\"\u30cf\u30c3\u30b7\u30e5\u95a2\u6570\"\"\"\n        return key % self.capacity\n\n    def load_factor(self) -> float:\n        \"\"\"\u8ca0\u8377\u7387\"\"\"\n        return self.size / self.capacity\n\n    def get(self, key: int) -> str | None:\n        \"\"\"\u7167\u4f1a\u64cd\u4f5c\"\"\"\n        index = self.hash_func(key)\n        bucket = self.buckets[index]\n        # \u30d0\u30b1\u30c3\u30c8\u3092\u8d70\u67fb\u3057\u3001\u30ad\u30fc\u304c\u898b\u3064\u304b\u308c\u3070\u5bfe\u5fdc\u3059\u308b val \u3092\u8fd4\u3059\n        for pair in bucket:\n            if pair.key == key:\n                return pair.val\n        # \u30ad\u30fc\u304c\u898b\u3064\u304b\u3089\u306a\u3044\u5834\u5408\u3001None \u3092\u8fd4\u3059\n        return None\n\n    def put(self, key: int, val: str):\n        \"\"\"\u8ffd\u52a0\u64cd\u4f5c\"\"\"\n        # \u8ca0\u8377\u7387\u304c\u95be\u5024\u3092\u8d85\u3048\u305f\u5834\u5408\u3001\u62e1\u5f35\u3092\u5b9f\u884c\n        if self.load_factor() > self.load_thres:\n            self.extend()\n        index = self.hash_func(key)\n        bucket = self.buckets[index]\n        # \u30d0\u30b1\u30c3\u30c8\u3092\u8d70\u67fb\u3057\u3001\u6307\u5b9a\u3055\u308c\u305f\u30ad\u30fc\u306b\u906d\u9047\u3057\u305f\u5834\u5408\u3001\u5bfe\u5fdc\u3059\u308b val \u3092\u66f4\u65b0\u3057\u3066\u8fd4\u3059\n        for pair in bucket:\n            if pair.key == key:\n                pair.val = val\n                return\n        # \u30ad\u30fc\u304c\u898b\u3064\u304b\u3089\u306a\u3044\u5834\u5408\u3001\u30ad\u30fc\u5024\u30da\u30a2\u3092\u672b\u5c3e\u306b\u8ffd\u52a0\n        pair = Pair(key, val)\n        bucket.append(pair)\n        self.size += 1\n\n    def remove(self, key: int):\n        \"\"\"\u524a\u9664\u64cd\u4f5c\"\"\"\n        index = self.hash_func(key)\n        bucket = self.buckets[index]\n        # \u30d0\u30b1\u30c3\u30c8\u3092\u8d70\u67fb\u3057\u3001\u305d\u306e\u4e2d\u304b\u3089\u30ad\u30fc\u5024\u30da\u30a2\u3092\u524a\u9664\n        for pair in bucket:\n            if pair.key == key:\n                bucket.remove(pair)\n                self.size -= 1\n                break\n\n    def extend(self):\n        \"\"\"\u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb\u3092\u62e1\u5f35\"\"\"\n        # \u5143\u306e\u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb\u3092\u4e00\u6642\u7684\u306b\u4fdd\u5b58\n        buckets = self.buckets\n        # \u62e1\u5f35\u3055\u308c\u305f\u65b0\u3057\u3044\u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb\u3092\u521d\u671f\u5316\n        self.capacity *= self.extend_ratio\n        self.buckets = [[] for _ in range(self.capacity)]\n        self.size = 0\n        # \u5143\u306e\u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb\u304b\u3089\u65b0\u3057\u3044\u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb\u306b\u30ad\u30fc\u5024\u30da\u30a2\u3092\u79fb\u52d5\n        for bucket in buckets:\n            for pair in bucket:\n                self.put(pair.key, pair.val)\n\n    def print(self):\n        \"\"\"\u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb\u3092\u51fa\u529b\"\"\"\n        for bucket in self.buckets:\n            res = []\n            for pair in bucket:\n                res.append(str(pair.key) + \" -> \" + pair.val)\n            print(res)\n
hash_map_chaining.cpp
/* \u30c1\u30a7\u30a4\u30f3\u6cd5\u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb */\nclass HashMapChaining {\n  private:\n    int size;                       // \u30ad\u30fc\u5024\u30da\u30a2\u306e\u6570\n    int capacity;                   // \u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb\u306e\u5bb9\u91cf\n    double loadThres;               // \u62e1\u5f35\u3092\u30c8\u30ea\u30ac\u30fc\u3059\u308b\u8ca0\u8377\u7387\u306e\u95be\u5024\n    int extendRatio;                // \u62e1\u5f35\u500d\u7387\n    vector<vector<Pair *>> buckets; // \u30d0\u30b1\u30c3\u30c8\u914d\u5217\n\n  public:\n    /* \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf */\n    HashMapChaining() : size(0), capacity(4), loadThres(2.0 / 3.0), extendRatio(2) {\n        buckets.resize(capacity);\n    }\n\n    /* \u30c7\u30b9\u30c8\u30e9\u30af\u30bf */\n    ~HashMapChaining() {\n        for (auto &bucket : buckets) {\n            for (Pair *pair : bucket) {\n                // \u30e1\u30e2\u30ea\u3092\u89e3\u653e\n                delete pair;\n            }\n        }\n    }\n\n    /* \u30cf\u30c3\u30b7\u30e5\u95a2\u6570 */\n    int hashFunc(int key) {\n        return key % capacity;\n    }\n\n    /* \u8ca0\u8377\u7387 */\n    double loadFactor() {\n        return (double)size / (double)capacity;\n    }\n\n    /* \u30af\u30a8\u30ea\u64cd\u4f5c */\n    string get(int key) {\n        int index = hashFunc(key);\n        // \u30d0\u30b1\u30c3\u30c8\u3092\u8d70\u67fb\u3001\u30ad\u30fc\u304c\u898b\u3064\u304b\u3063\u305f\u5834\u5408\u3001\u5bfe\u5fdc\u3059\u308bval\u3092\u8fd4\u5374\n        for (Pair *pair : buckets[index]) {\n            if (pair->key == key) {\n                return pair->val;\n            }\n        }\n        // \u30ad\u30fc\u304c\u898b\u3064\u304b\u3089\u306a\u3044\u5834\u5408\u3001\u7a7a\u6587\u5b57\u5217\u3092\u8fd4\u5374\n        return \"\";\n    }\n\n    /* \u8ffd\u52a0\u64cd\u4f5c */\n    void put(int key, string val) {\n        // \u8ca0\u8377\u7387\u304c\u95be\u5024\u3092\u8d85\u3048\u305f\u5834\u5408\u3001\u62e1\u5f35\u3092\u5b9f\u884c\n        if (loadFactor() > loadThres) {\n            extend();\n        }\n        int index = hashFunc(key);\n        // \u30d0\u30b1\u30c3\u30c8\u3092\u8d70\u67fb\u3001\u6307\u5b9a\u30ad\u30fc\u306b\u906d\u9047\u3057\u305f\u5834\u5408\u3001\u5bfe\u5fdc\u3059\u308bval\u3092\u66f4\u65b0\u3057\u3066\u8fd4\u5374\n        for (Pair *pair : buckets[index]) {\n            if (pair->key == key) {\n                pair->val = val;\n                return;\n            }\n        }\n        // \u30ad\u30fc\u304c\u898b\u3064\u304b\u3089\u306a\u3044\u5834\u5408\u3001\u30ad\u30fc\u5024\u30da\u30a2\u3092\u672b\u5c3e\u306b\u8ffd\u52a0\n        buckets[index].push_back(new Pair(key, val));\n        size++;\n    }\n\n    /* \u524a\u9664\u64cd\u4f5c */\n    void remove(int key) {\n        int index = hashFunc(key);\n        auto &bucket = buckets[index];\n        // \u30d0\u30b1\u30c3\u30c8\u3092\u8d70\u67fb\u3001\u30ad\u30fc\u5024\u30da\u30a2\u3092\u524a\u9664\n        for (int i = 0; i < bucket.size(); i++) {\n            if (bucket[i]->key == key) {\n                Pair *tmp = bucket[i];\n                bucket.erase(bucket.begin() + i); // \u30ad\u30fc\u5024\u30da\u30a2\u3092\u524a\u9664\n                delete tmp;                       // \u30e1\u30e2\u30ea\u3092\u89e3\u653e\n                size--;\n                return;\n            }\n        }\n    }\n\n    /* \u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb\u3092\u62e1\u5f35 */\n    void extend() {\n        // \u5143\u306e\u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb\u3092\u4e00\u6642\u4fdd\u5b58\n        vector<vector<Pair *>> bucketsTmp = buckets;\n        // \u62e1\u5f35\u3055\u308c\u305f\u65b0\u3057\u3044\u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb\u3092\u521d\u671f\u5316\n        capacity *= extendRatio;\n        buckets.clear();\n        buckets.resize(capacity);\n        size = 0;\n        // \u5143\u306e\u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb\u304b\u3089\u65b0\u3057\u3044\u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb\u306b\u30ad\u30fc\u5024\u30da\u30a2\u3092\u79fb\u52d5\n        for (auto &bucket : bucketsTmp) {\n            for (Pair *pair : bucket) {\n                put(pair->key, pair->val);\n                // \u30e1\u30e2\u30ea\u3092\u89e3\u653e\n                delete pair;\n            }\n        }\n    }\n\n    /* \u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb\u3092\u5370\u5237 */\n    void print() {\n        for (auto &bucket : buckets) {\n            cout << \"[\";\n            for (Pair *pair : bucket) {\n                cout << pair->key << \" -> \" << pair->val << \", \";\n            }\n            cout << \"]\\n\";\n        }\n    }\n};\n
hash_map_chaining.java
/* \u30c1\u30a7\u30a4\u30f3\u6cd5\u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb */\nclass HashMapChaining {\n    int size; // \u30ad\u30fc\u5024\u30da\u30a2\u306e\u6570\n    int capacity; // \u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb\u306e\u5bb9\u91cf\n    double loadThres; // \u62e1\u5f35\u3092\u30c8\u30ea\u30ac\u30fc\u3059\u308b\u8ca0\u8377\u7387\u306e\u95be\u5024\n    int extendRatio; // \u62e1\u5f35\u500d\u7387\n    List<List<Pair>> buckets; // \u30d0\u30b1\u30c3\u30c8\u914d\u5217\n\n    /* \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf */\n    public HashMapChaining() {\n        size = 0;\n        capacity = 4;\n        loadThres = 2.0 / 3.0;\n        extendRatio = 2;\n        buckets = new ArrayList<>(capacity);\n        for (int i = 0; i < capacity; i++) {\n            buckets.add(new ArrayList<>());\n        }\n    }\n\n    /* \u30cf\u30c3\u30b7\u30e5\u95a2\u6570 */\n    int hashFunc(int key) {\n        return key % capacity;\n    }\n\n    /* \u8ca0\u8377\u7387 */\n    double loadFactor() {\n        return (double) size / capacity;\n    }\n\n    /* \u30af\u30a8\u30ea\u64cd\u4f5c */\n    String get(int key) {\n        int index = hashFunc(key);\n        List<Pair> bucket = buckets.get(index);\n        // \u30d0\u30b1\u30c3\u30c8\u3092\u8d70\u67fb\u3001\u30ad\u30fc\u304c\u898b\u3064\u304b\u3063\u305f\u5834\u5408\u5bfe\u5fdc\u3059\u308bval\u3092\u8fd4\u3059\n        for (Pair pair : bucket) {\n            if (pair.key == key) {\n                return pair.val;\n            }\n        }\n        // \u30ad\u30fc\u304c\u898b\u3064\u304b\u3089\u306a\u3044\u5834\u5408\u3001null\u3092\u8fd4\u3059\n        return null;\n    }\n\n    /* \u8ffd\u52a0\u64cd\u4f5c */\n    void put(int key, String val) {\n        // \u8ca0\u8377\u7387\u304c\u95be\u5024\u3092\u8d85\u3048\u305f\u5834\u5408\u3001\u62e1\u5f35\u3092\u5b9f\u884c\n        if (loadFactor() > loadThres) {\n            extend();\n        }\n        int index = hashFunc(key);\n        List<Pair> bucket = buckets.get(index);\n        // \u30d0\u30b1\u30c3\u30c8\u3092\u8d70\u67fb\u3001\u6307\u5b9a\u3057\u305f\u30ad\u30fc\u306b\u906d\u9047\u3057\u305f\u5834\u5408\u3001\u5bfe\u5fdc\u3059\u308bval\u3092\u66f4\u65b0\u3057\u3066\u623b\u308b\n        for (Pair pair : bucket) {\n            if (pair.key == key) {\n                pair.val = val;\n                return;\n            }\n        }\n        // \u30ad\u30fc\u304c\u898b\u3064\u304b\u3089\u306a\u3044\u5834\u5408\u3001\u30ad\u30fc\u5024\u30da\u30a2\u3092\u672b\u5c3e\u306b\u8ffd\u52a0\n        Pair pair = new Pair(key, val);\n        bucket.add(pair);\n        size++;\n    }\n\n    /* \u524a\u9664\u64cd\u4f5c */\n    void remove(int key) {\n        int index = hashFunc(key);\n        List<Pair> bucket = buckets.get(index);\n        // \u30d0\u30b1\u30c3\u30c8\u3092\u8d70\u67fb\u3001\u305d\u306e\u4e2d\u304b\u3089\u30ad\u30fc\u5024\u30da\u30a2\u3092\u524a\u9664\n        for (Pair pair : bucket) {\n            if (pair.key == key) {\n                bucket.remove(pair);\n                size--;\n                break;\n            }\n        }\n    }\n\n    /* \u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb\u3092\u62e1\u5f35 */\n    void extend() {\n        // \u5143\u306e\u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb\u3092\u4e00\u6642\u7684\u306b\u4fdd\u5b58\n        List<List<Pair>> bucketsTmp = buckets;\n        // \u62e1\u5f35\u3055\u308c\u305f\u65b0\u3057\u3044\u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb\u3092\u521d\u671f\u5316\n        capacity *= extendRatio;\n        buckets = new ArrayList<>(capacity);\n        for (int i = 0; i < capacity; i++) {\n            buckets.add(new ArrayList<>());\n        }\n        size = 0;\n        // \u5143\u306e\u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb\u304b\u3089\u65b0\u3057\u3044\u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb\u306b\u30ad\u30fc\u5024\u30da\u30a2\u3092\u79fb\u52d5\n        for (List<Pair> bucket : bucketsTmp) {\n            for (Pair pair : bucket) {\n                put(pair.key, pair.val);\n            }\n        }\n    }\n\n    /* \u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb\u3092\u5370\u5237 */\n    void print() {\n        for (List<Pair> bucket : buckets) {\n            List<String> res = new ArrayList<>();\n            for (Pair pair : bucket) {\n                res.add(pair.key + \" -> \" + pair.val);\n            }\n            System.out.println(res);\n        }\n    }\n}\n
hash_map_chaining.cs
[class]{HashMapChaining}-[func]{}\n
hash_map_chaining.go
[class]{hashMapChaining}-[func]{}\n
hash_map_chaining.swift
[class]{HashMapChaining}-[func]{}\n
hash_map_chaining.js
[class]{HashMapChaining}-[func]{}\n
hash_map_chaining.ts
[class]{HashMapChaining}-[func]{}\n
hash_map_chaining.dart
[class]{HashMapChaining}-[func]{}\n
hash_map_chaining.rs
[class]{HashMapChaining}-[func]{}\n
hash_map_chaining.c
[class]{Node}-[func]{}\n\n[class]{HashMapChaining}-[func]{}\n
hash_map_chaining.kt
[class]{HashMapChaining}-[func]{}\n
hash_map_chaining.rb
[class]{HashMapChaining}-[func]{}\n

\u9023\u7d50\u30ea\u30b9\u30c8\u304c\u975e\u5e38\u306b\u9577\u3044\u5834\u5408\u3001\u30af\u30a8\u30ea\u52b9\u7387\\(O(n)\\)\u304c\u60aa\u3044\u3053\u3068\u306f\u6ce8\u76ee\u306b\u5024\u3057\u307e\u3059\u3002\u3053\u306e\u5834\u5408\u3001\u30ea\u30b9\u30c8\u3092\u300cAVL\u6728\u300d\u307e\u305f\u306f\u300c\u8d64\u9ed2\u6728\u300d\u306b\u5909\u63db\u3057\u3066\u3001\u30af\u30a8\u30ea\u64cd\u4f5c\u306e\u6642\u9593\u8a08\u7b97\u91cf\u3092\\(O(\\log n)\\)\u306b\u6700\u9069\u5316\u3067\u304d\u307e\u3059\u3002

"},{"location":"chapter_hashing/hash_collision/#622","title":"6.2.2 \u00a0 \u30aa\u30fc\u30d7\u30f3\u30a2\u30c9\u30ec\u30b9\u6cd5","text":"

\u30aa\u30fc\u30d7\u30f3\u30a2\u30c9\u30ec\u30b9\u6cd5\u306f\u8ffd\u52a0\u306e\u30c7\u30fc\u30bf\u69cb\u9020\u3092\u5c0e\u5165\u305b\u305a\u3001\u4ee3\u308f\u308a\u306b\u300c\u8907\u6570\u56de\u30d7\u30ed\u30fc\u30d6\u300d\u3092\u901a\u3057\u3066\u30cf\u30c3\u30b7\u30e5\u885d\u7a81\u3092\u51e6\u7406\u3057\u307e\u3059\u3002\u30d7\u30ed\u30fc\u30d6\u65b9\u6cd5\u306b\u306f\u4e3b\u306b\u7dda\u5f62\u30d7\u30ed\u30fc\u30d6\u3001\u4e8c\u6b21\u30d7\u30ed\u30fc\u30d6\u3001\u4e8c\u91cd\u30cf\u30c3\u30b7\u30e5\u304c\u3042\u308a\u307e\u3059\u3002

\u7dda\u5f62\u30d7\u30ed\u30fc\u30d6\u3092\u4f8b\u306b\u3057\u3066\u3001\u30aa\u30fc\u30d7\u30f3\u30a2\u30c9\u30ec\u30b9\u6cd5\u30cf\u30c3\u30b7\u30e5\u8868\u306e\u30e1\u30ab\u30cb\u30ba\u30e0\u3092\u7d39\u4ecb\u3057\u307e\u3057\u3087\u3046\u3002

"},{"location":"chapter_hashing/hash_collision/#1","title":"1. \u00a0 \u7dda\u5f62\u30d7\u30ed\u30fc\u30d6","text":"

\u7dda\u5f62\u30d7\u30ed\u30fc\u30d6\u306f\u56fa\u5b9a\u30b9\u30c6\u30c3\u30d7\u306e\u7dda\u5f62\u691c\u7d22\u3092\u30d7\u30ed\u30fc\u30d6\u306b\u4f7f\u7528\u3057\u3001\u901a\u5e38\u306e\u30cf\u30c3\u30b7\u30e5\u8868\u3068\u306f\u7570\u306a\u308a\u307e\u3059\u3002

\u4e0b\u56f3\u306f\u30aa\u30fc\u30d7\u30f3\u30a2\u30c9\u30ec\u30b9\u6cd5\uff08\u7dda\u5f62\u30d7\u30ed\u30fc\u30d6\uff09\u30cf\u30c3\u30b7\u30e5\u8868\u306b\u304a\u3051\u308b\u30ad\u30fc\u5024\u30da\u30a2\u306e\u5206\u5e03\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002\u3053\u306e\u30cf\u30c3\u30b7\u30e5\u95a2\u6570\u306b\u3088\u308b\u3068\u3001\u4e0b\u4e8c\u6841\u304c\u540c\u3058\u30ad\u30fc\u306f\u540c\u3058\u30d0\u30b1\u30c3\u30c8\u306b\u30de\u30c3\u30d4\u30f3\u30b0\u3055\u308c\u307e\u3059\u3002\u7dda\u5f62\u30d7\u30ed\u30fc\u30d6\u3092\u901a\u3057\u3066\u3001\u305d\u308c\u3089\u306f\u305d\u306e\u30d0\u30b1\u30c3\u30c8\u3068\u305d\u306e\u4e0b\u306e\u30d0\u30b1\u30c3\u30c8\u306b\u9806\u6b21\u683c\u7d0d\u3055\u308c\u307e\u3059\u3002

\u56f3 6-6 \u00a0 \u30aa\u30fc\u30d7\u30f3\u30a2\u30c9\u30ec\u30b9\u6cd5\uff08\u7dda\u5f62\u30d7\u30ed\u30fc\u30d6\uff09\u30cf\u30c3\u30b7\u30e5\u8868\u306b\u304a\u3051\u308b\u30ad\u30fc\u5024\u30da\u30a2\u306e\u5206\u5e03

\u3057\u304b\u3057\u3001\u7dda\u5f62\u30d7\u30ed\u30fc\u30d6\u306f\u300c\u30af\u30e9\u30b9\u30bf\u30ea\u30f3\u30b0\u300d\u3092\u4f5c\u308a\u3084\u3059\u3044\u50be\u5411\u304c\u3042\u308a\u307e\u3059\u3002\u5177\u4f53\u7684\u306b\u306f\u3001\u914d\u5217\u5185\u306e\u9023\u7d9a\u7684\u306b\u5360\u6709\u3055\u308c\u305f\u4f4d\u7f6e\u304c\u9577\u3044\u307b\u3069\u3001\u3053\u308c\u3089\u306e\u9023\u7d9a\u3057\u305f\u4f4d\u7f6e\u3067\u30cf\u30c3\u30b7\u30e5\u885d\u7a81\u304c\u767a\u751f\u3059\u308b\u78ba\u7387\u304c\u9ad8\u304f\u306a\u308a\u3001\u305d\u306e\u4f4d\u7f6e\u3067\u306e\u30af\u30e9\u30b9\u30bf\u30ea\u30f3\u30b0\u306e\u6210\u9577\u3092\u3055\u3089\u306b\u4fc3\u9032\u3057\u3001\u60aa\u5faa\u74b0\u3092\u5f62\u6210\u3057\u3001\u6700\u7d42\u7684\u306b\u633f\u5165\u3001\u524a\u9664\u3001\u30af\u30a8\u30ea\u3001\u66f4\u65b0\u64cd\u4f5c\u306e\u52b9\u7387\u4f4e\u4e0b\u306b\u3064\u306a\u304c\u308a\u307e\u3059\u3002

**\u30aa\u30fc\u30d7\u30f3\u30a2\u30c9\u30ec\u30b9\u6cd5\u30cf\u30c3\u30b7\u30e5\u8868\u3067\u306f\u8981\u7d20\u3092\u76f4\u63a5\u524a\u9664\u3067\u304d\u306a\u3044**\u3053\u3068\u306b\u6ce8\u610f\u3059\u308b\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002\u8981\u7d20\u3092\u524a\u9664\u3059\u308b\u3068\u3001\u914d\u5217\u306b\u7a7a\u306e\u30d0\u30b1\u30c3\u30c8None\u304c\u4f5c\u6210\u3055\u308c\u307e\u3059\u3002\u8981\u7d20\u3092\u691c\u7d22\u3059\u308b\u969b\u3001\u7dda\u5f62\u30d7\u30ed\u30fc\u30d6\u304c\u3053\u306e\u7a7a\u306e\u30d0\u30b1\u30c3\u30c8\u306b\u906d\u9047\u3059\u308b\u3068\u623b\u3063\u3066\u3057\u307e\u3044\u3001\u3053\u306e\u30d0\u30b1\u30c3\u30c8\u306e\u4e0b\u306e\u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9\u3067\u304d\u306a\u304f\u306a\u308a\u307e\u3059\u3002\u30d7\u30ed\u30b0\u30e9\u30e0\u306f\u3053\u308c\u3089\u306e\u8981\u7d20\u304c\u5b58\u5728\u3057\u306a\u3044\u3068\u8aa4\u3063\u3066\u4eee\u5b9a\u3059\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002\u4e0b\u56f3\u306b\u793a\u3059\u3068\u304a\u308a\u3067\u3059\u3002

\u56f3 6-7 \u00a0 \u30aa\u30fc\u30d7\u30f3\u30a2\u30c9\u30ec\u30b9\u6cd5\u3067\u306e\u524a\u9664\u306b\u3088\u308b\u30af\u30a8\u30ea\u554f\u984c

\u3053\u306e\u554f\u984c\u3092\u89e3\u6c7a\u3059\u308b\u305f\u3081\u306b\u3001\u9045\u5ef6\u524a\u9664\u30e1\u30ab\u30cb\u30ba\u30e0\u3092\u63a1\u7528\u3067\u304d\u307e\u3059\uff1a\u30cf\u30c3\u30b7\u30e5\u8868\u304b\u3089\u8981\u7d20\u3092\u76f4\u63a5\u524a\u9664\u3059\u308b\u4ee3\u308f\u308a\u306b\u3001\u5b9a\u6570TOMBSTONE\u3092\u4f7f\u7528\u3057\u3066\u30d0\u30b1\u30c3\u30c8\u3092\u30de\u30fc\u30af\u3057\u307e\u3059\u3002\u3053\u306e\u30e1\u30ab\u30cb\u30ba\u30e0\u3067\u306f\u3001None\u3068TOMBSTONE\u306e\u4e21\u65b9\u304c\u7a7a\u306e\u30d0\u30b1\u30c3\u30c8\u3092\u8868\u3057\u3001\u30ad\u30fc\u5024\u30da\u30a2\u3092\u4fdd\u6301\u3067\u304d\u307e\u3059\u3002\u305f\u3060\u3057\u3001\u7dda\u5f62\u30d7\u30ed\u30fc\u30d6\u304cTOMBSTONE\u306b\u906d\u9047\u3057\u305f\u5834\u5408\u3001\u305d\u306e\u4e0b\u306b\u307e\u3060\u30ad\u30fc\u5024\u30da\u30a2\u304c\u3042\u308b\u53ef\u80fd\u6027\u304c\u3042\u308b\u305f\u3081\u3001\u8d70\u67fb\u3092\u7d9a\u3051\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

\u3057\u304b\u3057\u3001\u9045\u5ef6\u524a\u9664\u306f\u30cf\u30c3\u30b7\u30e5\u8868\u306e\u6027\u80fd\u52a3\u5316\u3092\u52a0\u901f\u3059\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002\u524a\u9664\u64cd\u4f5c\u306e\u305f\u3073\u306b\u524a\u9664\u30de\u30fc\u30af\u304c\u751f\u6210\u3055\u308c\u3001TOMBSTONE\u304c\u5897\u52a0\u3059\u308b\u3068\u3001\u7dda\u5f62\u30d7\u30ed\u30fc\u30d6\u304c\u30bf\u30fc\u30b2\u30c3\u30c8\u8981\u7d20\u3092\u898b\u3064\u3051\u308b\u305f\u3081\u306b\u8907\u6570\u306eTOMBSTONE\u3092\u30b9\u30ad\u30c3\u30d7\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u53ef\u80fd\u6027\u304c\u3042\u308b\u305f\u3081\u3001\u691c\u7d22\u6642\u9593\u3082\u5897\u52a0\u3057\u307e\u3059\u3002

\u3053\u308c\u306b\u5bfe\u51e6\u3059\u308b\u305f\u3081\u306b\u3001\u7dda\u5f62\u30d7\u30ed\u30fc\u30d6\u4e2d\u306b\u6700\u521d\u306b\u906d\u9047\u3057\u305fTOMBSTONE\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u8a18\u9332\u3057\u3001\u691c\u7d22\u3055\u308c\u305f\u30bf\u30fc\u30b2\u30c3\u30c8\u8981\u7d20\u3068\u305d\u306eTOMBSTONE\u306e\u4f4d\u7f6e\u3092\u4ea4\u63db\u3059\u308b\u3053\u3068\u3092\u691c\u8a0e\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u308c\u3092\u884c\u3046\u5229\u70b9\u306f\u3001\u8981\u7d20\u304c\u30af\u30a8\u30ea\u307e\u305f\u306f\u8ffd\u52a0\u3055\u308c\u308b\u305f\u3073\u306b\u3001\u8981\u7d20\u304c\u305d\u306e\u7406\u60f3\u7684\u306a\u4f4d\u7f6e\uff08\u30d7\u30ed\u30fc\u30d6\u306e\u958b\u59cb\u70b9\uff09\u306b\u3088\u308a\u8fd1\u3044\u30d0\u30b1\u30c3\u30c8\u306b\u79fb\u52d5\u3055\u308c\u3001\u30af\u30a8\u30ea\u52b9\u7387\u304c\u6700\u9069\u5316\u3055\u308c\u308b\u3053\u3068\u3067\u3059\u3002

\u4ee5\u4e0b\u306e\u30b3\u30fc\u30c9\u306f\u3001\u9045\u5ef6\u524a\u9664\u3092\u4f7f\u7528\u3057\u305f\u30aa\u30fc\u30d7\u30f3\u30a2\u30c9\u30ec\u30b9\u6cd5\uff08\u7dda\u5f62\u30d7\u30ed\u30fc\u30d6\uff09\u30cf\u30c3\u30b7\u30e5\u8868\u3092\u5b9f\u88c5\u3057\u3066\u3044\u307e\u3059\u3002\u30cf\u30c3\u30b7\u30e5\u8868\u306e\u7a7a\u9593\u3092\u3088\u308a\u6709\u52b9\u306b\u6d3b\u7528\u3059\u308b\u305f\u3081\u306b\u3001\u30cf\u30c3\u30b7\u30e5\u8868\u3092\u300c\u5faa\u74b0\u914d\u5217\u300d\u3068\u3057\u3066\u6271\u3044\u307e\u3059\u3002\u914d\u5217\u306e\u7d42\u308f\u308a\u3092\u8d85\u3048\u308b\u3068\u3001\u6700\u521d\u306b\u623b\u3063\u3066\u8d70\u67fb\u3092\u7d9a\u3051\u307e\u3059\u3002

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby hash_map_open_addressing.py
class HashMapOpenAddressing:\n    \"\"\"\u30aa\u30fc\u30d7\u30f3\u30a2\u30c9\u30ec\u30b9\u6cd5\u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb\"\"\"\n\n    def __init__(self):\n        \"\"\"\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\"\"\"\n        self.size = 0  # \u30ad\u30fc\u5024\u30da\u30a2\u306e\u6570\n        self.capacity = 4  # \u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb\u306e\u5bb9\u91cf\n        self.load_thres = 2.0 / 3.0  # \u62e1\u5f35\u3092\u30c8\u30ea\u30ac\u30fc\u3059\u308b\u8ca0\u8377\u7387\u306e\u95be\u5024\n        self.extend_ratio = 2  # \u62e1\u5f35\u306e\u500d\u6570\n        self.buckets: list[Pair | None] = [None] * self.capacity  # \u30d0\u30b1\u30c3\u30c8\u914d\u5217\n        self.TOMBSTONE = Pair(-1, \"-1\")  # \u524a\u9664\u30de\u30fc\u30af\n\n    def hash_func(self, key: int) -> int:\n        \"\"\"\u30cf\u30c3\u30b7\u30e5\u95a2\u6570\"\"\"\n        return key % self.capacity\n\n    def load_factor(self) -> float:\n        \"\"\"\u8ca0\u8377\u7387\"\"\"\n        return self.size / self.capacity\n\n    def find_bucket(self, key: int) -> int:\n        \"\"\"key \u306b\u5bfe\u5fdc\u3059\u308b\u30d0\u30b1\u30c3\u30c8\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u691c\u7d22\"\"\"\n        index = self.hash_func(key)\n        first_tombstone = -1\n        # \u7dda\u5f62\u63a2\u67fb\u3001\u7a7a\u306e\u30d0\u30b1\u30c3\u30c8\u306b\u906d\u9047\u3057\u305f\u3089\u30d6\u30ec\u30fc\u30af\n        while self.buckets[index] is not None:\n            # \u30ad\u30fc\u306b\u906d\u9047\u3057\u305f\u5834\u5408\u3001\u5bfe\u5fdc\u3059\u308b\u30d0\u30b1\u30c3\u30c8\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u8fd4\u3059\n            if self.buckets[index].key == key:\n                # \u524a\u9664\u30de\u30fc\u30af\u304c\u4ee5\u524d\u306b\u906d\u9047\u3057\u3066\u3044\u305f\u5834\u5408\u3001\u30ad\u30fc\u5024\u30da\u30a2\u3092\u305d\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306b\u79fb\u52d5\n                if first_tombstone != -1:\n                    self.buckets[first_tombstone] = self.buckets[index]\n                    self.buckets[index] = self.TOMBSTONE\n                    return first_tombstone  # \u79fb\u52d5\u3055\u308c\u305f\u30d0\u30b1\u30c3\u30c8\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u8fd4\u3059\n                return index  # \u30d0\u30b1\u30c3\u30c8\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u8fd4\u3059\n            # \u6700\u521d\u306b\u906d\u9047\u3057\u305f\u524a\u9664\u30de\u30fc\u30af\u3092\u8a18\u9332\n            if first_tombstone == -1 and self.buckets[index] is self.TOMBSTONE:\n                first_tombstone = index\n            # \u30d0\u30b1\u30c3\u30c8\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u8a08\u7b97\u3001\u672b\u5c3e\u3092\u8d85\u3048\u305f\u5834\u5408\u306f\u5148\u982d\u306b\u623b\u308b\n            index = (index + 1) % self.capacity\n        # \u30ad\u30fc\u304c\u5b58\u5728\u3057\u306a\u3044\u5834\u5408\u3001\u633f\u5165\u30dd\u30a4\u30f3\u30c8\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u8fd4\u3059\n        return index if first_tombstone == -1 else first_tombstone\n\n    def get(self, key: int) -> str:\n        \"\"\"\u7167\u4f1a\u64cd\u4f5c\"\"\"\n        # key \u306b\u5bfe\u5fdc\u3059\u308b\u30d0\u30b1\u30c3\u30c8\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u691c\u7d22\n        index = self.find_bucket(key)\n        # \u30ad\u30fc\u5024\u30da\u30a2\u304c\u898b\u3064\u304b\u308c\u3070\u3001\u5bfe\u5fdc\u3059\u308b val \u3092\u8fd4\u3059\n        if self.buckets[index] not in [None, self.TOMBSTONE]:\n            return self.buckets[index].val\n        # \u30ad\u30fc\u5024\u30da\u30a2\u304c\u5b58\u5728\u3057\u306a\u3044\u5834\u5408\u3001None \u3092\u8fd4\u3059\n        return None\n\n    def put(self, key: int, val: str):\n        \"\"\"\u8ffd\u52a0\u64cd\u4f5c\"\"\"\n        # \u8ca0\u8377\u7387\u304c\u95be\u5024\u3092\u8d85\u3048\u305f\u5834\u5408\u3001\u62e1\u5f35\u3092\u5b9f\u884c\n        if self.load_factor() > self.load_thres:\n            self.extend()\n        # key \u306b\u5bfe\u5fdc\u3059\u308b\u30d0\u30b1\u30c3\u30c8\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u691c\u7d22\n        index = self.find_bucket(key)\n        # \u30ad\u30fc\u5024\u30da\u30a2\u304c\u898b\u3064\u304b\u308c\u3070\u3001val \u3092\u4e0a\u66f8\u304d\u3057\u3066\u8fd4\u3059\n        if self.buckets[index] not in [None, self.TOMBSTONE]:\n            self.buckets[index].val = val\n            return\n        # \u30ad\u30fc\u5024\u30da\u30a2\u304c\u5b58\u5728\u3057\u306a\u3044\u5834\u5408\u3001\u30ad\u30fc\u5024\u30da\u30a2\u3092\u8ffd\u52a0\n        self.buckets[index] = Pair(key, val)\n        self.size += 1\n\n    def remove(self, key: int):\n        \"\"\"\u524a\u9664\u64cd\u4f5c\"\"\"\n        # key \u306b\u5bfe\u5fdc\u3059\u308b\u30d0\u30b1\u30c3\u30c8\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u691c\u7d22\n        index = self.find_bucket(key)\n        # \u30ad\u30fc\u5024\u30da\u30a2\u304c\u898b\u3064\u304b\u308c\u3070\u3001\u524a\u9664\u30de\u30fc\u30af\u3067\u8986\u3046\n        if self.buckets[index] not in [None, self.TOMBSTONE]:\n            self.buckets[index] = self.TOMBSTONE\n            self.size -= 1\n\n    def extend(self):\n        \"\"\"\u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb\u3092\u62e1\u5f35\"\"\"\n        # \u5143\u306e\u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb\u3092\u4e00\u6642\u7684\u306b\u4fdd\u5b58\n        buckets_tmp = self.buckets\n        # \u62e1\u5f35\u3055\u308c\u305f\u65b0\u3057\u3044\u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb\u3092\u521d\u671f\u5316\n        self.capacity *= self.extend_ratio\n        self.buckets = [None] * self.capacity\n        self.size = 0\n        # \u5143\u306e\u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb\u304b\u3089\u65b0\u3057\u3044\u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb\u306b\u30ad\u30fc\u5024\u30da\u30a2\u3092\u79fb\u52d5\n        for pair in buckets_tmp:\n            if pair not in [None, self.TOMBSTONE]:\n                self.put(pair.key, pair.val)\n\n    def print(self):\n        \"\"\"\u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb\u3092\u51fa\u529b\"\"\"\n        for pair in self.buckets:\n            if pair is None:\n                print(\"None\")\n            elif pair is self.TOMBSTONE:\n                print(\"TOMBSTONE\")\n            else:\n                print(pair.key, \"->\", pair.val)\n
hash_map_open_addressing.cpp
/* \u30aa\u30fc\u30d7\u30f3\u30a2\u30c9\u30ec\u30b9\u6cd5\u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb */\nclass HashMapOpenAddressing {\n  private:\n    int size;                             // \u30ad\u30fc\u5024\u30da\u30a2\u306e\u6570\n    int capacity = 4;                     // \u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb\u306e\u5bb9\u91cf\n    const double loadThres = 2.0 / 3.0;     // \u62e1\u5f35\u3092\u30c8\u30ea\u30ac\u30fc\u3059\u308b\u8ca0\u8377\u7387\u306e\u95be\u5024\n    const int extendRatio = 2;            // \u62e1\u5f35\u500d\u7387\n    vector<Pair *> buckets;               // \u30d0\u30b1\u30c3\u30c8\u914d\u5217\n    Pair *TOMBSTONE = new Pair(-1, \"-1\"); // \u524a\u9664\u30de\u30fc\u30af\n\n  public:\n    /* \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf */\n    HashMapOpenAddressing() : size(0), buckets(capacity, nullptr) {\n    }\n\n    /* \u30c7\u30b9\u30c8\u30e9\u30af\u30bf */\n    ~HashMapOpenAddressing() {\n        for (Pair *pair : buckets) {\n            if (pair != nullptr && pair != TOMBSTONE) {\n                delete pair;\n            }\n        }\n        delete TOMBSTONE;\n    }\n\n    /* \u30cf\u30c3\u30b7\u30e5\u95a2\u6570 */\n    int hashFunc(int key) {\n        return key % capacity;\n    }\n\n    /* \u8ca0\u8377\u7387 */\n    double loadFactor() {\n        return (double)size / capacity;\n    }\n\n    /* key\u306b\u5bfe\u5fdc\u3059\u308b\u30d0\u30b1\u30c3\u30c8\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u691c\u7d22 */\n    int findBucket(int key) {\n        int index = hashFunc(key);\n        int firstTombstone = -1;\n        // \u7dda\u5f62\u63a2\u67fb\u3001\u7a7a\u306e\u30d0\u30b1\u30c3\u30c8\u306b\u906d\u9047\u3057\u305f\u3089\u4e2d\u65ad\n        while (buckets[index] != nullptr) {\n            // key\u306b\u906d\u9047\u3057\u305f\u5834\u5408\u3001\u5bfe\u5fdc\u3059\u308b\u30d0\u30b1\u30c3\u30c8\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u8fd4\u5374\n            if (buckets[index]->key == key) {\n                // \u4ee5\u524d\u306b\u524a\u9664\u30de\u30fc\u30af\u306b\u906d\u9047\u3057\u3066\u3044\u305f\u5834\u5408\u3001\u30ad\u30fc\u5024\u30da\u30a2\u3092\u305d\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306b\u79fb\u52d5\n                if (firstTombstone != -1) {\n                    buckets[firstTombstone] = buckets[index];\n                    buckets[index] = TOMBSTONE;\n                    return firstTombstone; // \u79fb\u52d5\u3055\u308c\u305f\u30d0\u30b1\u30c3\u30c8\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u8fd4\u5374\n                }\n                return index; // \u30d0\u30b1\u30c3\u30c8\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u8fd4\u5374\n            }\n            // \u6700\u521d\u306b\u906d\u9047\u3057\u305f\u524a\u9664\u30de\u30fc\u30af\u3092\u8a18\u9332\n            if (firstTombstone == -1 && buckets[index] == TOMBSTONE) {\n                firstTombstone = index;\n            }\n            // \u30d0\u30b1\u30c3\u30c8\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u8a08\u7b97\u3001\u672b\u5c3e\u3092\u8d85\u3048\u305f\u5834\u5408\u306f\u5148\u982d\u306b\u623b\u308b\n            index = (index + 1) % capacity;\n        }\n        // key\u304c\u5b58\u5728\u3057\u306a\u3044\u5834\u5408\u3001\u633f\u5165\u30dd\u30a4\u30f3\u30c8\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u8fd4\u5374\n        return firstTombstone == -1 ? index : firstTombstone;\n    }\n\n    /* \u30af\u30a8\u30ea\u64cd\u4f5c */\n    string get(int key) {\n        // key\u306b\u5bfe\u5fdc\u3059\u308b\u30d0\u30b1\u30c3\u30c8\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u691c\u7d22\n        int index = findBucket(key);\n        // \u30ad\u30fc\u5024\u30da\u30a2\u304c\u898b\u3064\u304b\u3063\u305f\u5834\u5408\u3001\u5bfe\u5fdc\u3059\u308bval\u3092\u8fd4\u5374\n        if (buckets[index] != nullptr && buckets[index] != TOMBSTONE) {\n            return buckets[index]->val;\n        }\n        // \u30ad\u30fc\u5024\u30da\u30a2\u304c\u5b58\u5728\u3057\u306a\u3044\u5834\u5408\u3001\u7a7a\u6587\u5b57\u5217\u3092\u8fd4\u5374\n        return \"\";\n    }\n\n    /* \u8ffd\u52a0\u64cd\u4f5c */\n    void put(int key, string val) {\n        // \u8ca0\u8377\u7387\u304c\u95be\u5024\u3092\u8d85\u3048\u305f\u5834\u5408\u3001\u62e1\u5f35\u3092\u5b9f\u884c\n        if (loadFactor() > loadThres) {\n            extend();\n        }\n        // key\u306b\u5bfe\u5fdc\u3059\u308b\u30d0\u30b1\u30c3\u30c8\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u691c\u7d22\n        int index = findBucket(key);\n        // \u30ad\u30fc\u5024\u30da\u30a2\u304c\u898b\u3064\u304b\u3063\u305f\u5834\u5408\u3001val\u3092\u4e0a\u66f8\u304d\u3057\u3066\u8fd4\u5374\n        if (buckets[index] != nullptr && buckets[index] != TOMBSTONE) {\n            buckets[index]->val = val;\n            return;\n        }\n        // \u30ad\u30fc\u5024\u30da\u30a2\u304c\u5b58\u5728\u3057\u306a\u3044\u5834\u5408\u3001\u30ad\u30fc\u5024\u30da\u30a2\u3092\u8ffd\u52a0\n        buckets[index] = new Pair(key, val);\n        size++;\n    }\n\n    /* \u524a\u9664\u64cd\u4f5c */\n    void remove(int key) {\n        // key\u306b\u5bfe\u5fdc\u3059\u308b\u30d0\u30b1\u30c3\u30c8\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u691c\u7d22\n        int index = findBucket(key);\n        // \u30ad\u30fc\u5024\u30da\u30a2\u304c\u898b\u3064\u304b\u3063\u305f\u5834\u5408\u3001\u524a\u9664\u30de\u30fc\u30af\u3067\u8986\u3046\n        if (buckets[index] != nullptr && buckets[index] != TOMBSTONE) {\n            delete buckets[index];\n            buckets[index] = TOMBSTONE;\n            size--;\n        }\n    }\n\n    /* \u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb\u3092\u62e1\u5f35 */\n    void extend() {\n        // \u5143\u306e\u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb\u3092\u4e00\u6642\u4fdd\u5b58\n        vector<Pair *> bucketsTmp = buckets;\n        // \u62e1\u5f35\u3055\u308c\u305f\u65b0\u3057\u3044\u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb\u3092\u521d\u671f\u5316\n        capacity *= extendRatio;\n        buckets = vector<Pair *>(capacity, nullptr);\n        size = 0;\n        // \u5143\u306e\u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb\u304b\u3089\u65b0\u3057\u3044\u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb\u306b\u30ad\u30fc\u5024\u30da\u30a2\u3092\u79fb\u52d5\n        for (Pair *pair : bucketsTmp) {\n            if (pair != nullptr && pair != TOMBSTONE) {\n                put(pair->key, pair->val);\n                delete pair;\n            }\n        }\n    }\n\n    /* \u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb\u3092\u5370\u5237 */\n    void print() {\n        for (Pair *pair : buckets) {\n            if (pair == nullptr) {\n                cout << \"nullptr\" << endl;\n            } else if (pair == TOMBSTONE) {\n                cout << \"TOMBSTONE\" << endl;\n            } else {\n                cout << pair->key << \" -> \" << pair->val << endl;\n            }\n        }\n    }\n};\n
hash_map_open_addressing.java
/* \u30aa\u30fc\u30d7\u30f3\u30a2\u30c9\u30ec\u30b9\u6cd5\u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb */\nclass HashMapOpenAddressing {\n    private int size; // \u30ad\u30fc\u5024\u30da\u30a2\u306e\u6570\n    private int capacity = 4; // \u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb\u306e\u5bb9\u91cf\n    private final double loadThres = 2.0 / 3.0; // \u62e1\u5f35\u3092\u30c8\u30ea\u30ac\u30fc\u3059\u308b\u8ca0\u8377\u7387\u306e\u95be\u5024\n    private final int extendRatio = 2; // \u62e1\u5f35\u500d\u7387\n    private Pair[] buckets; // \u30d0\u30b1\u30c3\u30c8\u914d\u5217\n    private final Pair TOMBSTONE = new Pair(-1, \"-1\"); // \u524a\u9664\u30de\u30fc\u30af\n\n    /* \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf */\n    public HashMapOpenAddressing() {\n        size = 0;\n        buckets = new Pair[capacity];\n    }\n\n    /* \u30cf\u30c3\u30b7\u30e5\u95a2\u6570 */\n    private int hashFunc(int key) {\n        return key % capacity;\n    }\n\n    /* \u8ca0\u8377\u7387 */\n    private double loadFactor() {\n        return (double) size / capacity;\n    }\n\n    /* key\u306b\u5bfe\u5fdc\u3059\u308b\u30d0\u30b1\u30c3\u30c8\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u691c\u7d22 */\n    private int findBucket(int key) {\n        int index = hashFunc(key);\n        int firstTombstone = -1;\n        // \u7dda\u5f62\u63a2\u67fb\u3001\u7a7a\u306e\u30d0\u30b1\u30c3\u30c8\u306b\u906d\u9047\u3057\u305f\u3089\u7d42\u4e86\n        while (buckets[index] != null) {\n            // key\u306b\u906d\u9047\u3057\u305f\u5834\u5408\u3001\u5bfe\u5fdc\u3059\u308b\u30d0\u30b1\u30c3\u30c8\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u8fd4\u3059\n            if (buckets[index].key == key) {\n                // \u4ee5\u524d\u306b\u524a\u9664\u30de\u30fc\u30af\u306b\u906d\u9047\u3057\u3066\u3044\u305f\u5834\u5408\u3001\u30ad\u30fc\u5024\u30da\u30a2\u3092\u305d\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306b\u79fb\u52d5\n                if (firstTombstone != -1) {\n                    buckets[firstTombstone] = buckets[index];\n                    buckets[index] = TOMBSTONE;\n                    return firstTombstone; // \u79fb\u52d5\u5f8c\u306e\u30d0\u30b1\u30c3\u30c8\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u8fd4\u3059\n                }\n                return index; // \u30d0\u30b1\u30c3\u30c8\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u8fd4\u3059\n            }\n            // \u6700\u521d\u306b\u906d\u9047\u3057\u305f\u524a\u9664\u30de\u30fc\u30af\u3092\u8a18\u9332\n            if (firstTombstone == -1 && buckets[index] == TOMBSTONE) {\n                firstTombstone = index;\n            }\n            // \u30d0\u30b1\u30c3\u30c8\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u8a08\u7b97\u3001\u672b\u5c3e\u3092\u8d85\u3048\u305f\u5834\u5408\u306f\u5148\u982d\u306b\u623b\u308b\n            index = (index + 1) % capacity;\n        }\n        // key\u304c\u5b58\u5728\u3057\u306a\u3044\u5834\u5408\u3001\u633f\u5165\u30dd\u30a4\u30f3\u30c8\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u8fd4\u3059\n        return firstTombstone == -1 ? index : firstTombstone;\n    }\n\n    /* \u30af\u30a8\u30ea\u64cd\u4f5c */\n    public String get(int key) {\n        // key\u306b\u5bfe\u5fdc\u3059\u308b\u30d0\u30b1\u30c3\u30c8\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u691c\u7d22\n        int index = findBucket(key);\n        // \u30ad\u30fc\u5024\u30da\u30a2\u304c\u898b\u3064\u304b\u3063\u305f\u5834\u5408\u3001\u5bfe\u5fdc\u3059\u308bval\u3092\u8fd4\u3059\n        if (buckets[index] != null && buckets[index] != TOMBSTONE) {\n            return buckets[index].val;\n        }\n        // \u30ad\u30fc\u5024\u30da\u30a2\u304c\u5b58\u5728\u3057\u306a\u3044\u5834\u5408\u3001null\u3092\u8fd4\u3059\n        return null;\n    }\n\n    /* \u8ffd\u52a0\u64cd\u4f5c */\n    public void put(int key, String val) {\n        // \u8ca0\u8377\u7387\u304c\u95be\u5024\u3092\u8d85\u3048\u305f\u5834\u5408\u3001\u62e1\u5f35\u3092\u5b9f\u884c\n        if (loadFactor() > loadThres) {\n            extend();\n        }\n        // key\u306b\u5bfe\u5fdc\u3059\u308b\u30d0\u30b1\u30c3\u30c8\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u691c\u7d22\n        int index = findBucket(key);\n        // \u30ad\u30fc\u5024\u30da\u30a2\u304c\u898b\u3064\u304b\u3063\u305f\u5834\u5408\u3001val\u3092\u4e0a\u66f8\u304d\u3057\u3066\u623b\u308b\n        if (buckets[index] != null && buckets[index] != TOMBSTONE) {\n            buckets[index].val = val;\n            return;\n        }\n        // \u30ad\u30fc\u5024\u30da\u30a2\u304c\u5b58\u5728\u3057\u306a\u3044\u5834\u5408\u3001\u30ad\u30fc\u5024\u30da\u30a2\u3092\u8ffd\u52a0\n        buckets[index] = new Pair(key, val);\n        size++;\n    }\n\n    /* \u524a\u9664\u64cd\u4f5c */\n    public void remove(int key) {\n        // key\u306b\u5bfe\u5fdc\u3059\u308b\u30d0\u30b1\u30c3\u30c8\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u691c\u7d22\n        int index = findBucket(key);\n        // \u30ad\u30fc\u5024\u30da\u30a2\u304c\u898b\u3064\u304b\u3063\u305f\u5834\u5408\u3001\u524a\u9664\u30de\u30fc\u30af\u3067\u8986\u3046\n        if (buckets[index] != null && buckets[index] != TOMBSTONE) {\n            buckets[index] = TOMBSTONE;\n            size--;\n        }\n    }\n\n    /* \u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb\u3092\u62e1\u5f35 */\n    private void extend() {\n        // \u5143\u306e\u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb\u3092\u4e00\u6642\u7684\u306b\u4fdd\u5b58\n        Pair[] bucketsTmp = buckets;\n        // \u62e1\u5f35\u3055\u308c\u305f\u65b0\u3057\u3044\u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb\u3092\u521d\u671f\u5316\n        capacity *= extendRatio;\n        buckets = new Pair[capacity];\n        size = 0;\n        // \u5143\u306e\u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb\u304b\u3089\u65b0\u3057\u3044\u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb\u306b\u30ad\u30fc\u5024\u30da\u30a2\u3092\u79fb\u52d5\n        for (Pair pair : bucketsTmp) {\n            if (pair != null && pair != TOMBSTONE) {\n                put(pair.key, pair.val);\n            }\n        }\n    }\n\n    /* \u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb\u3092\u5370\u5237 */\n    public void print() {\n        for (Pair pair : buckets) {\n            if (pair == null) {\n                System.out.println(\"null\");\n            } else if (pair == TOMBSTONE) {\n                System.out.println(\"TOMBSTONE\");\n            } else {\n                System.out.println(pair.key + \" -> \" + pair.val);\n            }\n        }\n    }\n}\n
hash_map_open_addressing.cs
[class]{HashMapOpenAddressing}-[func]{}\n
hash_map_open_addressing.go
[class]{hashMapOpenAddressing}-[func]{}\n
hash_map_open_addressing.swift
[class]{HashMapOpenAddressing}-[func]{}\n
hash_map_open_addressing.js
[class]{HashMapOpenAddressing}-[func]{}\n
hash_map_open_addressing.ts
[class]{HashMapOpenAddressing}-[func]{}\n
hash_map_open_addressing.dart
[class]{HashMapOpenAddressing}-[func]{}\n
hash_map_open_addressing.rs
[class]{HashMapOpenAddressing}-[func]{}\n
hash_map_open_addressing.c
[class]{HashMapOpenAddressing}-[func]{}\n
hash_map_open_addressing.kt
[class]{HashMapOpenAddressing}-[func]{}\n
hash_map_open_addressing.rb
[class]{HashMapOpenAddressing}-[func]{}\n
"},{"location":"chapter_hashing/hash_collision/#2","title":"2. \u00a0 \u4e8c\u6b21\u30d7\u30ed\u30fc\u30d6","text":"

\u4e8c\u6b21\u30d7\u30ed\u30fc\u30d6\u306f\u7dda\u5f62\u30d7\u30ed\u30fc\u30d6\u306b\u4f3c\u3066\u304a\u308a\u3001\u30aa\u30fc\u30d7\u30f3\u30a2\u30c9\u30ec\u30b9\u6cd5\u306e\u4e00\u822c\u7684\u306a\u6226\u7565\u306e1\u3064\u3067\u3059\u3002\u885d\u7a81\u304c\u767a\u751f\u3057\u305f\u5834\u5408\u3001\u4e8c\u6b21\u30d7\u30ed\u30fc\u30d6\u306f\u5358\u7d14\u306b\u56fa\u5b9a\u30b9\u30c6\u30c3\u30d7\u6570\u3092\u30b9\u30ad\u30c3\u30d7\u3059\u308b\u306e\u3067\u306f\u306a\u304f\u3001\u300c\u30d7\u30ed\u30fc\u30d6\u56de\u6570\u306e\u4e8c\u4e57\u300d\u306b\u7b49\u3057\u3044\u30b9\u30c6\u30c3\u30d7\u6570\u3001\u3064\u307e\u308a\\(1, 4, 9, \\dots\\)\u30b9\u30c6\u30c3\u30d7\u3092\u30b9\u30ad\u30c3\u30d7\u3057\u307e\u3059\u3002

\u4e8c\u6b21\u30d7\u30ed\u30fc\u30d6\u306b\u306f\u4ee5\u4e0b\u306e\u5229\u70b9\u304c\u3042\u308a\u307e\u3059\uff1a

\u3057\u304b\u3057\u3001\u4e8c\u6b21\u30d7\u30ed\u30fc\u30d6\u306f\u5b8c\u74a7\u3067\u306f\u3042\u308a\u307e\u305b\u3093\uff1a

"},{"location":"chapter_hashing/hash_collision/#3","title":"3. \u00a0 \u4e8c\u91cd\u30cf\u30c3\u30b7\u30e5","text":"

\u540d\u524d\u304c\u793a\u3059\u3088\u3046\u306b\u3001\u4e8c\u91cd\u30cf\u30c3\u30b7\u30e5\u6cd5\u306f\u8907\u6570\u306e\u30cf\u30c3\u30b7\u30e5\u95a2\u6570\\(f_1(x)\\)\u3001\\(f_2(x)\\)\u3001\\(f_3(x)\\)\u3001\\(\\dots\\)\u3092\u30d7\u30ed\u30fc\u30d6\u306b\u4f7f\u7528\u3057\u307e\u3059\u3002

\u7dda\u5f62\u30d7\u30ed\u30fc\u30d6\u3068\u6bd4\u8f03\u3057\u3066\u3001\u4e8c\u91cd\u30cf\u30c3\u30b7\u30e5\u6cd5\u306f\u30af\u30e9\u30b9\u30bf\u30ea\u30f3\u30b0\u304c\u8d77\u3053\u308a\u306b\u304f\u3044\u3067\u3059\u304c\u3001\u8907\u6570\u306e\u30cf\u30c3\u30b7\u30e5\u95a2\u6570\u306f\u8ffd\u52a0\u306e\u8a08\u7b97\u30aa\u30fc\u30d0\u30fc\u30d8\u30c3\u30c9\u3092\u5c0e\u5165\u3057\u307e\u3059\u3002

Tip

\u30aa\u30fc\u30d7\u30f3\u30a2\u30c9\u30ec\u30b9\u6cd5\uff08\u7dda\u5f62\u30d7\u30ed\u30fc\u30d6\u3001\u4e8c\u6b21\u30d7\u30ed\u30fc\u30d6\u3001\u4e8c\u91cd\u30cf\u30c3\u30b7\u30e5\uff09\u30cf\u30c3\u30b7\u30e5\u8868\u306f\u3059\u3079\u3066\u300c\u8981\u7d20\u3092\u76f4\u63a5\u524a\u9664\u3067\u304d\u306a\u3044\u300d\u3068\u3044\u3046\u554f\u984c\u304c\u3042\u308b\u3053\u3068\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002

"},{"location":"chapter_hashing/hash_collision/#623","title":"6.2.3 \u00a0 \u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\u306e\u9078\u629e","text":"

\u7570\u306a\u308b\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\u306f\u7570\u306a\u308b\u30cf\u30c3\u30b7\u30e5\u8868\u5b9f\u88c5\u6226\u7565\u3092\u63a1\u7528\u3057\u3066\u3044\u307e\u3059\u3002\u4ee5\u4e0b\u306b\u3044\u304f\u3064\u304b\u306e\u4f8b\u3092\u793a\u3057\u307e\u3059\uff1a

"},{"location":"chapter_hashing/hash_map/","title":"6.1 \u00a0 \u30cf\u30c3\u30b7\u30e5\u8868","text":"

\u30cf\u30c3\u30b7\u30e5\u8868\u306f\u30cf\u30c3\u30b7\u30e5\u30de\u30c3\u30d7\u3068\u3082\u547c\u3070\u308c\u3001\u30ad\u30fc\u3068\u5024\u306e\u9593\u306e\u30de\u30c3\u30d4\u30f3\u30b0\u3092\u78ba\u7acb\u3057\u3001\u52b9\u7387\u7684\u306a\u8981\u7d20\u306e\u53d6\u5f97\u3092\u53ef\u80fd\u306b\u3059\u308b\u30c7\u30fc\u30bf\u69cb\u9020\u3067\u3059\u3002\u5177\u4f53\u7684\u306b\u306f\u3001\u30cf\u30c3\u30b7\u30e5\u8868\u306bkey\u3092\u5165\u529b\u3059\u308b\u3068\u3001\\(O(1)\\)\u306e\u6642\u9593\u8a08\u7b97\u91cf\u3067\u5bfe\u5fdc\u3059\u308bvalue\u3092\u53d6\u5f97\u3067\u304d\u307e\u3059\u3002

\u4e0b\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\\(n\\)\u4eba\u306e\u5b66\u751f\u304c\u3044\u3066\u3001\u5404\u5b66\u751f\u306b\u306f\u300c\u540d\u524d\u300d\u3068\u300c\u5b66\u7c4d\u756a\u53f7\u300d\u306e2\u3064\u306e\u30c7\u30fc\u30bf\u30d5\u30a3\u30fc\u30eb\u30c9\u304c\u3042\u308b\u3068\u3057\u307e\u3059\u3002\u5b66\u7c4d\u756a\u53f7\u3092\u5165\u529b\u3068\u3057\u3066\u5bfe\u5fdc\u3059\u308b\u540d\u524d\u3092\u8fd4\u3059\u30af\u30a8\u30ea\u6a5f\u80fd\u3092\u5b9f\u88c5\u3057\u305f\u3044\u5834\u5408\u3001\u4e0b\u56f3\u306b\u793a\u3059\u30cf\u30c3\u30b7\u30e5\u8868\u3092\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002

\u56f3 6-1 \u00a0 \u30cf\u30c3\u30b7\u30e5\u8868\u306e\u62bd\u8c61\u7684\u306a\u8868\u73fe

\u30cf\u30c3\u30b7\u30e5\u8868\u306b\u52a0\u3048\u3066\u3001\u914d\u5217\u3084\u9023\u7d50\u30ea\u30b9\u30c8\u3082\u30af\u30a8\u30ea\u6a5f\u80fd\u306e\u5b9f\u88c5\u306b\u4f7f\u7528\u3067\u304d\u307e\u3059\u304c\u3001\u6642\u9593\u8a08\u7b97\u91cf\u304c\u7570\u306a\u308a\u307e\u3059\u3002\u52b9\u7387\u306f\u4ee5\u4e0b\u306e\u8868\u3067\u6bd4\u8f03\u3055\u308c\u3066\u3044\u307e\u3059\uff1a

\u8868 6-1 \u00a0 \u4e00\u822c\u7684\u306a\u64cd\u4f5c\u306e\u6642\u9593\u52b9\u7387\u306e\u6bd4\u8f03

\u914d\u5217 \u9023\u7d50\u30ea\u30b9\u30c8 \u30cf\u30c3\u30b7\u30e5\u8868 \u8981\u7d20\u306e\u691c\u7d22 \\(O(n)\\) \\(O(n)\\) \\(O(1)\\) \u8981\u7d20\u306e\u633f\u5165 \\(O(1)\\) \\(O(1)\\) \\(O(1)\\) \u8981\u7d20\u306e\u524a\u9664 \\(O(n)\\) \\(O(n)\\) \\(O(1)\\)

\u89b3\u5bdf\u3055\u308c\u308b\u3088\u3046\u306b\u3001**\u30cf\u30c3\u30b7\u30e5\u8868\u306b\u304a\u3051\u308b\u64cd\u4f5c\uff08\u633f\u5165\u3001\u524a\u9664\u3001\u691c\u7d22\u3001\u5909\u66f4\uff09\u306e\u6642\u9593\u8a08\u7b97\u91cf\u306f\\(O(1)\\)**\u3067\u3001\u975e\u5e38\u306b\u52b9\u7387\u7684\u3067\u3059\u3002

"},{"location":"chapter_hashing/hash_map/#611","title":"6.1.1 \u00a0 \u30cf\u30c3\u30b7\u30e5\u8868\u306e\u4e00\u822c\u7684\u306a\u64cd\u4f5c","text":"

\u30cf\u30c3\u30b7\u30e5\u8868\u306e\u4e00\u822c\u7684\u306a\u64cd\u4f5c\u306b\u306f\u3001\u521d\u671f\u5316\u3001\u30af\u30a8\u30ea\u3001\u30ad\u30fc\u5024\u30da\u30a2\u306e\u8ffd\u52a0\u3001\u30ad\u30fc\u5024\u30da\u30a2\u306e\u524a\u9664\u304c\u3042\u308a\u307e\u3059\u3002\u4ee5\u4e0b\u306f\u30b3\u30fc\u30c9\u4f8b\u3067\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlin hash_map.py
# \u30cf\u30c3\u30b7\u30e5\u8868\u3092\u521d\u671f\u5316\nhmap: dict = {}\n\n# \u8ffd\u52a0\u64cd\u4f5c\n# \u30cf\u30c3\u30b7\u30e5\u8868\u306b\u30ad\u30fc\u5024\u30da\u30a2 (key, value) \u3092\u8ffd\u52a0\nhmap[12836] = \"\u5c0f\u54c8\"\nhmap[15937] = \"\u5c0f\u5570\"\nhmap[16750] = \"\u5c0f\u7b97\"\nhmap[13276] = \"\u5c0f\u6cd5\"\nhmap[10583] = \"\u5c0f\u9e2d\"\n\n# \u30af\u30a8\u30ea\u64cd\u4f5c\n# \u30cf\u30c3\u30b7\u30e5\u8868\u306b\u30ad\u30fc\u3092\u5165\u529b\u3057\u3001\u5024\u3092\u53d6\u5f97\nname: str = hmap[15937]\n\n# \u524a\u9664\u64cd\u4f5c\n# \u30cf\u30c3\u30b7\u30e5\u8868\u304b\u3089\u30ad\u30fc\u5024\u30da\u30a2 (key, value) \u3092\u524a\u9664\nhmap.pop(10583)\n
hash_map.cpp
/* \u30cf\u30c3\u30b7\u30e5\u8868\u3092\u521d\u671f\u5316 */\nunordered_map<int, string> map;\n\n/* \u8ffd\u52a0\u64cd\u4f5c */\n// \u30cf\u30c3\u30b7\u30e5\u8868\u306b\u30ad\u30fc\u5024\u30da\u30a2 (key, value) \u3092\u8ffd\u52a0\nmap[12836] = \"\u5c0f\u54c8\";\nmap[15937] = \"\u5c0f\u5570\";\nmap[16750] = \"\u5c0f\u7b97\";\nmap[13276] = \"\u5c0f\u6cd5\";\nmap[10583] = \"\u5c0f\u9e2d\";\n\n/* \u30af\u30a8\u30ea\u64cd\u4f5c */\n// \u30cf\u30c3\u30b7\u30e5\u8868\u306b\u30ad\u30fc\u3092\u5165\u529b\u3057\u3001\u5024\u3092\u53d6\u5f97\nstring name = map[15937];\n\n/* \u524a\u9664\u64cd\u4f5c */\n// \u30cf\u30c3\u30b7\u30e5\u8868\u304b\u3089\u30ad\u30fc\u5024\u30da\u30a2 (key, value) \u3092\u524a\u9664\nmap.erase(10583);\n
hash_map.java
/* \u30cf\u30c3\u30b7\u30e5\u8868\u3092\u521d\u671f\u5316 */\nMap<Integer, String> map = new HashMap<>();\n\n/* \u8ffd\u52a0\u64cd\u4f5c */\n// \u30cf\u30c3\u30b7\u30e5\u8868\u306b\u30ad\u30fc\u5024\u30da\u30a2 (key, value) \u3092\u8ffd\u52a0\nmap.put(12836, \"\u5c0f\u54c8\");\nmap.put(15937, \"\u5c0f\u5570\");\nmap.put(16750, \"\u5c0f\u7b97\");\nmap.put(13276, \"\u5c0f\u6cd5\");\nmap.put(10583, \"\u5c0f\u9e2d\");\n\n/* \u30af\u30a8\u30ea\u64cd\u4f5c */\n// \u30cf\u30c3\u30b7\u30e5\u8868\u306b\u30ad\u30fc\u3092\u5165\u529b\u3057\u3001\u5024\u3092\u53d6\u5f97\nString name = map.get(15937);\n\n/* \u524a\u9664\u64cd\u4f5c */\n// \u30cf\u30c3\u30b7\u30e5\u8868\u304b\u3089\u30ad\u30fc\u5024\u30da\u30a2 (key, value) \u3092\u524a\u9664\nmap.remove(10583);\n
hash_map.cs
/* \u30cf\u30c3\u30b7\u30e5\u8868\u3092\u521d\u671f\u5316 */\nDictionary<int, string> map = new() {\n    /* \u8ffd\u52a0\u64cd\u4f5c */\n    // \u30cf\u30c3\u30b7\u30e5\u8868\u306b\u30ad\u30fc\u5024\u30da\u30a2 (key, value) \u3092\u8ffd\u52a0\n    { 12836, \"\u5c0f\u54c8\" },\n    { 15937, \"\u5c0f\u5570\" },\n    { 16750, \"\u5c0f\u7b97\" },\n    { 13276, \"\u5c0f\u6cd5\" },\n    { 10583, \"\u5c0f\u9e2d\" }\n};\n\n/* \u30af\u30a8\u30ea\u64cd\u4f5c */\n// \u30cf\u30c3\u30b7\u30e5\u8868\u306b\u30ad\u30fc\u3092\u5165\u529b\u3057\u3001\u5024\u3092\u53d6\u5f97\nstring name = map[15937];\n\n/* \u524a\u9664\u64cd\u4f5c */\n// \u30cf\u30c3\u30b7\u30e5\u8868\u304b\u3089\u30ad\u30fc\u5024\u30da\u30a2 (key, value) \u3092\u524a\u9664\nmap.Remove(10583);\n
hash_map_test.go
/* \u30cf\u30c3\u30b7\u30e5\u8868\u3092\u521d\u671f\u5316 */\nhmap := make(map[int]string)\n\n/* \u8ffd\u52a0\u64cd\u4f5c */\n// \u30cf\u30c3\u30b7\u30e5\u8868\u306b\u30ad\u30fc\u5024\u30da\u30a2 (key, value) \u3092\u8ffd\u52a0\nhmap[12836] = \"\u5c0f\u54c8\"\nhmap[15937] = \"\u5c0f\u5570\"\nhmap[16750] = \"\u5c0f\u7b97\"\nhmap[13276] = \"\u5c0f\u6cd5\"\nhmap[10583] = \"\u5c0f\u9e2d\"\n\n/* \u30af\u30a8\u30ea\u64cd\u4f5c */\n// \u30cf\u30c3\u30b7\u30e5\u8868\u306b\u30ad\u30fc\u3092\u5165\u529b\u3057\u3001\u5024\u3092\u53d6\u5f97\nname := hmap[15937]\n\n/* \u524a\u9664\u64cd\u4f5c */\n// \u30cf\u30c3\u30b7\u30e5\u8868\u304b\u3089\u30ad\u30fc\u5024\u30da\u30a2 (key, value) \u3092\u524a\u9664\ndelete(hmap, 10583)\n
hash_map.swift
/* \u30cf\u30c3\u30b7\u30e5\u8868\u3092\u521d\u671f\u5316 */\nvar map: [Int: String] = [:]\n\n/* \u8ffd\u52a0\u64cd\u4f5c */\n// \u30cf\u30c3\u30b7\u30e5\u8868\u306b\u30ad\u30fc\u5024\u30da\u30a2 (key, value) \u3092\u8ffd\u52a0\nmap[12836] = \"\u5c0f\u54c8\"\nmap[15937] = \"\u5c0f\u5570\"\nmap[16750] = \"\u5c0f\u7b97\"\nmap[13276] = \"\u5c0f\u6cd5\"\nmap[10583] = \"\u5c0f\u9e2d\"\n\n/* \u30af\u30a8\u30ea\u64cd\u4f5c */\n// \u30cf\u30c3\u30b7\u30e5\u8868\u306b\u30ad\u30fc\u3092\u5165\u529b\u3057\u3001\u5024\u3092\u53d6\u5f97\nlet name = map[15937]!\n\n/* \u524a\u9664\u64cd\u4f5c */\n// \u30cf\u30c3\u30b7\u30e5\u8868\u304b\u3089\u30ad\u30fc\u5024\u30da\u30a2 (key, value) \u3092\u524a\u9664\nmap.removeValue(forKey: 10583)\n
hash_map.js
/* \u30cf\u30c3\u30b7\u30e5\u8868\u3092\u521d\u671f\u5316 */\nconst map = new Map();\n/* \u8ffd\u52a0\u64cd\u4f5c */\n// \u30cf\u30c3\u30b7\u30e5\u8868\u306b\u30ad\u30fc\u5024\u30da\u30a2 (key, value) \u3092\u8ffd\u52a0\nmap.set(12836, '\u5c0f\u54c8');\nmap.set(15937, '\u5c0f\u5570');\nmap.set(16750, '\u5c0f\u7b97');\nmap.set(13276, '\u5c0f\u6cd5');\nmap.set(10583, '\u5c0f\u9e2d');\n\n/* \u30af\u30a8\u30ea\u64cd\u4f5c */\n// \u30cf\u30c3\u30b7\u30e5\u8868\u306b\u30ad\u30fc\u3092\u5165\u529b\u3057\u3001\u5024\u3092\u53d6\u5f97\nlet name = map.get(15937);\n\n/* \u524a\u9664\u64cd\u4f5c */\n// \u30cf\u30c3\u30b7\u30e5\u8868\u304b\u3089\u30ad\u30fc\u5024\u30da\u30a2 (key, value) \u3092\u524a\u9664\nmap.delete(10583);\n
hash_map.ts
/* \u30cf\u30c3\u30b7\u30e5\u8868\u3092\u521d\u671f\u5316 */\nconst map = new Map<number, string>();\n/* \u8ffd\u52a0\u64cd\u4f5c */\n// \u30cf\u30c3\u30b7\u30e5\u8868\u306b\u30ad\u30fc\u5024\u30da\u30a2 (key, value) \u3092\u8ffd\u52a0\nmap.set(12836, '\u5c0f\u54c8');\nmap.set(15937, '\u5c0f\u5570');\nmap.set(16750, '\u5c0f\u7b97');\nmap.set(13276, '\u5c0f\u6cd5');\nmap.set(10583, '\u5c0f\u9e2d');\nconsole.info('\\n\u8ffd\u52a0\u5f8c\u3001\u30cf\u30c3\u30b7\u30e5\u8868\u306f\\nKey -> Value');\nconsole.info(map);\n\n/* \u30af\u30a8\u30ea\u64cd\u4f5c */\n// \u30cf\u30c3\u30b7\u30e5\u8868\u306b\u30ad\u30fc\u3092\u5165\u529b\u3057\u3001\u5024\u3092\u53d6\u5f97\nlet name = map.get(15937);\nconsole.info('\\n\u5b66\u7c4d\u756a\u53f715937\u3092\u5165\u529b\u3001\u540d\u524d\u3092\u554f\u3044\u5408\u308f\u305b ' + name);\n\n/* \u524a\u9664\u64cd\u4f5c */\n// \u30cf\u30c3\u30b7\u30e5\u8868\u304b\u3089\u30ad\u30fc\u5024\u30da\u30a2 (key, value) \u3092\u524a\u9664\nmap.delete(10583);\nconsole.info('\\n10583\u3092\u524a\u9664\u5f8c\u3001\u30cf\u30c3\u30b7\u30e5\u8868\u306f\\nKey -> Value');\nconsole.info(map);\n
hash_map.dart
/* \u30cf\u30c3\u30b7\u30e5\u8868\u3092\u521d\u671f\u5316 */\nMap<int, String> map = {};\n\n/* \u8ffd\u52a0\u64cd\u4f5c */\n// \u30cf\u30c3\u30b7\u30e5\u8868\u306b\u30ad\u30fc\u5024\u30da\u30a2 (key, value) \u3092\u8ffd\u52a0\nmap[12836] = \"\u5c0f\u54c8\";\nmap[15937] = \"\u5c0f\u5570\";\nmap[16750] = \"\u5c0f\u7b97\";\nmap[13276] = \"\u5c0f\u6cd5\";\nmap[10583] = \"\u5c0f\u9e2d\";\n\n/* \u30af\u30a8\u30ea\u64cd\u4f5c */\n// \u30cf\u30c3\u30b7\u30e5\u8868\u306b\u30ad\u30fc\u3092\u5165\u529b\u3057\u3001\u5024\u3092\u53d6\u5f97\nString name = map[15937];\n\n/* \u524a\u9664\u64cd\u4f5c */\n// \u30cf\u30c3\u30b7\u30e5\u8868\u304b\u3089\u30ad\u30fc\u5024\u30da\u30a2 (key, value) \u3092\u524a\u9664\nmap.remove(10583);\n
hash_map.rs
use std::collections::HashMap;\n\n/* \u30cf\u30c3\u30b7\u30e5\u8868\u3092\u521d\u671f\u5316 */\nlet mut map: HashMap<i32, String> = HashMap::new();\n\n/* \u8ffd\u52a0\u64cd\u4f5c */\n// \u30cf\u30c3\u30b7\u30e5\u8868\u306b\u30ad\u30fc\u5024\u30da\u30a2 (key, value) \u3092\u8ffd\u52a0\nmap.insert(12836, \"\u5c0f\u54c8\".to_string());\nmap.insert(15937, \"\u5c0f\u5570\".to_string());\nmap.insert(16750, \"\u5c0f\u7b97\".to_string());\nmap.insert(13279, \"\u5c0f\u6cd5\".to_string());\nmap.insert(10583, \"\u5c0f\u9e2d\".to_string());\n\n/* \u30af\u30a8\u30ea\u64cd\u4f5c */\n// \u30cf\u30c3\u30b7\u30e5\u8868\u306b\u30ad\u30fc\u3092\u5165\u529b\u3057\u3001\u5024\u3092\u53d6\u5f97\nlet _name: Option<&String> = map.get(&15937);\n\n/* \u524a\u9664\u64cd\u4f5c */\n// \u30cf\u30c3\u30b7\u30e5\u8868\u304b\u3089\u30ad\u30fc\u5024\u30da\u30a2 (key, value) \u3092\u524a\u9664\nlet _removed_value: Option<String> = map.remove(&10583);\n
hash_map.c
// C\u306b\u306f\u7d44\u307f\u8fbc\u307f\u306e\u30cf\u30c3\u30b7\u30e5\u8868\u304c\u63d0\u4f9b\u3055\u308c\u3066\u3044\u307e\u305b\u3093\n
hash_map.kt
\n

\u30cf\u30c3\u30b7\u30e5\u8868\u3092\u8d70\u67fb\u3059\u308b\u4e00\u822c\u7684\u306a\u65b9\u6cd5\u306f3\u3064\u3042\u308a\u307e\u3059\uff1a\u30ad\u30fc\u5024\u30da\u30a2\u306e\u8d70\u67fb\u3001\u30ad\u30fc\u306e\u8d70\u67fb\u3001\u5024\u306e\u8d70\u67fb\u3002\u4ee5\u4e0b\u306f\u30b3\u30fc\u30c9\u4f8b\u3067\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlin hash_map.py
# \u30cf\u30c3\u30b7\u30e5\u8868\u3092\u8d70\u67fb\n# \u30ad\u30fc\u5024\u30da\u30a2 key->value \u3092\u8d70\u67fb\nfor key, value in hmap.items():\n    print(key, \"->\", value)\n# \u30ad\u30fc\u306e\u307f\u3092\u8d70\u67fb\nfor key in hmap.keys():\n    print(key)\n# \u5024\u306e\u307f\u3092\u8d70\u67fb\nfor value in hmap.values():\n    print(value)\n
hash_map.cpp
/* \u30cf\u30c3\u30b7\u30e5\u8868\u3092\u8d70\u67fb */\n// \u30ad\u30fc\u5024\u30da\u30a2 key->value \u3092\u8d70\u67fb\nfor (auto kv: map) {\n    cout << kv.first << \" -> \" << kv.second << endl;\n}\n// \u30a4\u30c6\u30ec\u30fc\u30bf\u3092\u4f7f\u7528\u3057\u3066\u30ad\u30fc\u5024\u30da\u30a2 key->value \u3092\u8d70\u67fb\nfor (auto iter = map.begin(); iter != map.end(); iter++) {\n    cout << iter->first << \"->\" << iter->second << endl;\n}\n
hash_map.java
/* \u30cf\u30c3\u30b7\u30e5\u8868\u3092\u8d70\u67fb */\n// \u30ad\u30fc\u5024\u30da\u30a2 key->value \u3092\u8d70\u67fb\nfor (Map.Entry<Integer, String> kv: map.entrySet()) {\n    System.out.println(kv.getKey() + \" -> \" + kv.getValue());\n}\n// \u30ad\u30fc\u306e\u307f\u3092\u8d70\u67fb\nfor (int key: map.keySet()) {\n    System.out.println(key);\n}\n// \u5024\u306e\u307f\u3092\u8d70\u67fb\nfor (String val: map.values()) {\n    System.out.println(val);\n}\n
hash_map.cs
/* \u30cf\u30c3\u30b7\u30e5\u8868\u3092\u8d70\u67fb */\n// \u30ad\u30fc\u5024\u30da\u30a2 Key->Value \u3092\u8d70\u67fb\nforeach (var kv in map) {\n    Console.WriteLine(kv.Key + \" -> \" + kv.Value);\n}\n// \u30ad\u30fc\u306e\u307f\u3092\u8d70\u67fb\nforeach (int key in map.Keys) {\n    Console.WriteLine(key);\n}\n// \u5024\u306e\u307f\u3092\u8d70\u67fb\nforeach (string val in map.Values) {\n    Console.WriteLine(val);\n}\n
hash_map_test.go
/* \u30cf\u30c3\u30b7\u30e5\u8868\u3092\u8d70\u67fb */\n// \u30ad\u30fc\u5024\u30da\u30a2 key->value \u3092\u8d70\u67fb\nfor key, value := range hmap {\n    fmt.Println(key, \"->\", value)\n}\n// \u30ad\u30fc\u306e\u307f\u3092\u8d70\u67fb\nfor key := range hmap {\n    fmt.Println(key)\n}\n// \u5024\u306e\u307f\u3092\u8d70\u67fb\nfor _, value := range hmap {\n    fmt.Println(value)\n}\n
hash_map.swift
/* \u30cf\u30c3\u30b7\u30e5\u8868\u3092\u8d70\u67fb */\n// \u30ad\u30fc\u5024\u30da\u30a2 Key->Value \u3092\u8d70\u67fb\nfor (key, value) in map {\n    print(\"\\(key) -> \\(value)\")\n}\n// \u30ad\u30fc\u306e\u307f\u3092\u8d70\u67fb\nfor key in map.keys {\n    print(key)\n}\n// \u5024\u306e\u307f\u3092\u8d70\u67fb\nfor value in map.values {\n    print(value)\n}\n
hash_map.js
/* \u30cf\u30c3\u30b7\u30e5\u8868\u3092\u8d70\u67fb */\nconsole.info('\\n\u30ad\u30fc\u5024\u30da\u30a2 Key->Value \u3092\u8d70\u67fb');\nfor (const [k, v] of map.entries()) {\n    console.info(k + ' -> ' + v);\n}\nconsole.info('\\n\u30ad\u30fc\u306e\u307f\u3092\u8d70\u67fb Key');\nfor (const k of map.keys()) {\n    console.info(k);\n}\nconsole.info('\\n\u5024\u306e\u307f\u3092\u8d70\u67fb Value');\nfor (const v of map.values()) {\n    console.info(v);\n}\n
hash_map.ts
/* \u30cf\u30c3\u30b7\u30e5\u8868\u3092\u8d70\u67fb */\nconsole.info('\\n\u30ad\u30fc\u5024\u30da\u30a2 Key->Value \u3092\u8d70\u67fb');\nfor (const [k, v] of map.entries()) {\n    console.info(k + ' -> ' + v);\n}\nconsole.info('\\n\u30ad\u30fc\u306e\u307f\u3092\u8d70\u67fb Key');\nfor (const k of map.keys()) {\n    console.info(k);\n}\nconsole.info('\\n\u5024\u306e\u307f\u3092\u8d70\u67fb Value');\nfor (const v of map.values()) {\n    console.info(v);\n}\n
hash_map.dart
/* \u30cf\u30c3\u30b7\u30e5\u8868\u3092\u8d70\u67fb */\n// \u30ad\u30fc\u5024\u30da\u30a2 Key->Value \u3092\u8d70\u67fb\nmap.forEach((key, value) {\nprint('$key -> $value');\n});\n\n// \u30ad\u30fc\u306e\u307f\u3092\u8d70\u67fb Key\nmap.keys.forEach((key) {\nprint(key);\n});\n\n// \u5024\u306e\u307f\u3092\u8d70\u67fb Value\nmap.values.forEach((value) {\nprint(value);\n});\n
hash_map.rs
/* \u30cf\u30c3\u30b7\u30e5\u8868\u3092\u8d70\u67fb */\n// \u30ad\u30fc\u5024\u30da\u30a2 Key->Value \u3092\u8d70\u67fb\nfor (key, value) in &map {\n    println!(\"{key} -> {value}\");\n}\n\n// \u30ad\u30fc\u306e\u307f\u3092\u8d70\u67fb Key\nfor key in map.keys() {\n    println!(\"{key}\");\n}\n\n// \u5024\u306e\u307f\u3092\u8d70\u67fb Value\nfor value in map.values() {\n    println!(\"{value}\");\n}\n
hash_map.c
// C\u306b\u306f\u7d44\u307f\u8fbc\u307f\u306e\u30cf\u30c3\u30b7\u30e5\u8868\u304c\u63d0\u4f9b\u3055\u308c\u3066\u3044\u307e\u305b\u3093\n
hash_map.kt
\n
"},{"location":"chapter_hashing/hash_map/#612","title":"6.1.2 \u00a0 \u30cf\u30c3\u30b7\u30e5\u8868\u306e\u7c21\u5358\u306a\u5b9f\u88c5","text":"

\u307e\u305a\u3001\u6700\u3082\u7c21\u5358\u306a\u30b1\u30fc\u30b9\u3092\u8003\u3048\u3066\u307f\u307e\u3057\u3087\u3046\uff1a\u914d\u5217\u306e\u307f\u3092\u4f7f\u3063\u3066\u30cf\u30c3\u30b7\u30e5\u8868\u3092\u5b9f\u88c5\u3059\u308b\u3053\u3068\u3002\u30cf\u30c3\u30b7\u30e5\u8868\u306b\u304a\u3044\u3066\u3001\u914d\u5217\u306e\u5404\u7a7a\u304d\u30b9\u30ed\u30c3\u30c8\u306f\u30d0\u30b1\u30c3\u30c8\u3068\u547c\u3070\u308c\u3001\u5404\u30d0\u30b1\u30c3\u30c8\u306f\u30ad\u30fc\u5024\u30da\u30a2\u3092\u683c\u7d0d\u3067\u304d\u307e\u3059\u3002\u3057\u305f\u304c\u3063\u3066\u3001\u30af\u30a8\u30ea\u64cd\u4f5c\u306fkey\u306b\u5bfe\u5fdc\u3059\u308b\u30d0\u30b1\u30c3\u30c8\u3092\u898b\u3064\u3051\u3001\u305d\u3053\u304b\u3089value\u3092\u53d6\u5f97\u3059\u308b\u3053\u3068\u306b\u306a\u308a\u307e\u3059\u3002

\u3067\u306f\u3001key\u306b\u57fa\u3065\u3044\u3066\u5bfe\u5fdc\u3059\u308b\u30d0\u30b1\u30c3\u30c8\u3092\u3069\u306e\u3088\u3046\u306b\u7279\u5b9a\u3059\u308b\u306e\u3067\u3057\u3087\u3046\u304b\uff1f\u3053\u308c\u306f\u30cf\u30c3\u30b7\u30e5\u95a2\u6570\u306b\u3088\u3063\u3066\u5b9f\u73fe\u3055\u308c\u307e\u3059\u3002\u30cf\u30c3\u30b7\u30e5\u95a2\u6570\u306e\u5f79\u5272\u306f\u3001\u3088\u308a\u5927\u304d\u306a\u5165\u529b\u7a7a\u9593\u3092\u3088\u308a\u5c0f\u3055\u306a\u51fa\u529b\u7a7a\u9593\u306b\u30de\u30c3\u30d4\u30f3\u30b0\u3059\u308b\u3053\u3068\u3067\u3059\u3002\u30cf\u30c3\u30b7\u30e5\u8868\u3067\u306f\u3001\u5165\u529b\u7a7a\u9593\u306f\u3059\u3079\u3066\u306e\u30ad\u30fc\u3067\u69cb\u6210\u3055\u308c\u3001\u51fa\u529b\u7a7a\u9593\u306f\u3059\u3079\u3066\u306e\u30d0\u30b1\u30c3\u30c8\uff08\u914d\u5217\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\uff09\u3067\u69cb\u6210\u3055\u308c\u307e\u3059\u3002\u3064\u307e\u308a\u3001key\u304c\u4e0e\u3048\u3089\u308c\u305f\u5834\u5408\u3001\u30cf\u30c3\u30b7\u30e5\u95a2\u6570\u3092\u4f7f\u7528\u3057\u3066\u5bfe\u5fdc\u3059\u308b\u30ad\u30fc\u5024\u30da\u30a2\u306e\u914d\u5217\u5185\u306e\u683c\u7d0d\u4f4d\u7f6e\u3092\u6c7a\u5b9a\u3067\u304d\u307e\u3059\u3002

\u4e0e\u3048\u3089\u308c\u305fkey\u306b\u5bfe\u3057\u3066\u3001\u30cf\u30c3\u30b7\u30e5\u95a2\u6570\u306e\u8a08\u7b97\u306f2\u3064\u306e\u30b9\u30c6\u30c3\u30d7\u3067\u69cb\u6210\u3055\u308c\u307e\u3059\uff1a

  1. \u7279\u5b9a\u306e\u30cf\u30c3\u30b7\u30e5\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0hash()\u3092\u4f7f\u7528\u3057\u3066\u30cf\u30c3\u30b7\u30e5\u5024\u3092\u8a08\u7b97\u3057\u307e\u3059\u3002
  2. \u30cf\u30c3\u30b7\u30e5\u5024\u3092\u30d0\u30b1\u30c3\u30c8\u6570\uff08\u914d\u5217\u9577\uff09capacity\u3067\u5270\u4f59\u3092\u53d6\u308a\u3001\u30ad\u30fc\u306b\u5bfe\u5fdc\u3059\u308b\u914d\u5217index\u3092\u53d6\u5f97\u3057\u307e\u3059\u3002
index = hash(key) % capacity\n

\u305d\u306e\u5f8c\u3001index\u3092\u4f7f\u7528\u3057\u3066\u30cf\u30c3\u30b7\u30e5\u8868\u5185\u306e\u5bfe\u5fdc\u3059\u308b\u30d0\u30b1\u30c3\u30c8\u306b\u30a2\u30af\u30bb\u30b9\u3057\u3001value\u3092\u53d6\u5f97\u3067\u304d\u307e\u3059\u3002

\u914d\u5217\u9577\u304ccapacity = 100\u3067\u3001\u30cf\u30c3\u30b7\u30e5\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u304chash(key) = key\u3068\u3057\u3066\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u308b\u3068\u3057\u307e\u3059\u3002\u3057\u305f\u304c\u3063\u3066\u3001\u30cf\u30c3\u30b7\u30e5\u95a2\u6570\u306fkey % 100\u3068\u3057\u3066\u8868\u73fe\u3067\u304d\u307e\u3059\u3002\u4ee5\u4e0b\u306e\u56f3\u306f\u3001key\u3092\u5b66\u7c4d\u756a\u53f7\u3001value\u3092\u540d\u524d\u3068\u3057\u3066\u3001\u30cf\u30c3\u30b7\u30e5\u95a2\u6570\u306e\u52d5\u4f5c\u539f\u7406\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002

\u56f3 6-2 \u00a0 \u30cf\u30c3\u30b7\u30e5\u95a2\u6570\u306e\u52d5\u4f5c\u539f\u7406

\u4ee5\u4e0b\u306e\u30b3\u30fc\u30c9\u306f\u7c21\u5358\u306a\u30cf\u30c3\u30b7\u30e5\u8868\u3092\u5b9f\u88c5\u3057\u3066\u3044\u307e\u3059\u3002\u3053\u3053\u3067\u306f\u3001key\u3068value\u3092Pair\u30af\u30e9\u30b9\u306b\u30ab\u30d7\u30bb\u30eb\u5316\u3057\u3066\u30ad\u30fc\u5024\u30da\u30a2\u3092\u8868\u73fe\u3057\u3066\u3044\u307e\u3059\u3002

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby array_hash_map.py
class Pair:\n    \"\"\"\u30ad\u30fc\u5024\u30da\u30a2\"\"\"\n\n    def __init__(self, key: int, val: str):\n        self.key = key\n        self.val = val\n\nclass ArrayHashMap:\n    \"\"\"\u914d\u5217\u5b9f\u88c5\u306b\u57fa\u3065\u304f\u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb\"\"\"\n\n    def __init__(self):\n        \"\"\"\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\"\"\"\n        # 100\u500b\u306e\u30d0\u30b1\u30c3\u30c8\u3092\u542b\u3080\u914d\u5217\u3092\u521d\u671f\u5316\n        self.buckets: list[Pair | None] = [None] * 100\n\n    def hash_func(self, key: int) -> int:\n        \"\"\"\u30cf\u30c3\u30b7\u30e5\u95a2\u6570\"\"\"\n        index = key % 100\n        return index\n\n    def get(self, key: int) -> str:\n        \"\"\"\u7167\u4f1a\u64cd\u4f5c\"\"\"\n        index: int = self.hash_func(key)\n        pair: Pair = self.buckets[index]\n        if pair is None:\n            return None\n        return pair.val\n\n    def put(self, key: int, val: str):\n        \"\"\"\u8ffd\u52a0\u64cd\u4f5c\"\"\"\n        pair = Pair(key, val)\n        index: int = self.hash_func(key)\n        self.buckets[index] = pair\n\n    def remove(self, key: int):\n        \"\"\"\u524a\u9664\u64cd\u4f5c\"\"\"\n        index: int = self.hash_func(key)\n        # None \u306b\u8a2d\u5b9a\u3057\u3001\u524a\u9664\u3092\u8868\u73fe\n        self.buckets[index] = None\n\n    def entry_set(self) -> list[Pair]:\n        \"\"\"\u3059\u3079\u3066\u306e\u30ad\u30fc\u5024\u30da\u30a2\u3092\u53d6\u5f97\"\"\"\n        result: list[Pair] = []\n        for pair in self.buckets:\n            if pair is not None:\n                result.append(pair)\n        return result\n\n    def key_set(self) -> list[int]:\n        \"\"\"\u3059\u3079\u3066\u306e\u30ad\u30fc\u3092\u53d6\u5f97\"\"\"\n        result = []\n        for pair in self.buckets:\n            if pair is not None:\n                result.append(pair.key)\n        return result\n\n    def value_set(self) -> list[str]:\n        \"\"\"\u3059\u3079\u3066\u306e\u5024\u3092\u53d6\u5f97\"\"\"\n        result = []\n        for pair in self.buckets:\n            if pair is not None:\n                result.append(pair.val)\n        return result\n\n    def print(self):\n        \"\"\"\u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb\u3092\u51fa\u529b\"\"\"\n        for pair in self.buckets:\n            if pair is not None:\n                print(pair.key, \"->\", pair.val)\n
array_hash_map.cpp
/* \u30ad\u30fc\u5024\u30da\u30a2 */\nstruct Pair {\n  public:\n    int key;\n    string val;\n    Pair(int key, string val) {\n        this->key = key;\n        this->val = val;\n    }\n};\n\n/* \u914d\u5217\u5b9f\u88c5\u306b\u57fa\u3065\u304f\u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb */\nclass ArrayHashMap {\n  private:\n    vector<Pair *> buckets;\n\n  public:\n    ArrayHashMap() {\n        // \u914d\u5217\u3092\u521d\u671f\u5316\u3001100\u500b\u306e\u30d0\u30b1\u30c3\u30c8\u3092\u542b\u3080\n        buckets = vector<Pair *>(100);\n    }\n\n    ~ArrayHashMap() {\n        // \u30e1\u30e2\u30ea\u3092\u89e3\u653e\n        for (const auto &bucket : buckets) {\n            delete bucket;\n        }\n        buckets.clear();\n    }\n\n    /* \u30cf\u30c3\u30b7\u30e5\u95a2\u6570 */\n    int hashFunc(int key) {\n        int index = key % 100;\n        return index;\n    }\n\n    /* \u30af\u30a8\u30ea\u64cd\u4f5c */\n    string get(int key) {\n        int index = hashFunc(key);\n        Pair *pair = buckets[index];\n        if (pair == nullptr)\n            return \"\";\n        return pair->val;\n    }\n\n    /* \u8ffd\u52a0\u64cd\u4f5c */\n    void put(int key, string val) {\n        Pair *pair = new Pair(key, val);\n        int index = hashFunc(key);\n        buckets[index] = pair;\n    }\n\n    /* \u524a\u9664\u64cd\u4f5c */\n    void remove(int key) {\n        int index = hashFunc(key);\n        // \u30e1\u30e2\u30ea\u3092\u89e3\u653e\u3057\u3066nullptr\u306b\u8a2d\u5b9a\n        delete buckets[index];\n        buckets[index] = nullptr;\n    }\n\n    /* \u3059\u3079\u3066\u306e\u30ad\u30fc\u5024\u30da\u30a2\u3092\u53d6\u5f97 */\n    vector<Pair *> pairSet() {\n        vector<Pair *> pairSet;\n        for (Pair *pair : buckets) {\n            if (pair != nullptr) {\n                pairSet.push_back(pair);\n            }\n        }\n        return pairSet;\n    }\n\n    /* \u3059\u3079\u3066\u306e\u30ad\u30fc\u3092\u53d6\u5f97 */\n    vector<int> keySet() {\n        vector<int> keySet;\n        for (Pair *pair : buckets) {\n            if (pair != nullptr) {\n                keySet.push_back(pair->key);\n            }\n        }\n        return keySet;\n    }\n\n    /* \u3059\u3079\u3066\u306e\u5024\u3092\u53d6\u5f97 */\n    vector<string> valueSet() {\n        vector<string> valueSet;\n        for (Pair *pair : buckets) {\n            if (pair != nullptr) {\n                valueSet.push_back(pair->val);\n            }\n        }\n        return valueSet;\n    }\n\n    /* \u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb\u3092\u5370\u5237 */\n    void print() {\n        for (Pair *kv : pairSet()) {\n            cout << kv->key << \" -> \" << kv->val << endl;\n        }\n    }\n};\n
array_hash_map.java
/* \u30ad\u30fc\u5024\u30da\u30a2 */\nclass Pair {\n    public int key;\n    public String val;\n\n    public Pair(int key, String val) {\n        this.key = key;\n        this.val = val;\n    }\n}\n\n/* \u914d\u5217\u5b9f\u88c5\u306b\u57fa\u3065\u304f\u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb */\nclass ArrayHashMap {\n    private List<Pair> buckets;\n\n    public ArrayHashMap() {\n        // 100\u500b\u306e\u30d0\u30b1\u30c3\u30c8\u3092\u542b\u3080\u914d\u5217\u3092\u521d\u671f\u5316\n        buckets = new ArrayList<>();\n        for (int i = 0; i < 100; i++) {\n            buckets.add(null);\n        }\n    }\n\n    /* \u30cf\u30c3\u30b7\u30e5\u95a2\u6570 */\n    private int hashFunc(int key) {\n        int index = key % 100;\n        return index;\n    }\n\n    /* \u30af\u30a8\u30ea\u64cd\u4f5c */\n    public String get(int key) {\n        int index = hashFunc(key);\n        Pair pair = buckets.get(index);\n        if (pair == null)\n            return null;\n        return pair.val;\n    }\n\n    /* \u8ffd\u52a0\u64cd\u4f5c */\n    public void put(int key, String val) {\n        Pair pair = new Pair(key, val);\n        int index = hashFunc(key);\n        buckets.set(index, pair);\n    }\n\n    /* \u524a\u9664\u64cd\u4f5c */\n    public void remove(int key) {\n        int index = hashFunc(key);\n        // null\u306b\u8a2d\u5b9a\u3057\u3066\u524a\u9664\u3092\u793a\u3059\n        buckets.set(index, null);\n    }\n\n    /* \u3059\u3079\u3066\u306e\u30ad\u30fc\u5024\u30da\u30a2\u3092\u53d6\u5f97 */\n    public List<Pair> pairSet() {\n        List<Pair> pairSet = new ArrayList<>();\n        for (Pair pair : buckets) {\n            if (pair != null)\n                pairSet.add(pair);\n        }\n        return pairSet;\n    }\n\n    /* \u3059\u3079\u3066\u306e\u30ad\u30fc\u3092\u53d6\u5f97 */\n    public List<Integer> keySet() {\n        List<Integer> keySet = new ArrayList<>();\n        for (Pair pair : buckets) {\n            if (pair != null)\n                keySet.add(pair.key);\n        }\n        return keySet;\n    }\n\n    /* \u3059\u3079\u3066\u306e\u5024\u3092\u53d6\u5f97 */\n    public List<String> valueSet() {\n        List<String> valueSet = new ArrayList<>();\n        for (Pair pair : buckets) {\n            if (pair != null)\n                valueSet.add(pair.val);\n        }\n        return valueSet;\n    }\n\n    /* \u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb\u3092\u5370\u5237 */\n    public void print() {\n        for (Pair kv : pairSet()) {\n            System.out.println(kv.key + \" -> \" + kv.val);\n        }\n    }\n}\n
array_hash_map.cs
[class]{Pair}-[func]{}\n\n[class]{ArrayHashMap}-[func]{}\n
array_hash_map.go
[class]{pair}-[func]{}\n\n[class]{arrayHashMap}-[func]{}\n
array_hash_map.swift
[file]{utils/pair.swift}-[class]{Pair}-[func]{}\n\n[class]{ArrayHashMap}-[func]{}\n
array_hash_map.js
[class]{Pair}-[func]{}\n\n[class]{ArrayHashMap}-[func]{}\n
array_hash_map.ts
[class]{Pair}-[func]{}\n\n[class]{ArrayHashMap}-[func]{}\n
array_hash_map.dart
[class]{Pair}-[func]{}\n\n[class]{ArrayHashMap}-[func]{}\n
array_hash_map.rs
[class]{Pair}-[func]{}\n\n[class]{ArrayHashMap}-[func]{}\n
array_hash_map.c
[class]{Pair}-[func]{}\n\n[class]{ArrayHashMap}-[func]{}\n
array_hash_map.kt
[class]{Pair}-[func]{}\n\n[class]{ArrayHashMap}-[func]{}\n
array_hash_map.rb
[class]{Pair}-[func]{}\n\n[class]{ArrayHashMap}-[func]{}\n
"},{"location":"chapter_hashing/hash_map/#613","title":"6.1.3 \u00a0 \u30cf\u30c3\u30b7\u30e5\u885d\u7a81\u3068\u30ea\u30b5\u30a4\u30ba","text":"

\u672c\u8cea\u7684\u306b\u3001\u30cf\u30c3\u30b7\u30e5\u95a2\u6570\u306e\u5f79\u5272\u306f\u3001\u3059\u3079\u3066\u306e\u30ad\u30fc\u306e\u5165\u529b\u7a7a\u9593\u5168\u4f53\u3092\u3001\u3059\u3079\u3066\u306e\u914d\u5217\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306e\u51fa\u529b\u7a7a\u9593\u306b\u30de\u30c3\u30d4\u30f3\u30b0\u3059\u308b\u3053\u3068\u3067\u3059\u3002\u3057\u304b\u3057\u3001\u5165\u529b\u7a7a\u9593\u306f\u51fa\u529b\u7a7a\u9593\u3088\u308a\u3082\u306f\u308b\u304b\u306b\u5927\u304d\u3044\u3053\u3068\u304c\u3088\u304f\u3042\u308a\u307e\u3059\u3002\u3057\u305f\u304c\u3063\u3066\u3001\u7406\u8ad6\u7684\u306b\u306f\u3001\u300c\u8907\u6570\u306e\u5165\u529b\u304c\u540c\u3058\u51fa\u529b\u306b\u5bfe\u5fdc\u3059\u308b\u300d\u30b1\u30fc\u30b9\u304c\u5e38\u306b\u5b58\u5728\u3057\u307e\u3059\u3002

\u4e0a\u8a18\u306e\u4f8b\u3067\u306f\u3001\u4e0e\u3048\u3089\u308c\u305f\u30cf\u30c3\u30b7\u30e5\u95a2\u6570\u3067\u3001\u5165\u529bkey\u306e\u4e0b\u4e8c\u6841\u304c\u540c\u3058\u5834\u5408\u3001\u30cf\u30c3\u30b7\u30e5\u95a2\u6570\u306f\u540c\u3058\u51fa\u529b\u3092\u751f\u6210\u3057\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001\u5b66\u7c4d\u756a\u53f712836\u306820336\u306e2\u4eba\u306e\u5b66\u751f\u3092\u30af\u30a8\u30ea\u3059\u308b\u3068\u3001\u4ee5\u4e0b\u306e\u3053\u3068\u304c\u308f\u304b\u308a\u307e\u3059\uff1a

12836 % 100 = 36\n20336 % 100 = 36\n

\u4e0b\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u4e21\u65b9\u306e\u5b66\u7c4d\u756a\u53f7\u304c\u540c\u3058\u540d\u524d\u3092\u6307\u3057\u3066\u304a\u308a\u3001\u3053\u308c\u306f\u660e\u3089\u304b\u306b\u9593\u9055\u3063\u3066\u3044\u307e\u3059\u3002\u3053\u306e\u8907\u6570\u306e\u5165\u529b\u304c\u540c\u3058\u51fa\u529b\u306b\u5bfe\u5fdc\u3059\u308b\u72b6\u6cc1\u3092\u30cf\u30c3\u30b7\u30e5\u885d\u7a81\u3068\u547c\u3073\u307e\u3059\u3002

\u56f3 6-3 \u00a0 \u30cf\u30c3\u30b7\u30e5\u885d\u7a81\u306e\u4f8b

\u30cf\u30c3\u30b7\u30e5\u8868\u306e\u5bb9\u91cf\\(n\\)\u304c\u5897\u52a0\u3059\u308b\u306b\u3064\u308c\u3066\u3001\u8907\u6570\u306e\u30ad\u30fc\u304c\u540c\u3058\u30d0\u30b1\u30c3\u30c8\u306b\u5272\u308a\u5f53\u3066\u3089\u308c\u308b\u78ba\u7387\u304c\u6e1b\u5c11\u3057\u3001\u885d\u7a81\u304c\u5c11\u306a\u304f\u306a\u308b\u3053\u3068\u306f\u7406\u89e3\u3057\u3084\u3059\u3044\u3067\u3059\u3002\u3057\u305f\u304c\u3063\u3066\u3001\u30cf\u30c3\u30b7\u30e5\u8868\u3092\u30ea\u30b5\u30a4\u30ba\u3059\u308b\u3053\u3068\u3067\u30cf\u30c3\u30b7\u30e5\u885d\u7a81\u3092\u6e1b\u3089\u3059\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

\u4e0b\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u30ea\u30b5\u30a4\u30ba\u524d\u306f\u3001\u30ad\u30fc\u5024\u30da\u30a2(136, A)\u3068(236, D)\u304c\u885d\u7a81\u3057\u3066\u3044\u307e\u3057\u305f\u3002\u3057\u304b\u3057\u3001\u30ea\u30b5\u30a4\u30ba\u5f8c\u306f\u885d\u7a81\u304c\u89e3\u6c7a\u3055\u308c\u3066\u3044\u307e\u3059\u3002

\u56f3 6-4 \u00a0 \u30cf\u30c3\u30b7\u30e5\u8868\u306e\u30ea\u30b5\u30a4\u30ba

\u914d\u5217\u306e\u62e1\u5f35\u3068\u540c\u69d8\u306b\u3001\u30cf\u30c3\u30b7\u30e5\u8868\u306e\u30ea\u30b5\u30a4\u30ba\u306b\u306f\u3059\u3079\u3066\u306e\u30ad\u30fc\u5024\u30da\u30a2\u3092\u5143\u306e\u30cf\u30c3\u30b7\u30e5\u8868\u304b\u3089\u65b0\u3057\u3044\u3082\u306e\u306b\u79fb\u884c\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u3001\u6642\u9593\u304c\u304b\u304b\u308a\u307e\u3059\u3002\u3055\u3089\u306b\u3001\u30cf\u30c3\u30b7\u30e5\u8868\u306ecapacity\u304c\u5909\u66f4\u3055\u308c\u308b\u305f\u3081\u3001\u30cf\u30c3\u30b7\u30e5\u95a2\u6570\u3092\u4f7f\u7528\u3057\u3066\u3059\u3079\u3066\u306e\u30ad\u30fc\u5024\u30da\u30a2\u306e\u683c\u7d0d\u4f4d\u7f6e\u3092\u518d\u8a08\u7b97\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u3001\u30ea\u30b5\u30a4\u30ba\u30d7\u30ed\u30bb\u30b9\u306e\u8a08\u7b97\u30aa\u30fc\u30d0\u30fc\u30d8\u30c3\u30c9\u304c\u3055\u3089\u306b\u5897\u52a0\u3057\u307e\u3059\u3002\u3057\u305f\u304c\u3063\u3066\u3001\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\u306f\u983b\u7e41\u306a\u30ea\u30b5\u30a4\u30ba\u3092\u9632\u3050\u305f\u3081\u306b\u3001\u30cf\u30c3\u30b7\u30e5\u8868\u306b\u5341\u5206\u5927\u304d\u306a\u5bb9\u91cf\u3092\u5272\u308a\u5f53\u3066\u308b\u3053\u3068\u304c\u3088\u304f\u3042\u308a\u307e\u3059\u3002

\u8ca0\u8377\u7387\u306f\u30cf\u30c3\u30b7\u30e5\u8868\u306e\u91cd\u8981\u306a\u6982\u5ff5\u3067\u3059\u3002\u30cf\u30c3\u30b7\u30e5\u8868\u5185\u306e\u8981\u7d20\u6570\u3068\u30d0\u30b1\u30c3\u30c8\u6570\u306e\u6bd4\u7387\u3068\u3057\u3066\u5b9a\u7fa9\u3055\u308c\u307e\u3059\u3002\u30cf\u30c3\u30b7\u30e5\u885d\u7a81\u306e\u6df1\u523b\u5ea6\u3092\u6e2c\u5b9a\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u3001\u3057\u3070\u3057\u3070\u30cf\u30c3\u30b7\u30e5\u8868\u306e\u30ea\u30b5\u30a4\u30ba\u306e\u30c8\u30ea\u30ac\u30fc\u3068\u3057\u3066\u3082\u6a5f\u80fd\u3057\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001Java\u3067\u306f\u3001\u8ca0\u8377\u7387\u304c\\(0.75\\)\u3092\u8d85\u3048\u308b\u3068\u3001\u30b7\u30b9\u30c6\u30e0\u306f\u30cf\u30c3\u30b7\u30e5\u8868\u3092\u5143\u306e\u30b5\u30a4\u30ba\u306e2\u500d\u306b\u30ea\u30b5\u30a4\u30ba\u3057\u307e\u3059\u3002

"},{"location":"chapter_hashing/summary/","title":"6.4 \u00a0 \u307e\u3068\u3081","text":""},{"location":"chapter_hashing/summary/#1","title":"1. \u00a0 \u91cd\u8981\u306a\u30dd\u30a4\u30f3\u30c8","text":""},{"location":"chapter_hashing/summary/#2-q-a","title":"2. \u00a0 Q & A","text":"

Q: \u30cf\u30c3\u30b7\u30e5\u8868\u306e\u6642\u9593\u8a08\u7b97\u91cf\u304c\\(O(n)\\)\u306b\u60aa\u5316\u3059\u308b\u306e\u306f\u3044\u3064\u3067\u3059\u304b\uff1f

\u30cf\u30c3\u30b7\u30e5\u8868\u306e\u6642\u9593\u8a08\u7b97\u91cf\u306f\u3001\u30cf\u30c3\u30b7\u30e5\u885d\u7a81\u304c\u6df1\u523b\u306a\u5834\u5408\u306b\\(O(n)\\)\u306b\u60aa\u5316\u3059\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002\u30cf\u30c3\u30b7\u30e5\u95a2\u6570\u304c\u9069\u5207\u306b\u8a2d\u8a08\u3055\u308c\u3001\u5bb9\u91cf\u304c\u9069\u5207\u306b\u8a2d\u5b9a\u3055\u308c\u3001\u885d\u7a81\u304c\u5747\u7b49\u306b\u5206\u6563\u3055\u308c\u3066\u3044\u308b\u5834\u5408\u3001\u6642\u9593\u8a08\u7b97\u91cf\u306f\\(O(1)\\)\u3067\u3059\u3002\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\u306e\u7d44\u307f\u8fbc\u307f\u30cf\u30c3\u30b7\u30e5\u8868\u3092\u4f7f\u7528\u3059\u308b\u5834\u5408\u3001\u901a\u5e38\u306f\u6642\u9593\u8a08\u7b97\u91cf\u3092\\(O(1)\\)\u3068\u8003\u3048\u307e\u3059\u3002

Q: \u306a\u305c\u30cf\u30c3\u30b7\u30e5\u95a2\u6570\\(f(x) = x\\)\u3092\u4f7f\u7528\u3057\u306a\u3044\u306e\u3067\u3059\u304b\uff1f\u3053\u308c\u306a\u3089\u885d\u7a81\u3092\u6392\u9664\u3067\u304d\u307e\u3059\u3002

\u30cf\u30c3\u30b7\u30e5\u95a2\u6570\\(f(x) = x\\)\u3067\u306f\u3001\u5404\u8981\u7d20\u304c\u4e00\u610f\u306e\u30d0\u30b1\u30c3\u30c8\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306b\u5bfe\u5fdc\u3057\u3001\u3053\u308c\u306f\u914d\u5217\u3068\u540c\u7b49\u3067\u3059\u3002\u3057\u304b\u3057\u3001\u5165\u529b\u7a7a\u9593\u306f\u901a\u5e38\u51fa\u529b\u7a7a\u9593\uff08\u914d\u5217\u9577\uff09\u3088\u308a\u3082\u306f\u308b\u304b\u306b\u5927\u304d\u3044\u305f\u3081\u3001\u30cf\u30c3\u30b7\u30e5\u95a2\u6570\u306e\u6700\u5f8c\u306e\u30b9\u30c6\u30c3\u30d7\u306f\u914d\u5217\u9577\u306e\u5270\u4f59\u3092\u53d6\u308b\u3053\u3068\u304c\u3088\u304f\u3042\u308a\u307e\u3059\u3002\u8a00\u3044\u63db\u3048\u308b\u3068\u3001\u30cf\u30c3\u30b7\u30e5\u8868\u306e\u76ee\u6a19\u306f\u3001\\(O(1)\\)\u306e\u30af\u30a8\u30ea\u52b9\u7387\u3092\u63d0\u4f9b\u3057\u306a\u304c\u3089\u3001\u3088\u308a\u5927\u304d\u306a\u72b6\u614b\u7a7a\u9593\u3092\u3088\u308a\u5c0f\u3055\u306a\u3082\u306e\u306b\u30de\u30c3\u30d4\u30f3\u30b0\u3059\u308b\u3053\u3068\u3067\u3059\u3002

Q: \u30cf\u30c3\u30b7\u30e5\u8868\u304c\u3053\u308c\u3089\u306e\u69cb\u9020\u3092\u4f7f\u3063\u3066\u5b9f\u88c5\u3055\u308c\u3066\u3044\u308b\u306b\u3082\u304b\u304b\u308f\u3089\u305a\u3001\u306a\u305c\u914d\u5217\u3001\u9023\u7d50\u30ea\u30b9\u30c8\u3001\u4e8c\u5206\u6728\u3088\u308a\u3082\u52b9\u7387\u7684\u306b\u306a\u308c\u308b\u306e\u3067\u3059\u304b\uff1f

\u307e\u305a\u3001\u30cf\u30c3\u30b7\u30e5\u8868\u306f\u6642\u9593\u52b9\u7387\u304c\u9ad8\u3044\u3067\u3059\u304c\u3001\u7a7a\u9593\u52b9\u7387\u306f\u4f4e\u3044\u3067\u3059\u3002\u30cf\u30c3\u30b7\u30e5\u8868\u306e\u30e1\u30e2\u30ea\u306e\u5927\u90e8\u5206\u306f\u672a\u4f7f\u7528\u306e\u307e\u307e\u3067\u3059\u3002

\u6b21\u306b\u3001\u30cf\u30c3\u30b7\u30e5\u8868\u306f\u7279\u5b9a\u306e\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9\u3067\u306e\u307f\u6642\u9593\u52b9\u7387\u304c\u9ad8\u3044\u3067\u3059\u3002\u914d\u5217\u3084\u9023\u7d50\u30ea\u30b9\u30c8\u3092\u4f7f\u7528\u3057\u3066\u540c\u3058\u6642\u9593\u8a08\u7b97\u91cf\u3067\u6a5f\u80fd\u3092\u5b9f\u88c5\u3067\u304d\u308b\u5834\u5408\u3001\u901a\u5e38\u306f\u30cf\u30c3\u30b7\u30e5\u8868\u3092\u4f7f\u7528\u3059\u308b\u3088\u308a\u3082\u9ad8\u901f\u3067\u3059\u3002\u3053\u308c\u306f\u3001\u30cf\u30c3\u30b7\u30e5\u95a2\u6570\u306e\u8a08\u7b97\u304c\u30aa\u30fc\u30d0\u30fc\u30d8\u30c3\u30c9\u3092\u767a\u751f\u3055\u305b\u3001\u6642\u9593\u8a08\u7b97\u91cf\u306e\u5b9a\u6570\u56e0\u5b50\u304c\u5927\u304d\u304f\u306a\u308b\u305f\u3081\u3067\u3059\u3002

\u6700\u5f8c\u306b\u3001\u30cf\u30c3\u30b7\u30e5\u8868\u306e\u6642\u9593\u8a08\u7b97\u91cf\u306f\u60aa\u5316\u3059\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001\u9023\u9396\u6cd5\u3067\u306f\u3001\u9023\u7d50\u30ea\u30b9\u30c8\u3084\u8d64\u9ed2\u6728\u3067\u691c\u7d22\u64cd\u4f5c\u3092\u5b9f\u884c\u3057\u3001\u3053\u308c\u306f\u4f9d\u7136\u3068\u3057\u3066\\(O(n)\\)\u6642\u9593\u306b\u60aa\u5316\u3059\u308b\u30ea\u30b9\u30af\u304c\u3042\u308a\u307e\u3059\u3002

Q: \u591a\u91cd\u30cf\u30c3\u30b7\u30e5\u306b\u3082\u8981\u7d20\u3092\u76f4\u63a5\u524a\u9664\u3067\u304d\u306a\u3044\u3068\u3044\u3046\u6b20\u9665\u304c\u3042\u308a\u307e\u3059\u304b\uff1f\u524a\u9664\u3068\u3057\u3066\u30de\u30fc\u30af\u3055\u308c\u305f\u7a7a\u9593\u306f\u518d\u5229\u7528\u3067\u304d\u307e\u3059\u304b\uff1f

\u591a\u91cd\u30cf\u30c3\u30b7\u30e5\u306f\u30aa\u30fc\u30d7\u30f3\u30a2\u30c9\u30ec\u30b9\u6cd5\u306e\u4e00\u5f62\u614b\u3067\u3042\u308a\u3001\u3059\u3079\u3066\u306e\u30aa\u30fc\u30d7\u30f3\u30a2\u30c9\u30ec\u30b9\u6cd5\u306b\u306f\u8981\u7d20\u3092\u76f4\u63a5\u524a\u9664\u3067\u304d\u306a\u3044\u3068\u3044\u3046\u6b20\u70b9\u304c\u3042\u308a\u307e\u3059\u3002\u8981\u7d20\u3092\u524a\u9664\u6e08\u307f\u3068\u3057\u3066\u30de\u30fc\u30af\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u30de\u30fc\u30af\u3055\u308c\u305f\u7a7a\u9593\u306f\u518d\u5229\u7528\u3067\u304d\u307e\u3059\u3002\u30cf\u30c3\u30b7\u30e5\u8868\u306b\u65b0\u3057\u3044\u8981\u7d20\u3092\u633f\u5165\u3059\u308b\u969b\u3001\u30cf\u30c3\u30b7\u30e5\u95a2\u6570\u304c\u524a\u9664\u6e08\u307f\u3068\u3057\u3066\u30de\u30fc\u30af\u3055\u308c\u305f\u4f4d\u7f6e\u3092\u6307\u3057\u3066\u3044\u308b\u5834\u5408\u3001\u305d\u306e\u4f4d\u7f6e\u306f\u65b0\u3057\u3044\u8981\u7d20\u306b\u3088\u3063\u3066\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u30cf\u30c3\u30b7\u30e5\u8868\u306e\u30d7\u30ed\u30fc\u30d6\u30b7\u30fc\u30b1\u30f3\u30b9\u3092\u7dad\u6301\u3057\u306a\u304c\u3089\u3001\u7a7a\u9593\u306e\u52b9\u7387\u7684\u306a\u4f7f\u7528\u304c\u4fdd\u8a3c\u3055\u308c\u307e\u3059\u3002

Q: \u306a\u305c\u7dda\u5f62\u30d7\u30ed\u30fc\u30d6\u306e\u691c\u7d22\u30d7\u30ed\u30bb\u30b9\u4e2d\u306b\u30cf\u30c3\u30b7\u30e5\u885d\u7a81\u304c\u767a\u751f\u3059\u308b\u306e\u3067\u3059\u304b\uff1f

\u691c\u7d22\u30d7\u30ed\u30bb\u30b9\u4e2d\u3001\u30cf\u30c3\u30b7\u30e5\u95a2\u6570\u306f\u5bfe\u5fdc\u3059\u308b\u30d0\u30b1\u30c3\u30c8\u3068\u30ad\u30fc\u5024\u30da\u30a2\u3092\u6307\u3057\u307e\u3059\u3002key\u304c\u4e00\u81f4\u3057\u306a\u3044\u5834\u5408\u3001\u30cf\u30c3\u30b7\u30e5\u885d\u7a81\u3092\u793a\u3057\u307e\u3059\u3002\u3057\u305f\u304c\u3063\u3066\u3001\u7dda\u5f62\u30d7\u30ed\u30fc\u30d6\u306f\u6b63\u3057\u3044\u30ad\u30fc\u5024\u30da\u30a2\u304c\u898b\u3064\u304b\u308b\u304b\u691c\u7d22\u304c\u5931\u6557\u3059\u308b\u307e\u3067\u3001\u4e8b\u524d\u306b\u6c7a\u3081\u3089\u308c\u305f\u30b9\u30c6\u30c3\u30d7\u30b5\u30a4\u30ba\u3067\u4e0b\u65b9\u5411\u306b\u691c\u7d22\u3057\u307e\u3059\u3002

Q: \u306a\u305c\u30cf\u30c3\u30b7\u30e5\u8868\u306e\u30ea\u30b5\u30a4\u30ba\u304c\u30cf\u30c3\u30b7\u30e5\u885d\u7a81\u3092\u7de9\u548c\u3067\u304d\u308b\u306e\u3067\u3059\u304b\uff1f

\u30cf\u30c3\u30b7\u30e5\u95a2\u6570\u306e\u6700\u5f8c\u306e\u30b9\u30c6\u30c3\u30d7\u306f\u3001\u51fa\u529b\u3092\u914d\u5217\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u7bc4\u56f2\u5185\u306b\u4fdd\u3064\u305f\u3081\u306b\u3001\u914d\u5217\u9577\\(n\\)\u306e\u5270\u4f59\u3092\u53d6\u308b\u3053\u3068\u304c\u3088\u304f\u3042\u308a\u307e\u3059\u3002\u30ea\u30b5\u30a4\u30ba\u6642\u3001\u914d\u5217\u9577\\(n\\)\u304c\u5909\u5316\u3057\u3001\u30ad\u30fc\u306b\u5bfe\u5fdc\u3059\u308b\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3082\u5909\u5316\u3059\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002\u4ee5\u524d\u306b\u540c\u3058\u30d0\u30b1\u30c3\u30c8\u306b\u30de\u30c3\u30d4\u30f3\u30b0\u3055\u308c\u3066\u3044\u305f\u30ad\u30fc\u304c\u3001\u30ea\u30b5\u30a4\u30ba\u5f8c\u306b\u8907\u6570\u306e\u30d0\u30b1\u30c3\u30c8\u306b\u5206\u6563\u3055\u308c\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u3001\u305d\u308c\u306b\u3088\u3063\u3066\u30cf\u30c3\u30b7\u30e5\u885d\u7a81\u304c\u7de9\u548c\u3055\u308c\u307e\u3059\u3002

"},{"location":"chapter_heap/","title":"\u7b2c 8 \u7ae0 \u00a0 \u30d2\u30fc\u30d7","text":"

Abstract

\u30d2\u30fc\u30d7\u306f\u5c71\u3068\u305d\u306e\u967a\u3057\u3044\u5cf0\u306e\u3088\u3046\u306b\u3001\u5c64\u3092\u306a\u3057\u3066\u8d77\u4f0f\u3057\u3001\u305d\u308c\u305e\u308c\u304c\u72ec\u7279\u306e\u5f62\u3092\u6301\u3063\u3066\u3044\u307e\u3059\u3002

\u5404\u5c71\u306e\u9802\u306f\u6563\u3089\u3070\u3063\u305f\u9ad8\u3055\u3067\u4e0a\u4e0b\u3057\u307e\u3059\u304c\u3001\u6700\u3082\u9ad8\u3044\u3082\u306e\u304c\u5e38\u306b\u6700\u521d\u306b\u6ce8\u76ee\u3092\u96c6\u3081\u307e\u3059\u3002

"},{"location":"chapter_heap/#_1","title":"\u7ae0\u306e\u5185\u5bb9","text":""},{"location":"chapter_heap/build_heap/","title":"8.2 \u00a0 \u30d2\u30fc\u30d7\u69cb\u7bc9\u64cd\u4f5c","text":"

\u5834\u5408\u306b\u3088\u3063\u3066\u306f\u3001\u30ea\u30b9\u30c8\u306e\u3059\u3079\u3066\u306e\u8981\u7d20\u3092\u4f7f\u7528\u3057\u3066\u30d2\u30fc\u30d7\u3092\u69cb\u7bc9\u3057\u305f\u3044\u3053\u3068\u304c\u3042\u308a\u3001\u3053\u306e\u30d7\u30ed\u30bb\u30b9\u306f\u300c\u30d2\u30fc\u30d7\u69cb\u7bc9\u64cd\u4f5c\u300d\u3068\u3057\u3066\u77e5\u3089\u308c\u3066\u3044\u307e\u3059\u3002

"},{"location":"chapter_heap/build_heap/#821","title":"8.2.1 \u00a0 \u30d2\u30fc\u30d7\u633f\u5165\u64cd\u4f5c\u306b\u3088\u308b\u5b9f\u88c5","text":"

\u307e\u305a\u3001\u7a7a\u306e\u30d2\u30fc\u30d7\u3092\u4f5c\u6210\u3057\u3001\u6b21\u306b\u30ea\u30b9\u30c8\u3092\u53cd\u5fa9\u51e6\u7406\u3057\u3066\u3001\u5404\u8981\u7d20\u306b\u5bfe\u3057\u3066\u9806\u756a\u306b\u300c\u30d2\u30fc\u30d7\u633f\u5165\u64cd\u4f5c\u300d\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u8981\u7d20\u3092\u30d2\u30fc\u30d7\u306e\u672b\u5c3e\u306b\u8ffd\u52a0\u3057\u3001\u6b21\u306b\u4e0b\u304b\u3089\u4e0a\u306b\u300c\u30d2\u30fc\u30d7\u5316\u300d\u3059\u308b\u3053\u3068\u3092\u610f\u5473\u3057\u307e\u3059\u3002

\u30d2\u30fc\u30d7\u306b\u8981\u7d20\u304c\u8ffd\u52a0\u3055\u308c\u308b\u305f\u3073\u306b\u3001\u30d2\u30fc\u30d7\u306e\u9577\u3055\u306f1\u3064\u305a\u3064\u5897\u52a0\u3057\u307e\u3059\u3002\u30ce\u30fc\u30c9\u306f\u4e8c\u5206\u6728\u306b\u4e0a\u304b\u3089\u4e0b\u306b\u8ffd\u52a0\u3055\u308c\u308b\u305f\u3081\u3001\u30d2\u30fc\u30d7\u306f\u300c\u4e0a\u304b\u3089\u4e0b\u306b\u300d\u69cb\u7bc9\u3055\u308c\u307e\u3059\u3002

\u8981\u7d20\u6570\u3092\\(n\\)\u3068\u3059\u308b\u3068\u3001\u5404\u8981\u7d20\u306e\u633f\u5165\u64cd\u4f5c\u306f\\(O(\\log{n})\\)\u6642\u9593\u304b\u304b\u308b\u305f\u3081\u3001\u3053\u306e\u30d2\u30fc\u30d7\u69cb\u7bc9\u65b9\u6cd5\u306e\u6642\u9593\u8a08\u7b97\u91cf\u306f\\(O(n \\log n)\\)\u3067\u3059\u3002

"},{"location":"chapter_heap/build_heap/#822","title":"8.2.2 \u00a0 \u8d70\u67fb\u306b\u3088\u308b\u30d2\u30fc\u30d7\u5316\u306e\u5b9f\u88c5","text":"

\u5b9f\u969b\u306b\u306f\u30012\u3064\u306e\u30b9\u30c6\u30c3\u30d7\u3067\u3088\u308a\u52b9\u7387\u7684\u306a\u30d2\u30fc\u30d7\u69cb\u7bc9\u65b9\u6cd5\u3092\u5b9f\u88c5\u3067\u304d\u307e\u3059\u3002

  1. \u30ea\u30b9\u30c8\u306e\u3059\u3079\u3066\u306e\u8981\u7d20\u3092\u305d\u306e\u307e\u307e\u30d2\u30fc\u30d7\u306b\u8ffd\u52a0\u3057\u307e\u3059\u3002\u3053\u306e\u6642\u70b9\u3067\u306f\u3001\u30d2\u30fc\u30d7\u306e\u6027\u8cea\u306f\u307e\u3060\u6e80\u305f\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002
  2. \u30d2\u30fc\u30d7\u3092\u9006\u9806\uff08\u30ec\u30d9\u30eb\u9806\u8d70\u67fb\u306e\u9006\uff09\u3067\u8d70\u67fb\u3057\u3001\u5404\u975e\u8449\u30ce\u30fc\u30c9\u306b\u5bfe\u3057\u3066\u300c\u4e0a\u304b\u3089\u4e0b\u306e\u30d2\u30fc\u30d7\u5316\u300d\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002

\u30ce\u30fc\u30c9\u3092\u30d2\u30fc\u30d7\u5316\u3057\u305f\u5f8c\u3001\u305d\u306e\u30ce\u30fc\u30c9\u3092\u6839\u3068\u3059\u308b\u90e8\u5206\u6728\u306f\u6709\u52b9\u306a\u90e8\u5206\u30d2\u30fc\u30d7\u306b\u306a\u308a\u307e\u3059\u3002\u8d70\u67fb\u304c\u9006\u9806\u3067\u3042\u308b\u305f\u3081\u3001\u30d2\u30fc\u30d7\u306f\u300c\u4e0b\u304b\u3089\u4e0a\u306b\u300d\u69cb\u7bc9\u3055\u308c\u307e\u3059\u3002

\u9006\u8d70\u67fb\u3092\u9078\u629e\u3059\u308b\u7406\u7531\u306f\u3001\u73fe\u5728\u306e\u30ce\u30fc\u30c9\u306e\u4e0b\u306e\u90e8\u5206\u6728\u304c\u3059\u3067\u306b\u6709\u52b9\u306a\u90e8\u5206\u30d2\u30fc\u30d7\u3067\u3042\u308b\u3053\u3068\u3092\u4fdd\u8a3c\u3057\u3001\u73fe\u5728\u306e\u30ce\u30fc\u30c9\u306e\u30d2\u30fc\u30d7\u5316\u3092\u52b9\u679c\u7684\u306b\u3059\u308b\u305f\u3081\u3067\u3059\u3002

\u8a00\u53ca\u3059\u308b\u4fa1\u5024\u304c\u3042\u308b\u306e\u306f\u3001**\u8449\u30ce\u30fc\u30c9\u306f\u5b50\u3092\u6301\u305f\u306a\u3044\u305f\u3081\u3001\u81ea\u7136\u306b\u6709\u52b9\u306a\u90e8\u5206\u30d2\u30fc\u30d7\u3092\u5f62\u6210\u3057\u3001\u30d2\u30fc\u30d7\u5316\u3059\u308b\u5fc5\u8981\u304c\u306a\u3044**\u3068\u3044\u3046\u3053\u3068\u3067\u3059\u3002\u4ee5\u4e0b\u306e\u30b3\u30fc\u30c9\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u6700\u5f8c\u306e\u975e\u8449\u30ce\u30fc\u30c9\u306f\u6700\u5f8c\u306e\u30ce\u30fc\u30c9\u306e\u89aa\u3067\u3059\u3002\u305d\u3053\u304b\u3089\u958b\u59cb\u3057\u3066\u9006\u9806\u306b\u8d70\u67fb\u3057\u3066\u30d2\u30fc\u30d7\u5316\u3092\u5b9f\u884c\u3057\u307e\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby my_heap.py
def __init__(self, nums: list[int]):\n    \"\"\"\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u3001\u5165\u529b\u30ea\u30b9\u30c8\u306b\u57fa\u3065\u3044\u3066\u30d2\u30fc\u30d7\u3092\u69cb\u7bc9\"\"\"\n    # \u3059\u3079\u3066\u306e\u30ea\u30b9\u30c8\u8981\u7d20\u3092\u30d2\u30fc\u30d7\u306b\u8ffd\u52a0\n    self.max_heap = nums\n    # \u8449\u4ee5\u5916\u306e\u3059\u3079\u3066\u306e\u30ce\u30fc\u30c9\u3092\u30d2\u30fc\u30d7\u5316\n    for i in range(self.parent(self.size() - 1), -1, -1):\n        self.sift_down(i)\n
my_heap.cpp
/* \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u3001\u5165\u529b\u30ea\u30b9\u30c8\u306b\u57fa\u3065\u3044\u3066\u30d2\u30fc\u30d7\u3092\u69cb\u7bc9 */\nMaxHeap(vector<int> nums) {\n    // \u3059\u3079\u3066\u306e\u30ea\u30b9\u30c8\u8981\u7d20\u3092\u30d2\u30fc\u30d7\u306b\u8ffd\u52a0\n    maxHeap = nums;\n    // \u8449\u4ee5\u5916\u306e\u3059\u3079\u3066\u306e\u30ce\u30fc\u30c9\u3092\u30d2\u30fc\u30d7\u5316\n    for (int i = parent(size() - 1); i >= 0; i--) {\n        siftDown(i);\n    }\n}\n
my_heap.java
/* \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u3001\u5165\u529b\u30ea\u30b9\u30c8\u306b\u57fa\u3065\u3044\u3066\u30d2\u30fc\u30d7\u3092\u69cb\u7bc9 */\nMaxHeap(List<Integer> nums) {\n    // \u3059\u3079\u3066\u306e\u30ea\u30b9\u30c8\u8981\u7d20\u3092\u30d2\u30fc\u30d7\u306b\u8ffd\u52a0\n    maxHeap = new ArrayList<>(nums);\n    // \u8449\u3092\u9664\u304f\u3059\u3079\u3066\u306e\u30ce\u30fc\u30c9\u3092\u30d2\u30fc\u30d7\u5316\n    for (int i = parent(size() - 1); i >= 0; i--) {\n        siftDown(i);\n    }\n}\n
my_heap.cs
[class]{MaxHeap}-[func]{MaxHeap}\n
my_heap.go
[class]{maxHeap}-[func]{newMaxHeap}\n
my_heap.swift
[class]{MaxHeap}-[func]{init}\n
my_heap.js
[class]{MaxHeap}-[func]{constructor}\n
my_heap.ts
[class]{MaxHeap}-[func]{constructor}\n
my_heap.dart
[class]{MaxHeap}-[func]{MaxHeap}\n
my_heap.rs
[class]{MaxHeap}-[func]{new}\n
my_heap.c
[class]{MaxHeap}-[func]{newMaxHeap}\n
my_heap.kt
[class]{MaxHeap}-[func]{}\n
my_heap.rb
[class]{MaxHeap}-[func]{initialize}\n
"},{"location":"chapter_heap/build_heap/#823","title":"8.2.3 \u00a0 \u8a08\u7b97\u91cf\u5206\u6790","text":"

\u6b21\u306b\u3001\u3053\u306e\u7b2c2\u306e\u30d2\u30fc\u30d7\u69cb\u7bc9\u65b9\u6cd5\u306e\u6642\u9593\u8a08\u7b97\u91cf\u3092\u8a08\u7b97\u3057\u3066\u307f\u307e\u3057\u3087\u3046\u3002

\u3053\u306e2\u3064\u3092\u639b\u3051\u5408\u308f\u305b\u308b\u3068\u3001\u30d2\u30fc\u30d7\u69cb\u7bc9\u30d7\u30ed\u30bb\u30b9\u306e\u6642\u9593\u8a08\u7b97\u91cf\u306f\\(O(n \\log n)\\)\u3068\u306a\u308a\u307e\u3059\u3002\u3057\u304b\u3057\u3001\u3053\u306e\u63a8\u5b9a\u306f\u6b63\u78ba\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u4e8c\u5206\u6728\u306e\u4e0b\u4f4d\u30ec\u30d9\u30eb\u306b\u306f\u4e0a\u4f4d\u3088\u308a\u3082\u306f\u308b\u304b\u306b\u591a\u304f\u306e\u30ce\u30fc\u30c9\u304c\u3042\u308b\u3068\u3044\u3046\u6027\u8cea\u3092\u8003\u616e\u3057\u3066\u3044\u306a\u3044\u304b\u3089\u3067\u3059\u3002

\u3088\u308a\u6b63\u78ba\u306a\u8a08\u7b97\u3092\u884c\u3044\u307e\u3057\u3087\u3046\u3002\u8a08\u7b97\u3092\u7c21\u7d20\u5316\u3059\u308b\u305f\u3081\u3001\\(n\\)\u500b\u306e\u30ce\u30fc\u30c9\u3068\u9ad8\u3055\\(h\\)\u3092\u6301\u3064\u300c\u5b8c\u5168\u4e8c\u5206\u6728\u300d\u3092\u4eee\u5b9a\u3057\u307e\u3059\u3002\u3053\u306e\u4eee\u5b9a\u306f\u7d50\u679c\u306e\u6b63\u78ba\u6027\u306b\u5f71\u97ff\u3057\u307e\u305b\u3093\u3002

\u56f3 8-5 \u00a0 \u5b8c\u5168\u4e8c\u5206\u6728\u306e\u5404\u30ec\u30d9\u30eb\u306e\u30ce\u30fc\u30c9\u6570

\u4e0a\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u30ce\u30fc\u30c9\u304c\u300c\u4e0a\u304b\u3089\u4e0b\u306b\u30d2\u30fc\u30d7\u5316\u3055\u308c\u308b\u300d\u6700\u5927\u53cd\u5fa9\u56de\u6570\u306f\u3001\u305d\u306e\u30ce\u30fc\u30c9\u304b\u3089\u8449\u30ce\u30fc\u30c9\u307e\u3067\u306e\u8ddd\u96e2\u3068\u7b49\u3057\u304f\u3001\u3053\u308c\u306f\u6b63\u78ba\u306b\u300c\u30ce\u30fc\u30c9\u306e\u9ad8\u3055\u300d\u3067\u3059\u3002\u3057\u305f\u304c\u3063\u3066\u3001\u5404\u30ec\u30d9\u30eb\u3067\u300c\u30ce\u30fc\u30c9\u6570\u00d7\u30ce\u30fc\u30c9\u306e\u9ad8\u3055\u300d\u3092\u5408\u8a08\u3057\u3066\u3001**\u3059\u3079\u3066\u306e\u30ce\u30fc\u30c9\u306e\u7dcf\u30d2\u30fc\u30d7\u5316\u53cd\u5fa9\u56de\u6570\u3092\u5f97\u308b**\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

\\[ T(h) = 2^0h + 2^1(h-1) + 2^2(h-2) + \\dots + 2^{(h-1)}\\times1 \\]

\u4e0a\u8a18\u306e\u65b9\u7a0b\u5f0f\u3092\u7c21\u7d20\u5316\u3059\u308b\u305f\u3081\u306b\u3001\u9ad8\u6821\u306e\u6570\u5217\u306e\u77e5\u8b58\u3092\u4f7f\u7528\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u307e\u305a\\(T(h)\\)\u306b\\(2\\)\u3092\u639b\u3051\u3066\u4ee5\u4e0b\u3092\u5f97\u307e\u3059\uff1a

\\[ \\begin{aligned} T(h) & = 2^0h + 2^1(h-1) + 2^2(h-2) + \\dots + 2^{h-1}\\times1 \\newline 2T(h) & = 2^1h + 2^2(h-1) + 2^3(h-2) + \\dots + 2^h\\times1 \\newline \\end{aligned} \\]

\u5909\u4f4d\u6cd5\u3092\u4f7f\u7528\u3057\u3066\\(2T(h)\\)\u304b\u3089\\(T(h)\\)\u3092\u6e1b\u7b97\u3059\u308b\u3068\u3001\u4ee5\u4e0b\u3092\u5f97\u307e\u3059\uff1a

\\[ 2T(h) - T(h) = T(h) = -2^0h + 2^1 + 2^2 + \\dots + 2^{h-1} + 2^h \\]

\u65b9\u7a0b\u5f0f\u3092\u89b3\u5bdf\u3059\u308b\u3068\u3001\\(T(h)\\)\u306f\u7b49\u6bd4\u6570\u5217\u3067\u3042\u308a\u3001\u548c\u306e\u516c\u5f0f\u3092\u4f7f\u7528\u3057\u3066\u76f4\u63a5\u8a08\u7b97\u3067\u304d\u3001\u6642\u9593\u8a08\u7b97\u91cf\u306f\u4ee5\u4e0b\u306b\u306a\u308a\u307e\u3059\uff1a

\\[ \\begin{aligned} T(h) & = 2 \\frac{1 - 2^h}{1 - 2} - h \\newline & = 2^{h+1} - h - 2 \\newline & = O(2^h) \\end{aligned} \\]

\u3055\u3089\u306b\u3001\u9ad8\u3055\\(h\\)\u306e\u5b8c\u5168\u4e8c\u5206\u6728\u306f\\(n = 2^{h+1} - 1\\)\u500b\u306e\u30ce\u30fc\u30c9\u3092\u6301\u3064\u305f\u3081\u3001\u8a08\u7b97\u91cf\u306f\\(O(2^h) = O(n)\\)\u3067\u3059\u3002\u3053\u306e\u8a08\u7b97\u306f\u3001**\u30ea\u30b9\u30c8\u3092\u5165\u529b\u3057\u3066\u30d2\u30fc\u30d7\u3092\u69cb\u7bc9\u3059\u308b\u6642\u9593\u8a08\u7b97\u91cf\u304c\\(O(n)\\)\u3067\u3042\u308a\u3001\u975e\u5e38\u306b\u52b9\u7387\u7684\u3067\u3042\u308b**\u3053\u3068\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002

"},{"location":"chapter_heap/heap/","title":"8.1 \u00a0 \u30d2\u30fc\u30d7","text":"

\u30d2\u30fc\u30d7\u306f\u7279\u5b9a\u306e\u6761\u4ef6\u3092\u6e80\u305f\u3059\u5b8c\u5099\u4e8c\u5206\u6728\u3067\u3001\u4e3b\u306b\u6b21\u306e2\u3064\u306e\u30bf\u30a4\u30d7\u306b\u5206\u985e\u3055\u308c\u307e\u3059\uff08\u4e0b\u56f3\u53c2\u7167\uff09\u3002

\u56f3 8-1 \u00a0 \u6700\u5c0f\u30d2\u30fc\u30d7\u3068\u6700\u5927\u30d2\u30fc\u30d7

\u5b8c\u5099\u4e8c\u5206\u6728\u306e\u7279\u5225\u306a\u30b1\u30fc\u30b9\u3068\u3057\u3066\u3001\u30d2\u30fc\u30d7\u306b\u306f\u4ee5\u4e0b\u306e\u7279\u6027\u304c\u3042\u308a\u307e\u3059\uff1a

"},{"location":"chapter_heap/heap/#811","title":"8.1.1 \u00a0 \u30d2\u30fc\u30d7\u306e\u4e00\u822c\u7684\u306a\u64cd\u4f5c","text":"

\u591a\u304f\u306e\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\u304c\u512a\u5148\u5ea6\u30ad\u30e5\u30fc\u3092\u63d0\u4f9b\u3057\u3066\u3044\u308b\u3053\u3068\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u308c\u306f\u512a\u5148\u5ea6\u4ed8\u304d\u30bd\u30fc\u30c8\u3092\u6301\u3064\u30ad\u30e5\u30fc\u3068\u3057\u3066\u5b9a\u7fa9\u3055\u308c\u308b\u62bd\u8c61\u30c7\u30fc\u30bf\u69cb\u9020\u3067\u3059\u3002

\u5b9f\u969b\u306b\u306f\u3001\u30d2\u30fc\u30d7\u306f\u512a\u5148\u5ea6\u30ad\u30e5\u30fc\u3092\u5b9f\u88c5\u3059\u308b\u305f\u3081\u306b\u3088\u304f\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002\u6700\u5927\u30d2\u30fc\u30d7\u306f\u3001\u8981\u7d20\u304c\u964d\u9806\u3067\u30c7\u30ad\u30e5\u30fc\u3055\u308c\u308b\u512a\u5148\u5ea6\u30ad\u30e5\u30fc\u306b\u5bfe\u5fdc\u3057\u307e\u3059\u3002\u4f7f\u7528\u306e\u89b3\u70b9\u304b\u3089\u3001\u300c\u512a\u5148\u5ea6\u30ad\u30e5\u30fc\u300d\u3068\u300c\u30d2\u30fc\u30d7\u300d\u3092\u540c\u7b49\u306e\u30c7\u30fc\u30bf\u69cb\u9020\u3068\u8003\u3048\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u3057\u305f\u304c\u3063\u3066\u3001\u3053\u306e\u672c\u3067\u306f\u4e21\u8005\u3092\u7279\u5225\u306b\u533a\u5225\u305b\u305a\u3001\u7d71\u4e00\u3057\u3066\u300c\u30d2\u30fc\u30d7\u300d\u3068\u547c\u3073\u307e\u3059\u3002

\u30d2\u30fc\u30d7\u306e\u4e00\u822c\u7684\u306a\u64cd\u4f5c\u3092\u4e0b\u8868\u306b\u793a\u3057\u307e\u3059\u3002\u30e1\u30bd\u30c3\u30c9\u540d\u306f\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\u306b\u3088\u3063\u3066\u7570\u306a\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002

\u8868 8-1 \u00a0 \u30d2\u30fc\u30d7\u64cd\u4f5c\u306e\u52b9\u7387

\u30e1\u30bd\u30c3\u30c9\u540d \u8aac\u660e \u6642\u9593\u8a08\u7b97\u91cf push() \u30d2\u30fc\u30d7\u306b\u8981\u7d20\u3092\u8ffd\u52a0 \\(O(\\log n)\\) pop() \u30d2\u30fc\u30d7\u304b\u3089\u5148\u982d\u8981\u7d20\u3092\u524a\u9664 \\(O(\\log n)\\) peek() \u5148\u982d\u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9\uff08\u6700\u5927/\u6700\u5c0f\u30d2\u30fc\u30d7\u306e\u5834\u5408\u3001\u6700\u5927/\u6700\u5c0f\u5024\uff09 \\(O(1)\\) size() \u30d2\u30fc\u30d7\u5185\u306e\u8981\u7d20\u6570\u3092\u53d6\u5f97 \\(O(1)\\) isEmpty() \u30d2\u30fc\u30d7\u304c\u7a7a\u304b\u3069\u3046\u304b\u3092\u30c1\u30a7\u30c3\u30af \\(O(1)\\)

\u5b9f\u969b\u306b\u306f\u3001\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\u306b\u3088\u3063\u3066\u63d0\u4f9b\u3055\u308c\u308b\u30d2\u30fc\u30d7\u30af\u30e9\u30b9\uff08\u307e\u305f\u306f\u512a\u5148\u5ea6\u30ad\u30e5\u30fc\u30af\u30e9\u30b9\uff09\u3092\u76f4\u63a5\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002

\u30bd\u30fc\u30c8\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3067\u300c\u6607\u9806\u300d\u3068\u300c\u964d\u9806\u300d\u304c\u3042\u308b\u3088\u3046\u306b\u3001flag\u3092\u8a2d\u5b9a\u3059\u308b\u304bComparator\u3092\u5909\u66f4\u3059\u308b\u3053\u3068\u3067\u300c\u6700\u5c0f\u30d2\u30fc\u30d7\u300d\u3068\u300c\u6700\u5927\u30d2\u30fc\u30d7\u300d\u3092\u5207\u308a\u66ff\u3048\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u30b3\u30fc\u30c9\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby heap.py
# \u6700\u5c0f\u30d2\u30fc\u30d7\u306e\u521d\u671f\u5316\nmin_heap, flag = [], 1\n# \u6700\u5927\u30d2\u30fc\u30d7\u306e\u521d\u671f\u5316\nmax_heap, flag = [], -1\n\n# Python\u306eheapq\u30e2\u30b8\u30e5\u30fc\u30eb\u306f\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u6700\u5c0f\u30d2\u30fc\u30d7\u3092\u5b9f\u88c5\n# \u8981\u7d20\u3092\u30d2\u30fc\u30d7\u306b\u30d7\u30c3\u30b7\u30e5\u3059\u308b\u524d\u306b\u8ca0\u306e\u5024\u306b\u3059\u308b\u3053\u3068\u3067\u3001\u9806\u5e8f\u3092\u53cd\u8ee2\u3055\u305b\u3001\u6700\u5927\u30d2\u30fc\u30d7\u3092\u5b9f\u88c5\n# \u3053\u306e\u4f8b\u3067\u306f\u3001flag = 1\u306f\u6700\u5c0f\u30d2\u30fc\u30d7\u306b\u5bfe\u5fdc\u3057\u3001flag = -1\u306f\u6700\u5927\u30d2\u30fc\u30d7\u306b\u5bfe\u5fdc\n\n# \u30d2\u30fc\u30d7\u306b\u8981\u7d20\u3092\u30d7\u30c3\u30b7\u30e5\nheapq.heappush(max_heap, flag * 1)\nheapq.heappush(max_heap, flag * 3)\nheapq.heappush(max_heap, flag * 2)\nheapq.heappush(max_heap, flag * 5)\nheapq.heappush(max_heap, flag * 4)\n\n# \u30d2\u30fc\u30d7\u306e\u5148\u982d\u8981\u7d20\u3092\u53d6\u5f97\npeek: int = flag * max_heap[0] # 5\n\n# \u30d2\u30fc\u30d7\u306e\u5148\u982d\u8981\u7d20\u3092\u30dd\u30c3\u30d7\n# \u30dd\u30c3\u30d7\u3055\u308c\u305f\u8981\u7d20\u306f\u964d\u9806\u306e\u30b7\u30fc\u30b1\u30f3\u30b9\u3092\u5f62\u6210\nval = flag * heapq.heappop(max_heap) # 5\nval = flag * heapq.heappop(max_heap) # 4\nval = flag * heapq.heappop(max_heap) # 3\nval = flag * heapq.heappop(max_heap) # 2\nval = flag * heapq.heappop(max_heap) # 1\n\n# \u30d2\u30fc\u30d7\u306e\u30b5\u30a4\u30ba\u3092\u53d6\u5f97\nsize: int = len(max_heap)\n\n# \u30d2\u30fc\u30d7\u304c\u7a7a\u304b\u3069\u3046\u304b\u3092\u30c1\u30a7\u30c3\u30af\nis_empty: bool = not max_heap\n\n# \u30ea\u30b9\u30c8\u304b\u3089\u30d2\u30fc\u30d7\u3092\u4f5c\u6210\nmin_heap: list[int] = [1, 3, 2, 5, 4]\nheapq.heapify(min_heap)\n
heap.cpp
/* \u30d2\u30fc\u30d7\u306e\u521d\u671f\u5316 */\n// \u6700\u5c0f\u30d2\u30fc\u30d7\u306e\u521d\u671f\u5316\npriority_queue<int, vector<int>, greater<int>> minHeap;\n// \u6700\u5927\u30d2\u30fc\u30d7\u306e\u521d\u671f\u5316\npriority_queue<int, vector<int>, less<int>> maxHeap;\n\n/* \u30d2\u30fc\u30d7\u306b\u8981\u7d20\u3092\u30d7\u30c3\u30b7\u30e5 */\nmaxHeap.push(1);\nmaxHeap.push(3);\nmaxHeap.push(2);\nmaxHeap.push(5);\nmaxHeap.push(4);\n\n/* \u30d2\u30fc\u30d7\u306e\u5148\u982d\u8981\u7d20\u3092\u53d6\u5f97 */\nint peek = maxHeap.top(); // 5\n\n/* \u30d2\u30fc\u30d7\u306e\u5148\u982d\u8981\u7d20\u3092\u30dd\u30c3\u30d7 */\n// \u30dd\u30c3\u30d7\u3055\u308c\u305f\u8981\u7d20\u306f\u964d\u9806\u306e\u30b7\u30fc\u30b1\u30f3\u30b9\u3092\u5f62\u6210\nmaxHeap.pop(); // 5\nmaxHeap.pop(); // 4\nmaxHeap.pop(); // 3\nmaxHeap.pop(); // 2\nmaxHeap.pop(); // 1\n\n/* \u30d2\u30fc\u30d7\u306e\u30b5\u30a4\u30ba\u3092\u53d6\u5f97 */\nint size = maxHeap.size();\n\n/* \u30d2\u30fc\u30d7\u304c\u7a7a\u304b\u3069\u3046\u304b\u3092\u30c1\u30a7\u30c3\u30af */\nbool isEmpty = maxHeap.empty();\n\n/* \u30ea\u30b9\u30c8\u304b\u3089\u30d2\u30fc\u30d7\u3092\u4f5c\u6210 */\nvector<int> input{1, 3, 2, 5, 4};\npriority_queue<int, vector<int>, greater<int>> minHeap(input.begin(), input.end());\n
heap.java
/* \u30d2\u30fc\u30d7\u306e\u521d\u671f\u5316 */\n// \u6700\u5c0f\u30d2\u30fc\u30d7\u306e\u521d\u671f\u5316\nQueue<Integer> minHeap = new PriorityQueue<>();\n// \u6700\u5927\u30d2\u30fc\u30d7\u306e\u521d\u671f\u5316\uff08\u30e9\u30e0\u30c0\u5f0f\u3067Comparator\u3092\u5909\u66f4\u3059\u308b\u3060\u3051\uff09\nQueue<Integer> maxHeap = new PriorityQueue<>((a, b) -> b - a);\n\n/* \u30d2\u30fc\u30d7\u306b\u8981\u7d20\u3092\u30d7\u30c3\u30b7\u30e5 */\nmaxHeap.offer(1);\nmaxHeap.offer(3);\nmaxHeap.offer(2);\nmaxHeap.offer(5);\nmaxHeap.offer(4);\n\n/* \u30d2\u30fc\u30d7\u306e\u5148\u982d\u8981\u7d20\u3092\u53d6\u5f97 */\nint peek = maxHeap.peek(); // 5\n\n/* \u30d2\u30fc\u30d7\u306e\u5148\u982d\u8981\u7d20\u3092\u30dd\u30c3\u30d7 */\n// \u30dd\u30c3\u30d7\u3055\u308c\u305f\u8981\u7d20\u306f\u964d\u9806\u306e\u30b7\u30fc\u30b1\u30f3\u30b9\u3092\u5f62\u6210\npeek = maxHeap.poll(); // 5\npeek = maxHeap.poll(); // 4\npeek = maxHeap.poll(); // 3\npeek = maxHeap.poll(); // 2\npeek = maxHeap.poll(); // 1\n\n/* \u30d2\u30fc\u30d7\u306e\u30b5\u30a4\u30ba\u3092\u53d6\u5f97 */\nint size = maxHeap.size();\n\n/* \u30d2\u30fc\u30d7\u304c\u7a7a\u304b\u3069\u3046\u304b\u3092\u30c1\u30a7\u30c3\u30af */\nboolean isEmpty = maxHeap.isEmpty();\n\n/* \u30ea\u30b9\u30c8\u304b\u3089\u30d2\u30fc\u30d7\u3092\u4f5c\u6210 */\nminHeap = new PriorityQueue<>(Arrays.asList(1, 3, 2, 5, 4));\n
heap.cs
/* \u30d2\u30fc\u30d7\u306e\u521d\u671f\u5316 */\n// \u6700\u5c0f\u30d2\u30fc\u30d7\u306e\u521d\u671f\u5316\nPriorityQueue<int, int> minHeap = new();\n// \u6700\u5927\u30d2\u30fc\u30d7\u306e\u521d\u671f\u5316\uff08\u30e9\u30e0\u30c0\u5f0f\u3067Comparator\u3092\u5909\u66f4\u3059\u308b\u3060\u3051\uff09\nPriorityQueue<int, int> maxHeap = new(Comparer<int>.Create((x, y) => y - x));\n\n/* \u30d2\u30fc\u30d7\u306b\u8981\u7d20\u3092\u30d7\u30c3\u30b7\u30e5 */\nmaxHeap.Enqueue(1, 1);\nmaxHeap.Enqueue(3, 3);\nmaxHeap.Enqueue(2, 2);\nmaxHeap.Enqueue(5, 5);\nmaxHeap.Enqueue(4, 4);\n\n/* \u30d2\u30fc\u30d7\u306e\u5148\u982d\u8981\u7d20\u3092\u53d6\u5f97 */\nint peek = maxHeap.Peek();//5\n\n/* \u30d2\u30fc\u30d7\u306e\u5148\u982d\u8981\u7d20\u3092\u30dd\u30c3\u30d7 */\n// \u30dd\u30c3\u30d7\u3055\u308c\u305f\u8981\u7d20\u306f\u964d\u9806\u306e\u30b7\u30fc\u30b1\u30f3\u30b9\u3092\u5f62\u6210\npeek = maxHeap.Dequeue();  // 5\npeek = maxHeap.Dequeue();  // 4\npeek = maxHeap.Dequeue();  // 3\npeek = maxHeap.Dequeue();  // 2\npeek = maxHeap.Dequeue();  // 1\n\n/* \u30d2\u30fc\u30d7\u306e\u30b5\u30a4\u30ba\u3092\u53d6\u5f97 */\nint size = maxHeap.Count;\n\n/* \u30d2\u30fc\u30d7\u304c\u7a7a\u304b\u3069\u3046\u304b\u3092\u30c1\u30a7\u30c3\u30af */\nbool isEmpty = maxHeap.Count == 0;\n\n/* \u30ea\u30b9\u30c8\u304b\u3089\u30d2\u30fc\u30d7\u3092\u4f5c\u6210 */\nminHeap = new PriorityQueue<int, int>([(1, 1), (3, 3), (2, 2), (5, 5), (4, 4)]);\n
heap.go
// Go\u3067\u306f\u3001heap.Interface\u3092\u5b9f\u88c5\u3059\u308b\u3053\u3068\u3067\u6574\u6570\u306e\u6700\u5927\u30d2\u30fc\u30d7\u3092\u69cb\u7bc9\u3067\u304d\u307e\u3059\n// heap.Interface\u3092\u5b9f\u88c5\u3059\u308b\u306b\u306f\u3001sort.Interface\u3082\u5b9f\u88c5\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\ntype intHeap []any\n\n// heap.Interface\u306ePush\u30e1\u30bd\u30c3\u30c9\u3001\u8981\u7d20\u3092\u30d2\u30fc\u30d7\u306b\u30d7\u30c3\u30b7\u30e5\nfunc (h *intHeap) Push(x any) {\n    // Push\u3068Pop\u306e\u4e21\u65b9\u3067\u30dd\u30a4\u30f3\u30bf\u30ec\u30b7\u30fc\u30d0\u30fc\u3092\u4f7f\u7528\n    // \u30b9\u30e9\u30a4\u30b9\u306e\u8981\u7d20\u3092\u8abf\u6574\u3059\u308b\u3060\u3051\u3067\u306a\u304f\u3001\u305d\u306e\u9577\u3055\u3082\u5909\u66f4\u3059\u308b\u305f\u3081\n    *h = append(*h, x.(int))\n}\n\n// heap.Interface\u306ePop\u30e1\u30bd\u30c3\u30c9\u3001\u30d2\u30fc\u30d7\u306e\u5148\u982d\u8981\u7d20\u3092\u524a\u9664\nfunc (h *intHeap) Pop() any {\n    // \u30d2\u30fc\u30d7\u304b\u3089\u30dd\u30c3\u30d7\u3059\u308b\u8981\u7d20\u306f\u672b\u5c3e\u306b\u683c\u7d0d\n    last := (*h)[len(*h)-1]\n    *h = (*h)[:len(*h)-1]\n    return last\n}\n\n// sort.Interface\u306eLen\u30e1\u30bd\u30c3\u30c9\nfunc (h *intHeap) Len() int {\n    return len(*h)\n}\n\n// sort.Interface\u306eLess\u30e1\u30bd\u30c3\u30c9\nfunc (h *intHeap) Less(i, j int) bool {\n    // \u6700\u5c0f\u30d2\u30fc\u30d7\u3092\u5b9f\u88c5\u3057\u305f\u3044\u5834\u5408\u306f\u3001\u3053\u308c\u3092\u5c0f\u306a\u308a\u6bd4\u8f03\u306b\u5909\u66f4\n    return (*h)[i].(int) > (*h)[j].(int)\n}\n\n// sort.Interface\u306eSwap\u30e1\u30bd\u30c3\u30c9\nfunc (h *intHeap) Swap(i, j int) {\n    (*h)[i], (*h)[j] = (*h)[j], (*h)[i]\n}\n\n// Top \u30d2\u30fc\u30d7\u306e\u5148\u982d\u8981\u7d20\u3092\u53d6\u5f97\nfunc (h *intHeap) Top() any {\n    return (*h)[0]\n}\n\n/* \u30c9\u30e9\u30a4\u30d0\u30fc\u30b3\u30fc\u30c9 */\nfunc TestHeap(t *testing.T) {\n    /* \u30d2\u30fc\u30d7\u306e\u521d\u671f\u5316 */\n    // \u6700\u5927\u30d2\u30fc\u30d7\u306e\u521d\u671f\u5316\n    maxHeap := &intHeap{}\n    heap.Init(maxHeap)\n    /* \u30d2\u30fc\u30d7\u306b\u8981\u7d20\u3092\u30d7\u30c3\u30b7\u30e5 */\n    // heap.Interface\u306e\u30e1\u30bd\u30c3\u30c9\u3092\u547c\u3073\u51fa\u3057\u3066\u8981\u7d20\u3092\u8ffd\u52a0\n    heap.Push(maxHeap, 1)\n    heap.Push(maxHeap, 3)\n    heap.Push(maxHeap, 2)\n    heap.Push(maxHeap, 4)\n    heap.Push(maxHeap, 5)\n\n    /* \u30d2\u30fc\u30d7\u306e\u5148\u982d\u8981\u7d20\u3092\u53d6\u5f97 */\n    top := maxHeap.Top()\n    fmt.Printf(\"\u30d2\u30fc\u30d7\u306e\u5148\u982d\u8981\u7d20\u306f %d\\n\", top)\n\n    /* \u30d2\u30fc\u30d7\u306e\u5148\u982d\u8981\u7d20\u3092\u30dd\u30c3\u30d7 */\n    // heap.Interface\u306e\u30e1\u30bd\u30c3\u30c9\u3092\u547c\u3073\u51fa\u3057\u3066\u8981\u7d20\u3092\u524a\u9664\n    heap.Pop(maxHeap) // 5\n    heap.Pop(maxHeap) // 4\n    heap.Pop(maxHeap) // 3\n    heap.Pop(maxHeap) // 2\n    heap.Pop(maxHeap) // 1\n\n    /* \u30d2\u30fc\u30d7\u306e\u30b5\u30a4\u30ba\u3092\u53d6\u5f97 */\n    size := len(*maxHeap)\n    fmt.Printf(\"\u30d2\u30fc\u30d7\u5185\u306e\u8981\u7d20\u6570\u306f %d\\n\", size)\n\n    /* \u30d2\u30fc\u30d7\u304c\u7a7a\u304b\u3069\u3046\u304b\u3092\u30c1\u30a7\u30c3\u30af */\n    isEmpty := len(*maxHeap) == 0\n    fmt.Printf(\"\u30d2\u30fc\u30d7\u306f\u7a7a\u3067\u3059\u304b\uff1f %t\\n\", isEmpty)\n}\n
heap.swift
/* \u30d2\u30fc\u30d7\u306e\u521d\u671f\u5316 */\n// Swift\u306eHeap\u578b\u306f\u6700\u5927\u30d2\u30fc\u30d7\u3068\u6700\u5c0f\u30d2\u30fc\u30d7\u306e\u4e21\u65b9\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3001swift-collections\u30e9\u30a4\u30d6\u30e9\u30ea\u304c\u5fc5\u8981\nvar heap = Heap<Int>()\n\n/* \u30d2\u30fc\u30d7\u306b\u8981\u7d20\u3092\u30d7\u30c3\u30b7\u30e5 */\nheap.insert(1)\nheap.insert(3)\nheap.insert(2)\nheap.insert(5)\nheap.insert(4)\n\n/* \u30d2\u30fc\u30d7\u306e\u5148\u982d\u8981\u7d20\u3092\u53d6\u5f97 */\nvar peek = heap.max()!\n\n/* \u30d2\u30fc\u30d7\u306e\u5148\u982d\u8981\u7d20\u3092\u30dd\u30c3\u30d7 */\npeek = heap.removeMax() // 5\npeek = heap.removeMax() // 4\npeek = heap.removeMax() // 3\npeek = heap.removeMax() // 2\npeek = heap.removeMax() // 1\n\n/* \u30d2\u30fc\u30d7\u306e\u30b5\u30a4\u30ba\u3092\u53d6\u5f97 */\nlet size = heap.count\n\n/* \u30d2\u30fc\u30d7\u304c\u7a7a\u304b\u3069\u3046\u304b\u3092\u30c1\u30a7\u30c3\u30af */\nlet isEmpty = heap.isEmpty\n\n/* \u30ea\u30b9\u30c8\u304b\u3089\u30d2\u30fc\u30d7\u3092\u4f5c\u6210 */\nlet heap2 = Heap([1, 3, 2, 5, 4])\n
heap.js
// JavaScript\u306f\u7d44\u307f\u8fbc\u307f\u306eHeap\u30af\u30e9\u30b9\u3092\u63d0\u4f9b\u3057\u3066\u3044\u307e\u305b\u3093\n
heap.ts
// TypeScript\u306f\u7d44\u307f\u8fbc\u307f\u306eHeap\u30af\u30e9\u30b9\u3092\u63d0\u4f9b\u3057\u3066\u3044\u307e\u305b\u3093\n
heap.dart
// Dart\u306f\u7d44\u307f\u8fbc\u307f\u306eHeap\u30af\u30e9\u30b9\u3092\u63d0\u4f9b\u3057\u3066\u3044\u307e\u305b\u3093\n
heap.rs
use std::collections::BinaryHeap;\nuse std::cmp::Reverse;\n\n/* \u30d2\u30fc\u30d7\u306e\u521d\u671f\u5316 */\n// \u6700\u5c0f\u30d2\u30fc\u30d7\u306e\u521d\u671f\u5316\nlet mut min_heap = BinaryHeap::<Reverse<i32>>::new();\n// \u6700\u5927\u30d2\u30fc\u30d7\u306e\u521d\u671f\u5316\nlet mut max_heap = BinaryHeap::new();\n\n/* \u30d2\u30fc\u30d7\u306b\u8981\u7d20\u3092\u30d7\u30c3\u30b7\u30e5 */\nmax_heap.push(1);\nmax_heap.push(3);\nmax_heap.push(2);\nmax_heap.push(5);\nmax_heap.push(4);\n\n/* \u30d2\u30fc\u30d7\u306e\u5148\u982d\u8981\u7d20\u3092\u53d6\u5f97 */\nlet peek = max_heap.peek().unwrap();  // 5\n\n/* \u30d2\u30fc\u30d7\u306e\u5148\u982d\u8981\u7d20\u3092\u30dd\u30c3\u30d7 */\n// \u30dd\u30c3\u30d7\u3055\u308c\u305f\u8981\u7d20\u306f\u964d\u9806\u306e\u30b7\u30fc\u30b1\u30f3\u30b9\u3092\u5f62\u6210\nlet peek = max_heap.pop().unwrap();   // 5\nlet peek = max_heap.pop().unwrap();   // 4\nlet peek = max_heap.pop().unwrap();   // 3\nlet peek = max_heap.pop().unwrap();   // 2\nlet peek = max_heap.pop().unwrap();   // 1\n\n/* \u30d2\u30fc\u30d7\u306e\u30b5\u30a4\u30ba\u3092\u53d6\u5f97 */\nlet size = max_heap.len();\n\n/* \u30d2\u30fc\u30d7\u304c\u7a7a\u304b\u3069\u3046\u304b\u3092\u30c1\u30a7\u30c3\u30af */\nlet is_empty = max_heap.is_empty();\n\n/* \u30ea\u30b9\u30c8\u304b\u3089\u30d2\u30fc\u30d7\u3092\u4f5c\u6210 */\nlet min_heap = BinaryHeap::from(vec![Reverse(1), Reverse(3), Reverse(2), Reverse(5), Reverse(4)]);\n
heap.c
// C\u306f\u7d44\u307f\u8fbc\u307f\u306eHeap\u30af\u30e9\u30b9\u3092\u63d0\u4f9b\u3057\u3066\u3044\u307e\u305b\u3093\n
heap.kt
/* \u30d2\u30fc\u30d7\u306e\u521d\u671f\u5316 */\n// \u6700\u5c0f\u30d2\u30fc\u30d7\u306e\u521d\u671f\u5316\nvar minHeap = PriorityQueue<Int>()\n// \u6700\u5927\u30d2\u30fc\u30d7\u306e\u521d\u671f\u5316\uff08\u30e9\u30e0\u30c0\u5f0f\u3067Comparator\u3092\u5909\u66f4\u3059\u308b\u3060\u3051\uff09\nval maxHeap = PriorityQueue { a: Int, b: Int -> b - a }\n\n/* \u30d2\u30fc\u30d7\u306b\u8981\u7d20\u3092\u30d7\u30c3\u30b7\u30e5 */\nmaxHeap.offer(1)\nmaxHeap.offer(3)\nmaxHeap.offer(2)\nmaxHeap.offer(5)\nmaxHeap.offer(4)\n\n/* \u30d2\u30fc\u30d7\u306e\u5148\u982d\u8981\u7d20\u3092\u53d6\u5f97 */\nvar peek = maxHeap.peek() // 5\n\n/* \u30d2\u30fc\u30d7\u306e\u5148\u982d\u8981\u7d20\u3092\u30dd\u30c3\u30d7 */\n// \u30dd\u30c3\u30d7\u3055\u308c\u305f\u8981\u7d20\u306f\u964d\u9806\u306e\u30b7\u30fc\u30b1\u30f3\u30b9\u3092\u5f62\u6210\npeek = maxHeap.poll() // 5\npeek = maxHeap.poll() // 4\npeek = maxHeap.poll() // 3\npeek = maxHeap.poll() // 2\npeek = maxHeap.poll() // 1\n\n/* \u30d2\u30fc\u30d7\u306e\u30b5\u30a4\u30ba\u3092\u53d6\u5f97 */\nval size = maxHeap.size\n\n/* \u30d2\u30fc\u30d7\u304c\u7a7a\u304b\u3069\u3046\u304b\u3092\u30c1\u30a7\u30c3\u30af */\nval isEmpty = maxHeap.isEmpty()\n\n/* \u30ea\u30b9\u30c8\u304b\u3089\u30d2\u30fc\u30d7\u3092\u4f5c\u6210 */\nminHeap = PriorityQueue(mutableListOf(1, 3, 2, 5, 4))\n
heap.rb
\n
"},{"location":"chapter_heap/heap/#812","title":"8.1.2 \u00a0 \u30d2\u30fc\u30d7\u306e\u5b9f\u88c5","text":"

\u4ee5\u4e0b\u306e\u5b9f\u88c5\u306f\u6700\u5927\u30d2\u30fc\u30d7\u3067\u3059\u3002\u6700\u5c0f\u30d2\u30fc\u30d7\u306b\u5909\u63db\u3059\u308b\u306b\u306f\u3001\u3059\u3079\u3066\u306e\u30b5\u30a4\u30ba\u8ad6\u7406\u6bd4\u8f03\u3092\u53cd\u8ee2\u3055\u305b\u308b\u3060\u3051\u3067\u3059\uff08\u4f8b\u3048\u3070\u3001\\(\\geq\\)\u3092\\(\\leq\\)\u306b\u7f6e\u304d\u63db\u3048\u308b\uff09\u3002\u8208\u5473\u306e\u3042\u308b\u8aad\u8005\u306f\u81ea\u5206\u3067\u5b9f\u88c5\u3059\u308b\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\u3002

"},{"location":"chapter_heap/heap/#1","title":"1. \u00a0 \u30d2\u30fc\u30d7\u306e\u683c\u7d0d\u3068\u8868\u73fe","text":"

\u300c\u4e8c\u5206\u6728\u300d\u306e\u7bc0\u3067\u8ff0\u3079\u305f\u3088\u3046\u306b\u3001\u5b8c\u5099\u4e8c\u5206\u6728\u306f\u914d\u5217\u8868\u73fe\u306b\u975e\u5e38\u306b\u9069\u3057\u3066\u3044\u307e\u3059\u3002\u30d2\u30fc\u30d7\u306f\u5b8c\u5099\u4e8c\u5206\u6728\u306e\u4e00\u7a2e\u306a\u306e\u3067\u3001\u914d\u5217\u3092\u4f7f\u7528\u3057\u3066\u30d2\u30fc\u30d7\u3092\u683c\u7d0d\u3057\u307e\u3059\u3002

\u914d\u5217\u3092\u4f7f\u7528\u3057\u3066\u4e8c\u5206\u6728\u3092\u8868\u73fe\u3059\u308b\u5834\u5408\u3001\u8981\u7d20\u306f\u30ce\u30fc\u30c9\u5024\u3092\u8868\u3057\u3001\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306f\u4e8c\u5206\u6728\u5185\u306e\u30ce\u30fc\u30c9\u4f4d\u7f6e\u3092\u8868\u3057\u307e\u3059\u3002\u30ce\u30fc\u30c9\u30dd\u30a4\u30f3\u30bf\u306f\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u30de\u30c3\u30d4\u30f3\u30b0\u516c\u5f0f\u3092\u901a\u3058\u3066\u5b9f\u88c5\u3055\u308c\u307e\u3059\u3002

\u4e0b\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\\(i\\)\u304c\u4e0e\u3048\u3089\u308c\u305f\u5834\u5408\u3001\u305d\u306e\u5de6\u306e\u5b50\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306f\\(2i + 1\\)\u3001\u53f3\u306e\u5b50\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306f\\(2i + 2\\)\u3001\u89aa\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306f\\((i - 1) / 2\\)\uff08\u5e8a\u9664\u7b97\uff09\u3067\u3059\u3002\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u304c\u7bc4\u56f2\u5916\u306e\u5834\u5408\u3001null\u30ce\u30fc\u30c9\u307e\u305f\u306f\u30ce\u30fc\u30c9\u304c\u5b58\u5728\u3057\u306a\u3044\u3053\u3068\u3092\u610f\u5473\u3057\u307e\u3059\u3002

\u56f3 8-2 \u00a0 \u30d2\u30fc\u30d7\u306e\u8868\u73fe\u3068\u683c\u7d0d

\u5f8c\u3067\u4fbf\u5229\u306b\u4f7f\u7528\u3059\u308b\u305f\u3081\u3001\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u30de\u30c3\u30d4\u30f3\u30b0\u516c\u5f0f\u3092\u95a2\u6570\u306b\u30ab\u30d7\u30bb\u30eb\u5316\u3067\u304d\u307e\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby my_heap.py
def left(self, i: int) -> int:\n    \"\"\"\u5de6\u306e\u5b50\u30ce\u30fc\u30c9\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u53d6\u5f97\"\"\"\n    return 2 * i + 1\n\ndef right(self, i: int) -> int:\n    \"\"\"\u53f3\u306e\u5b50\u30ce\u30fc\u30c9\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u53d6\u5f97\"\"\"\n    return 2 * i + 2\n\ndef parent(self, i: int) -> int:\n    \"\"\"\u89aa\u30ce\u30fc\u30c9\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u53d6\u5f97\"\"\"\n    return (i - 1) // 2  # \u6574\u6570\u9664\u7b97\u3067\u5207\u308a\u4e0b\u3052\n
my_heap.cpp
/* \u5de6\u306e\u5b50\u30ce\u30fc\u30c9\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u53d6\u5f97 */\nint left(int i) {\n    return 2 * i + 1;\n}\n\n/* \u53f3\u306e\u5b50\u30ce\u30fc\u30c9\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u53d6\u5f97 */\nint right(int i) {\n    return 2 * i + 2;\n}\n\n/* \u89aa\u30ce\u30fc\u30c9\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u53d6\u5f97 */\nint parent(int i) {\n    return (i - 1) / 2; // \u6574\u6570\u9664\u7b97\u3067\u5207\u308a\u4e0b\u3052\n}\n
my_heap.java
/* \u5de6\u306e\u5b50\u30ce\u30fc\u30c9\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u53d6\u5f97 */\nint left(int i) {\n    return 2 * i + 1;\n}\n\n/* \u53f3\u306e\u5b50\u30ce\u30fc\u30c9\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u53d6\u5f97 */\nint right(int i) {\n    return 2 * i + 2;\n}\n\n/* \u89aa\u30ce\u30fc\u30c9\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u53d6\u5f97 */\nint parent(int i) {\n    return (i - 1) / 2; // \u6574\u6570\u9664\u7b97\u3067\u5207\u308a\u4e0b\u3052\n}\n
my_heap.cs
[class]{MaxHeap}-[func]{Left}\n\n[class]{MaxHeap}-[func]{Right}\n\n[class]{MaxHeap}-[func]{Parent}\n
my_heap.go
[class]{maxHeap}-[func]{left}\n\n[class]{maxHeap}-[func]{right}\n\n[class]{maxHeap}-[func]{parent}\n
my_heap.swift
[class]{MaxHeap}-[func]{left}\n\n[class]{MaxHeap}-[func]{right}\n\n[class]{MaxHeap}-[func]{parent}\n
my_heap.js
[class]{MaxHeap}-[func]{left}\n\n[class]{MaxHeap}-[func]{right}\n\n[class]{MaxHeap}-[func]{parent}\n
my_heap.ts
[class]{MaxHeap}-[func]{left}\n\n[class]{MaxHeap}-[func]{right}\n\n[class]{MaxHeap}-[func]{parent}\n
my_heap.dart
[class]{MaxHeap}-[func]{_left}\n\n[class]{MaxHeap}-[func]{_right}\n\n[class]{MaxHeap}-[func]{_parent}\n
my_heap.rs
[class]{MaxHeap}-[func]{left}\n\n[class]{MaxHeap}-[func]{right}\n\n[class]{MaxHeap}-[func]{parent}\n
my_heap.c
[class]{MaxHeap}-[func]{left}\n\n[class]{MaxHeap}-[func]{right}\n\n[class]{MaxHeap}-[func]{parent}\n
my_heap.kt
[class]{MaxHeap}-[func]{left}\n\n[class]{MaxHeap}-[func]{right}\n\n[class]{MaxHeap}-[func]{parent}\n
my_heap.rb
[class]{MaxHeap}-[func]{left}\n\n[class]{MaxHeap}-[func]{right}\n\n[class]{MaxHeap}-[func]{parent}\n
"},{"location":"chapter_heap/heap/#2","title":"2. \u00a0 \u30d2\u30fc\u30d7\u306e\u5148\u982d\u8981\u7d20\u3078\u306e\u30a2\u30af\u30bb\u30b9","text":"

\u30d2\u30fc\u30d7\u306e\u5148\u982d\u8981\u7d20\u306f\u4e8c\u5206\u6728\u306e\u6839\u30ce\u30fc\u30c9\u3067\u3001\u30ea\u30b9\u30c8\u306e\u6700\u521d\u306e\u8981\u7d20\u3067\u3082\u3042\u308a\u307e\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby my_heap.py
def peek(self) -> int:\n    \"\"\"\u30d2\u30fc\u30d7\u306e\u5148\u982d\u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9\"\"\"\n    return self.max_heap[0]\n
my_heap.cpp
/* \u30d2\u30fc\u30d7\u306e\u5148\u982d\u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9 */\nint peek() {\n    return maxHeap[0];\n}\n
my_heap.java
/* \u30d2\u30fc\u30d7\u306e\u5148\u982d\u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9 */\nint peek() {\n    return maxHeap.get(0);\n}\n
my_heap.cs
[class]{MaxHeap}-[func]{Peek}\n
my_heap.go
[class]{maxHeap}-[func]{peek}\n
my_heap.swift
[class]{MaxHeap}-[func]{peek}\n
my_heap.js
[class]{MaxHeap}-[func]{peek}\n
my_heap.ts
[class]{MaxHeap}-[func]{peek}\n
my_heap.dart
[class]{MaxHeap}-[func]{peek}\n
my_heap.rs
[class]{MaxHeap}-[func]{peek}\n
my_heap.c
[class]{MaxHeap}-[func]{peek}\n
my_heap.kt
[class]{MaxHeap}-[func]{peek}\n
my_heap.rb
[class]{MaxHeap}-[func]{peek}\n
"},{"location":"chapter_heap/heap/#3","title":"3. \u00a0 \u30d2\u30fc\u30d7\u3078\u306e\u8981\u7d20\u633f\u5165","text":"

\u8981\u7d20val\u304c\u4e0e\u3048\u3089\u308c\u305f\u5834\u5408\u3001\u307e\u305a\u305d\u308c\u3092\u30d2\u30fc\u30d7\u306e\u5e95\u306b\u8ffd\u52a0\u3057\u307e\u3059\u3002\u8ffd\u52a0\u5f8c\u3001val\u304c\u30d2\u30fc\u30d7\u5185\u306e\u4ed6\u306e\u8981\u7d20\u3088\u308a\u5927\u304d\u3044\u53ef\u80fd\u6027\u304c\u3042\u308b\u305f\u3081\u3001\u30d2\u30fc\u30d7\u306e\u5b8c\u5168\u6027\u304c\u640d\u306a\u308f\u308c\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002\u3057\u305f\u304c\u3063\u3066\u3001\u633f\u5165\u3055\u308c\u305f\u30ce\u30fc\u30c9\u304b\u3089\u6839\u30ce\u30fc\u30c9\u307e\u3067\u306e\u30d1\u30b9\u3092\u4fee\u5fa9\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u306e\u64cd\u4f5c\u306f\u30d2\u30fc\u30d7\u5316\u3068\u547c\u3070\u308c\u307e\u3059\u3002

\u633f\u5165\u3055\u308c\u305f\u30ce\u30fc\u30c9\u304b\u3089\u958b\u59cb\u3057\u3066\u3001\u4e0b\u304b\u3089\u4e0a\u306b\u30d2\u30fc\u30d7\u5316\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002\u4e0b\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u633f\u5165\u3055\u308c\u305f\u30ce\u30fc\u30c9\u306e\u5024\u3092\u305d\u306e\u89aa\u30ce\u30fc\u30c9\u3068\u6bd4\u8f03\u3057\u3001\u633f\u5165\u3055\u308c\u305f\u30ce\u30fc\u30c9\u304c\u5927\u304d\u3044\u5834\u5408\u306f\u305d\u308c\u3089\u3092\u4ea4\u63db\u3057\u307e\u3059\u3002\u6b21\u306b\u3053\u306e\u64cd\u4f5c\u3092\u7d9a\u884c\u3057\u3001\u6839\u306b\u5230\u9054\u3059\u308b\u304b\u3001\u4ea4\u63db\u304c\u4e0d\u8981\u306a\u30ce\u30fc\u30c9\u306b\u906d\u9047\u3059\u308b\u307e\u3067\u3001\u4e0b\u304b\u3089\u4e0a\u306b\u30d2\u30fc\u30d7\u5185\u306e\u5404\u30ce\u30fc\u30c9\u3092\u4fee\u5fa9\u3057\u307e\u3059\u3002

<1><2><3><4><5><6><7><8><9>

\u56f3 8-3 \u00a0 \u30d2\u30fc\u30d7\u3078\u306e\u8981\u7d20\u633f\u5165\u306e\u624b\u9806

\u7dcf\u30ce\u30fc\u30c9\u6570\u3092\\(n\\)\u3068\u3059\u308b\u3068\u3001\u6728\u306e\u9ad8\u3055\u306f\\(O(\\log n)\\)\u3067\u3059\u3002\u3057\u305f\u304c\u3063\u3066\u3001\u30d2\u30fc\u30d7\u5316\u64cd\u4f5c\u306e\u30eb\u30fc\u30d7\u53cd\u5fa9\u56de\u6570\u306f\u6700\u5927\\(O(\\log n)\\)\u3067\u3001\u8981\u7d20\u633f\u5165\u64cd\u4f5c\u306e\u6642\u9593\u8a08\u7b97\u91cf\u306f\\(O(\\log n)\\)\u306b\u306a\u308a\u307e\u3059\u3002\u30b3\u30fc\u30c9\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby my_heap.py
def push(self, val: int):\n    \"\"\"\u30d2\u30fc\u30d7\u306b\u8981\u7d20\u3092\u30d7\u30c3\u30b7\u30e5\"\"\"\n    # \u30ce\u30fc\u30c9\u3092\u8ffd\u52a0\n    self.max_heap.append(val)\n    # \u4e0b\u304b\u3089\u4e0a\u3078\u30d2\u30fc\u30d7\u5316\n    self.sift_up(self.size() - 1)\n\ndef sift_up(self, i: int):\n    \"\"\"\u30ce\u30fc\u30c9i\u304b\u3089\u958b\u59cb\u3057\u3066\u3001\u4e0b\u304b\u3089\u4e0a\u3078\u30d2\u30fc\u30d7\u5316\"\"\"\n    while True:\n        # \u30ce\u30fc\u30c9i\u306e\u89aa\u30ce\u30fc\u30c9\u3092\u53d6\u5f97\n        p = self.parent(i)\n        # \u300c\u30eb\u30fc\u30c8\u30ce\u30fc\u30c9\u3092\u8d8a\u3048\u308b\u300d\u307e\u305f\u306f\u300c\u30ce\u30fc\u30c9\u304c\u4fee\u5fa9\u4e0d\u8981\u300d\u306e\u5834\u5408\u3001\u30d2\u30fc\u30d7\u5316\u3092\u7d42\u4e86\n        if p < 0 or self.max_heap[i] <= self.max_heap[p]:\n            break\n        # 2\u3064\u306e\u30ce\u30fc\u30c9\u3092\u4ea4\u63db\n        self.swap(i, p)\n        # \u4e0a\u5411\u304d\u306e\u30eb\u30fc\u30d7\u30d2\u30fc\u30d7\u5316\n        i = p\n
my_heap.cpp
/* \u30d2\u30fc\u30d7\u306b\u8981\u7d20\u3092\u30d7\u30c3\u30b7\u30e5 */\nvoid push(int val) {\n    // \u30ce\u30fc\u30c9\u3092\u8ffd\u52a0\n    maxHeap.push_back(val);\n    // \u4e0b\u304b\u3089\u4e0a\u3078\u30d2\u30fc\u30d7\u5316\n    siftUp(size() - 1);\n}\n\n/* \u30ce\u30fc\u30c9i\u304b\u3089\u4e0a\u5411\u304d\u306b\u30d2\u30fc\u30d7\u5316\u3092\u958b\u59cb */\nvoid siftUp(int i) {\n    while (true) {\n        // \u30ce\u30fc\u30c9i\u306e\u89aa\u30ce\u30fc\u30c9\u3092\u53d6\u5f97\n        int p = parent(i);\n        // \u300c\u30eb\u30fc\u30c8\u30ce\u30fc\u30c9\u3092\u8d85\u3048\u308b\u300d\u307e\u305f\u306f\u300c\u30ce\u30fc\u30c9\u304c\u4fee\u5fa9\u4e0d\u8981\u300d\u306e\u5834\u5408\u3001\u30d2\u30fc\u30d7\u5316\u3092\u7d42\u4e86\n        if (p < 0 || maxHeap[i] <= maxHeap[p])\n            break;\n        // 2\u3064\u306e\u30ce\u30fc\u30c9\u3092\u4ea4\u63db\n        swap(maxHeap[i], maxHeap[p]);\n        // \u4e0a\u5411\u304d\u306b\u30eb\u30fc\u30d7\u3057\u3066\u30d2\u30fc\u30d7\u5316\n        i = p;\n    }\n}\n
my_heap.java
/* \u8981\u7d20\u3092\u30d2\u30fc\u30d7\u306b\u30d7\u30c3\u30b7\u30e5 */\nvoid push(int val) {\n    // \u30ce\u30fc\u30c9\u3092\u8ffd\u52a0\n    maxHeap.add(val);\n    // \u4e0b\u304b\u3089\u4e0a\u3078\u30d2\u30fc\u30d7\u5316\n    siftUp(size() - 1);\n}\n\n/* \u30ce\u30fc\u30c9 i \u304b\u3089\u4e0a\u5411\u304d\u306b\u30d2\u30fc\u30d7\u5316\u3092\u958b\u59cb */\nvoid siftUp(int i) {\n    while (true) {\n        // \u30ce\u30fc\u30c9 i \u306e\u89aa\u30ce\u30fc\u30c9\u3092\u53d6\u5f97\n        int p = parent(i);\n        // \u300c\u6839\u30ce\u30fc\u30c9\u3092\u8d8a\u3048\u308b\u300d\u307e\u305f\u306f\u300c\u30ce\u30fc\u30c9\u304c\u4fee\u5fa9\u4e0d\u8981\u300d\u306e\u5834\u5408\u3001\u30d2\u30fc\u30d7\u5316\u3092\u7d42\u4e86\n        if (p < 0 || maxHeap.get(i) <= maxHeap.get(p))\n            break;\n        // 2\u3064\u306e\u30ce\u30fc\u30c9\u3092\u4ea4\u63db\n        swap(i, p);\n        // \u4e0a\u5411\u304d\u306b\u30d2\u30fc\u30d7\u5316\u3092\u30eb\u30fc\u30d7\n        i = p;\n    }\n}\n
my_heap.cs
[class]{MaxHeap}-[func]{Push}\n\n[class]{MaxHeap}-[func]{SiftUp}\n
my_heap.go
[class]{maxHeap}-[func]{push}\n\n[class]{maxHeap}-[func]{siftUp}\n
my_heap.swift
[class]{MaxHeap}-[func]{push}\n\n[class]{MaxHeap}-[func]{siftUp}\n
my_heap.js
[class]{MaxHeap}-[func]{push}\n\n[class]{MaxHeap}-[func]{siftUp}\n
my_heap.ts
[class]{MaxHeap}-[func]{push}\n\n[class]{MaxHeap}-[func]{siftUp}\n
my_heap.dart
[class]{MaxHeap}-[func]{push}\n\n[class]{MaxHeap}-[func]{siftUp}\n
my_heap.rs
[class]{MaxHeap}-[func]{push}\n\n[class]{MaxHeap}-[func]{sift_up}\n
my_heap.c
[class]{MaxHeap}-[func]{push}\n\n[class]{MaxHeap}-[func]{siftUp}\n
my_heap.kt
[class]{MaxHeap}-[func]{push}\n\n[class]{MaxHeap}-[func]{siftUp}\n
my_heap.rb
[class]{MaxHeap}-[func]{push}\n\n[class]{MaxHeap}-[func]{sift_up}\n
"},{"location":"chapter_heap/heap/#4","title":"4. \u00a0 \u30d2\u30fc\u30d7\u304b\u3089\u306e\u5148\u982d\u8981\u7d20\u524a\u9664","text":"

\u30d2\u30fc\u30d7\u306e\u5148\u982d\u8981\u7d20\u306f\u4e8c\u5206\u6728\u306e\u6839\u30ce\u30fc\u30c9\u3001\u3064\u307e\u308a\u30ea\u30b9\u30c8\u306e\u6700\u521d\u306e\u8981\u7d20\u3067\u3059\u3002\u30ea\u30b9\u30c8\u304b\u3089\u6700\u521d\u306e\u8981\u7d20\u3092\u76f4\u63a5\u524a\u9664\u3059\u308b\u3068\u3001\u4e8c\u5206\u6728\u5185\u306e\u3059\u3079\u3066\u306e\u30ce\u30fc\u30c9\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u304c\u5909\u66f4\u3055\u308c\u3001\u5f8c\u7d9a\u306e\u4fee\u5fa9\u306b\u30d2\u30fc\u30d7\u5316\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u304c\u56f0\u96e3\u306b\u306a\u308a\u307e\u3059\u3002\u8981\u7d20\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306e\u5909\u66f4\u3092\u6700\u5c0f\u9650\u306b\u6291\u3048\u308b\u305f\u3081\u3001\u6b21\u306e\u624b\u9806\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002

  1. \u30d2\u30fc\u30d7\u306e\u5148\u982d\u8981\u7d20\u3068\u5e95\u306e\u8981\u7d20\u3092\u4ea4\u63db\u3057\u307e\u3059\uff08\u6839\u30ce\u30fc\u30c9\u3068\u6700\u3082\u53f3\u306e\u8449\u30ce\u30fc\u30c9\u3092\u4ea4\u63db\uff09\u3002
  2. \u4ea4\u63db\u5f8c\u3001\u30ea\u30b9\u30c8\u304b\u3089\u30d2\u30fc\u30d7\u306e\u5e95\u3092\u524a\u9664\u3057\u307e\u3059\uff08\u4ea4\u63db\u3055\u308c\u3066\u3044\u308b\u305f\u3081\u3001\u5b9f\u969b\u306b\u306f\u5143\u306e\u5148\u982d\u8981\u7d20\u304c\u524a\u9664\u3055\u308c\u308b\uff09\u3002
  3. \u6839\u30ce\u30fc\u30c9\u304b\u3089\u958b\u59cb\u3057\u3066\u3001\u4e0a\u304b\u3089\u4e0b\u306b\u30d2\u30fc\u30d7\u5316\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002

\u4e0b\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u300c\u4e0a\u304b\u3089\u4e0b\u306e\u30d2\u30fc\u30d7\u5316\u300d\u306e\u65b9\u5411\u306f\u300c\u4e0b\u304b\u3089\u4e0a\u306e\u30d2\u30fc\u30d7\u5316\u300d\u3068\u53cd\u5bfe\u3067\u3059\u3002\u6839\u30ce\u30fc\u30c9\u306e\u5024\u3092\u305d\u306e2\u3064\u306e\u5b50\u3068\u6bd4\u8f03\u3057\u3001\u6700\u5927\u306e\u5b50\u3068\u4ea4\u63db\u3057\u307e\u3059\u3002\u6b21\u306b\u3001\u8449\u30ce\u30fc\u30c9\u306b\u5230\u9054\u3059\u308b\u304b\u3001\u4ea4\u63db\u304c\u4e0d\u8981\u306a\u30ce\u30fc\u30c9\u306b\u906d\u9047\u3059\u308b\u307e\u3067\u3001\u3053\u306e\u64cd\u4f5c\u3092\u7e70\u308a\u8fd4\u3057\u307e\u3059\u3002

<1><2><3><4><5><6><7><8><9><10>

\u56f3 8-4 \u00a0 \u30d2\u30fc\u30d7\u304b\u3089\u306e\u5148\u982d\u8981\u7d20\u524a\u9664\u306e\u624b\u9806

\u8981\u7d20\u633f\u5165\u64cd\u4f5c\u3068\u540c\u69d8\u306b\u3001\u5148\u982d\u8981\u7d20\u524a\u9664\u64cd\u4f5c\u306e\u6642\u9593\u8a08\u7b97\u91cf\u3082\\(O(\\log n)\\)\u3067\u3059\u3002\u30b3\u30fc\u30c9\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby my_heap.py
def pop(self) -> int:\n    \"\"\"\u8981\u7d20\u3092\u30d2\u30fc\u30d7\u304b\u3089\u51fa\u3059\"\"\"\n    # \u7a7a\u306e\u51e6\u7406\n    if self.is_empty():\n        raise IndexError(\"Heap is empty\")\n    # \u30eb\u30fc\u30c8\u30ce\u30fc\u30c9\u3068\u6700\u53f3\u7aef\u306e\u8449\u30ce\u30fc\u30c9\u3092\u4ea4\u63db\uff08\u6700\u521d\u306e\u8981\u7d20\u3068\u6700\u5f8c\u306e\u8981\u7d20\u3092\u4ea4\u63db\uff09\n    self.swap(0, self.size() - 1)\n    # \u30ce\u30fc\u30c9\u3092\u524a\u9664\n    val = self.max_heap.pop()\n    # \u4e0a\u304b\u3089\u4e0b\u3078\u30d2\u30fc\u30d7\u5316\n    self.sift_down(0)\n    # \u30d2\u30fc\u30d7\u306e\u5148\u982d\u8981\u7d20\u3092\u8fd4\u3059\n    return val\n\ndef sift_down(self, i: int):\n    \"\"\"\u30ce\u30fc\u30c9i\u304b\u3089\u958b\u59cb\u3057\u3066\u3001\u4e0a\u304b\u3089\u4e0b\u3078\u30d2\u30fc\u30d7\u5316\"\"\"\n    while True:\n        # i\u3001l\u3001r\u306e\u4e2d\u3067\u6700\u5927\u306e\u30ce\u30fc\u30c9\u3092\u6c7a\u5b9a\u3057\u3001ma\u3068\u3059\u308b\n        l, r, ma = self.left(i), self.right(i), i\n        if l < self.size() and self.max_heap[l] > self.max_heap[ma]:\n            ma = l\n        if r < self.size() and self.max_heap[r] > self.max_heap[ma]:\n            ma = r\n        # \u30ce\u30fc\u30c9i\u304c\u6700\u5927\u307e\u305f\u306f\u30a4\u30f3\u30c7\u30c3\u30af\u30b9l\u3001r\u304c\u7bc4\u56f2\u5916\u306e\u5834\u5408\u3001\u3055\u3089\u306a\u308b\u30d2\u30fc\u30d7\u5316\u306f\u4e0d\u8981\u3001\u30d6\u30ec\u30fc\u30af\n        if ma == i:\n            break\n        # 2\u3064\u306e\u30ce\u30fc\u30c9\u3092\u4ea4\u63db\n        self.swap(i, ma)\n        # \u4e0b\u5411\u304d\u306e\u30eb\u30fc\u30d7\u30d2\u30fc\u30d7\u5316\n        i = ma\n
my_heap.cpp
/* \u8981\u7d20\u304c\u30d2\u30fc\u30d7\u304b\u3089\u9000\u51fa */\nvoid pop() {\n    // \u7a7a\u306e\u51e6\u7406\n    if (isEmpty()) {\n        throw out_of_range(\"Heap is empty\");\n    }\n    // \u30eb\u30fc\u30c8\u30ce\u30fc\u30c9\u3092\u6700\u3082\u53f3\u306e\u8449\u30ce\u30fc\u30c9\u3068\u4ea4\u63db\uff08\u6700\u521d\u306e\u8981\u7d20\u3068\u6700\u5f8c\u306e\u8981\u7d20\u3092\u4ea4\u63db\uff09\n    swap(maxHeap[0], maxHeap[size() - 1]);\n    // \u30ce\u30fc\u30c9\u3092\u524a\u9664\n    maxHeap.pop_back();\n    // \u4e0a\u304b\u3089\u4e0b\u3078\u30d2\u30fc\u30d7\u5316\n    siftDown(0);\n}\n\n/* \u30ce\u30fc\u30c9i\u304b\u3089\u4e0b\u5411\u304d\u306b\u30d2\u30fc\u30d7\u5316\u3092\u958b\u59cb */\nvoid siftDown(int i) {\n    while (true) {\n        // i\u3001l\u3001r\u306e\u4e2d\u3067\u6700\u5927\u306e\u30ce\u30fc\u30c9\u3092\u6c7a\u5b9a\u3057\u3001ma\u3068\u3057\u3066\u8a18\u9332\n        int l = left(i), r = right(i), ma = i;\n        if (l < size() && maxHeap[l] > maxHeap[ma])\n            ma = l;\n        if (r < size() && maxHeap[r] > maxHeap[ma])\n            ma = r;\n        // \u30ce\u30fc\u30c9i\u304c\u6700\u5927\u3001\u307e\u305f\u306f\u30a4\u30f3\u30c7\u30c3\u30af\u30b9l\u3001r\u304c\u7bc4\u56f2\u5916\u306e\u5834\u5408\u3001\u3053\u308c\u4ee5\u4e0a\u306e\u30d2\u30fc\u30d7\u5316\u306f\u4e0d\u8981\u3001\u30d6\u30ec\u30fc\u30af\n        if (ma == i)\n            break;\n        swap(maxHeap[i], maxHeap[ma]);\n        // \u4e0b\u5411\u304d\u306b\u30eb\u30fc\u30d7\u3057\u3066\u30d2\u30fc\u30d7\u5316\n        i = ma;\n    }\n}\n
my_heap.java
/* \u8981\u7d20\u304c\u30d2\u30fc\u30d7\u304b\u3089\u9000\u51fa */\nint pop() {\n    // \u7a7a\u306e\u51e6\u7406\n    if (isEmpty())\n        throw new IndexOutOfBoundsException();\n    // \u6839\u30ce\u30fc\u30c9\u3092\u6700\u3082\u53f3\u306e\u8449\u30ce\u30fc\u30c9\u3068\u4ea4\u63db\uff08\u6700\u521d\u306e\u8981\u7d20\u3092\u6700\u5f8c\u306e\u8981\u7d20\u3068\u4ea4\u63db\uff09\n    swap(0, size() - 1);\n    // \u30ce\u30fc\u30c9\u3092\u524a\u9664\n    int val = maxHeap.remove(size() - 1);\n    // \u4e0a\u304b\u3089\u4e0b\u3078\u30d2\u30fc\u30d7\u5316\n    siftDown(0);\n    // \u30d2\u30fc\u30d7\u306e\u5148\u982d\u8981\u7d20\u3092\u8fd4\u3059\n    return val;\n}\n\n/* \u30ce\u30fc\u30c9 i \u304b\u3089\u4e0b\u5411\u304d\u306b\u30d2\u30fc\u30d7\u5316\u3092\u958b\u59cb */\nvoid siftDown(int i) {\n    while (true) {\n        // i\u3001l\u3001r \u306e\u4e2d\u3067\u6700\u5927\u306e\u30ce\u30fc\u30c9\u3092\u6c7a\u5b9a\u3057\u3001ma \u3068\u3059\u308b\n        int l = left(i), r = right(i), ma = i;\n        if (l < size() && maxHeap.get(l) > maxHeap.get(ma))\n            ma = l;\n        if (r < size() && maxHeap.get(r) > maxHeap.get(ma))\n            ma = r;\n        // \u30ce\u30fc\u30c9 i \u304c\u6700\u5927\u306e\u5834\u5408\u3001\u307e\u305f\u306f\u30a4\u30f3\u30c7\u30c3\u30af\u30b9 l\u3001r \u304c\u7bc4\u56f2\u5916\u306e\u5834\u5408\u3001\u3055\u3089\u306a\u308b\u30d2\u30fc\u30d7\u5316\u306f\u4e0d\u8981\u3001\u7d42\u4e86\n        if (ma == i)\n            break;\n        // 2\u3064\u306e\u30ce\u30fc\u30c9\u3092\u4ea4\u63db\n        swap(i, ma);\n        // \u4e0b\u5411\u304d\u306b\u30d2\u30fc\u30d7\u5316\u3092\u30eb\u30fc\u30d7\n        i = ma;\n    }\n}\n
my_heap.cs
[class]{MaxHeap}-[func]{Pop}\n\n[class]{MaxHeap}-[func]{SiftDown}\n
my_heap.go
[class]{maxHeap}-[func]{pop}\n\n[class]{maxHeap}-[func]{siftDown}\n
my_heap.swift
[class]{MaxHeap}-[func]{pop}\n\n[class]{MaxHeap}-[func]{siftDown}\n
my_heap.js
[class]{MaxHeap}-[func]{pop}\n\n[class]{MaxHeap}-[func]{siftDown}\n
my_heap.ts
[class]{MaxHeap}-[func]{pop}\n\n[class]{MaxHeap}-[func]{siftDown}\n
my_heap.dart
[class]{MaxHeap}-[func]{pop}\n\n[class]{MaxHeap}-[func]{siftDown}\n
my_heap.rs
[class]{MaxHeap}-[func]{pop}\n\n[class]{MaxHeap}-[func]{sift_down}\n
my_heap.c
[class]{MaxHeap}-[func]{pop}\n\n[class]{MaxHeap}-[func]{siftDown}\n
my_heap.kt
[class]{MaxHeap}-[func]{pop}\n\n[class]{MaxHeap}-[func]{siftDown}\n
my_heap.rb
[class]{MaxHeap}-[func]{pop}\n\n[class]{MaxHeap}-[func]{sift_down}\n
"},{"location":"chapter_heap/heap/#813","title":"8.1.3 \u00a0 \u30d2\u30fc\u30d7\u306e\u4e00\u822c\u7684\u306a\u5fdc\u7528","text":""},{"location":"chapter_heap/summary/","title":"8.4 \u00a0 \u307e\u3068\u3081","text":""},{"location":"chapter_heap/summary/#1","title":"1. \u00a0 \u91cd\u8981\u306a\u5fa9\u7fd2","text":""},{"location":"chapter_heap/summary/#2-q-a","title":"2. \u00a0 Q & A","text":"

Q: \u30c7\u30fc\u30bf\u69cb\u9020\u306e\u300c\u30d2\u30fc\u30d7\u300d\u3068\u30e1\u30e2\u30ea\u7ba1\u7406\u306e\u300c\u30d2\u30fc\u30d7\u300d\u306f\u540c\u3058\u6982\u5ff5\u3067\u3059\u304b\uff1f

\u3053\u306e2\u3064\u306f\u3001\u3069\u3061\u3089\u3082\u300c\u30d2\u30fc\u30d7\u300d\u3068\u547c\u3070\u308c\u307e\u3059\u304c\u3001\u540c\u3058\u6982\u5ff5\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u30b7\u30b9\u30c6\u30e0\u30e1\u30e2\u30ea\u306e\u30d2\u30fc\u30d7\u306f\u52d5\u7684\u30e1\u30e2\u30ea\u5272\u308a\u5f53\u3066\u306e\u4e00\u90e8\u3067\u3001\u30d7\u30ed\u30b0\u30e9\u30e0\u304c\u5b9f\u884c\u4e2d\u306b\u30c7\u30fc\u30bf\u3092\u683c\u7d0d\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002\u30d7\u30ed\u30b0\u30e9\u30e0\u306f\u3001\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3084\u914d\u5217\u306a\u3069\u306e\u8907\u96d1\u306a\u69cb\u9020\u3092\u683c\u7d0d\u3059\u308b\u305f\u3081\u306b\u3001\u4e00\u5b9a\u91cf\u306e\u30d2\u30fc\u30d7\u30e1\u30e2\u30ea\u3092\u8981\u6c42\u3067\u304d\u307e\u3059\u3002\u5272\u308a\u5f53\u3066\u3089\u308c\u305f\u30c7\u30fc\u30bf\u304c\u4e0d\u8981\u306b\u306a\u3063\u305f\u3068\u304d\u306f\u3001\u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u3092\u9632\u3050\u305f\u3081\u306b\u30d7\u30ed\u30b0\u30e9\u30e0\u304c\u3053\u306e\u30e1\u30e2\u30ea\u3092\u89e3\u653e\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u30b9\u30bf\u30c3\u30af\u30e1\u30e2\u30ea\u3068\u6bd4\u8f03\u3057\u3066\u3001\u30d2\u30fc\u30d7\u30e1\u30e2\u30ea\u306e\u7ba1\u7406\u3068\u4f7f\u7528\u306b\u306f\u3088\u308a\u591a\u304f\u306e\u6ce8\u610f\u304c\u5fc5\u8981\u3067\u3001\u4e0d\u9069\u5207\u306a\u4f7f\u7528\u306f\u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u3084\u30c0\u30f3\u30b0\u30ea\u30f3\u30b0\u30dd\u30a4\u30f3\u30bf\u306b\u3064\u306a\u304c\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002

"},{"location":"chapter_heap/top_k/","title":"8.3 \u00a0 Top-k\u554f\u984c","text":"

Question

\u9577\u3055\\(n\\)\u306e\u9806\u5e8f\u4ed8\u3051\u3089\u308c\u3066\u3044\u306a\u3044\u914d\u5217nums\u304c\u4e0e\u3048\u3089\u308c\u305f\u3068\u304d\u3001\u914d\u5217\u5185\u306e\u6700\u5927\\(k\\)\u500b\u306e\u8981\u7d20\u3092\u8fd4\u3057\u3066\u304f\u3060\u3055\u3044\u3002

\u3053\u306e\u554f\u984c\u306b\u3064\u3044\u3066\u3001\u307e\u305a2\u3064\u306e\u76f4\u63a5\u7684\u306a\u89e3\u6cd5\u3092\u7d39\u4ecb\u3057\u3001\u6b21\u306b\u3088\u308a\u52b9\u7387\u7684\u306a\u30d2\u30fc\u30d7\u30d9\u30fc\u30b9\u306e\u65b9\u6cd5\u3092\u8aac\u660e\u3057\u307e\u3059\u3002

"},{"location":"chapter_heap/top_k/#831-1","title":"8.3.1 \u00a0 \u65b9\u6cd51\uff1a\u53cd\u5fa9\u9078\u629e","text":"

\u4e0b\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\\(k\\)\u56de\u306e\u53cd\u5fa9\u3092\u5b9f\u884c\u3057\u3001\u5404\u56de\u3067\\(1\\)\u756a\u76ee\u3001\\(2\\)\u756a\u76ee\u3001\\(\\dots\\)\u3001\\(k\\)\u756a\u76ee\u306b\u5927\u304d\u3044\u8981\u7d20\u3092\u62bd\u51fa\u3067\u304d\u307e\u3059\u3002\u6642\u9593\u8a08\u7b97\u91cf\u306f\\(O(nk)\\)\u3067\u3059\u3002

\u3053\u306e\u65b9\u6cd5\u306f\\(k \\ll n\\)\u306e\u5834\u5408\u306b\u306e\u307f\u9069\u3057\u3066\u3044\u307e\u3059\u3002\\(k\\)\u304c\\(n\\)\u306b\u8fd1\u3044\u5834\u5408\u3001\u6642\u9593\u8a08\u7b97\u91cf\u306f\\(O(n^2)\\)\u306b\u8fd1\u3065\u304d\u3001\u975e\u5e38\u306b\u6642\u9593\u304c\u304b\u304b\u308a\u307e\u3059\u3002

\u56f3 8-6 \u00a0 \u6700\u5927k\u500b\u306e\u8981\u7d20\u3092\u53cd\u5fa9\u7684\u306b\u898b\u3064\u3051\u308b

Tip

\\(k = n\\)\u306e\u5834\u5408\u3001\u5b8c\u5168\u306b\u9806\u5e8f\u4ed8\u3051\u3089\u308c\u305f\u30b7\u30fc\u30b1\u30f3\u30b9\u3092\u5f97\u308b\u3053\u3068\u304c\u3067\u304d\u3001\u3053\u308c\u306f\u300c\u9078\u629e\u30bd\u30fc\u30c8\u300d\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3068\u540c\u7b49\u3067\u3059\u3002

"},{"location":"chapter_heap/top_k/#832-2","title":"8.3.2 \u00a0 \u65b9\u6cd52\uff1a\u30bd\u30fc\u30c8","text":"

\u4e0b\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u307e\u305a\u914d\u5217nums\u3092\u30bd\u30fc\u30c8\u3057\u3001\u6b21\u306b\u6700\u5f8c\u306e\\(k\\)\u500b\u306e\u8981\u7d20\u3092\u8fd4\u3059\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u6642\u9593\u8a08\u7b97\u91cf\u306f\\(O(n \\log n)\\)\u3067\u3059\u3002

\u660e\u3089\u304b\u306b\u3001\u3053\u306e\u65b9\u6cd5\u306f\u30bf\u30b9\u30af\u3092\u300c\u3084\u308a\u3059\u304e\u300d\u3066\u3044\u307e\u3059\u3002\u6700\u5927\\(k\\)\u500b\u306e\u8981\u7d20\u3092\u898b\u3064\u3051\u308b\u3060\u3051\u3067\u3088\u304f\u3001\u4ed6\u306e\u8981\u7d20\u3092\u30bd\u30fc\u30c8\u3059\u308b\u5fc5\u8981\u306f\u3042\u308a\u307e\u305b\u3093\u3002

\u56f3 8-7 \u00a0 \u30bd\u30fc\u30c8\u306b\u3088\u308b\u6700\u5927k\u500b\u306e\u8981\u7d20\u306e\u767a\u898b

"},{"location":"chapter_heap/top_k/#833-3","title":"8.3.3 \u00a0 \u65b9\u6cd53\uff1a\u30d2\u30fc\u30d7","text":"

\u4ee5\u4e0b\u306e\u30d7\u30ed\u30bb\u30b9\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u30d2\u30fc\u30d7\u306b\u57fa\u3065\u3044\u3066Top-k\u554f\u984c\u3092\u3088\u308a\u52b9\u7387\u7684\u306b\u89e3\u6c7a\u3067\u304d\u307e\u3059\u3002

  1. \u6700\u5c0f\u30d2\u30fc\u30d7\u3092\u521d\u671f\u5316\u3057\u307e\u3059\u3002\u5148\u982d\u8981\u7d20\u304c\u6700\u5c0f\u306b\u306a\u308a\u307e\u3059\u3002
  2. \u307e\u305a\u3001\u914d\u5217\u306e\u6700\u521d\u306e\\(k\\)\u500b\u306e\u8981\u7d20\u3092\u30d2\u30fc\u30d7\u306b\u633f\u5165\u3057\u307e\u3059\u3002
  3. \\(k + 1\\)\u756a\u76ee\u306e\u8981\u7d20\u304b\u3089\u958b\u59cb\u3057\u3001\u73fe\u5728\u306e\u8981\u7d20\u304c\u30d2\u30fc\u30d7\u306e\u5148\u982d\u8981\u7d20\u3088\u308a\u5927\u304d\u3044\u5834\u5408\u3001\u30d2\u30fc\u30d7\u306e\u5148\u982d\u8981\u7d20\u3092\u524a\u9664\u3057\u3001\u73fe\u5728\u306e\u8981\u7d20\u3092\u30d2\u30fc\u30d7\u306b\u633f\u5165\u3057\u307e\u3059\u3002
  4. \u8d70\u67fb\u3092\u5b8c\u4e86\u3057\u305f\u5f8c\u3001\u30d2\u30fc\u30d7\u306b\u306f\u6700\u5927\\(k\\)\u500b\u306e\u8981\u7d20\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002
<1><2><3><4><5><6><7><8><9>

\u56f3 8-8 \u00a0 \u30d2\u30fc\u30d7\u306b\u57fa\u3065\u304f\u6700\u5927k\u500b\u306e\u8981\u7d20\u306e\u767a\u898b

\u30b5\u30f3\u30d7\u30eb\u30b3\u30fc\u30c9\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby top_k.py
def top_k_heap(nums: list[int], k: int) -> list[int]:\n    \"\"\"\u30d2\u30fc\u30d7\u3092\u4f7f\u7528\u3057\u3066\u914d\u5217\u5185\u306e\u6700\u5927k\u500b\u306e\u8981\u7d20\u3092\u898b\u3064\u3051\u308b\"\"\"\n    # \u6700\u5c0f\u30d2\u30fc\u30d7\u3092\u521d\u671f\u5316\n    heap = []\n    # \u914d\u5217\u306e\u6700\u521d\u306ek\u500b\u306e\u8981\u7d20\u3092\u30d2\u30fc\u30d7\u306b\u5165\u529b\n    for i in range(k):\n        heapq.heappush(heap, nums[i])\n    # k+1\u756a\u76ee\u306e\u8981\u7d20\u304b\u3089\u3001\u30d2\u30fc\u30d7\u306e\u9577\u3055\u3092k\u306b\u4fdd\u3064\n    for i in range(k, len(nums)):\n        # \u73fe\u5728\u306e\u8981\u7d20\u304c\u30d2\u30fc\u30d7\u306e\u5148\u982d\u8981\u7d20\u3088\u308a\u5927\u304d\u3044\u5834\u5408\u3001\u30d2\u30fc\u30d7\u306e\u5148\u982d\u8981\u7d20\u3092\u524a\u9664\u3057\u3001\u73fe\u5728\u306e\u8981\u7d20\u3092\u30d2\u30fc\u30d7\u306b\u5165\u529b\n        if nums[i] > heap[0]:\n            heapq.heappop(heap)\n            heapq.heappush(heap, nums[i])\n    return heap\n
top_k.cpp
/* \u30d2\u30fc\u30d7\u3092\u4f7f\u7528\u3057\u3066\u914d\u5217\u5185\u306e\u6700\u5927k\u500b\u306e\u8981\u7d20\u3092\u898b\u3064\u3051\u308b */\npriority_queue<int, vector<int>, greater<int>> topKHeap(vector<int> &nums, int k) {\n    // \u6700\u5c0f\u30d2\u30fc\u30d7\u3092\u521d\u671f\u5316\n    priority_queue<int, vector<int>, greater<int>> heap;\n    // \u914d\u5217\u306e\u6700\u521d\u306ek\u500b\u306e\u8981\u7d20\u3092\u30d2\u30fc\u30d7\u306b\u5165\u529b\n    for (int i = 0; i < k; i++) {\n        heap.push(nums[i]);\n    }\n    // k+1\u756a\u76ee\u306e\u8981\u7d20\u304b\u3089\u3001\u30d2\u30fc\u30d7\u306e\u9577\u3055\u3092k\u306b\u4fdd\u3064\n    for (int i = k; i < nums.size(); i++) {\n        // \u73fe\u5728\u306e\u8981\u7d20\u304c\u30d2\u30fc\u30d7\u306e\u5148\u982d\u8981\u7d20\u3088\u308a\u5927\u304d\u3044\u5834\u5408\u3001\u30d2\u30fc\u30d7\u306e\u5148\u982d\u8981\u7d20\u3092\u524a\u9664\u3057\u3001\u73fe\u5728\u306e\u8981\u7d20\u3092\u30d2\u30fc\u30d7\u306b\u5165\u529b\n        if (nums[i] > heap.top()) {\n            heap.pop();\n            heap.push(nums[i]);\n        }\n    }\n    return heap;\n}\n
top_k.java
/* \u30d2\u30fc\u30d7\u3092\u4f7f\u7528\u3057\u3066\u914d\u5217\u5185\u306e\u6700\u5927 k \u500b\u306e\u8981\u7d20\u3092\u691c\u7d22 */\nQueue<Integer> topKHeap(int[] nums, int k) {\n    // \u6700\u5c0f\u30d2\u30fc\u30d7\u3092\u521d\u671f\u5316\n    Queue<Integer> heap = new PriorityQueue<Integer>();\n    // \u914d\u5217\u306e\u6700\u521d\u306e k \u500b\u306e\u8981\u7d20\u3092\u30d2\u30fc\u30d7\u306b\u5165\u529b\n    for (int i = 0; i < k; i++) {\n        heap.offer(nums[i]);\n    }\n    // k+1 \u756a\u76ee\u306e\u8981\u7d20\u304b\u3089\u3001\u30d2\u30fc\u30d7\u306e\u9577\u3055\u3092 k \u306b\u4fdd\u3064\n    for (int i = k; i < nums.length; i++) {\n        // \u73fe\u5728\u306e\u8981\u7d20\u304c\u30d2\u30fc\u30d7\u306e\u5148\u982d\u8981\u7d20\u3088\u308a\u5927\u304d\u3044\u5834\u5408\u3001\u30d2\u30fc\u30d7\u306e\u5148\u982d\u8981\u7d20\u3092\u524a\u9664\u3057\u3001\u73fe\u5728\u306e\u8981\u7d20\u3092\u30d2\u30fc\u30d7\u306b\u5165\u529b\n        if (nums[i] > heap.peek()) {\n            heap.poll();\n            heap.offer(nums[i]);\n        }\n    }\n    return heap;\n}\n
top_k.cs
[class]{top_k}-[func]{TopKHeap}\n
top_k.go
[class]{}-[func]{topKHeap}\n
top_k.swift
[class]{}-[func]{topKHeap}\n
top_k.js
[class]{}-[func]{pushMinHeap}\n\n[class]{}-[func]{popMinHeap}\n\n[class]{}-[func]{peekMinHeap}\n\n[class]{}-[func]{getMinHeap}\n\n[class]{}-[func]{topKHeap}\n
top_k.ts
[class]{}-[func]{pushMinHeap}\n\n[class]{}-[func]{popMinHeap}\n\n[class]{}-[func]{peekMinHeap}\n\n[class]{}-[func]{getMinHeap}\n\n[class]{}-[func]{topKHeap}\n
top_k.dart
[class]{}-[func]{topKHeap}\n
top_k.rs
[class]{}-[func]{top_k_heap}\n
top_k.c
[class]{}-[func]{pushMinHeap}\n\n[class]{}-[func]{popMinHeap}\n\n[class]{}-[func]{peekMinHeap}\n\n[class]{}-[func]{getMinHeap}\n\n[class]{}-[func]{topKHeap}\n
top_k.kt
[class]{}-[func]{topKHeap}\n
top_k.rb
[class]{}-[func]{top_k_heap}\n

\u5408\u8a08\\(n\\)\u56de\u306e\u30d2\u30fc\u30d7\u633f\u5165\u3068\u524a\u9664\u304c\u5b9f\u884c\u3055\u308c\u3001\u6700\u5927\u30d2\u30fc\u30d7\u30b5\u30a4\u30ba\u304c\\(k\\)\u3067\u3042\u308b\u305f\u3081\u3001\u6642\u9593\u8a08\u7b97\u91cf\u306f\\(O(n \\log k)\\)\u3067\u3059\u3002\u3053\u306e\u65b9\u6cd5\u306f\u975e\u5e38\u306b\u52b9\u7387\u7684\u3067\u3001\\(k\\)\u304c\u5c0f\u3055\u3044\u5834\u5408\u3001\u6642\u9593\u8a08\u7b97\u91cf\u306f\\(O(n)\\)\u306b\u8fd1\u3065\u304d\u3001\\(k\\)\u304c\u5927\u304d\u3044\u5834\u5408\u3067\u3082\u3001\u6642\u9593\u8a08\u7b97\u91cf\u306f\\(O(n \\log n)\\)\u3092\u8d85\u3048\u307e\u305b\u3093\u3002

\u3055\u3089\u306b\u3001\u3053\u306e\u65b9\u6cd5\u306f\u52d5\u7684\u30c7\u30fc\u30bf\u30b9\u30c8\u30ea\u30fc\u30e0\u306e\u30b7\u30ca\u30ea\u30aa\u306b\u9069\u3057\u3066\u3044\u307e\u3059\u3002\u30c7\u30fc\u30bf\u3092\u7d99\u7d9a\u7684\u306b\u8ffd\u52a0\u3059\u308b\u3053\u3068\u3067\u3001\u30d2\u30fc\u30d7\u5185\u306e\u8981\u7d20\u3092\u7dad\u6301\u3057\u3001\u6700\u5927\\(k\\)\u500b\u306e\u8981\u7d20\u306e\u52d5\u7684\u66f4\u65b0\u3092\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002

"},{"location":"chapter_hello_algo/","title":"\u306f\u3058\u3081\u306b","text":"

\u6570\u5e74\u524d\u3001\u79c1\u306fLeetCode\u3067\u300c\u5263\u6307Offer\u300d\u306e\u554f\u984c\u89e3\u7b54\u3092\u5171\u6709\u3057\u3001\u591a\u304f\u306e\u8aad\u8005\u304b\u3089\u52b1\u307e\u3057\u3068\u30b5\u30dd\u30fc\u30c8\u3092\u53d7\u3051\u307e\u3057\u305f\u3002\u8aad\u8005\u3068\u306e\u3084\u308a\u53d6\u308a\u306e\u4e2d\u3067\u3001\u6700\u3082\u3088\u304f\u805e\u304b\u308c\u305f\u8cea\u554f\u306f\u300c\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u52c9\u5f37\u3092\u3069\u3046\u59cb\u3081\u305f\u3089\u3088\u3044\u304b\u300d\u3067\u3057\u305f\u3002\u6b21\u7b2c\u306b\u3001\u79c1\u306f\u3053\u306e\u8cea\u554f\u306b\u5f37\u3044\u95a2\u5fc3\u3092\u62b1\u304f\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\u3002

\u554f\u984c\u3092\u76f4\u63a5\u89e3\u304f\u3053\u3068\u304c\u6700\u3082\u4eba\u6c17\u306e\u3042\u308b\u65b9\u6cd5\u306e\u3088\u3046\u3067\u3059\u3002\u3053\u308c\u306f\u30b7\u30f3\u30d7\u30eb\u3067\u76f4\u63a5\u7684\u3067\u52b9\u679c\u7684\u3067\u3059\u3002\u3057\u304b\u3057\u3001\u554f\u984c\u89e3\u6c7a\u306f\u30de\u30a4\u30f3\u30b9\u30a4\u30fc\u30d1\u30fc\u3092\u30d7\u30ec\u30a4\u3059\u308b\u3088\u3046\u306a\u3082\u306e\u3067\u3059\u3002\u81ea\u5b66\u81ea\u7fd2\u306e\u80fd\u529b\u304c\u9ad8\u3044\u4eba\u306f\u3001\u5730\u96f7\u3092\u4e00\u3064\u305a\u3064\u56de\u907f\u3057\u3066\u3044\u304f\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u304c\u3001\u3057\u3063\u304b\u308a\u3068\u3057\u305f\u57fa\u790e\u304c\u306a\u3044\u4eba\u306f\u3001\u4f55\u5ea6\u3082\u3064\u307e\u305a\u3044\u3066\u632b\u6298\u3057\u306a\u304c\u3089\u5f8c\u9000\u3059\u308b\u3053\u3068\u306b\u306a\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002\u6559\u79d1\u66f8\u3092\u8aad\u3080\u3053\u3068\u3082\u4e00\u822c\u7684\u306a\u65b9\u6cd5\u3067\u3059\u304c\u3001\u5c31\u8077\u6d3b\u52d5\u4e2d\u306e\u4eba\u306b\u3068\u3063\u3066\u3001\u5352\u696d\u8ad6\u6587\u306e\u57f7\u7b46\u3001\u5c65\u6b74\u66f8\u306e\u63d0\u51fa\u3001\u7b46\u8a18\u8a66\u9a13\u3084\u9762\u63a5\u306e\u6e96\u5099\u304c\u65e2\u306b\u30a8\u30cd\u30eb\u30ae\u30fc\u306e\u5927\u90e8\u5206\u3092\u6d88\u8cbb\u3057\u3066\u304a\u308a\u3001\u5206\u539a\u3044\u672c\u3092\u8aad\u3080\u3053\u3068\u306f\u3057\u3070\u3057\u3070\u56f0\u96e3\u306a\u6311\u6226\u3068\u306a\u308a\u307e\u3059\u3002

\u3082\u3057\u3042\u306a\u305f\u304c\u540c\u69d8\u306e\u60a9\u307f\u3092\u62b1\u3048\u3066\u3044\u308b\u306a\u3089\u3001\u3053\u306e\u672c\u304c\u3042\u306a\u305f\u3092\u898b\u3064\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u3066\u5e78\u904b\u3067\u3059\u3002\u3053\u306e\u672c\u306f\u3001\u3053\u306e\u8cea\u554f\u306b\u5bfe\u3059\u308b\u79c1\u306e\u7b54\u3048\u3067\u3059\u3002\u3053\u308c\u304c\u6700\u826f\u306e\u89e3\u6c7a\u7b56\u3067\u306f\u306a\u3044\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u304c\u3001\u5c11\u306a\u304f\u3068\u3082\u7a4d\u6975\u7684\u306a\u8a66\u307f\u3067\u3059\u3002\u3053\u306e\u672c\u304c\u3042\u306a\u305f\u306b\u76f4\u63a5\u5185\u5b9a\u3092\u3082\u305f\u3089\u3059\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u304c\u3001\u30c7\u30fc\u30bf\u69cb\u9020\u3068\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u300c\u77e5\u8b58\u5730\u56f3\u300d\u3092\u63a2\u7d22\u3059\u308b\u624b\u5f15\u304d\u3068\u306a\u308a\u3001\u3055\u307e\u3056\u307e\u306a\u300c\u5730\u96f7\u300d\u306e\u5f62\u3001\u5927\u304d\u3055\u3001\u4f4d\u7f6e\u3092\u7406\u89e3\u3057\u3001\u3055\u307e\u3056\u307e\u306a\u300c\u5730\u96f7\u9664\u53bb\u65b9\u6cd5\u300d\u3092\u30de\u30b9\u30bf\u30fc\u3067\u304d\u308b\u3088\u3046\u304a\u624b\u4f1d\u3044\u3057\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u30b9\u30ad\u30eb\u304c\u3042\u308c\u3070\u3001\u3088\u308a\u5feb\u9069\u306b\u554f\u984c\u3092\u89e3\u304d\u3001\u6587\u732e\u3092\u8aad\u3080\u3053\u3068\u304c\u3067\u304d\u3001\u5f90\u3005\u306b\u77e5\u8b58\u4f53\u7cfb\u3092\u69cb\u7bc9\u3067\u304d\u308b\u3068\u4fe1\u3058\u3066\u3044\u307e\u3059\u3002

\u79c1\u306f\u3001\u30d5\u30a1\u30a4\u30f3\u30de\u30f3\u6559\u6388\u306e\u8a00\u8449\u306b\u6df1\u304f\u540c\u611f\u3057\u307e\u3059\u3002\u300c\u77e5\u8b58\u306f\u7121\u6599\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u6ce8\u610f\u3092\u6255\u308f\u306a\u3051\u308c\u3070\u306a\u3089\u306a\u3044\u306e\u3067\u3059\u3002\u300d\u3053\u306e\u610f\u5473\u3067\u3001\u3053\u306e\u672c\u306f\u5b8c\u5168\u306b\u300c\u7121\u6599\u300d\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u3053\u306e\u672c\u306b\u5bfe\u3059\u308b\u3042\u306a\u305f\u306e\u8cb4\u91cd\u306a\u300c\u6ce8\u610f\u300d\u306b\u5fdc\u3048\u308b\u305f\u3081\u306b\u3001\u79c1\u306f\u6700\u5584\u3092\u5c3d\u304f\u3057\u3001\u6700\u5927\u306e\u300c\u6ce8\u610f\u300d\u3092\u6255\u3063\u3066\u3053\u306e\u672c\u3092\u66f8\u304d\u307e\u3059\u3002

\u81ea\u5206\u306e\u9650\u754c\u3092\u8a8d\u8b58\u3057\u3066\u304a\u308a\u3001\u3053\u306e\u672c\u306e\u5185\u5bb9\u304c\u6642\u9593\u3092\u304b\u3051\u3066\u6d17\u7df4\u3055\u308c\u305f\u306b\u3082\u304b\u304b\u308f\u3089\u305a\u3001\u9593\u9055\u3044\u306f\u78ba\u5b9f\u306b\u6b8b\u3063\u3066\u3044\u308b\u3053\u3068\u3092\u7406\u89e3\u3057\u3066\u3044\u307e\u3059\u3002\u5148\u751f\u65b9\u3084\u5b66\u751f\u306e\u7686\u69d8\u304b\u3089\u306e\u6279\u8a55\u3068\u8a02\u6b63\u3092\u5fc3\u304b\u3089\u6b53\u8fce\u3044\u305f\u3057\u307e\u3059\u3002

Hello, Algo!

\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u306e\u51fa\u73fe\u306f\u4e16\u754c\u306b\u5927\u304d\u306a\u5909\u5316\u3092\u3082\u305f\u3089\u3057\u307e\u3057\u305f\u3002\u9ad8\u901f\u306a\u8a08\u7b97\u80fd\u529b\u3068\u512a\u308c\u305f\u30d7\u30ed\u30b0\u30e9\u30e0\u53ef\u80fd\u6027\u306b\u3088\u308a\u3001\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u306f\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3092\u5b9f\u884c\u3057\u30c7\u30fc\u30bf\u3092\u51e6\u7406\u3059\u308b\u305f\u3081\u306e\u7406\u60f3\u7684\u306a\u5a92\u4f53\u3068\u306a\u308a\u307e\u3057\u305f\u3002\u30d3\u30c7\u30aa\u30b2\u30fc\u30e0\u306e\u30ea\u30a2\u30eb\u306a\u30b0\u30e9\u30d5\u30a3\u30c3\u30af\u30b9\u3001\u81ea\u52d5\u904b\u8ee2\u306e\u77e5\u7684\u306a\u5224\u65ad\u3001AlphaGo\u306e\u898b\u4e8b\u306a\u56f2\u7881\u30b2\u30fc\u30e0\u3001ChatGPT\u306e\u81ea\u7136\u306a\u5bfe\u8a71\u306a\u3069\u3001\u3053\u308c\u3089\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306f\u3059\u3079\u3066\u3001\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u4e0a\u3067\u52d5\u4f5c\u3059\u308b\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u7cbe\u5de7\u306a\u5b9f\u6f14\u3067\u3059\u3002

\u5b9f\u969b\u3001\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u306e\u51fa\u73fe\u4ee5\u524d\u304b\u3089\u3001\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3068\u30c7\u30fc\u30bf\u69cb\u9020\u306f\u4e16\u754c\u306e\u81f3\u308b\u6240\u306b\u5b58\u5728\u3057\u3066\u3044\u307e\u3057\u305f\u3002\u521d\u671f\u306e\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306f\u6bd4\u8f03\u7684\u30b7\u30f3\u30d7\u30eb\u3067\u3001\u53e4\u4ee3\u306e\u8a08\u6570\u65b9\u6cd5\u3084\u9053\u5177\u4f5c\u308a\u306e\u624b\u9806\u306a\u3069\u304c\u3042\u308a\u307e\u3057\u305f\u3002\u6587\u660e\u304c\u9032\u6b69\u3059\u308b\u306b\u3064\u308c\u3066\u3001\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306f\u3088\u308a\u6d17\u7df4\u3055\u308c\u8907\u96d1\u306b\u306a\u308a\u307e\u3057\u305f\u3002\u8077\u4eba\u306e\u7cbe\u5de7\u306a\u6280\u8853\u304b\u3089\u3001\u751f\u7523\u529b\u3092\u89e3\u653e\u3059\u308b\u5de5\u696d\u88fd\u54c1\u3001\u5b87\u5b99\u3092\u652f\u914d\u3059\u308b\u79d1\u5b66\u6cd5\u5247\u307e\u3067\u3001\u307b\u307c\u3059\u3079\u3066\u306e\u5e73\u51e1\u307e\u305f\u306f\u9a5a\u7570\u7684\u306a\u3053\u3068\u306e\u80cc\u5f8c\u306b\u306f\u3001\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u5de7\u5999\u306a\u601d\u8003\u304c\u3042\u308a\u307e\u3059\u3002

\u540c\u69d8\u306b\u3001\u30c7\u30fc\u30bf\u69cb\u9020\u306f\u81f3\u308b\u6240\u306b\u3042\u308a\u307e\u3059\u3002\u30bd\u30fc\u30b7\u30e3\u30eb\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u304b\u3089\u5730\u4e0b\u9244\u8def\u7dda\u307e\u3067\u3001\u591a\u304f\u306e\u30b7\u30b9\u30c6\u30e0\u306f\u300c\u30b0\u30e9\u30d5\u300d\u3068\u3057\u3066\u30e2\u30c7\u30eb\u5316\u3067\u304d\u307e\u3059\u3002\u56fd\u304b\u3089\u5bb6\u65cf\u307e\u3067\u3001\u793e\u4f1a\u7d44\u7e54\u306e\u4e3b\u8981\u306a\u5f62\u614b\u306f\u300c\u6728\u300d\u306e\u7279\u5fb4\u3092\u793a\u3057\u307e\u3059\u3002\u51ac\u670d\u306f\u300c\u30b9\u30bf\u30c3\u30af\u300d\u306e\u3088\u3046\u3067\u3001\u6700\u521d\u306b\u7740\u305f\u3082\u306e\u304c\u6700\u5f8c\u306b\u8131\u304c\u308c\u307e\u3059\u3002\u30d0\u30c9\u30df\u30f3\u30c8\u30f3\u306e\u30b7\u30e3\u30c8\u30eb\u7b52\u306f\u300c\u30ad\u30e5\u30fc\u300d\u306b\u4f3c\u3066\u304a\u308a\u3001\u4e00\u65b9\u306e\u7aef\u3067\u633f\u5165\u3057\u3001\u3082\u3046\u4e00\u65b9\u306e\u7aef\u3067\u53d6\u308a\u51fa\u3057\u307e\u3059\u3002\u8f9e\u66f8\u306f\u300c\u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb\u300d\u306e\u3088\u3046\u3067\u3001\u76ee\u6a19\u30a8\u30f3\u30c8\u30ea\u3092\u7d20\u65e9\u304f\u691c\u7d22\u3067\u304d\u307e\u3059\u3002

\u3053\u306e\u672c\u306f\u3001\u660e\u78ba\u3067\u7406\u89e3\u3057\u3084\u3059\u3044\u30a2\u30cb\u30e1\u30fc\u30b7\u30e7\u30f3\u56f3\u89e3\u3068\u5b9f\u884c\u53ef\u80fd\u306a\u30b3\u30fc\u30c9\u4f8b\u3092\u901a\u3058\u3066\u3001\u8aad\u8005\u304c\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3068\u30c7\u30fc\u30bf\u69cb\u9020\u306e\u6838\u5fc3\u6982\u5ff5\u3092\u7406\u89e3\u3057\u3001\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u3092\u901a\u3058\u3066\u305d\u308c\u3089\u3092\u5b9f\u88c5\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308b\u3053\u3068\u3092\u76ee\u6307\u3057\u3066\u3044\u307e\u3059\u3002\u3053\u306e\u57fa\u76e4\u306e\u4e0a\u3067\u3001\u3053\u306e\u672c\u306f\u8907\u96d1\u306a\u4e16\u754c\u306b\u304a\u3051\u308b\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u751f\u304d\u751f\u304d\u3068\u3057\u305f\u73fe\u308c\u3092\u660e\u3089\u304b\u306b\u3057\u3001\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u7f8e\u3057\u3055\u3092\u793a\u3059\u3053\u3068\u306b\u52aa\u3081\u3066\u3044\u307e\u3059\u3002\u3053\u306e\u672c\u304c\u3042\u306a\u305f\u306e\u304a\u5f79\u306b\u7acb\u3066\u308b\u3053\u3068\u3092\u9858\u3063\u3066\u3044\u307e\u3059\uff01

"},{"location":"chapter_introduction/","title":"\u7b2c 1 \u7ae0 \u00a0 \u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3068\u306e\u51fa\u4f1a\u3044","text":"

Abstract

\u512a\u96c5\u306a\u4e59\u5973\u304c\u8e0a\u308a\u307e\u3059\u3002\u30c7\u30fc\u30bf\u3068\u7d61\u307f\u5408\u3044\u3001\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u30e1\u30ed\u30c7\u30a3\u30fc\u306b\u5408\u308f\u305b\u3066\u30b9\u30ab\u30fc\u30c8\u3092\u306a\u3073\u304b\u305b\u306a\u304c\u3089\u3002

\u5f7c\u5973\u304c\u3042\u306a\u305f\u3092\u30c0\u30f3\u30b9\u306b\u8a98\u3044\u307e\u3059\u3002\u5f7c\u5973\u306e\u30b9\u30c6\u30c3\u30d7\u306b\u5f93\u3063\u3066\u3001\u8ad6\u7406\u3068\u7f8e\u306b\u6e80\u3061\u305f\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u4e16\u754c\u306b\u5165\u308a\u307e\u3057\u3087\u3046\u3002

"},{"location":"chapter_introduction/#_1","title":"\u7ae0\u306e\u5185\u5bb9","text":""},{"location":"chapter_introduction/algorithms_are_everywhere/","title":"1.1 \u00a0 \u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306f\u81f3\u308b\u6240\u306b\u3042\u308b","text":"

\u300c\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u300d\u3068\u3044\u3046\u8a00\u8449\u3092\u805e\u304f\u3068\u3001\u81ea\u7136\u306b\u6570\u5b66\u3092\u601d\u3044\u6d6e\u304b\u3079\u307e\u3059\u3002\u3057\u304b\u3057\u3001\u591a\u304f\u306e\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306f\u8907\u96d1\u306a\u6570\u5b66\u3092\u542b\u307e\u305a\u3001\u57fa\u672c\u7684\u306a\u8ad6\u7406\u306b\u3088\u308a\u591a\u304f\u4f9d\u5b58\u3057\u3066\u304a\u308a\u3001\u3053\u308c\u306f\u79c1\u305f\u3061\u306e\u65e5\u5e38\u751f\u6d3b\u306e\u81f3\u308b\u6240\u3067\u898b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306b\u3064\u3044\u3066\u6b63\u5f0f\u306b\u8b70\u8ad6\u3092\u59cb\u3081\u308b\u524d\u306b\u3001\u8208\u5473\u6df1\u3044\u4e8b\u5b9f\u3092\u5171\u6709\u3059\u308b\u4fa1\u5024\u304c\u3042\u308a\u307e\u3059\u3002\u3042\u306a\u305f\u306f\u7121\u610f\u8b58\u306e\u3046\u3061\u306b\u591a\u304f\u306e\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3092\u5b66\u3073\u3001\u65e5\u5e38\u751f\u6d3b\u3067\u305d\u308c\u3089\u3092\u5fdc\u7528\u3059\u308b\u3053\u3068\u306b\u6163\u308c\u3066\u3044\u307e\u3059\u3002\u3053\u3053\u3067\u3001\u3053\u306e\u70b9\u3092\u8a3c\u660e\u3059\u308b\u305f\u3081\u306b\u3044\u304f\u3064\u304b\u306e\u5177\u4f53\u7684\u306a\u4f8b\u3092\u6319\u3052\u307e\u3059\u3002

\u4f8b1\uff1a\u8f9e\u66f8\u306e\u5f15\u304d\u65b9\u3002\u82f1\u8a9e\u306e\u8f9e\u66f8\u3067\u306f\u3001\u5358\u8a9e\u304c\u30a2\u30eb\u30d5\u30a1\u30d9\u30c3\u30c8\u9806\u306b\u4e26\u3093\u3067\u3044\u307e\u3059\u3002\\(r\\)\u3067\u59cb\u307e\u308b\u5358\u8a9e\u3092\u63a2\u3057\u3066\u3044\u308b\u3068\u4eee\u5b9a\u3059\u308b\u3068\u3001\u901a\u5e38\u306f\u4ee5\u4e0b\u306e\u65b9\u6cd5\u3067\u884c\u3044\u307e\u3059\uff1a

  1. \u8f9e\u66f8\u3092\u5927\u4f53\u534a\u5206\u3050\u3089\u3044\u306e\u3068\u3053\u308d\u3067\u958b\u304d\u3001\u305d\u306e\u30da\u30fc\u30b8\u306e\u6700\u521d\u306e\u8a9e\u5f59\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002\u4f8b\u3048\u3070\\(m\\)\u3067\u59cb\u307e\u308b\u6587\u5b57\u3060\u3068\u3057\u307e\u3057\u3087\u3046\u3002
  2. \\(r\\)\u306f\u30a2\u30eb\u30d5\u30a1\u30d9\u30c3\u30c8\u3067\\(m\\)\u306e\u5f8c\u306b\u6765\u308b\u306e\u3067\u3001\u524d\u534a\u3092\u7121\u8996\u3057\u3066\u3001\u63a2\u7d22\u7a7a\u9593\u3092\u5f8c\u534a\u306b\u7d5e\u308a\u307e\u3059\u3002
  3. \\(r\\)\u3067\u59cb\u307e\u308b\u5358\u8a9e\u3092\u898b\u3064\u3051\u308b\u307e\u3067\u3001\u30b9\u30c6\u30c3\u30d71.\u30682.\u3092\u7e70\u308a\u8fd4\u3057\u307e\u3059\u3002
<1><2><3><4><5>

\u56f3 1-1 \u00a0 \u8f9e\u66f8\u3092\u5f15\u304f\u904e\u7a0b

\u8f9e\u66f8\u3092\u5f15\u304f\u3053\u3068\u306f\u3001\u5c0f\u5b66\u751f\u306b\u3068\u3063\u3066\u5fc5\u9808\u306e\u30b9\u30ad\u30eb\u3067\u3059\u304c\u3001\u5b9f\u969b\u306b\u306f\u6709\u540d\u306a\u300c\u4e8c\u5206\u63a2\u7d22\u300d\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3067\u3059\u3002\u30c7\u30fc\u30bf\u69cb\u9020\u306e\u89b3\u70b9\u304b\u3089\u3001\u8f9e\u66f8\u3092\u30bd\u30fc\u30c8\u3055\u308c\u305f\u300c\u914d\u5217\u300d\u3068\u8003\u3048\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u89b3\u70b9\u304b\u3089\u3001\u8f9e\u66f8\u3067\u5358\u8a9e\u3092\u63a2\u3059\u305f\u3081\u306b\u53d6\u3089\u308c\u308b\u4e00\u9023\u306e\u884c\u52d5\u306f\u3001\u300c\u4e8c\u5206\u63a2\u7d22\u300d\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3068\u898b\u306a\u3059\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

\u4f8b2\uff1a\u30c8\u30e9\u30f3\u30d7\u306e\u6574\u7406\u3002\u30c8\u30e9\u30f3\u30d7\u3092\u30d7\u30ec\u30a4\u3059\u308b\u3068\u304d\u3001\u624b\u672d\u3092\u6607\u9806\u306b\u4e26\u3079\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u4ee5\u4e0b\u306e\u904e\u7a0b\u3067\u793a\u3055\u308c\u307e\u3059\u3002

  1. \u30c8\u30e9\u30f3\u30d7\u3092\u300c\u6574\u5217\u6e08\u307f\u300d\u3068\u300c\u672a\u6574\u5217\u300d\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u306b\u5206\u3051\u307e\u3059\u3002\u6700\u521d\u306f\u4e00\u756a\u5de6\u306e\u30ab\u30fc\u30c9\u304c\u65e2\u306b\u6574\u5217\u3057\u3066\u3044\u308b\u3068\u4eee\u5b9a\u3057\u307e\u3059\u3002
  2. \u672a\u6574\u5217\u30bb\u30af\u30b7\u30e7\u30f3\u304b\u3089\u30ab\u30fc\u30c9\u30921\u679a\u53d6\u308a\u51fa\u3057\u3001\u6574\u5217\u6e08\u307f\u30bb\u30af\u30b7\u30e7\u30f3\u306e\u6b63\u3057\u3044\u4f4d\u7f6e\u306b\u633f\u5165\u3057\u307e\u3059\u3002\u3053\u306e\u5f8c\u3001\u5de6\u7aef\u306e2\u679a\u306e\u30ab\u30fc\u30c9\u304c\u6574\u5217\u3057\u307e\u3059\u3002
  3. \u3059\u3079\u3066\u306e\u30ab\u30fc\u30c9\u304c\u6574\u5217\u3059\u308b\u307e\u3067\u3001\u30b9\u30c6\u30c3\u30d72\u3092\u7e70\u308a\u8fd4\u3057\u307e\u3059\u3002

\u56f3 1-2 \u00a0 \u30c8\u30e9\u30f3\u30d7\u306e\u6574\u7406\u904e\u7a0b

\u4e0a\u8a18\u306e\u30c8\u30e9\u30f3\u30d7\u3092\u6574\u7406\u3059\u308b\u65b9\u6cd5\u306f\u3001\u5b9f\u8cea\u7684\u306b\u300c\u633f\u5165\u30bd\u30fc\u30c8\u300d\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3067\u3042\u308a\u3001\u5c0f\u3055\u306a\u30c7\u30fc\u30bf\u30bb\u30c3\u30c8\u306b\u5bfe\u3057\u3066\u975e\u5e38\u306b\u52b9\u7387\u7684\u3067\u3059\u3002\u591a\u304f\u306e\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\u306e\u30bd\u30fc\u30c8\u95a2\u6570\u306b\u306f\u633f\u5165\u30bd\u30fc\u30c8\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002

\u4f8b3\uff1a\u304a\u91e3\u308a\u306e\u8a08\u7b97\u3002\u30b9\u30fc\u30d1\u30fc\u30de\u30fc\u30b1\u30c3\u30c8\u3067\\(69\\)\u306e\u8cb7\u3044\u7269\u3092\u3057\u305f\u3068\u4eee\u5b9a\u3057\u307e\u3059\u3002\u30ec\u30b8\u4fc2\u306b\\(100\\)\u3092\u6e21\u3059\u3068\u3001\\(31\\)\u306e\u304a\u91e3\u308a\u3092\u63d0\u4f9b\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u306e\u904e\u7a0b\u306f\u4ee5\u4e0b\u306e\u56f3\u3067\u660e\u78ba\u306b\u7406\u89e3\u3067\u304d\u307e\u3059\u3002

  1. \u9078\u629e\u80a2\u306f\\(31\\)\u4ee5\u4e0b\u306e\u4fa1\u5024\u306e\u3042\u308b\u901a\u8ca8\u3067\u3001\\(1\\)\u3001\\(5\\)\u3001\\(10\\)\u3001\\(20\\)\u304c\u542b\u307e\u308c\u307e\u3059\u3002
  2. \u9078\u629e\u80a2\u304b\u3089\u6700\u5927\u306e\\(20\\)\u3092\u53d6\u308a\u51fa\u3057\u3001\\(31 - 20 = 11\\)\u304c\u6b8b\u308a\u307e\u3059\u3002
  3. \u6b8b\u308a\u306e\u9078\u629e\u80a2\u304b\u3089\u6700\u5927\u306e\\(10\\)\u3092\u53d6\u308a\u51fa\u3057\u3001\\(11 - 10 = 1\\)\u304c\u6b8b\u308a\u307e\u3059\u3002
  4. \u6b8b\u308a\u306e\u9078\u629e\u80a2\u304b\u3089\u6700\u5927\u306e\\(1\\)\u3092\u53d6\u308a\u51fa\u3057\u3001\\(1 - 1 = 0\\)\u304c\u6b8b\u308a\u307e\u3059\u3002
  5. \u304a\u91e3\u308a\u306e\u8a08\u7b97\u304c\u5b8c\u4e86\u3057\u3001\u89e3\u7b54\u306f\\(20 + 10 + 1 = 31\\)\u3067\u3059\u3002

\u56f3 1-3 \u00a0 \u304a\u91e3\u308a\u306e\u8a08\u7b97\u904e\u7a0b

\u8a18\u8ff0\u3055\u308c\u305f\u30b9\u30c6\u30c3\u30d7\u3067\u306f\u3001\u5229\u7528\u53ef\u80fd\u306a\u6700\u5927\u306e\u984d\u9762\u3092\u4f7f\u7528\u3057\u3066\u5404\u6bb5\u968e\u3067\u6700\u826f\u306e\u9078\u629e\u80a2\u3092\u9078\u3076\u3053\u3068\u3067\u3001\u52b9\u679c\u7684\u306a\u304a\u91e3\u308a\u8a08\u7b97\u6226\u7565\u306b\u3064\u306a\u304c\u308a\u307e\u3059\u3002\u30c7\u30fc\u30bf\u69cb\u9020\u3068\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u89b3\u70b9\u304b\u3089\u3001\u3053\u306e\u30a2\u30d7\u30ed\u30fc\u30c1\u306f\u300c\u8caa\u6b32\u300d\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3068\u3057\u3066\u77e5\u3089\u308c\u3066\u3044\u307e\u3059\u3002

\u6599\u7406\u306e\u6e96\u5099\u304b\u3089\u5b87\u5b99\u65c5\u884c\u307e\u3067\u3001\u307b\u307c\u3059\u3079\u3066\u306e\u554f\u984c\u89e3\u6c7a\u306b\u306f\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u304c\u95a2\u308f\u3063\u3066\u3044\u307e\u3059\u3002\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u306e\u51fa\u73fe\u306b\u3088\u308a\u3001\u30e1\u30e2\u30ea\u306b\u30c7\u30fc\u30bf\u69cb\u9020\u3092\u683c\u7d0d\u3057\u3001CPU\u3068GPU\u3092\u547c\u3073\u51fa\u3057\u3066\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3092\u5b9f\u884c\u3059\u308b\u30b3\u30fc\u30c9\u3092\u66f8\u304f\u3053\u3068\u304c\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\u3002\u3053\u306e\u3088\u3046\u306b\u3057\u3066\u3001\u73fe\u5b9f\u4e16\u754c\u306e\u554f\u984c\u3092\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u306b\u79fb\u3057\u3001\u3088\u308a\u52b9\u7387\u7684\u306a\u65b9\u6cd5\u3067\u3055\u307e\u3056\u307e\u306a\u8907\u96d1\u306a\u554f\u984c\u3092\u89e3\u6c7a\u3067\u304d\u307e\u3059\u3002

Tip

\u30c7\u30fc\u30bf\u69cb\u9020\u3001\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3001\u914d\u5217\u3001\u4e8c\u5206\u63a2\u7d22\u306a\u3069\u306e\u6982\u5ff5\u306b\u3064\u3044\u3066\u307e\u3060\u6df7\u4e71\u3057\u3066\u3044\u308b\u5834\u5408\u306f\u3001\u8aad\u307f\u7d9a\u3051\u308b\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\u3002\u3053\u306e\u672c\u306f\u3001\u30c7\u30fc\u30bf\u69cb\u9020\u3068\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u7406\u89e3\u306e\u9818\u57df\u3078\u3068\u512a\u3057\u304f\u5c0e\u3044\u3066\u304f\u308c\u308b\u3067\u3057\u3087\u3046\u3002

"},{"location":"chapter_introduction/summary/","title":"1.3 \u00a0 \u307e\u3068\u3081","text":""},{"location":"chapter_introduction/summary/#1-q-a","title":"1. \u00a0 Q & A","text":"

Q\uff1a\u30d7\u30ed\u30b0\u30e9\u30de\u30fc\u3068\u3057\u3066\u3001\u65e5\u5e38\u306e\u4ed5\u4e8b\u3067\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3092\u624b\u52d5\u3067\u5b9f\u88c5\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u3053\u3068\u306f\u3081\u3063\u305f\u306b\u3042\u308a\u307e\u305b\u3093\u3002\u6700\u3082\u4e00\u822c\u7684\u306b\u4f7f\u7528\u3055\u308c\u308b\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306f\u3001\u65e2\u306b\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\u3068\u30e9\u30a4\u30d6\u30e9\u30ea\u306b\u7d44\u307f\u8fbc\u307e\u308c\u3066\u304a\u308a\u3001\u3059\u3050\u306b\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u79c1\u305f\u3061\u304c\u4ed5\u4e8b\u3067\u906d\u9047\u3059\u308b\u554f\u984c\u304c\u3001\u30ab\u30b9\u30bf\u30e0\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u8a2d\u8a08\u3092\u5fc5\u8981\u3068\u3059\u308b\u8907\u96d1\u3055\u306e\u30ec\u30d9\u30eb\u306b\u307e\u3060\u9054\u3057\u3066\u3044\u306a\u3044\u3053\u3068\u3092\u793a\u5506\u3057\u3066\u3044\u307e\u3059\u304b\uff1f

\u7279\u5b9a\u306e\u4ed5\u4e8b\u30b9\u30ad\u30eb\u304c\u6b66\u8853\u306e\u300c\u6280\u300d\u306e\u3088\u3046\u306a\u3082\u306e\u3060\u3068\u3059\u308c\u3070\u3001\u57fa\u790e\u79d1\u76ee\u306f\u300c\u5185\u529f\u300d\u306e\u3088\u3046\u306a\u3082\u306e\u3067\u3059\u3002

\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\uff08\u304a\u3088\u3073\u305d\u306e\u4ed6\u306e\u57fa\u790e\u79d1\u76ee\uff09\u3092\u5b66\u3076\u610f\u7fa9\u306f\u3001\u5fc5\u305a\u3057\u3082\u4ed5\u4e8b\u3067\u305d\u308c\u3089\u3092\u4e00\u304b\u3089\u5b9f\u88c5\u3059\u308b\u3053\u3068\u3067\u306f\u306a\u304f\u3001\u6982\u5ff5\u306e\u78ba\u56fa\u305f\u308b\u7406\u89e3\u306b\u57fa\u3065\u3044\u3066\u3001\u3088\u308a\u5c02\u9580\u7684\u306a\u610f\u601d\u6c7a\u5b9a\u3068\u554f\u984c\u89e3\u6c7a\u3092\u53ef\u80fd\u306b\u3057\u3001\u305d\u308c\u306b\u3088\u3063\u3066\u4ed5\u4e8b\u306e\u5168\u4f53\u7684\u306a\u8cea\u3092\u5411\u4e0a\u3055\u305b\u308b\u3053\u3068\u3060\u3068\u79c1\u306f\u4fe1\u3058\u3066\u3044\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001\u3059\u3079\u3066\u306e\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\u306b\u306f\u7d44\u307f\u8fbc\u307f\u306e\u30bd\u30fc\u30c8\u95a2\u6570\u304c\u3042\u308a\u307e\u3059\uff1a

\u30a8\u30f3\u30b8\u30cb\u30a2\u30ea\u30f3\u30b0\u3067\u306f\u3001\u591a\u304f\u306e\u554f\u984c\u3092\u6700\u9069\u306b\u89e3\u6c7a\u3059\u308b\u3053\u3068\u306f\u56f0\u96e3\u3067\u3059\u3002\u307b\u3068\u3093\u3069\u306f\u300c\u6e96\u6700\u9069\u300d\u89e3\u6c7a\u7b56\u3067\u5bfe\u51e6\u3055\u308c\u307e\u3059\u3002\u554f\u984c\u306e\u96e3\u3057\u3055\u306f\u3001\u305d\u306e\u56fa\u6709\u306e\u8907\u96d1\u3055\u3060\u3051\u3067\u306a\u304f\u3001\u305d\u308c\u306b\u53d6\u308a\u7d44\u3080\u4eba\u306e\u77e5\u8b58\u3068\u7d4c\u9a13\u306b\u3082\u4f9d\u5b58\u3057\u307e\u3059\u3002\u5c02\u9580\u77e5\u8b58\u3068\u7d4c\u9a13\u304c\u6df1\u3044\u307b\u3069\u3001\u5206\u6790\u304c\u3088\u308a\u5fb9\u5e95\u7684\u306b\u306a\u308a\u3001\u554f\u984c\u3092\u3088\u308a\u512a\u96c5\u306b\u89e3\u6c7a\u3067\u304d\u307e\u3059\u3002

"},{"location":"chapter_introduction/what_is_dsa/","title":"1.2 \u00a0 \u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3068\u306f\u4f55\u304b","text":""},{"location":"chapter_introduction/what_is_dsa/#121","title":"1.2.1 \u00a0 \u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u5b9a\u7fa9","text":"

\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306f\u3001\u6709\u9650\u6642\u9593\u5185\u3067\u7279\u5b9a\u306e\u554f\u984c\u3092\u89e3\u6c7a\u3059\u308b\u305f\u3081\u306e\u4e00\u9023\u306e\u6307\u793a\u307e\u305f\u306f\u30b9\u30c6\u30c3\u30d7\u3067\u3059\u3002\u4ee5\u4e0b\u306e\u7279\u5fb4\u304c\u3042\u308a\u307e\u3059\uff1a

"},{"location":"chapter_introduction/what_is_dsa/#122","title":"1.2.2 \u00a0 \u30c7\u30fc\u30bf\u69cb\u9020\u306e\u5b9a\u7fa9","text":"

\u30c7\u30fc\u30bf\u69cb\u9020\u306f\u3001\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u5185\u3067\u30c7\u30fc\u30bf\u3092\u7d44\u7e54\u3057\u4fdd\u5b58\u3059\u308b\u65b9\u6cd5\u3067\u3001\u4ee5\u4e0b\u306e\u8a2d\u8a08\u76ee\u6a19\u304c\u3042\u308a\u307e\u3059\uff1a

\u30c7\u30fc\u30bf\u69cb\u9020\u306e\u8a2d\u8a08\u306f\u30d0\u30e9\u30f3\u30b9\u3092\u53d6\u308b\u884c\u70ba\u3067\u3042\u308a\u3001\u3057\u3070\u3057\u3070\u30c8\u30ec\u30fc\u30c9\u30aa\u30d5\u304c\u5fc5\u8981\u3067\u3059\u3002\u4e00\u3064\u306e\u5074\u9762\u3092\u6539\u5584\u3057\u305f\u3044\u5834\u5408\u3001\u3057\u3070\u3057\u3070\u5225\u306e\u5074\u9762\u3067\u59a5\u5354\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u4ee5\u4e0b\u306f2\u3064\u306e\u4f8b\u3067\u3059\uff1a

"},{"location":"chapter_introduction/what_is_dsa/#123","title":"1.2.3 \u00a0 \u30c7\u30fc\u30bf\u69cb\u9020\u3068\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u95a2\u4fc2","text":"

\u4ee5\u4e0b\u306e\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u30c7\u30fc\u30bf\u69cb\u9020\u3068\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306f\u9ad8\u5ea6\u306b\u95a2\u9023\u3057\u3001\u5bc6\u63a5\u306b\u7d71\u5408\u3055\u308c\u3066\u304a\u308a\u3001\u5177\u4f53\u7684\u306b\u306f\u4ee5\u4e0b\u306e3\u3064\u306e\u5074\u9762\u304c\u3042\u308a\u307e\u3059\uff1a

\u56f3 1-4 \u00a0 \u30c7\u30fc\u30bf\u69cb\u9020\u3068\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u95a2\u4fc2

\u30c7\u30fc\u30bf\u69cb\u9020\u3068\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306f\u3001\u4ee5\u4e0b\u306e\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u30d6\u30ed\u30c3\u30af\u306e\u30bb\u30c3\u30c8\u306b\u4f8b\u3048\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u30d6\u30ed\u30c3\u30af\u30bb\u30c3\u30c8\u306b\u306f\u591a\u6570\u306e\u30d4\u30fc\u30b9\u304c\u542b\u307e\u308c\u3001\u8a73\u7d30\u306a\u7d44\u307f\u7acb\u3066\u8aac\u660e\u66f8\u304c\u4ed8\u3044\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u8aac\u660e\u66f8\u306b\u6bb5\u968e\u7684\u306b\u5f93\u3046\u3053\u3068\u3067\u3001\u8907\u96d1\u306a\u30d6\u30ed\u30c3\u30af\u30e2\u30c7\u30eb\u3092\u69cb\u7bc9\u3067\u304d\u307e\u3059\u3002

\u56f3 1-5 \u00a0 \u30d6\u30ed\u30c3\u30af\u306e\u7d44\u307f\u7acb\u3066

\u4e21\u8005\u306e\u8a73\u7d30\u306a\u5bfe\u5fdc\u95a2\u4fc2\u306f\u4ee5\u4e0b\u306e\u8868\u306b\u793a\u3055\u308c\u3066\u3044\u307e\u3059\u3002

\u8868 1-1 \u00a0 \u30c7\u30fc\u30bf\u69cb\u9020\u3068\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3092\u30d6\u30ed\u30c3\u30af\u3068\u6bd4\u8f03

\u30c7\u30fc\u30bf\u69cb\u9020\u3068\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0 \u30d6\u30ed\u30c3\u30af \u5165\u529b\u30c7\u30fc\u30bf \u672a\u7d44\u307f\u7acb\u3066\u306e\u30d6\u30ed\u30c3\u30af \u30c7\u30fc\u30bf\u69cb\u9020 \u30d6\u30ed\u30c3\u30af\u306e\u7d44\u7e54\u3001\u5f62\u72b6\u3001\u30b5\u30a4\u30ba\u3001\u63a5\u7d9a\u306a\u3069\u3092\u542b\u3080 \u30a2\u30eb\u30b4\u30ea\u30ba\u30e0 \u30d6\u30ed\u30c3\u30af\u3092\u671b\u307e\u3057\u3044\u5f62\u72b6\u306b\u7d44\u307f\u7acb\u3066\u308b\u4e00\u9023\u306e\u30b9\u30c6\u30c3\u30d7 \u51fa\u529b\u30c7\u30fc\u30bf \u5b8c\u6210\u3057\u305f\u30d6\u30ed\u30c3\u30af\u30e2\u30c7\u30eb

\u30c7\u30fc\u30bf\u69cb\u9020\u3068\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306f\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\u304b\u3089\u72ec\u7acb\u3057\u3066\u3044\u308b\u3053\u3068\u306f\u6ce8\u76ee\u306b\u5024\u3057\u307e\u3059\u3002\u3053\u306e\u7406\u7531\u306b\u3088\u308a\u3001\u3053\u306e\u672c\u306f\u8907\u6570\u306e\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\u3067\u306e\u5b9f\u88c5\u3092\u63d0\u4f9b\u3067\u304d\u307e\u3059\u3002

\u6163\u7fd2\u7684\u306a\u7565\u8a9e

\u5b9f\u751f\u6d3b\u306e\u8b70\u8ad6\u3067\u306f\u3001\u300c\u30c7\u30fc\u30bf\u69cb\u9020\u3068\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u300d\u3092\u5358\u7d14\u306b\u300c\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u300d\u3068\u547c\u3076\u3053\u3068\u304c\u3088\u304f\u3042\u308a\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001\u3088\u304f\u77e5\u3089\u308c\u305fLeetCode\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u554f\u984c\u306f\u3001\u5b9f\u969b\u306b\u306f\u30c7\u30fc\u30bf\u69cb\u9020\u3068\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u4e21\u65b9\u306e\u77e5\u8b58\u3092\u30c6\u30b9\u30c8\u3057\u3066\u3044\u307e\u3059\u3002

"},{"location":"chapter_preface/","title":"\u7b2c 0 \u7ae0 \u00a0 \u5e8f\u6587","text":"

Abstract

\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306f\u7f8e\u3057\u3044\u4ea4\u97ff\u66f2\u306e\u3088\u3046\u3067\u3001\u30b3\u30fc\u30c9\u306e\u4e00\u884c\u4e00\u884c\u304c\u30ea\u30ba\u30e0\u306e\u3088\u3046\u306b\u6d41\u308c\u3066\u3044\u307e\u3059\u3002

\u3053\u306e\u672c\u304c\u3042\u306a\u305f\u306e\u5fc3\u306e\u4e2d\u3067\u9759\u304b\u306b\u97ff\u304d\u3001\u72ec\u7279\u3067\u6df1\u3044\u65cb\u5f8b\u3092\u6b8b\u3059\u3053\u3068\u3092\u9858\u3063\u3066\u3044\u307e\u3059\u3002

"},{"location":"chapter_preface/#_1","title":"\u7ae0\u306e\u5185\u5bb9","text":""},{"location":"chapter_preface/about_the_book/","title":"0.1 \u00a0 \u3053\u306e\u672c\u306b\u3064\u3044\u3066","text":"

\u3053\u306e\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306f\u3001\u30c7\u30fc\u30bf\u69cb\u9020\u3068\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306b\u95a2\u3059\u308b\u7121\u6599\u3067\u521d\u5fc3\u8005\u306b\u3084\u3055\u3057\u3044\u30af\u30e9\u30c3\u30b7\u30e5\u30b3\u30fc\u30b9\u306e\u4f5c\u6210\u3092\u76ee\u6307\u3057\u3066\u3044\u307e\u3059\u3002

"},{"location":"chapter_preface/about_the_book/#011","title":"0.1.1 \u00a0 \u5bfe\u8c61\u8aad\u8005","text":"

\u3082\u3057\u3042\u306a\u305f\u304c\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306b\u89e6\u308c\u305f\u3070\u304b\u308a\u3067\u7d4c\u9a13\u304c\u9650\u3089\u308c\u3066\u3044\u308b\u5834\u5408\u3001\u307e\u305f\u306f\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3067\u3042\u308b\u7a0b\u5ea6\u306e\u7d4c\u9a13\u3092\u7a4d\u3093\u3067\u3044\u3066\u3082\u3001\u30c7\u30fc\u30bf\u69cb\u9020\u3068\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306b\u3064\u3044\u3066\u66d6\u6627\u306a\u7406\u89e3\u3057\u304b\u306a\u304f\u3001\u5e38\u306b\u300c\u5206\u304b\u3063\u305f\u300d\u3068\u300c\u3046\u30fc\u3093\u300d\u306e\u9593\u3092\u884c\u304d\u6765\u3057\u3066\u3044\u308b\u5834\u5408\u3001\u3053\u306e\u672c\u306f\u3042\u306a\u305f\u306e\u305f\u3081\u306e\u3082\u306e\u3067\u3059\uff01

\u3059\u3067\u306b\u3042\u308b\u7a0b\u5ea6\u306e\u554f\u984c\u89e3\u6c7a\u7d4c\u9a13\u3092\u7a4d\u3093\u3067\u304a\u308a\u3001\u307b\u3068\u3093\u3069\u306e\u30bf\u30a4\u30d7\u306e\u554f\u984c\u306b\u7cbe\u901a\u3057\u3066\u3044\u308b\u5834\u5408\u3001\u3053\u306e\u672c\u306f\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u77e5\u8b58\u4f53\u7cfb\u3092\u5fa9\u7fd2\u3057\u6574\u7406\u3059\u308b\u306e\u306b\u5f79\u7acb\u3061\u307e\u3059\u3002\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u306f\u300c\u554f\u984c\u89e3\u6c7a\u30c4\u30fc\u30eb\u30ad\u30c3\u30c8\u300d\u3084\u300c\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u30c1\u30fc\u30c8\u30b7\u30fc\u30c8\u300d\u3068\u3057\u3066\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002

\u3082\u3057\u3042\u306a\u305f\u304c\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u5c02\u9580\u5bb6\u3067\u3042\u308c\u3070\u3001\u8cb4\u91cd\u306a\u63d0\u6848\u3092\u3044\u305f\u3060\u304f\u304b\u3001\u53c2\u52a0\u3057\u3066\u5354\u529b\u3057\u3066\u3044\u305f\u3060\u3051\u308c\u3070\u3068\u601d\u3044\u307e\u3059\u3002

\u524d\u63d0\u6761\u4ef6

\u5c11\u306a\u304f\u3068\u3082\u4e00\u3064\u306e\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\u3067\u7c21\u5358\u306a\u30b3\u30fc\u30c9\u3092\u66f8\u3044\u3066\u8aad\u3080\u3053\u3068\u304c\u3067\u304d\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

"},{"location":"chapter_preface/about_the_book/#012","title":"0.1.2 \u00a0 \u5185\u5bb9\u69cb\u6210","text":"

\u672c\u66f8\u306e\u4e3b\u306a\u5185\u5bb9\u3092\u4e0b\u56f3\u306b\u793a\u3057\u307e\u3059\u3002

\u56f3 0-1 \u00a0 \u672c\u66f8\u306e\u4e3b\u306a\u5185\u5bb9

"},{"location":"chapter_preface/about_the_book/#013","title":"0.1.3 \u00a0 \u8b1d\u8f9e","text":"

\u672c\u66f8\u306f\u3001\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u306e\u591a\u6570\u306e\u8ca2\u732e\u8005\u306b\u3088\u308b\u5171\u540c\u306e\u52aa\u529b\u306e\u3082\u3068\u3001\u7d99\u7d9a\u7684\u306b\u6539\u5584\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u6642\u9593\u3068\u52b4\u529b\u3092\u6ce8\u3044\u3067\u57f7\u7b46\u306b\u643a\u308f\u3063\u3066\u304f\u3060\u3055\u3063\u305f\u3059\u3079\u3066\u306e\u65b9\u3005\u306b\u611f\u8b1d\u3057\u307e\u3059\u3002\u8ca2\u732e\u8005\u306f\u4ee5\u4e0b\u306e\u3068\u304a\u308a\u3067\u3059\uff08GitHub \u306b\u3088\u308a\u81ea\u52d5\u751f\u6210\u3055\u308c\u305f\u9806\u5e8f\uff09\uff1akrahets\u3001coderonion\u3001Gonglja\u3001nuomi1\u3001Reanon\u3001justin-tse\u3001hpstory\u3001danielsss\u3001curtishd\u3001night-cruise\u3001S-N-O-R-L-A-X\u3001rongyi\u3001msk397\u3001gvenusleo\u3001khoaxuantu\u3001rivertwilight\u3001K3v123\u3001gyt95\u3001zhuoqinyue\u3001yuelinxin\u3001Zuoxun\u3001mingXta\u3001Phoenix0415\u3001FangYuan33\u3001GN-Yu\u3001longsizhuo\u3001IsChristina\u3001xBLACKICEx\u3001guowei-gong\u3001Cathay-Chen\u3001pengchzn\u3001QiLOL\u3001magentaqin\u3001hello-ikun\u3001JoseHung\u3001qualifier1024\u3001thomasq0\u3001sunshinesDL\u3001L-Super\u3001Guanngxu\u3001Transmigration-zhou\u3001WSL0809\u3001Slone123c\u3001lhxsm\u3001yuan0221\u3001what-is-me\u3001Shyam-Chen\u3001theNefelibatas\u3001longranger2\u3001codeberg-user\u3001xiongsp\u3001JeffersonHuang\u3001prinpal\u3001seven1240\u3001Wonderdch\u3001malone6\u3001xiaomiusa87\u3001gaofer\u3001bluebean-cloud\u3001a16su\u3001SamJin98\u3001hongyun-robot\u3001nanlei\u3001XiaChuerwu\u3001yd-j\u3001iron-irax\u3001mgisr\u3001steventimes\u3001junminhong\u3001heshuyue\u3001danny900714\u3001MolDuM\u3001Nigh\u3001Dr-XYZ\u3001XC-Zero\u3001reeswell\u3001PXG-XPG\u3001NI-SW\u3001Horbin-Magician\u3001Enlightenus\u3001YangXuanyi\u3001beatrix-chan\u3001DullSword\u3001xjr7670\u3001jiaxianhua\u3001qq909244296\u3001iStig\u3001boloboloda\u3001hts0000\u3001gledfish\u3001wenjianmin\u3001keshida\u3001kilikilikid\u3001lclc6\u3001lwbaptx\u3001linyejoe2\u3001liuxjerry\u3001llql1211\u3001fbigm\u3001echo1937\u3001szu17dmy\u3001dshlstarr\u3001Yucao-cy\u3001coderlef\u3001czruby\u3001bongbongbakudan\u3001beintentional\u3001ZongYangL\u3001ZhongYuuu\u3001ZhongGuanbin\u3001hezhizhen\u3001linzeyan\u3001ZJKung\u3001luluxia\u3001xb534\u3001ztkuaikuai\u3001yw-1021\u3001ElaBosak233\u3001baagod\u3001zhouLion\u3001yishangzhang\u3001yi427\u3001yanedie\u3001yabo083\u3001weibk\u3001wangwang105\u3001th1nk3r-ing\u3001tao363\u30014yDX3906\u3001syd168\u3001sslmj2020\u3001smilelsb\u3001siqyka\u3001selear\u3001sdshaoda\u3001Xi-Row\u3001popozhu\u3001nuquist19\u3001noobcodemaker\u3001XiaoK29\u3001chadyi\u3001lyl625760\u3001lucaswangdev\u30010130w\u3001shanghai-Jerry\u3001EJackYang\u3001Javesun99\u3001eltociear\u3001lipusheng\u3001KNChiu\u3001BlindTerran\u3001ShiMaRing\u3001lovelock\u3001FreddieLi\u3001FloranceYeh\u3001fanchenggang\u3001gltianwen\u3001goerll\u3001nedchu\u3001curly210102\u3001CuB3y0nd\u3001KraHsu\u3001CarrotDLaw\u3001youshaoXG\u3001bubble9um\u3001Asashishi\u3001Asa0oo0o0o\u3001fanenr\u3001eagleanurag\u3001akshiterate\u300152coder\u3001foursevenlove\u3001KorsChen\u3001GaochaoZhu\u3001hopkings2008\u3001yang-le\u3001realwujing\u3001Evilrabbit520\u3001Umer-Jahangir\u3001Turing-1024-Lee\u3001Suremotoo\u3001paoxiaomooo\u3001Chieko-Seren\u3001Allen-Scai\u3001ymmmas\u3001Risuntsy\u3001Richard-Zhang1019\u3001RafaelCaso\u3001qingpeng9802\u3001primexiao\u3001Urbaner3\u3001zhongfq\u3001nidhoggfgg\u3001MwumLi\u3001CreatorMetaSky\u3001martinx\u3001ZnYang2018\u3001hugtyftg\u3001logan-qiu\u3001psychelzh\u3001Keynman\u3001KeiichiKasai\u3001KawaiiAsh\u3002

\u3053\u306e\u672c\u306e\u30b3\u30fc\u30c9\u30ec\u30d3\u30e5\u30fc\u4f5c\u696d\u306f\u3001coderonion, Gonglja, gvenusleo, hpstory, justin\u2010tse, khoaxuantu, krahets, night-cruise, nuomi1, Reanon and rongyi\uff08\u30a2\u30eb\u30d5\u30a1\u30d9\u30c3\u30c8\u9806\uff09\u306b\u3088\u3063\u3066\u5b8c\u4e86\u3055\u308c\u307e\u3057\u305f\u3002\u5f7c\u3089\u306e\u6642\u9593\u3068\u52aa\u529b\u306b\u611f\u8b1d\u3057\u3001\u69d8\u3005\u306a\u8a00\u8a9e\u3067\u306e\u30b3\u30fc\u30c9\u306e\u6a19\u6e96\u5316\u3068\u7d71\u4e00\u6027\u3092\u78ba\u4fdd\u3057\u3066\u304f\u3060\u3055\u3044\u307e\u3057\u305f\u3002

\u672c\u66f8\u306e\u7e41\u4f53\u5b57\u4e2d\u56fd\u8a9e\u7248\u306f Shyam-Chen \u304a\u3088\u3073 Dr-XYZ \u306b\u3088\u3063\u3066\u30ec\u30d3\u30e5\u30fc\u3055\u308c\u3001\u82f1\u8a9e\u7248\u306f yuelinxin\u3001K3v123\u3001QiLOL\u3001Phoenix0415\u3001SamJin98\u3001yanedie\u3001RafaelCaso\u3001pengchzn\u3001thomasq0\u3001magentaqin \u306b\u3088\u3063\u3066\u30ec\u30d3\u30e5\u30fc\u3055\u308c\u3001\u65e5\u672c\u8a9e\u7248\u306f eltociear \u306b\u3088\u3063\u3066\u30ec\u30d3\u30e5\u30fc\u3055\u308c\u307e\u3057\u305f\u3002\u5f7c\u3089\u306e\u7d99\u7d9a\u7684\u306a\u8ca2\u732e\u306e\u304a\u304b\u3052\u3067\u3001\u672c\u66f8\u306f\u3088\u308a\u5e45\u5e83\u3044\u8aad\u8005\u5c64\u306b\u63d0\u4f9b\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u3066\u3044\u307e\u3059\u3002\u3053\u3053\u306b\u6df1\u304f\u611f\u8b1d\u3044\u305f\u3057\u307e\u3059\u3002

\u3053\u306e\u672c\u306e\u5236\u4f5c\u904e\u7a0b\u306b\u304a\u3044\u3066\u3001\u591a\u304f\u306e\u65b9\u3005\u304b\u3089\u8cb4\u91cd\u306a\u652f\u63f4\u3092\u3044\u305f\u3060\u304d\u307e\u3057\u305f\u3002\u3053\u308c\u3089\u306b\u9650\u5b9a\u3055\u308c\u307e\u305b\u3093\u304c\uff1a

\u57f7\u7b46\u306e\u904e\u7a0b\u3067\u3001\u30c7\u30fc\u30bf\u69cb\u9020\u3068\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306b\u95a2\u3059\u308b\u591a\u6570\u306e\u6559\u79d1\u66f8\u3084\u8a18\u4e8b\u3092\u6df1\u304f\u7814\u7a76\u3057\u307e\u3057\u305f\u3002\u3053\u308c\u3089\u306e\u4f5c\u54c1\u306f\u6a21\u7bc4\u7684\u306a\u30e2\u30c7\u30eb\u3068\u3057\u3066\u6a5f\u80fd\u3057\u3001\u3053\u306e\u672c\u306e\u5185\u5bb9\u306e\u6b63\u78ba\u6027\u3068\u54c1\u8cea\u3092\u78ba\u4fdd\u3057\u3066\u304f\u3060\u3055\u3044\u307e\u3057\u305f\u3002\u5148\u4eba\u306e\u65b9\u3005\u306e\u8cb4\u91cd\u306a\u8ca2\u732e\u306b\u611f\u8b1d\u3044\u305f\u3057\u307e\u3059\uff01

\u3053\u306e\u672c\u306f\u3001\u7406\u8ad6\u3068\u5b9f\u8df5\u3092\u7d44\u307f\u5408\u308f\u305b\u305f\u5b66\u7fd2\u3092\u63d0\u5531\u3057\u3066\u304a\u308a\u3001\u3053\u306e\u70b9\u3067 \"Dive into Deep Learning\" \u304b\u3089\u30a4\u30f3\u30b9\u30d4\u30ec\u30fc\u30b7\u30e7\u30f3\u3092\u53d7\u3051\u3066\u3044\u307e\u3059\u3002\u3053\u306e\u512a\u308c\u305f\u672c\u3092\u3059\u3079\u3066\u306e\u8aad\u8005\u306b\u5f37\u304f\u304a\u52e7\u3081\u3057\u307e\u3059\u3002

\u7d99\u7d9a\u7684\u306a\u652f\u63f4\u3068\u52b1\u307e\u3057\u306b\u3088\u308a\u3001\u3053\u306e\u8208\u5473\u6df1\u3044\u4ed5\u4e8b\u3092\u3059\u308b\u3053\u3068\u3092\u53ef\u80fd\u306b\u3057\u3066\u304f\u3060\u3055\u3063\u305f\u4e21\u89aa\u306b\u5fc3\u304b\u3089\u611f\u8b1d\u3044\u305f\u3057\u307e\u3059\u3002

"},{"location":"chapter_preface/suggestions/","title":"0.2 \u00a0 \u8aad\u307f\u65b9","text":"

Tip

\u6700\u826f\u306e\u8aad\u66f8\u4f53\u9a13\u306e\u305f\u3081\u306b\u3001\u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3092\u901a\u8aad\u3059\u308b\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\u3002

"},{"location":"chapter_preface/suggestions/#021","title":"0.2.1 \u00a0 \u8a18\u8ff0\u898f\u5247","text":" PythonC++JavaC#GoSwiftJSTSDartRustCKotlin
\"\"\"\u95a2\u6570\u3001\u30af\u30e9\u30b9\u3001\u30c6\u30b9\u30c8\u30b5\u30f3\u30d7\u30eb\u306a\u3069\u3092\u30e9\u30d9\u30eb\u4ed8\u3051\u3059\u308b\u305f\u3081\u306e\u30d8\u30c3\u30c0\u30fc\u30b3\u30e1\u30f3\u30c8\"\"\"\n\n# \u8a73\u7d30\u3092\u8aac\u660e\u3059\u308b\u305f\u3081\u306e\u30b3\u30e1\u30f3\u30c8\n\n\"\"\"\n\u8907\u6570\u884c\n\u30b3\u30e1\u30f3\u30c8\n\"\"\"\n
/* \u95a2\u6570\u3001\u30af\u30e9\u30b9\u3001\u30c6\u30b9\u30c8\u30b5\u30f3\u30d7\u30eb\u306a\u3069\u3092\u30e9\u30d9\u30eb\u4ed8\u3051\u3059\u308b\u305f\u3081\u306e\u30d8\u30c3\u30c0\u30fc\u30b3\u30e1\u30f3\u30c8 */\n\n// \u8a73\u7d30\u3092\u8aac\u660e\u3059\u308b\u305f\u3081\u306e\u30b3\u30e1\u30f3\u30c8\n\n/**\n * \u8907\u6570\u884c\n * \u30b3\u30e1\u30f3\u30c8\n */\n
/* \u95a2\u6570\u3001\u30af\u30e9\u30b9\u3001\u30c6\u30b9\u30c8\u30b5\u30f3\u30d7\u30eb\u306a\u3069\u3092\u30e9\u30d9\u30eb\u4ed8\u3051\u3059\u308b\u305f\u3081\u306e\u30d8\u30c3\u30c0\u30fc\u30b3\u30e1\u30f3\u30c8 */\n\n// \u8a73\u7d30\u3092\u8aac\u660e\u3059\u308b\u305f\u3081\u306e\u30b3\u30e1\u30f3\u30c8\n\n/**\n * \u8907\u6570\u884c\n * \u30b3\u30e1\u30f3\u30c8\n */\n
/* \u95a2\u6570\u3001\u30af\u30e9\u30b9\u3001\u30c6\u30b9\u30c8\u30b5\u30f3\u30d7\u30eb\u306a\u3069\u3092\u30e9\u30d9\u30eb\u4ed8\u3051\u3059\u308b\u305f\u3081\u306e\u30d8\u30c3\u30c0\u30fc\u30b3\u30e1\u30f3\u30c8 */\n\n// \u8a73\u7d30\u3092\u8aac\u660e\u3059\u308b\u305f\u3081\u306e\u30b3\u30e1\u30f3\u30c8\n\n/**\n * \u8907\u6570\u884c\n * \u30b3\u30e1\u30f3\u30c8\n */\n
/* \u95a2\u6570\u3001\u30af\u30e9\u30b9\u3001\u30c6\u30b9\u30c8\u30b5\u30f3\u30d7\u30eb\u306a\u3069\u3092\u30e9\u30d9\u30eb\u4ed8\u3051\u3059\u308b\u305f\u3081\u306e\u30d8\u30c3\u30c0\u30fc\u30b3\u30e1\u30f3\u30c8 */\n\n// \u8a73\u7d30\u3092\u8aac\u660e\u3059\u308b\u305f\u3081\u306e\u30b3\u30e1\u30f3\u30c8\n\n/**\n * \u8907\u6570\u884c\n * \u30b3\u30e1\u30f3\u30c8\n */\n
/* \u95a2\u6570\u3001\u30af\u30e9\u30b9\u3001\u30c6\u30b9\u30c8\u30b5\u30f3\u30d7\u30eb\u306a\u3069\u3092\u30e9\u30d9\u30eb\u4ed8\u3051\u3059\u308b\u305f\u3081\u306e\u30d8\u30c3\u30c0\u30fc\u30b3\u30e1\u30f3\u30c8 */\n\n// \u8a73\u7d30\u3092\u8aac\u660e\u3059\u308b\u305f\u3081\u306e\u30b3\u30e1\u30f3\u30c8\n\n/**\n * \u8907\u6570\u884c\n * \u30b3\u30e1\u30f3\u30c8\n */\n
/* \u95a2\u6570\u3001\u30af\u30e9\u30b9\u3001\u30c6\u30b9\u30c8\u30b5\u30f3\u30d7\u30eb\u306a\u3069\u3092\u30e9\u30d9\u30eb\u4ed8\u3051\u3059\u308b\u305f\u3081\u306e\u30d8\u30c3\u30c0\u30fc\u30b3\u30e1\u30f3\u30c8 */\n\n// \u8a73\u7d30\u3092\u8aac\u660e\u3059\u308b\u305f\u3081\u306e\u30b3\u30e1\u30f3\u30c8\n\n/**\n * \u8907\u6570\u884c\n * \u30b3\u30e1\u30f3\u30c8\n */\n
/* \u95a2\u6570\u3001\u30af\u30e9\u30b9\u3001\u30c6\u30b9\u30c8\u30b5\u30f3\u30d7\u30eb\u306a\u3069\u3092\u30e9\u30d9\u30eb\u4ed8\u3051\u3059\u308b\u305f\u3081\u306e\u30d8\u30c3\u30c0\u30fc\u30b3\u30e1\u30f3\u30c8 */\n\n// \u8a73\u7d30\u3092\u8aac\u660e\u3059\u308b\u305f\u3081\u306e\u30b3\u30e1\u30f3\u30c8\n\n/**\n * \u8907\u6570\u884c\n * \u30b3\u30e1\u30f3\u30c8\n */\n
/* \u95a2\u6570\u3001\u30af\u30e9\u30b9\u3001\u30c6\u30b9\u30c8\u30b5\u30f3\u30d7\u30eb\u306a\u3069\u3092\u30e9\u30d9\u30eb\u4ed8\u3051\u3059\u308b\u305f\u3081\u306e\u30d8\u30c3\u30c0\u30fc\u30b3\u30e1\u30f3\u30c8 */\n\n// \u8a73\u7d30\u3092\u8aac\u660e\u3059\u308b\u305f\u3081\u306e\u30b3\u30e1\u30f3\u30c8\n\n/**\n * \u8907\u6570\u884c\n * \u30b3\u30e1\u30f3\u30c8\n */\n
/* \u95a2\u6570\u3001\u30af\u30e9\u30b9\u3001\u30c6\u30b9\u30c8\u30b5\u30f3\u30d7\u30eb\u306a\u3069\u3092\u30e9\u30d9\u30eb\u4ed8\u3051\u3059\u308b\u305f\u3081\u306e\u30d8\u30c3\u30c0\u30fc\u30b3\u30e1\u30f3\u30c8 */\n\n// \u8a73\u7d30\u3092\u8aac\u660e\u3059\u308b\u305f\u3081\u306e\u30b3\u30e1\u30f3\u30c8\n\n/**\n * \u8907\u6570\u884c\n * \u30b3\u30e1\u30f3\u30c8\n */\n
/* \u95a2\u6570\u3001\u30af\u30e9\u30b9\u3001\u30c6\u30b9\u30c8\u30b5\u30f3\u30d7\u30eb\u306a\u3069\u3092\u30e9\u30d9\u30eb\u4ed8\u3051\u3059\u308b\u305f\u3081\u306e\u30d8\u30c3\u30c0\u30fc\u30b3\u30e1\u30f3\u30c8 */\n\n// \u8a73\u7d30\u3092\u8aac\u660e\u3059\u308b\u305f\u3081\u306e\u30b3\u30e1\u30f3\u30c8\n\n/**\n * \u8907\u6570\u884c\n * \u30b3\u30e1\u30f3\u30c8\n */\n
/* \u95a2\u6570\u3001\u30af\u30e9\u30b9\u3001\u30c6\u30b9\u30c8\u30b5\u30f3\u30d7\u30eb\u306a\u3069\u3092\u30e9\u30d9\u30eb\u4ed8\u3051\u3059\u308b\u305f\u3081\u306e\u30d8\u30c3\u30c0\u30fc\u30b3\u30e1\u30f3\u30c8 */\n\n// \u8a73\u7d30\u3092\u8aac\u660e\u3059\u308b\u305f\u3081\u306e\u30b3\u30e1\u30f3\u30c8\n\n/**\n * \u8907\u6570\u884c\n * \u30b3\u30e1\u30f3\u30c8\n */\n
"},{"location":"chapter_preface/suggestions/#022","title":"0.2.2 \u00a0 \u30a2\u30cb\u30e1\u30fc\u30b7\u30e7\u30f3\u56f3\u89e3\u306b\u3088\u308b\u52b9\u7387\u7684\u5b66\u7fd2","text":"

\u30c6\u30ad\u30b9\u30c8\u3068\u6bd4\u8f03\u3057\u3066\u3001\u52d5\u753b\u3084\u753b\u50cf\u306f\u60c5\u5831\u5bc6\u5ea6\u304c\u9ad8\u304f\u3001\u3088\u308a\u69cb\u9020\u5316\u3055\u308c\u3066\u304a\u308a\u3001\u7406\u89e3\u3057\u3084\u3059\u304f\u306a\u3063\u3066\u3044\u307e\u3059\u3002\u3053\u306e\u672c\u3067\u306f\u3001\u91cd\u8981\u3067\u96e3\u3057\u3044\u6982\u5ff5\u306f\u4e3b\u306b\u30a2\u30cb\u30e1\u30fc\u30b7\u30e7\u30f3\u3068\u56f3\u89e3\u3092\u901a\u3058\u3066\u63d0\u793a\u3055\u308c\u3001\u30c6\u30ad\u30b9\u30c8\u306f\u8aac\u660e\u3068\u88dc\u8db3\u3068\u3057\u3066\u6a5f\u80fd\u3057\u307e\u3059\u3002

\u4e0b\u56f3\u306b\u793a\u3059\u3088\u3046\u306a\u30a2\u30cb\u30e1\u30fc\u30b7\u30e7\u30f3\u3084\u56f3\u89e3\u306e\u3042\u308b\u5185\u5bb9\u306b\u906d\u9047\u3057\u305f\u5834\u5408\u3001\u56f3\u306e\u7406\u89e3\u3092\u512a\u5148\u3057\u3001\u30c6\u30ad\u30b9\u30c8\u3092\u88dc\u8db3\u3068\u3057\u3066\u3001\u4e21\u65b9\u3092\u7d71\u5408\u3057\u3066\u5305\u62ec\u7684\u306a\u7406\u89e3\u3092\u5f97\u3066\u304f\u3060\u3055\u3044\u3002

\u56f3 0-2 \u00a0 \u30a2\u30cb\u30e1\u30fc\u30b7\u30e7\u30f3\u56f3\u89e3\u306e\u4f8b

"},{"location":"chapter_preface/suggestions/#023","title":"0.2.3 \u00a0 \u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u5b9f\u8df5\u306b\u3088\u308b\u7406\u89e3\u306e\u6df1\u5316","text":"

\u3053\u306e\u672c\u306e\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u306fGitHub\u30ea\u30dd\u30b8\u30c8\u30ea\u3067\u30db\u30b9\u30c8\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u4e0b\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u306b\u306f\u30c6\u30b9\u30c8\u4f8b\u304c\u4ed8\u5c5e\u3057\u3066\u304a\u308a\u3001\u30ef\u30f3\u30af\u30ea\u30c3\u30af\u3067\u5b9f\u884c\u3067\u304d\u307e\u3059\u3002

\u6642\u9593\u306b\u4f59\u88d5\u304c\u3042\u308b\u5834\u5408\u306f\u3001\u81ea\u5206\u3067\u30b3\u30fc\u30c9\u3092\u30bf\u30a4\u30d7\u3059\u308b\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\u3002\u6642\u9593\u304c\u306a\u3044\u5834\u5408\u306f\u3001\u5c11\u306a\u304f\u3068\u3082\u3059\u3079\u3066\u306e\u30b3\u30fc\u30c9\u3092\u8aad\u3093\u3067\u5b9f\u884c\u3057\u3066\u304f\u3060\u3055\u3044\u3002

\u30b3\u30fc\u30c9\u3092\u8aad\u3080\u3060\u3051\u3068\u6bd4\u8f03\u3057\u3066\u3001\u30b3\u30fc\u30c9\u3092\u66f8\u304f\u3053\u3068\u306f\u591a\u304f\u306e\u5834\u5408\u3001\u3088\u308a\u591a\u304f\u306e\u5b66\u7fd2\u3092\u3082\u305f\u3089\u3057\u307e\u3059\u3002\u5b9f\u8df5\u306b\u3088\u308b\u5b66\u7fd2\u3053\u305d\u304c\u771f\u306e\u5b66\u7fd2\u65b9\u6cd5\u3067\u3059\u3002

\u56f3 0-3 \u00a0 \u30b3\u30fc\u30c9\u5b9f\u884c\u4f8b

\u30b3\u30fc\u30c9\u3092\u5b9f\u884c\u3059\u308b\u305f\u3081\u306e\u8a2d\u5b9a\u306b\u306f\u3001\u4e3b\u306b3\u3064\u306e\u30b9\u30c6\u30c3\u30d7\u304c\u542b\u307e\u308c\u307e\u3059\u3002

\u30b9\u30c6\u30c3\u30d71\uff1a\u30ed\u30fc\u30ab\u30eb\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u74b0\u5883\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3002\u4ed8\u9332\u306e\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u306b\u5f93\u3063\u3066\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u304b\u3001\u3059\u3067\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u3066\u3044\u308b\u5834\u5408\u306f\u3053\u306e\u30b9\u30c6\u30c3\u30d7\u3092\u30b9\u30ad\u30c3\u30d7\u3057\u3066\u304f\u3060\u3055\u3044\u3002

\u30b9\u30c6\u30c3\u30d72\uff1a\u30b3\u30fc\u30c9\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u30af\u30ed\u30fc\u30f3\u307e\u305f\u306f\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3002GitHub\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u8a2a\u554f\u3057\u3066\u304f\u3060\u3055\u3044\u3002

Git\u304c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u3066\u3044\u308b\u5834\u5408\u306f\u3001\u6b21\u306e\u30b3\u30de\u30f3\u30c9\u3092\u4f7f\u7528\u3057\u3066\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u30af\u30ed\u30fc\u30f3\u3057\u307e\u3059\uff1a

git clone https://github.com/krahets/hello-algo.git\n

\u307e\u305f\u306f\u3001\u4e0b\u56f3\u306b\u793a\u3059\u5834\u6240\u306b\u3042\u308b\u300cDownload ZIP\u300d\u30dc\u30bf\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u3001\u30b3\u30fc\u30c9\u3092\u5727\u7e2eZIP\u30d5\u30a1\u30a4\u30eb\u3068\u3057\u3066\u76f4\u63a5\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002\u305d\u306e\u5f8c\u3001\u30ed\u30fc\u30ab\u30eb\u3067\u5c55\u958b\u3059\u308b\u3060\u3051\u3067\u3059\u3002

\u56f3 0-4 \u00a0 \u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u30af\u30ed\u30fc\u30f3\u3068\u30b3\u30fc\u30c9\u306e\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9

\u30b9\u30c6\u30c3\u30d73\uff1a\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u3092\u5b9f\u884c\u3002\u4e0b\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u4e0a\u90e8\u306b\u30d5\u30a1\u30a4\u30eb\u540d\u304c\u8a18\u8f09\u3055\u308c\u305f\u30b3\u30fc\u30c9\u30d6\u30ed\u30c3\u30af\u306b\u3064\u3044\u3066\u306f\u3001\u30ea\u30dd\u30b8\u30c8\u30ea\u306ecodes\u30d5\u30a9\u30eb\u30c0\u3067\u5bfe\u5fdc\u3059\u308b\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u30d5\u30a1\u30a4\u30eb\u3092\u898b\u3064\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u30d5\u30a1\u30a4\u30eb\u306f\u30ef\u30f3\u30af\u30ea\u30c3\u30af\u3067\u5b9f\u884c\u3067\u304d\u3001\u4e0d\u8981\u306a\u30c7\u30d0\u30c3\u30b0\u6642\u9593\u3092\u7bc0\u7d04\u3057\u3001\u5b66\u7fd2\u306b\u96c6\u4e2d\u3067\u304d\u307e\u3059\u3002

\u56f3 0-5 \u00a0 \u30b3\u30fc\u30c9\u30d6\u30ed\u30c3\u30af\u3068\u5bfe\u5fdc\u3059\u308b\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u30d5\u30a1\u30a4\u30eb

"},{"location":"chapter_preface/suggestions/#024","title":"0.2.4 \u00a0 \u8b70\u8ad6\u306b\u3088\u308b\u5171\u540c\u5b66\u7fd2","text":"

\u3053\u306e\u672c\u3092\u8aad\u3093\u3067\u3044\u308b\u9593\u3001\u5b66\u3079\u306a\u304b\u3063\u305f\u70b9\u3092\u98db\u3070\u3055\u306a\u3044\u3067\u304f\u3060\u3055\u3044\u3002\u30b3\u30e1\u30f3\u30c8\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u6c17\u8efd\u306b\u8cea\u554f\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u559c\u3093\u3067\u304a\u7b54\u3048\u3057\u3001\u901a\u5e382\u65e5\u4ee5\u5185\u306b\u56de\u7b54\u3067\u304d\u307e\u3059\u3002

\u4e0b\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u5404\u7ae0\u306e\u4e0b\u90e8\u306b\u30b3\u30e1\u30f3\u30c8\u30bb\u30af\u30b7\u30e7\u30f3\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u30b3\u30e1\u30f3\u30c8\u306b\u6ce8\u610f\u3092\u6255\u3046\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\u3002\u4ed6\u306e\u4eba\u304c\u906d\u9047\u3057\u305f\u554f\u984c\u3092\u77e5\u308b\u3053\u3068\u3067\u3001\u77e5\u8b58\u306e\u30ae\u30e3\u30c3\u30d7\u3092\u7279\u5b9a\u3057\u3001\u3088\u308a\u6df1\u3044\u601d\u7d22\u3092\u4fc3\u3059\u3060\u3051\u3067\u306a\u304f\u3001\u4ef2\u9593\u306e\u8aad\u8005\u306e\u8cea\u554f\u306b\u7b54\u3048\u305f\u308a\u3001\u6d1e\u5bdf\u3092\u5171\u6709\u3057\u305f\u308a\u3001\u76f8\u4e92\u306e\u5411\u4e0a\u3092\u4fc3\u9032\u3057\u305f\u308a\u3059\u308b\u3053\u3068\u3067\u5bdb\u5927\u306b\u8ca2\u732e\u3059\u308b\u3053\u3068\u3082\u62db\u5f85\u3057\u307e\u3059\u3002

\u56f3 0-6 \u00a0 \u30b3\u30e1\u30f3\u30c8\u30bb\u30af\u30b7\u30e7\u30f3\u306e\u4f8b

"},{"location":"chapter_preface/suggestions/#025","title":"0.2.5 \u00a0 \u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u5b66\u7fd2\u30d1\u30b9","text":"

\u5168\u4f53\u7684\u306b\u3001\u30c7\u30fc\u30bf\u69cb\u9020\u3068\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3092\u30de\u30b9\u30bf\u30fc\u3059\u308b\u65c5\u306f3\u3064\u306e\u6bb5\u968e\u306b\u5206\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\uff1a

  1. \u6bb5\u968e1\uff1a\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u5165\u9580\u3002\u3055\u307e\u3056\u307e\u306a\u30c7\u30fc\u30bf\u69cb\u9020\u306e\u7279\u6027\u3068\u4f7f\u7528\u6cd5\u306b\u6163\u308c\u3001\u7570\u306a\u308b\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u539f\u7406\u3001\u30d7\u30ed\u30bb\u30b9\u3001\u7528\u9014\u3001\u52b9\u7387\u306b\u3064\u3044\u3066\u5b66\u3076\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002
  2. \u6bb5\u968e2\uff1a\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u554f\u984c\u306e\u7df4\u7fd2\u3002Sword for Offer\u3084LeetCode Hot 100\u306a\u3069\u306e\u4eba\u6c17\u306e\u3042\u308b\u554f\u984c\u304b\u3089\u59cb\u3081\u308b\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u3001\u5c11\u306a\u304f\u3068\u3082100\u554f\u3092\u84c4\u7a4d\u3057\u3066\u4e3b\u6d41\u306e\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u554f\u984c\u306b\u6163\u308c\u308b\u3053\u3068\u3067\u3059\u3002\u7df4\u7fd2\u3092\u59cb\u3081\u308b\u3068\u5fd8\u5374\u304c\u8ab2\u984c\u306b\u306a\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u304c\u3001\u3053\u308c\u306f\u6b63\u5e38\u306a\u3053\u3068\u3067\u3059\u306e\u3067\u3054\u5b89\u5fc3\u304f\u3060\u3055\u3044\u3002\u300c\u30a8\u30d3\u30f3\u30b0\u30cf\u30a6\u30b9\u306e\u5fd8\u5374\u66f2\u7dda\u300d\u306b\u5f93\u3063\u3066\u554f\u984c\u3092\u5fa9\u7fd2\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u3001\u901a\u5e383\u301c5\u56de\u306e\u53cd\u5fa9\u306e\u5f8c\u3001\u305d\u308c\u3089\u3092\u899a\u3048\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u3067\u3057\u3087\u3046\u3002
  3. \u6bb5\u968e3\uff1a\u77e5\u8b58\u4f53\u7cfb\u306e\u69cb\u7bc9\u3002\u5b66\u7fd2\u306e\u9762\u3067\u306f\u3001\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u30b3\u30e9\u30e0\u8a18\u4e8b\u3001\u89e3\u6cd5\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3001\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u6559\u79d1\u66f8\u3092\u8aad\u3093\u3067\u77e5\u8b58\u4f53\u7cfb\u3092\u7d99\u7d9a\u7684\u306b\u8c4a\u304b\u306b\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u7df4\u7fd2\u306e\u9762\u3067\u306f\u3001\u30c8\u30d4\u30c3\u30af\u5225\u5206\u985e\u3001\u4e00\u3064\u306e\u554f\u984c\u306b\u5bfe\u3059\u308b\u8907\u6570\u306e\u89e3\u6cd5\u3001\u8907\u6570\u306e\u554f\u984c\u306b\u5bfe\u3059\u308b\u4e00\u3064\u306e\u89e3\u6cd5\u306a\u3069\u3001\u9ad8\u5ea6\u306a\u6226\u7565\u3092\u8a66\u3059\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u6226\u7565\u306b\u95a2\u3059\u308b\u6d1e\u5bdf\u306f\u3001\u3055\u307e\u3056\u307e\u306a\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u3067\u898b\u3064\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

\u4e0b\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u3053\u306e\u672c\u306f\u4e3b\u306b\u300c\u6bb5\u968e1\u300d\u3092\u30ab\u30d0\u30fc\u3057\u3066\u304a\u308a\u3001\u6bb5\u968e2\u30683\u306b\u3088\u308a\u52b9\u7387\u7684\u306b\u53d6\u308a\u7d44\u3080\u306e\u306b\u5f79\u7acb\u3064\u3053\u3068\u3092\u76ee\u7684\u3068\u3057\u3066\u3044\u307e\u3059\u3002

\u56f3 0-7 \u00a0 \u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u5b66\u7fd2\u30d1\u30b9

"},{"location":"chapter_preface/summary/","title":"0.3 \u00a0 \u307e\u3068\u3081","text":""},{"location":"chapter_reference/","title":"\u53c2\u8003\u6587\u732e","text":"

[1] Thomas H. Cormen, et al. Introduction to Algorithms (3rd Edition).

[2] Aditya Bhargava. Grokking Algorithms: An Illustrated Guide for Programmers and Other Curious People (1st Edition).

[3] Robert Sedgewick, et al. Algorithms (4th Edition).

[4] Yan Weimin. Data Structures (C Language Version).

[5] Deng Junhui. Data Structures (C++ Language Version, Third Edition).

[6] Mark Allen Weiss, translated by Chen Yue. Data Structures and Algorithm Analysis in Java (Third Edition).

[7] Cheng Jie. Speaking of Data Structures.

[8] Wang Zheng. The Beauty of Data Structures and Algorithms.

[9] Gayle Laakmann McDowell. Cracking the Coding Interview: 189 Programming Questions and Solutions (6th Edition).

[10] Aston Zhang, et al. Dive into Deep Learning.

"},{"location":"chapter_searching/","title":"\u7b2c 10 \u7ae0 \u00a0 \u63a2\u7d22","text":"

Abstract

\u63a2\u7d22\u306f\u672a\u77e5\u3078\u306e\u5192\u967a\u3067\u3059\u3002\u795e\u79d8\u7684\u306a\u7a7a\u9593\u306e\u9685\u3005\u307e\u3067\u5de1\u308b\u5fc5\u8981\u304c\u3042\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3057\u3001\u3042\u308b\u3044\u306f\u3059\u3050\u306b\u76ee\u6a19\u3092\u898b\u3064\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002

\u3053\u306e\u767a\u898b\u306e\u65c5\u306b\u304a\u3044\u3066\u3001\u305d\u308c\u305e\u308c\u306e\u63a2\u67fb\u306f\u4e88\u671f\u3057\u306a\u3044\u7b54\u3048\u3067\u7d42\u308f\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002

"},{"location":"chapter_searching/#_1","title":"\u7ae0\u306e\u5185\u5bb9","text":""},{"location":"chapter_searching/binary_search/","title":"10.1 \u00a0 \u4e8c\u5206\u63a2\u7d22","text":"

\u4e8c\u5206\u63a2\u7d22\u306f\u5206\u5272\u7d71\u6cbb\u6226\u7565\u3092\u7528\u3044\u308b\u52b9\u7387\u7684\u306a\u63a2\u7d22\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3067\u3059\u3002\u914d\u5217\u5185\u306e\u8981\u7d20\u306e\u6574\u5217\u9806\u5e8f\u3092\u5229\u7528\u3057\u3001\u5404\u53cd\u5fa9\u3067\u63a2\u7d22\u533a\u9593\u3092\u534a\u5206\u306b\u6e1b\u3089\u3057\u306a\u304c\u3089\u3001\u76ee\u6a19\u8981\u7d20\u304c\u898b\u3064\u304b\u308b\u304b\u63a2\u7d22\u533a\u9593\u304c\u7a7a\u306b\u306a\u308b\u307e\u3067\u7d9a\u884c\u3057\u307e\u3059\u3002

Question

\u9577\u3055\\(n\\)\u306e\u914d\u5217nums\u304c\u4e0e\u3048\u3089\u308c\u3001\u8981\u7d20\u306f\u91cd\u8907\u306a\u3057\u3067\u6607\u9806\u306b\u914d\u5217\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u3053\u306e\u914d\u5217\u5185\u306e\u8981\u7d20target\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u898b\u3064\u3051\u3066\u8fd4\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u914d\u5217\u306b\u8981\u7d20\u304c\u542b\u307e\u308c\u3066\u3044\u306a\u3044\u5834\u5408\u306f\\(-1\\)\u3092\u8fd4\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u4f8b\u3092\u4e0b\u56f3\u306b\u793a\u3057\u307e\u3059\u3002

\u56f3 10-1 \u00a0 Binary search example data

\u4e0b\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u307e\u305a\\(i = 0\\)\u3068\\(j = n - 1\\)\u3067\u30dd\u30a4\u30f3\u30bf\u3092\u521d\u671f\u5316\u3057\u3001\u305d\u308c\u305e\u308c\u914d\u5217\u306e\u6700\u521d\u3068\u6700\u5f8c\u306e\u8981\u7d20\u3092\u6307\u3057\u307e\u3059\u3002\u3053\u308c\u3089\u306f\u307e\u305f\u5168\u4f53\u306e\u63a2\u7d22\u533a\u9593\\([0, n - 1]\\)\u3092\u8868\u3057\u307e\u3059\u3002\u89d2\u62ec\u5f27\u306f\u9589\u533a\u9593\u3092\u793a\u3057\u3001\u5883\u754c\u5024\u81ea\u8eab\u3082\u542b\u3080\u3053\u3068\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002

\u305d\u3057\u3066\u3001\u4ee5\u4e0b\u306e2\u3064\u306e\u30b9\u30c6\u30c3\u30d7\u3092\u30eb\u30fc\u30d7\u3067\u5b9f\u884c\u3059\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002

  1. \u4e2d\u70b9\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\\(m = \\lfloor {(i + j) / 2} \\rfloor\\)\u3092\u8a08\u7b97\u3057\u307e\u3059\u3002\u3053\u3053\u3067\\(\\lfloor \\: \\rfloor\\)\u306f\u5e8a\u95a2\u6570\u3092\u8868\u3057\u307e\u3059\u3002
  2. nums[m]\u3068target\u306e\u6bd4\u8f03\u306b\u57fa\u3065\u3044\u3066\u3001\u4ee5\u4e0b\u306e3\u3064\u306e\u30b1\u30fc\u30b9\u306e\u3046\u30611\u3064\u3092\u9078\u629e\u3057\u3066\u5b9f\u884c\u3057\u307e\u3059\u3002
    1. nums[m] < target\u306e\u5834\u5408\u3001target\u306f\u533a\u9593\\([m + 1, j]\\)\u306b\u3042\u308b\u3053\u3068\u3092\u793a\u3059\u305f\u3081\u3001\\(i = m + 1\\)\u3068\u3057\u307e\u3059\u3002
    2. nums[m] > target\u306e\u5834\u5408\u3001target\u306f\u533a\u9593\\([i, m - 1]\\)\u306b\u3042\u308b\u3053\u3068\u3092\u793a\u3059\u305f\u3081\u3001\\(j = m - 1\\)\u3068\u3057\u307e\u3059\u3002
    3. nums[m] = target\u306e\u5834\u5408\u3001target\u304c\u898b\u3064\u304b\u3063\u305f\u3053\u3068\u3092\u793a\u3059\u305f\u3081\u3001\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\\(m\\)\u3092\u8fd4\u3057\u307e\u3059\u3002

\u914d\u5217\u306b\u76ee\u6a19\u8981\u7d20\u304c\u542b\u307e\u308c\u3066\u3044\u306a\u3044\u5834\u5408\u3001\u63a2\u7d22\u533a\u9593\u306f\u6700\u7d42\u7684\u306b\u7a7a\u306b\u306a\u308a\u3001\\(-1\\)\u3092\u8fd4\u3057\u3066\u7d42\u4e86\u3057\u307e\u3059\u3002

<1><2><3><4><5><6><7>

\u56f3 10-2 \u00a0 Binary search process

\\(i\\)\u3068\\(j\\)\u304c\u4e21\u65b9\u3068\u3082int\u578b\u3067\u3042\u308b\u305f\u3081\u3001**\\(i + j\\)\u306fint\u578b\u306e\u7bc4\u56f2\u3092\u8d85\u3048\u308b\u53ef\u80fd\u6027\u304c\u3042\u308b**\u3053\u3068\u306f\u6ce8\u76ee\u306b\u5024\u3057\u307e\u3059\u3002\u5927\u304d\u306a\u6570\u306e\u30aa\u30fc\u30d0\u30fc\u30d5\u30ed\u30fc\u3092\u907f\u3051\u308b\u305f\u3081\u3001\u901a\u5e38\u306f\u5f0f\\(m = \\lfloor {i + (j - i) / 2} \\rfloor\\)\u3092\u4f7f\u7528\u3057\u3066\u4e2d\u70b9\u3092\u8a08\u7b97\u3057\u307e\u3059\u3002

\u30b3\u30fc\u30c9\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby binary_search.py
def binary_search(nums: list[int], target: int) -> int:\n    \"\"\"\u4e8c\u5206\u63a2\u7d22\uff08\u4e21\u7aef\u9589\u533a\u9593\uff09\"\"\"\n    # \u4e21\u7aef\u9589\u533a\u9593 [0, n-1] \u3092\u521d\u671f\u5316\u3001\u3059\u306a\u308f\u3061 i, j \u306f\u305d\u308c\u305e\u308c\u914d\u5217\u306e\u6700\u521d\u306e\u8981\u7d20\u3068\u6700\u5f8c\u306e\u8981\u7d20\u3092\u6307\u3059\n    i, j = 0, len(nums) - 1\n    # \u691c\u7d22\u533a\u9593\u304c\u7a7a\u306b\u306a\u308b\u307e\u3067\u30eb\u30fc\u30d7\uff08i > j \u306e\u3068\u304d\u7a7a\uff09\n    while i <= j:\n        # \u7406\u8ad6\u7684\u306b\u306f\u3001Python\u306e\u6570\u5024\u306f\u7121\u9650\u306b\u5927\u304d\u304f\u306a\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff08\u30e1\u30e2\u30ea\u30b5\u30a4\u30ba\u306b\u4f9d\u5b58\uff09\u305f\u3081\u3001\u5927\u304d\u306a\u6570\u306e\u30aa\u30fc\u30d0\u30fc\u30d5\u30ed\u30fc\u3092\u8003\u616e\u3059\u308b\u5fc5\u8981\u306f\u306a\u3044\n        m = i + (j - i) // 2  # \u4e2d\u70b9\u30a4\u30f3\u30c7\u30c3\u30af\u30b9 m \u3092\u8a08\u7b97\n        if nums[m] < target:\n            i = m + 1  # \u3053\u306e\u5834\u5408\u3001target \u306f\u533a\u9593 [m+1, j] \u306b\u3042\u308b\u3053\u3068\u3092\u793a\u3059\n        elif nums[m] > target:\n            j = m - 1  # \u3053\u306e\u5834\u5408\u3001target \u306f\u533a\u9593 [i, m-1] \u306b\u3042\u308b\u3053\u3068\u3092\u793a\u3059\n        else:\n            return m  # \u30bf\u30fc\u30b2\u30c3\u30c8\u8981\u7d20\u304c\u898b\u3064\u304b\u3063\u305f\u305f\u3081\u3001\u305d\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u8fd4\u3059\n    return -1  # \u30bf\u30fc\u30b2\u30c3\u30c8\u8981\u7d20\u304c\u898b\u3064\u304b\u3089\u306a\u304b\u3063\u305f\u305f\u3081\u3001-1 \u3092\u8fd4\u3059\n
binary_search.cpp
/* \u4e8c\u5206\u63a2\u7d22\uff08\u4e21\u7aef\u9589\u533a\u9593\uff09 */\nint binarySearch(vector<int> &nums, int target) {\n    // \u4e21\u7aef\u9589\u533a\u9593[0, n-1]\u3092\u521d\u671f\u5316\u3001\u3059\u306a\u308f\u3061i\u3001j\u306f\u305d\u308c\u305e\u308c\u914d\u5217\u306e\u6700\u521d\u306e\u8981\u7d20\u3068\u6700\u5f8c\u306e\u8981\u7d20\u3092\u6307\u3059\n    int i = 0, j = nums.size() - 1;\n    // \u63a2\u7d22\u533a\u9593\u304c\u7a7a\u306b\u306a\u308b\u307e\u3067\u30eb\u30fc\u30d7\uff08i > j\u306e\u6642\u7a7a\u306b\u306a\u308b\uff09\n    while (i <= j) {\n        int m = i + (j - i) / 2; // \u4e2d\u70b9\u30a4\u30f3\u30c7\u30c3\u30af\u30b9m\u3092\u8a08\u7b97\n        if (nums[m] < target)    // \u3053\u306e\u72b6\u6cc1\u306ftarget\u304c\u533a\u9593[m+1, j]\u306b\u3042\u308b\u3053\u3068\u3092\u793a\u3059\n            i = m + 1;\n        else if (nums[m] > target) // \u3053\u306e\u72b6\u6cc1\u306ftarget\u304c\u533a\u9593[i, m-1]\u306b\u3042\u308b\u3053\u3068\u3092\u793a\u3059\n            j = m - 1;\n        else // \u30bf\u30fc\u30b2\u30c3\u30c8\u8981\u7d20\u304c\u898b\u3064\u304b\u3063\u305f\u305f\u3081\u3001\u305d\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u8fd4\u3059\n            return m;\n    }\n    // \u30bf\u30fc\u30b2\u30c3\u30c8\u8981\u7d20\u304c\u898b\u3064\u304b\u3089\u306a\u304b\u3063\u305f\u305f\u3081\u3001-1\u3092\u8fd4\u3059\n    return -1;\n}\n
binary_search.java
/* \u4e8c\u5206\u63a2\u7d22\uff08\u4e21\u7aef\u9589\u533a\u9593\uff09 */\nint binarySearch(int[] nums, int target) {\n    // \u4e21\u7aef\u9589\u533a\u9593 [0, n-1] \u3092\u521d\u671f\u5316\u3001\u3059\u306a\u308f\u3061 i, j \u306f\u305d\u308c\u305e\u308c\u914d\u5217\u306e\u6700\u521d\u306e\u8981\u7d20\u3068\u6700\u5f8c\u306e\u8981\u7d20\u3092\u6307\u3059\n    int i = 0, j = nums.length - 1;\n    // \u63a2\u7d22\u533a\u9593\u304c\u7a7a\u306b\u306a\u308b\u307e\u3067\u30eb\u30fc\u30d7\uff08i > j \u306e\u3068\u304d\u7a7a\uff09\n    while (i <= j) {\n        int m = i + (j - i) / 2; // \u4e2d\u70b9\u30a4\u30f3\u30c7\u30c3\u30af\u30b9 m \u3092\u8a08\u7b97\n        if (nums[m] < target) // \u3053\u306e\u72b6\u6cc1\u306f target \u304c\u533a\u9593 [m+1, j] \u306b\u3042\u308b\u3053\u3068\u3092\u793a\u3059\n            i = m + 1;\n        else if (nums[m] > target) // \u3053\u306e\u72b6\u6cc1\u306f target \u304c\u533a\u9593 [i, m-1] \u306b\u3042\u308b\u3053\u3068\u3092\u793a\u3059\n            j = m - 1;\n        else // \u76ee\u6a19\u8981\u7d20\u3092\u898b\u3064\u3051\u305f\u306e\u3067\u3001\u305d\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u8fd4\u3059\n            return m;\n    }\n    // \u76ee\u6a19\u8981\u7d20\u3092\u898b\u3064\u3051\u3089\u308c\u306a\u304b\u3063\u305f\u306e\u3067\u3001-1 \u3092\u8fd4\u3059\n    return -1;\n}\n
binary_search.cs
[class]{binary_search}-[func]{BinarySearch}\n
binary_search.go
[class]{}-[func]{binarySearch}\n
binary_search.swift
[class]{}-[func]{binarySearch}\n
binary_search.js
[class]{}-[func]{binarySearch}\n
binary_search.ts
[class]{}-[func]{binarySearch}\n
binary_search.dart
[class]{}-[func]{binarySearch}\n
binary_search.rs
[class]{}-[func]{binary_search}\n
binary_search.c
[class]{}-[func]{binarySearch}\n
binary_search.kt
[class]{}-[func]{binarySearch}\n
binary_search.rb
[class]{}-[func]{binary_search}\n

\u6642\u9593\u8a08\u7b97\u91cf\u306f\\(O(\\log n)\\)\u3067\u3059\uff1a\u4e8c\u5206\u30eb\u30fc\u30d7\u306b\u304a\u3044\u3066\u3001\u533a\u9593\u306f\u5404\u30e9\u30a6\u30f3\u30c9\u3067\u534a\u5206\u306b\u6e1b\u5c11\u3059\u308b\u305f\u3081\u3001\u53cd\u5fa9\u56de\u6570\u306f\\(\\log_2 n\\)\u3068\u306a\u308a\u307e\u3059\u3002

\u7a7a\u9593\u8a08\u7b97\u91cf\u306f\\(O(1)\\)\u3067\u3059\uff1a\u30dd\u30a4\u30f3\u30bf\\(i\\)\u3068\\(j\\)\u306f\u5b9a\u6570\u30b5\u30a4\u30ba\u306e\u7a7a\u9593\u3092\u5360\u6709\u3057\u307e\u3059\u3002

"},{"location":"chapter_searching/binary_search/#1011","title":"10.1.1 \u00a0 \u533a\u9593\u8868\u73fe\u65b9\u6cd5","text":"

\u4e0a\u8a18\u306e\u9589\u533a\u9593\u306e\u4ed6\u306b\u3001\u3082\u3046\u4e00\u3064\u306e\u4e00\u822c\u7684\u306a\u533a\u9593\u8868\u73fe\u306f\u300c\u5de6\u9589\u53f3\u958b\u300d\u533a\u9593\u3067\u3001\\([0, n)\\)\u3068\u3057\u3066\u5b9a\u7fa9\u3055\u308c\u3001\u5de6\u5883\u754c\u306f\u81ea\u8eab\u3092\u542b\u307f\u3001\u53f3\u5883\u754c\u306f\u542b\u307f\u307e\u305b\u3093\u3002\u3053\u306e\u8868\u73fe\u3067\u306f\u3001\\(i = j\\)\u306e\u3068\u304d\u533a\u9593\\([i, j)\\)\u306f\u7a7a\u306b\u306a\u308a\u307e\u3059\u3002

\u3053\u306e\u8868\u73fe\u306b\u57fa\u3065\u3044\u3066\u540c\u3058\u6a5f\u80fd\u3092\u6301\u3064\u4e8c\u5206\u63a2\u7d22\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3092\u5b9f\u88c5\u3067\u304d\u307e\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby binary_search.py
def binary_search_lcro(nums: list[int], target: int) -> int:\n    \"\"\"\u4e8c\u5206\u63a2\u7d22\uff08\u5de6\u9589\u53f3\u958b\u533a\u9593\uff09\"\"\"\n    # \u5de6\u9589\u53f3\u958b\u533a\u9593 [0, n) \u3092\u521d\u671f\u5316\u3001\u3059\u306a\u308f\u3061 i, j \u306f\u305d\u308c\u305e\u308c\u914d\u5217\u306e\u6700\u521d\u306e\u8981\u7d20\u3068\u6700\u5f8c\u306e\u8981\u7d20+1\u3092\u6307\u3059\n    i, j = 0, len(nums)\n    # \u691c\u7d22\u533a\u9593\u304c\u7a7a\u306b\u306a\u308b\u307e\u3067\u30eb\u30fc\u30d7\uff08i = j \u306e\u3068\u304d\u7a7a\uff09\n    while i < j:\n        m = i + (j - i) // 2  # \u4e2d\u70b9\u30a4\u30f3\u30c7\u30c3\u30af\u30b9 m \u3092\u8a08\u7b97\n        if nums[m] < target:\n            i = m + 1  # \u3053\u306e\u5834\u5408\u3001target \u306f\u533a\u9593 [m+1, j) \u306b\u3042\u308b\u3053\u3068\u3092\u793a\u3059\n        elif nums[m] > target:\n            j = m  # \u3053\u306e\u5834\u5408\u3001target \u306f\u533a\u9593 [i, m) \u306b\u3042\u308b\u3053\u3068\u3092\u793a\u3059\n        else:\n            return m  # \u30bf\u30fc\u30b2\u30c3\u30c8\u8981\u7d20\u304c\u898b\u3064\u304b\u3063\u305f\u305f\u3081\u3001\u305d\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u8fd4\u3059\n    return -1  # \u30bf\u30fc\u30b2\u30c3\u30c8\u8981\u7d20\u304c\u898b\u3064\u304b\u3089\u306a\u304b\u3063\u305f\u305f\u3081\u3001-1 \u3092\u8fd4\u3059\n
binary_search.cpp
/* \u4e8c\u5206\u63a2\u7d22\uff08\u5de6\u9589\u53f3\u958b\u533a\u9593\uff09 */\nint binarySearchLCRO(vector<int> &nums, int target) {\n    // \u5de6\u9589\u53f3\u958b\u533a\u9593[0, n)\u3092\u521d\u671f\u5316\u3001\u3059\u306a\u308f\u3061i\u3001j\u306f\u305d\u308c\u305e\u308c\u914d\u5217\u306e\u6700\u521d\u306e\u8981\u7d20\u3068\u6700\u5f8c\u306e\u8981\u7d20+1\u3092\u6307\u3059\n    int i = 0, j = nums.size();\n    // \u63a2\u7d22\u533a\u9593\u304c\u7a7a\u306b\u306a\u308b\u307e\u3067\u30eb\u30fc\u30d7\uff08i = j\u306e\u6642\u7a7a\u306b\u306a\u308b\uff09\n    while (i < j) {\n        int m = i + (j - i) / 2; // \u4e2d\u70b9\u30a4\u30f3\u30c7\u30c3\u30af\u30b9m\u3092\u8a08\u7b97\n        if (nums[m] < target)    // \u3053\u306e\u72b6\u6cc1\u306ftarget\u304c\u533a\u9593[m+1, j)\u306b\u3042\u308b\u3053\u3068\u3092\u793a\u3059\n            i = m + 1;\n        else if (nums[m] > target) // \u3053\u306e\u72b6\u6cc1\u306ftarget\u304c\u533a\u9593[i, m)\u306b\u3042\u308b\u3053\u3068\u3092\u793a\u3059\n            j = m;\n        else // \u30bf\u30fc\u30b2\u30c3\u30c8\u8981\u7d20\u304c\u898b\u3064\u304b\u3063\u305f\u305f\u3081\u3001\u305d\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u8fd4\u3059\n            return m;\n    }\n    // \u30bf\u30fc\u30b2\u30c3\u30c8\u8981\u7d20\u304c\u898b\u3064\u304b\u3089\u306a\u304b\u3063\u305f\u305f\u3081\u3001-1\u3092\u8fd4\u3059\n    return -1;\n}\n
binary_search.java
/* \u4e8c\u5206\u63a2\u7d22\uff08\u5de6\u9589\u53f3\u958b\u533a\u9593\uff09 */\nint binarySearchLCRO(int[] nums, int target) {\n    // \u5de6\u9589\u53f3\u958b\u533a\u9593 [0, n) \u3092\u521d\u671f\u5316\u3001\u3059\u306a\u308f\u3061 i, j \u306f\u305d\u308c\u305e\u308c\u914d\u5217\u306e\u6700\u521d\u306e\u8981\u7d20\u3068\u6700\u5f8c\u306e\u8981\u7d20+1\u3092\u6307\u3059\n    int i = 0, j = nums.length;\n    // \u63a2\u7d22\u533a\u9593\u304c\u7a7a\u306b\u306a\u308b\u307e\u3067\u30eb\u30fc\u30d7\uff08i = j \u306e\u3068\u304d\u7a7a\uff09\n    while (i < j) {\n        int m = i + (j - i) / 2; // \u4e2d\u70b9\u30a4\u30f3\u30c7\u30c3\u30af\u30b9 m \u3092\u8a08\u7b97\n        if (nums[m] < target) // \u3053\u306e\u72b6\u6cc1\u306f target \u304c\u533a\u9593 [m+1, j) \u306b\u3042\u308b\u3053\u3068\u3092\u793a\u3059\n            i = m + 1;\n        else if (nums[m] > target) // \u3053\u306e\u72b6\u6cc1\u306f target \u304c\u533a\u9593 [i, m) \u306b\u3042\u308b\u3053\u3068\u3092\u793a\u3059\n            j = m;\n        else // \u76ee\u6a19\u8981\u7d20\u3092\u898b\u3064\u3051\u305f\u306e\u3067\u3001\u305d\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u8fd4\u3059\n            return m;\n    }\n    // \u76ee\u6a19\u8981\u7d20\u3092\u898b\u3064\u3051\u3089\u308c\u306a\u304b\u3063\u305f\u306e\u3067\u3001-1 \u3092\u8fd4\u3059\n    return -1;\n}\n
binary_search.cs
[class]{binary_search}-[func]{BinarySearchLCRO}\n
binary_search.go
[class]{}-[func]{binarySearchLCRO}\n
binary_search.swift
[class]{}-[func]{binarySearchLCRO}\n
binary_search.js
[class]{}-[func]{binarySearchLCRO}\n
binary_search.ts
[class]{}-[func]{binarySearchLCRO}\n
binary_search.dart
[class]{}-[func]{binarySearchLCRO}\n
binary_search.rs
[class]{}-[func]{binary_search_lcro}\n
binary_search.c
[class]{}-[func]{binarySearchLCRO}\n
binary_search.kt
[class]{}-[func]{binarySearchLCRO}\n
binary_search.rb
[class]{}-[func]{binary_search_lcro}\n

\u4e0b\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u30012\u3064\u306e\u533a\u9593\u8868\u73fe\u30bf\u30a4\u30d7\u306b\u304a\u3044\u3066\u3001\u4e8c\u5206\u63a2\u7d22\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u521d\u671f\u5316\u3001\u30eb\u30fc\u30d7\u6761\u4ef6\u3001\u533a\u9593\u7e2e\u5c0f\u64cd\u4f5c\u304c\u7570\u306a\u308a\u307e\u3059\u3002

\u300c\u9589\u533a\u9593\u300d\u8868\u73fe\u3067\u306f\u4e21\u65b9\u306e\u5883\u754c\u304c\u5305\u542b\u7684\u3067\u3042\u308b\u305f\u3081\u3001\u30dd\u30a4\u30f3\u30bf\\(i\\)\u3068\\(j\\)\u306b\u3088\u308b\u533a\u9593\u7e2e\u5c0f\u64cd\u4f5c\u3082\u5bfe\u79f0\u7684\u3067\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u306b\u304f\u304f\u306a\u308b\u305f\u3081\u3001\u4e00\u822c\u7684\u306b\u300c\u9589\u533a\u9593\u300d\u30a2\u30d7\u30ed\u30fc\u30c1\u306e\u4f7f\u7528\u304c\u63a8\u5968\u3055\u308c\u307e\u3059\u3002

\u56f3 10-3 \u00a0 Two types of interval definitions

"},{"location":"chapter_searching/binary_search/#1012","title":"10.1.2 \u00a0 \u5229\u70b9\u3068\u5236\u9650","text":"

\u4e8c\u5206\u63a2\u7d22\u306f\u6642\u9593\u3068\u7a7a\u9593\u306e\u4e21\u65b9\u306e\u9762\u3067\u826f\u597d\u306a\u6027\u80fd\u3092\u793a\u3057\u307e\u3059\u3002

\u3057\u304b\u3057\u3001\u4e8c\u5206\u63a2\u7d22\u306f\u4ee5\u4e0b\u306e\u61f8\u5ff5\u306b\u3088\u308a\u3001\u3059\u3079\u3066\u306e\u30b7\u30ca\u30ea\u30aa\u306b\u9069\u3057\u3066\u3044\u308b\u3068\u306f\u9650\u308a\u307e\u305b\u3093\u3002

"},{"location":"chapter_searching/binary_search_edge/","title":"10.3 \u00a0 \u4e8c\u5206\u63a2\u7d22\u306e\u5883\u754c","text":""},{"location":"chapter_searching/binary_search_edge/#1031","title":"10.3.1 \u00a0 \u5de6\u5883\u754c\u3092\u898b\u3064\u3051\u308b","text":"

Question

\u91cd\u8907\u8981\u7d20\u3092\u542b\u3080\u53ef\u80fd\u6027\u304c\u3042\u308b\u9577\u3055\\(n\\)\u306e\u30bd\u30fc\u30c8\u6e08\u307f\u914d\u5217nums\u304c\u4e0e\u3048\u3089\u308c\u3001\u6700\u3082\u5de6\u306e\u8981\u7d20target\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u8fd4\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u8981\u7d20\u304c\u914d\u5217\u306b\u5b58\u5728\u3057\u306a\u3044\u5834\u5408\u306f\u3001\\(-1\\)\u3092\u8fd4\u3057\u3066\u304f\u3060\u3055\u3044\u3002

\u633f\u5165\u4f4d\u7f6e\u306e\u4e8c\u5206\u63a2\u7d22\u65b9\u6cd5\u3092\u601d\u3044\u51fa\u3059\u3068\u3001\u63a2\u7d22\u5b8c\u4e86\u5f8c\u3001\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\\(i\\)\u306ftarget\u306e\u6700\u3082\u5de6\u306e\u51fa\u73fe\u3092\u6307\u3057\u307e\u3059\u3002\u3057\u305f\u304c\u3063\u3066\u3001\u633f\u5165\u4f4d\u7f6e\u306e\u63a2\u7d22\u306f\u672c\u8cea\u7684\u306b\u6700\u3082\u5de6\u306etarget\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u898b\u3064\u3051\u308b\u3053\u3068\u3068\u540c\u3058\u3067\u3059\u3002

\u633f\u5165\u4f4d\u7f6e\u3092\u898b\u3064\u3051\u308b\u95a2\u6570\u3092\u4f7f\u7528\u3057\u3066target\u306e\u5de6\u5883\u754c\u3092\u898b\u3064\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u914d\u5217\u306btarget\u304c\u542b\u307e\u308c\u3066\u3044\u306a\u3044\u53ef\u80fd\u6027\u304c\u3042\u308b\u3053\u3068\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u308c\u306f\u4ee5\u4e0b\u306e2\u3064\u306e\u7d50\u679c\u306b\u3064\u306a\u304c\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\uff1a

\u3053\u308c\u3089\u306e\u5834\u5408\u3001\u5358\u306b\\(-1\\)\u3092\u8fd4\u3057\u307e\u3059\u3002\u30b3\u30fc\u30c9\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby binary_search_edge.py
def binary_search_left_edge(nums: list[int], target: int) -> int:\n    \"\"\"\u6700\u5de6\u7aef\u306e\u30bf\u30fc\u30b2\u30c3\u30c8\u306e\u4e8c\u5206\u63a2\u7d22\"\"\"\n    # \u30bf\u30fc\u30b2\u30c3\u30c8\u306e\u633f\u5165\u4f4d\u7f6e\u3092\u898b\u3064\u3051\u308b\u3053\u3068\u3068\u540c\u7b49\n    i = binary_search_insertion(nums, target)\n    # \u30bf\u30fc\u30b2\u30c3\u30c8\u304c\u898b\u3064\u304b\u3089\u306a\u304b\u3063\u305f\u5834\u5408\u3001-1 \u3092\u8fd4\u3059\n    if i == len(nums) or nums[i] != target:\n        return -1\n    # \u30bf\u30fc\u30b2\u30c3\u30c8\u304c\u898b\u3064\u304b\u3063\u305f\u5834\u5408\u3001\u30a4\u30f3\u30c7\u30c3\u30af\u30b9 i \u3092\u8fd4\u3059\n    return i\n
binary_search_edge.cpp
/* \u6700\u5de6\u306e\u30bf\u30fc\u30b2\u30c3\u30c8\u306e\u4e8c\u5206\u63a2\u7d22 */\nint binarySearchLeftEdge(vector<int> &nums, int target) {\n    // target\u306e\u633f\u5165\u30dd\u30a4\u30f3\u30c8\u3092\u898b\u3064\u3051\u308b\u3053\u3068\u3068\u7b49\u4fa1\n    int i = binarySearchInsertion(nums, target);\n    // target\u304c\u898b\u3064\u304b\u3089\u306a\u304b\u3063\u305f\u305f\u3081\u3001-1\u3092\u8fd4\u3059\n    if (i == nums.size() || nums[i] != target) {\n        return -1;\n    }\n    // target\u304c\u898b\u3064\u304b\u3063\u305f\u305f\u3081\u3001\u30a4\u30f3\u30c7\u30c3\u30af\u30b9i\u3092\u8fd4\u3059\n    return i;\n}\n
binary_search_edge.java
/* \u6700\u3082\u5de6\u306e target \u3092\u4e8c\u5206\u63a2\u7d22 */\nint binarySearchLeftEdge(int[] nums, int target) {\n    // target \u306e\u633f\u5165\u70b9\u3092\u898b\u3064\u3051\u308b\u3053\u3068\u3068\u7b49\u4fa1\n    int i = binary_search_insertion.binarySearchInsertion(nums, target);\n    // target \u3092\u898b\u3064\u3051\u3089\u308c\u306a\u304b\u3063\u305f\u306e\u3067\u3001-1 \u3092\u8fd4\u3059\n    if (i == nums.length || nums[i] != target) {\n        return -1;\n    }\n    // target \u3092\u898b\u3064\u3051\u305f\u306e\u3067\u3001\u30a4\u30f3\u30c7\u30c3\u30af\u30b9 i \u3092\u8fd4\u3059\n    return i;\n}\n
binary_search_edge.cs
[class]{binary_search_edge}-[func]{BinarySearchLeftEdge}\n
binary_search_edge.go
[class]{}-[func]{binarySearchLeftEdge}\n
binary_search_edge.swift
[class]{}-[func]{binarySearchLeftEdge}\n
binary_search_edge.js
[class]{}-[func]{binarySearchLeftEdge}\n
binary_search_edge.ts
[class]{}-[func]{binarySearchLeftEdge}\n
binary_search_edge.dart
[class]{}-[func]{binarySearchLeftEdge}\n
binary_search_edge.rs
[class]{}-[func]{binary_search_left_edge}\n
binary_search_edge.c
[class]{}-[func]{binarySearchLeftEdge}\n
binary_search_edge.kt
[class]{}-[func]{binarySearchLeftEdge}\n
binary_search_edge.rb
[class]{}-[func]{binary_search_left_edge}\n
"},{"location":"chapter_searching/binary_search_edge/#1032","title":"10.3.2 \u00a0 \u53f3\u5883\u754c\u3092\u898b\u3064\u3051\u308b","text":"

target\u306e\u6700\u3082\u53f3\u306e\u51fa\u73fe\u3092\u3069\u306e\u3088\u3046\u306b\u898b\u3064\u3051\u308b\u3067\u3057\u3087\u3046\u304b\uff1f\u6700\u3082\u76f4\u63a5\u7684\u306a\u65b9\u6cd5\u306f\u3001nums[m] == target\u306e\u5834\u5408\u306b\u63a2\u7d22\u5883\u754c\u3092\u8abf\u6574\u3059\u308b\u65b9\u6cd5\u3092\u5909\u66f4\u3057\u3066\u3001\u5f93\u6765\u306e\u4e8c\u5206\u63a2\u7d22\u30ed\u30b8\u30c3\u30af\u3092\u4fee\u6b63\u3059\u308b\u3053\u3068\u3067\u3059\u3002\u30b3\u30fc\u30c9\u306f\u3053\u3053\u3067\u306f\u7701\u7565\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u8208\u5473\u304c\u3042\u308b\u5834\u5408\u306f\u3001\u81ea\u5206\u3067\u30b3\u30fc\u30c9\u3092\u5b9f\u88c5\u3057\u3066\u307f\u3066\u304f\u3060\u3055\u3044\u3002

\u4ee5\u4e0b\u3067\u306f\u3001\u3055\u3089\u306b2\u3064\u306e\u5de7\u5999\u306a\u65b9\u6cd5\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002

"},{"location":"chapter_searching/binary_search_edge/#1","title":"1. \u00a0 \u5de6\u5883\u754c\u63a2\u7d22\u3092\u518d\u5229\u7528\u3059\u308b","text":"

target\u306e\u6700\u3082\u53f3\u306e\u51fa\u73fe\u3092\u898b\u3064\u3051\u308b\u306b\u306f\u3001\u6700\u3082\u5de6\u306etarget\u3092\u898b\u3064\u3051\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u305f\u95a2\u6570\u3092\u518d\u5229\u7528\u3067\u304d\u307e\u3059\u3002\u5177\u4f53\u7684\u306b\u306f\u3001\u6700\u3082\u53f3\u306e\u30bf\u30fc\u30b2\u30c3\u30c8\u306e\u63a2\u7d22\u3092\u6700\u3082\u5de6\u306e\u30bf\u30fc\u30b2\u30c3\u30c8 + 1\u306e\u63a2\u7d22\u306b\u5909\u63db\u3057\u307e\u3059\u3002

\u4e0b\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u63a2\u7d22\u5b8c\u4e86\u5f8c\u3001\u30dd\u30a4\u30f3\u30bf\\(i\\)\u306f\u6700\u3082\u5de6\u306etarget + 1\uff08\u5b58\u5728\u3059\u308b\u5834\u5408\uff09\u3092\u6307\u3057\u3001\u30dd\u30a4\u30f3\u30bf\\(j\\)\u306ftarget\u306e\u6700\u3082\u53f3\u306e\u51fa\u73fe\u3092\u6307\u3057\u307e\u3059\u3002\u3057\u305f\u304c\u3063\u3066\u3001\\(j\\)\u3092\u8fd4\u3059\u3053\u3068\u3067\u53f3\u5883\u754c\u304c\u5f97\u3089\u308c\u307e\u3059\u3002

\u56f3 10-7 \u00a0 Transforming the search for the right boundary into the search for the left boundary

\u8fd4\u3055\u308c\u308b\u633f\u5165\u4f4d\u7f6e\u306f\\(i\\)\u3067\u3042\u308b\u3053\u3068\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3057\u305f\u304c\u3063\u3066\u3001\\(j\\)\u3092\u5f97\u308b\u305f\u3081\u306b\u306f1\u3092\u5f15\u304f\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby binary_search_edge.py
def binary_search_right_edge(nums: list[int], target: int) -> int:\n    \"\"\"\u6700\u53f3\u7aef\u306e\u30bf\u30fc\u30b2\u30c3\u30c8\u306e\u4e8c\u5206\u63a2\u7d22\"\"\"\n    # \u6700\u5de6\u7aef\u306e\u30bf\u30fc\u30b2\u30c3\u30c8 + 1 \u3092\u898b\u3064\u3051\u308b\u3053\u3068\u306b\u5909\u63db\n    i = binary_search_insertion(nums, target + 1)\n    # j \u306f\u6700\u53f3\u7aef\u306e\u30bf\u30fc\u30b2\u30c3\u30c8\u3092\u6307\u3057\u3001i \u306f\u30bf\u30fc\u30b2\u30c3\u30c8\u3088\u308a\u5927\u304d\u3044\u6700\u521d\u306e\u8981\u7d20\u3092\u6307\u3059\n    j = i - 1\n    # \u30bf\u30fc\u30b2\u30c3\u30c8\u304c\u898b\u3064\u304b\u3089\u306a\u304b\u3063\u305f\u5834\u5408\u3001-1 \u3092\u8fd4\u3059\n    if j == -1 or nums[j] != target:\n        return -1\n    # \u30bf\u30fc\u30b2\u30c3\u30c8\u304c\u898b\u3064\u304b\u3063\u305f\u5834\u5408\u3001\u30a4\u30f3\u30c7\u30c3\u30af\u30b9 j \u3092\u8fd4\u3059\n    return j\n
binary_search_edge.cpp
/* \u6700\u53f3\u306e\u30bf\u30fc\u30b2\u30c3\u30c8\u306e\u4e8c\u5206\u63a2\u7d22 */\nint binarySearchRightEdge(vector<int> &nums, int target) {\n    // \u6700\u5de6\u306etarget + 1\u3092\u898b\u3064\u3051\u308b\u3053\u3068\u306b\u5909\u63db\n    int i = binarySearchInsertion(nums, target + 1);\n    // j\u306f\u6700\u53f3\u306e\u30bf\u30fc\u30b2\u30c3\u30c8\u3092\u6307\u3057\u3001i\u306ftarget\u3088\u308a\u5927\u304d\u3044\u6700\u521d\u306e\u8981\u7d20\u3092\u6307\u3059\n    int j = i - 1;\n    // target\u304c\u898b\u3064\u304b\u3089\u306a\u304b\u3063\u305f\u305f\u3081\u3001-1\u3092\u8fd4\u3059\n    if (j == -1 || nums[j] != target) {\n        return -1;\n    }\n    // target\u304c\u898b\u3064\u304b\u3063\u305f\u305f\u3081\u3001\u30a4\u30f3\u30c7\u30c3\u30af\u30b9j\u3092\u8fd4\u3059\n    return j;\n}\n
binary_search_edge.java
/* \u6700\u3082\u53f3\u306e target \u3092\u4e8c\u5206\u63a2\u7d22 */\nint binarySearchRightEdge(int[] nums, int target) {\n    // \u6700\u3082\u5de6\u306e target + 1 \u3092\u898b\u3064\u3051\u308b\u3053\u3068\u306b\u5909\u63db\n    int i = binary_search_insertion.binarySearchInsertion(nums, target + 1);\n    // j \u306f\u6700\u3082\u53f3\u306e target \u3092\u6307\u3057\u3001i \u306f target \u3088\u308a\u5927\u304d\u3044\u6700\u521d\u306e\u8981\u7d20\u3092\u6307\u3059\n    int j = i - 1;\n    // target \u3092\u898b\u3064\u3051\u3089\u308c\u306a\u304b\u3063\u305f\u306e\u3067\u3001-1 \u3092\u8fd4\u3059\n    if (j == -1 || nums[j] != target) {\n        return -1;\n    }\n    // target \u3092\u898b\u3064\u3051\u305f\u306e\u3067\u3001\u30a4\u30f3\u30c7\u30c3\u30af\u30b9 j \u3092\u8fd4\u3059\n    return j;\n}\n
binary_search_edge.cs
[class]{binary_search_edge}-[func]{BinarySearchRightEdge}\n
binary_search_edge.go
[class]{}-[func]{binarySearchRightEdge}\n
binary_search_edge.swift
[class]{}-[func]{binarySearchRightEdge}\n
binary_search_edge.js
[class]{}-[func]{binarySearchRightEdge}\n
binary_search_edge.ts
[class]{}-[func]{binarySearchRightEdge}\n
binary_search_edge.dart
[class]{}-[func]{binarySearchRightEdge}\n
binary_search_edge.rs
[class]{}-[func]{binary_search_right_edge}\n
binary_search_edge.c
[class]{}-[func]{binarySearchRightEdge}\n
binary_search_edge.kt
[class]{}-[func]{binarySearchRightEdge}\n
binary_search_edge.rb
[class]{}-[func]{binary_search_right_edge}\n
"},{"location":"chapter_searching/binary_search_edge/#2","title":"2. \u00a0 \u8981\u7d20\u63a2\u7d22\u306b\u5909\u63db\u3059\u308b","text":"

\u914d\u5217\u306btarget\u304c\u542b\u307e\u308c\u3066\u3044\u306a\u3044\u5834\u5408\u3001\\(i\\)\u3068\\(j\\)\u306f\u6700\u7d42\u7684\u306btarget\u3088\u308a\u5927\u304d\u3044\u6700\u521d\u306e\u8981\u7d20\u3068\u5c0f\u3055\u3044\u6700\u521d\u306e\u8981\u7d20\u3092\u305d\u308c\u305e\u308c\u6307\u3057\u307e\u3059\u3002

\u3057\u305f\u304c\u3063\u3066\u3001\u4e0b\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u914d\u5217\u306b\u5b58\u5728\u3057\u306a\u3044\u8981\u7d20\u3092\u69cb\u7bc9\u3057\u3066\u3001\u5de6\u3068\u53f3\u306e\u5883\u754c\u3092\u63a2\u7d22\u3067\u304d\u307e\u3059\u3002

\u56f3 10-8 \u00a0 Transforming the search for boundaries into the search for an element

\u30b3\u30fc\u30c9\u306f\u3053\u3053\u3067\u306f\u7701\u7565\u3055\u308c\u3066\u3044\u307e\u3059\u304c\u3001\u3053\u306e\u30a2\u30d7\u30ed\u30fc\u30c1\u306b\u3064\u3044\u3066\u6ce8\u610f\u3059\u3079\u304d2\u3064\u306e\u91cd\u8981\u306a\u70b9\u304c\u3042\u308a\u307e\u3059\u3002

"},{"location":"chapter_searching/binary_search_insertion/","title":"10.2 \u00a0 \u4e8c\u5206\u63a2\u7d22\u306b\u3088\u308b\u633f\u5165","text":"

\u4e8c\u5206\u63a2\u7d22\u306f\u76ee\u6a19\u8981\u7d20\u3092\u63a2\u7d22\u3059\u308b\u3060\u3051\u3067\u306a\u304f\u3001\u76ee\u6a19\u8981\u7d20\u306e\u633f\u5165\u4f4d\u7f6e\u3092\u63a2\u7d22\u3059\u308b\u306a\u3069\u3001\u591a\u304f\u306e\u5909\u7a2e\u554f\u984c\u3092\u89e3\u6c7a\u3059\u308b\u305f\u3081\u306b\u3082\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002

"},{"location":"chapter_searching/binary_search_insertion/#1021","title":"10.2.1 \u00a0 \u91cd\u8907\u8981\u7d20\u304c\u306a\u3044\u5834\u5408","text":"

Question

\u4e00\u610f\u306e\u8981\u7d20\u3092\u6301\u3064\u9577\u3055\\(n\\)\u306e\u30bd\u30fc\u30c8\u6e08\u307f\u914d\u5217nums\u3068\u8981\u7d20target\u304c\u4e0e\u3048\u3089\u308c\u3001\u30bd\u30fc\u30c8\u9806\u3092\u7dad\u6301\u3057\u306a\u304c\u3089target\u3092nums\u306b\u633f\u5165\u3057\u307e\u3059\u3002target\u304c\u914d\u5217\u306b\u3059\u3067\u306b\u5b58\u5728\u3059\u308b\u5834\u5408\u306f\u3001\u65e2\u5b58\u306e\u8981\u7d20\u306e\u5de6\u5074\u306b\u633f\u5165\u3057\u307e\u3059\u3002\u633f\u5165\u5f8c\u306e\u914d\u5217\u306b\u304a\u3051\u308btarget\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u8fd4\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u4e0b\u56f3\u306b\u793a\u3059\u4f8b\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002

\u56f3 10-4 \u00a0 Example data for binary search insertion point

\u524d\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u306e\u4e8c\u5206\u63a2\u7d22\u30b3\u30fc\u30c9\u3092\u518d\u5229\u7528\u3057\u305f\u3044\u5834\u5408\u3001\u4ee5\u4e0b\u306e2\u3064\u306e\u8cea\u554f\u306b\u7b54\u3048\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

\u8cea\u554f1\uff1a\u914d\u5217\u306b\u3059\u3067\u306btarget\u304c\u542b\u307e\u308c\u3066\u3044\u308b\u5834\u5408\u3001\u633f\u5165\u4f4d\u7f6e\u306f\u65e2\u5b58\u8981\u7d20\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306b\u306a\u308a\u307e\u3059\u304b\uff1f

target\u3092\u7b49\u3057\u3044\u8981\u7d20\u306e\u5de6\u5074\u306b\u633f\u5165\u3059\u308b\u3068\u3044\u3046\u8981\u4ef6\u306f\u3001\u65b0\u3057\u304f\u633f\u5165\u3055\u308c\u308btarget\u304c\u5143\u306etarget\u306e\u4f4d\u7f6e\u3092\u7f6e\u304d\u63db\u3048\u308b\u3053\u3068\u3092\u610f\u5473\u3057\u307e\u3059\u3002\u3064\u307e\u308a\u3001\u914d\u5217\u306btarget\u304c\u542b\u307e\u308c\u3066\u3044\u308b\u5834\u5408\u3001\u633f\u5165\u4f4d\u7f6e\u306f\u78ba\u304b\u306b\u305d\u306etarget\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3067\u3059\u3002

\u8cea\u554f2\uff1a\u914d\u5217\u306btarget\u304c\u542b\u307e\u308c\u3066\u3044\u306a\u3044\u5834\u5408\u3001\u3069\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306b\u633f\u5165\u3055\u308c\u307e\u3059\u304b\uff1f

\u4e8c\u5206\u63a2\u7d22\u30d7\u30ed\u30bb\u30b9\u3092\u3055\u3089\u306b\u8003\u3048\u3066\u307f\u307e\u3057\u3087\u3046\uff1anums[m] < target\u306e\u3068\u304d\u3001\u30dd\u30a4\u30f3\u30bf\\(i\\)\u304c\u79fb\u52d5\u3057\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u30dd\u30a4\u30f3\u30bf\\(i\\)\u304ctarget\u4ee5\u4e0a\u306e\u8981\u7d20\u306b\u8fd1\u3065\u3044\u3066\u3044\u308b\u3053\u3068\u3092\u610f\u5473\u3057\u307e\u3059\u3002\u540c\u69d8\u306b\u3001\u30dd\u30a4\u30f3\u30bf\\(j\\)\u306f\u5e38\u306btarget\u4ee5\u4e0b\u306e\u8981\u7d20\u306b\u8fd1\u3065\u3044\u3066\u3044\u307e\u3059\u3002

\u3057\u305f\u304c\u3063\u3066\u3001\u4e8c\u5206\u306e\u7d42\u4e86\u6642\u306b\u306f\u78ba\u5b9f\u306b\uff1a\\(i\\)\u306ftarget\u3088\u308a\u5927\u304d\u3044\u6700\u521d\u306e\u8981\u7d20\u3092\u6307\u3057\u3001\\(j\\)\u306ftarget\u3088\u308a\u5c0f\u3055\u3044\u6700\u521d\u306e\u8981\u7d20\u3092\u6307\u3057\u307e\u3059\u3002\u914d\u5217\u306btarget\u304c\u542b\u307e\u308c\u3066\u3044\u306a\u3044\u5834\u5408\u3001\u633f\u5165\u4f4d\u7f6e\u306f\\(i\\)\u3067\u3042\u308b\u3053\u3068\u306f\u660e\u3089\u304b\u3067\u3059\u3002\u30b3\u30fc\u30c9\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby binary_search_insertion.py
def binary_search_insertion_simple(nums: list[int], target: int) -> int:\n    \"\"\"\u633f\u5165\u4f4d\u7f6e\u306e\u4e8c\u5206\u63a2\u7d22\uff08\u91cd\u8907\u8981\u7d20\u306a\u3057\uff09\"\"\"\n    i, j = 0, len(nums) - 1  # \u4e21\u7aef\u9589\u533a\u9593 [0, n-1] \u3092\u521d\u671f\u5316\n    while i <= j:\n        m = i + (j - i) // 2  # \u4e2d\u70b9\u30a4\u30f3\u30c7\u30c3\u30af\u30b9 m \u3092\u8a08\u7b97\n        if nums[m] < target:\n            i = m + 1  # \u30bf\u30fc\u30b2\u30c3\u30c8\u306f\u533a\u9593 [m+1, j] \u306b\u3042\u308b\n        elif nums[m] > target:\n            j = m - 1  # \u30bf\u30fc\u30b2\u30c3\u30c8\u306f\u533a\u9593 [i, m-1] \u306b\u3042\u308b\n        else:\n            return m  # \u30bf\u30fc\u30b2\u30c3\u30c8\u304c\u898b\u3064\u304b\u3063\u305f\u5834\u5408\u3001\u633f\u5165\u4f4d\u7f6e m \u3092\u8fd4\u3059\n    # \u30bf\u30fc\u30b2\u30c3\u30c8\u304c\u898b\u3064\u304b\u3089\u306a\u304b\u3063\u305f\u5834\u5408\u3001\u633f\u5165\u4f4d\u7f6e i \u3092\u8fd4\u3059\n    return i\n
binary_search_insertion.cpp
/* \u633f\u5165\u30dd\u30a4\u30f3\u30c8\u306e\u4e8c\u5206\u63a2\u7d22\uff08\u91cd\u8907\u8981\u7d20\u306a\u3057\uff09 */\nint binarySearchInsertionSimple(vector<int> &nums, int target) {\n    int i = 0, j = nums.size() - 1; // \u4e21\u7aef\u9589\u533a\u9593[0, n-1]\u3092\u521d\u671f\u5316\n    while (i <= j) {\n        int m = i + (j - i) / 2; // \u4e2d\u70b9\u30a4\u30f3\u30c7\u30c3\u30af\u30b9m\u3092\u8a08\u7b97\n        if (nums[m] < target) {\n            i = m + 1; // \u30bf\u30fc\u30b2\u30c3\u30c8\u306f\u533a\u9593[m+1, j]\u306b\u3042\u308b\n        } else if (nums[m] > target) {\n            j = m - 1; // \u30bf\u30fc\u30b2\u30c3\u30c8\u306f\u533a\u9593[i, m-1]\u306b\u3042\u308b\n        } else {\n            return m; // \u30bf\u30fc\u30b2\u30c3\u30c8\u304c\u898b\u3064\u304b\u3063\u305f\u305f\u3081\u3001\u633f\u5165\u30dd\u30a4\u30f3\u30c8m\u3092\u8fd4\u3059\n        }\n    }\n    // \u30bf\u30fc\u30b2\u30c3\u30c8\u304c\u898b\u3064\u304b\u3089\u306a\u304b\u3063\u305f\u305f\u3081\u3001\u633f\u5165\u30dd\u30a4\u30f3\u30c8i\u3092\u8fd4\u3059\n    return i;\n}\n
binary_search_insertion.java
/* \u633f\u5165\u70b9\u306e\u4e8c\u5206\u63a2\u7d22\uff08\u91cd\u8907\u8981\u7d20\u306a\u3057\uff09 */\nint binarySearchInsertionSimple(int[] nums, int target) {\n    int i = 0, j = nums.length - 1; // \u4e21\u7aef\u9589\u533a\u9593 [0, n-1] \u3092\u521d\u671f\u5316\n    while (i <= j) {\n        int m = i + (j - i) / 2; // \u4e2d\u70b9\u30a4\u30f3\u30c7\u30c3\u30af\u30b9 m \u3092\u8a08\u7b97\n        if (nums[m] < target) {\n            i = m + 1; // target \u306f\u533a\u9593 [m+1, j] \u306b\u3042\u308b\n        } else if (nums[m] > target) {\n            j = m - 1; // target \u306f\u533a\u9593 [i, m-1] \u306b\u3042\u308b\n        } else {\n            return m; // target \u3092\u898b\u3064\u3051\u305f\u306e\u3067\u3001\u633f\u5165\u70b9 m \u3092\u8fd4\u3059\n        }\n    }\n    // target \u3092\u898b\u3064\u3051\u3089\u308c\u306a\u304b\u3063\u305f\u306e\u3067\u3001\u633f\u5165\u70b9 i \u3092\u8fd4\u3059\n    return i;\n}\n
binary_search_insertion.cs
[class]{binary_search_insertion}-[func]{BinarySearchInsertionSimple}\n
binary_search_insertion.go
[class]{}-[func]{binarySearchInsertionSimple}\n
binary_search_insertion.swift
[class]{}-[func]{binarySearchInsertionSimple}\n
binary_search_insertion.js
[class]{}-[func]{binarySearchInsertionSimple}\n
binary_search_insertion.ts
[class]{}-[func]{binarySearchInsertionSimple}\n
binary_search_insertion.dart
[class]{}-[func]{binarySearchInsertionSimple}\n
binary_search_insertion.rs
[class]{}-[func]{binary_search_insertion_simple}\n
binary_search_insertion.c
[class]{}-[func]{binarySearchInsertionSimple}\n
binary_search_insertion.kt
[class]{}-[func]{binarySearchInsertionSimple}\n
binary_search_insertion.rb
[class]{}-[func]{binary_search_insertion_simple}\n
"},{"location":"chapter_searching/binary_search_insertion/#1022","title":"10.2.2 \u00a0 \u91cd\u8907\u8981\u7d20\u304c\u3042\u308b\u5834\u5408","text":"

Question

\u524d\u306e\u8cea\u554f\u306b\u57fa\u3065\u3044\u3066\u3001\u914d\u5217\u306b\u91cd\u8907\u8981\u7d20\u304c\u542b\u307e\u308c\u3066\u3044\u308b\u53ef\u80fd\u6027\u304c\u3042\u308b\u3068\u4eee\u5b9a\u3057\u3001\u4ed6\u306f\u3059\u3079\u3066\u540c\u3058\u3068\u3057\u307e\u3059\u3002

\u914d\u5217\u306btarget\u306e\u8907\u6570\u306e\u51fa\u73fe\u304c\u3042\u308b\u5834\u5408\u3001\u901a\u5e38\u306e\u4e8c\u5206\u63a2\u7d22\u306ftarget\u306e1\u3064\u306e\u51fa\u73fe\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306e\u307f\u3092\u8fd4\u3059\u3053\u3068\u304c\u3067\u304d\u3001\u305d\u306e\u4f4d\u7f6e\u306e\u5de6\u53f3\u306btarget\u306e\u51fa\u73fe\u304c\u3044\u304f\u3064\u3042\u308b\u304b\u3092\u7279\u5b9a\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002

\u554f\u984c\u3067\u306f\u76ee\u6a19\u8981\u7d20\u3092\u6700\u3082\u5de6\u306e\u4f4d\u7f6e\u306b\u633f\u5165\u3059\u308b\u3053\u3068\u304c\u8981\u6c42\u3055\u308c\u3066\u3044\u308b\u305f\u3081\u3001\u914d\u5217\u5185\u306e\u6700\u3082\u5de6\u306etarget\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u898b\u3064\u3051\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u6700\u521d\u306b\u4e0b\u56f3\u306b\u793a\u3059\u30b9\u30c6\u30c3\u30d7\u3092\u901a\u3057\u3066\u3053\u308c\u3092\u5b9f\u88c5\u3059\u308b\u3053\u3068\u3092\u8003\u3048\u3066\u307f\u307e\u3057\u3087\u3046\u3002

  1. \u4e8c\u5206\u63a2\u7d22\u3092\u5b9f\u884c\u3057\u3066target\u306e\u4efb\u610f\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3001\u4f8b\u3048\u3070\\(k\\)\u3092\u898b\u3064\u3051\u307e\u3059\u3002
  2. \u30a4\u30f3\u30c7\u30c3\u30af\u30b9\\(k\\)\u304b\u3089\u958b\u59cb\u3057\u3066\u3001\u6700\u3082\u5de6\u306etarget\u306e\u51fa\u73fe\u304c\u898b\u3064\u304b\u308b\u307e\u3067\u5de6\u306b\u7dda\u5f62\u63a2\u7d22\u3092\u884c\u3044\u3001\u3053\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u8fd4\u3057\u307e\u3059\u3002

\u56f3 10-5 \u00a0 Linear search for the insertion point of duplicate elements

\u3053\u306e\u65b9\u6cd5\u306f\u5b9f\u73fe\u53ef\u80fd\u3067\u3059\u304c\u3001\u7dda\u5f62\u63a2\u7d22\u3092\u542b\u3080\u305f\u3081\u3001\u6642\u9593\u8a08\u7b97\u91cf\u306f\\(O(n)\\)\u3067\u3059\u3002\u3053\u306e\u65b9\u6cd5\u306f\u3001\u914d\u5217\u306b\u591a\u304f\u306e\u91cd\u8907\u3059\u308btarget\u304c\u542b\u307e\u308c\u3066\u3044\u308b\u5834\u5408\u306b\u975e\u52b9\u7387\u3067\u3059\u3002

\u4eca\u5ea6\u306f\u4e8c\u5206\u63a2\u7d22\u30b3\u30fc\u30c9\u3092\u62e1\u5f35\u3059\u308b\u3053\u3068\u3092\u8003\u3048\u3066\u307f\u307e\u3057\u3087\u3046\u3002\u4e0b\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u5168\u4f53\u7684\u306a\u30d7\u30ed\u30bb\u30b9\u306f\u540c\u3058\u307e\u307e\u3067\u3059\u3002\u5404\u30e9\u30a6\u30f3\u30c9\u3067\u3001\u307e\u305a\u4e2d\u9593\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\\(m\\)\u3092\u8a08\u7b97\u3057\u3001\u6b21\u306btarget\u3068nums[m]\u306e\u5024\u3092\u6bd4\u8f03\u3057\u3066\u3001\u4ee5\u4e0b\u306e\u30b1\u30fc\u30b9\u306b\u306a\u308a\u307e\u3059\u3002

\u30eb\u30fc\u30d7\u5f8c\u3001\\(i\\)\u306f\u6700\u3082\u5de6\u306etarget\u3092\u6307\u3057\u3001\\(j\\)\u306ftarget\u3088\u308a\u5c0f\u3055\u3044\u6700\u521d\u306e\u8981\u7d20\u3092\u6307\u3059\u305f\u3081\u3001\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\\(i\\)\u304c\u633f\u5165\u4f4d\u7f6e\u3067\u3059\u3002

<1><2><3><4><5><6><7><8>

\u56f3 10-6 \u00a0 Steps for binary search insertion point of duplicate elements

\u4ee5\u4e0b\u306e\u30b3\u30fc\u30c9\u3092\u89b3\u5bdf\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u5206\u5c90nums[m] > target\u3068nums[m] == target\u306e\u64cd\u4f5c\u306f\u540c\u3058\u3067\u3042\u308b\u305f\u3081\u3001\u3053\u308c\u30892\u3064\u306e\u5206\u5c90\u3092\u30de\u30fc\u30b8\u3067\u304d\u307e\u3059\u3002

\u305d\u308c\u3067\u3082\u3001\u30ed\u30b8\u30c3\u30af\u304c\u3088\u308a\u660e\u78ba\u306b\u306a\u308a\u3001\u53ef\u8aad\u6027\u304c\u5411\u4e0a\u3059\u308b\u305f\u3081\u3001\u6761\u4ef6\u3092\u5c55\u958b\u3057\u305f\u307e\u307e\u306b\u3057\u3066\u304a\u304f\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby binary_search_insertion.py
def binary_search_insertion(nums: list[int], target: int) -> int:\n    \"\"\"\u633f\u5165\u4f4d\u7f6e\u306e\u4e8c\u5206\u63a2\u7d22\uff08\u91cd\u8907\u8981\u7d20\u3042\u308a\uff09\"\"\"\n    i, j = 0, len(nums) - 1  # \u4e21\u7aef\u9589\u533a\u9593 [0, n-1] \u3092\u521d\u671f\u5316\n    while i <= j:\n        m = i + (j - i) // 2  # \u4e2d\u70b9\u30a4\u30f3\u30c7\u30c3\u30af\u30b9 m \u3092\u8a08\u7b97\n        if nums[m] < target:\n            i = m + 1  # \u30bf\u30fc\u30b2\u30c3\u30c8\u306f\u533a\u9593 [m+1, j] \u306b\u3042\u308b\n        elif nums[m] > target:\n            j = m - 1  # \u30bf\u30fc\u30b2\u30c3\u30c8\u306f\u533a\u9593 [i, m-1] \u306b\u3042\u308b\n        else:\n            j = m - 1  # \u30bf\u30fc\u30b2\u30c3\u30c8\u672a\u6e80\u306e\u6700\u521d\u306e\u8981\u7d20\u306f\u533a\u9593 [i, m-1] \u306b\u3042\u308b\n    # \u633f\u5165\u4f4d\u7f6e i \u3092\u8fd4\u3059\n    return i\n
binary_search_insertion.cpp
/* \u633f\u5165\u30dd\u30a4\u30f3\u30c8\u306e\u4e8c\u5206\u63a2\u7d22\uff08\u91cd\u8907\u8981\u7d20\u3042\u308a\uff09 */\nint binarySearchInsertion(vector<int> &nums, int target) {\n    int i = 0, j = nums.size() - 1; // \u4e21\u7aef\u9589\u533a\u9593[0, n-1]\u3092\u521d\u671f\u5316\n    while (i <= j) {\n        int m = i + (j - i) / 2; // \u4e2d\u70b9\u30a4\u30f3\u30c7\u30c3\u30af\u30b9m\u3092\u8a08\u7b97\n        if (nums[m] < target) {\n            i = m + 1; // \u30bf\u30fc\u30b2\u30c3\u30c8\u306f\u533a\u9593[m+1, j]\u306b\u3042\u308b\n        } else if (nums[m] > target) {\n            j = m - 1; // \u30bf\u30fc\u30b2\u30c3\u30c8\u306f\u533a\u9593[i, m-1]\u306b\u3042\u308b\n        } else {\n            j = m - 1; // \u30bf\u30fc\u30b2\u30c3\u30c8\u672a\u6e80\u306e\u6700\u521d\u306e\u8981\u7d20\u306f\u533a\u9593[i, m-1]\u306b\u3042\u308b\n        }\n    }\n    // \u633f\u5165\u30dd\u30a4\u30f3\u30c8i\u3092\u8fd4\u3059\n    return i;\n}\n
binary_search_insertion.java
/* \u633f\u5165\u70b9\u306e\u4e8c\u5206\u63a2\u7d22\uff08\u91cd\u8907\u8981\u7d20\u3042\u308a\uff09 */\nint binarySearchInsertion(int[] nums, int target) {\n    int i = 0, j = nums.length - 1; // \u4e21\u7aef\u9589\u533a\u9593 [0, n-1] \u3092\u521d\u671f\u5316\n    while (i <= j) {\n        int m = i + (j - i) / 2; // \u4e2d\u70b9\u30a4\u30f3\u30c7\u30c3\u30af\u30b9 m \u3092\u8a08\u7b97\n        if (nums[m] < target) {\n            i = m + 1; // target \u306f\u533a\u9593 [m+1, j] \u306b\u3042\u308b\n        } else if (nums[m] > target) {\n            j = m - 1; // target \u306f\u533a\u9593 [i, m-1] \u306b\u3042\u308b\n        } else {\n            j = m - 1; // target \u3088\u308a\u5c0f\u3055\u3044\u6700\u521d\u306e\u8981\u7d20\u306f\u533a\u9593 [i, m-1] \u306b\u3042\u308b\n        }\n    }\n    // \u633f\u5165\u70b9 i \u3092\u8fd4\u3059\n    return i;\n}\n
binary_search_insertion.cs
[class]{binary_search_insertion}-[func]{BinarySearchInsertion}\n
binary_search_insertion.go
[class]{}-[func]{binarySearchInsertion}\n
binary_search_insertion.swift
[class]{}-[func]{binarySearchInsertion}\n
binary_search_insertion.js
[class]{}-[func]{binarySearchInsertion}\n
binary_search_insertion.ts
[class]{}-[func]{binarySearchInsertion}\n
binary_search_insertion.dart
[class]{}-[func]{binarySearchInsertion}\n
binary_search_insertion.rs
[class]{}-[func]{binary_search_insertion}\n
binary_search_insertion.c
[class]{}-[func]{binarySearchInsertion}\n
binary_search_insertion.kt
[class]{}-[func]{binarySearchInsertion}\n
binary_search_insertion.rb
[class]{}-[func]{binary_search_insertion}\n

Tip

\u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u306e\u30b3\u30fc\u30c9\u306f\u300c\u9589\u533a\u9593\u300d\u3092\u4f7f\u7528\u3057\u3066\u3044\u307e\u3059\u3002\u300c\u5de6\u9589\u53f3\u958b\u300d\u306b\u8208\u5473\u304c\u3042\u308b\u5834\u5408\u306f\u3001\u81ea\u5206\u3067\u30b3\u30fc\u30c9\u3092\u5b9f\u88c5\u3057\u3066\u307f\u3066\u304f\u3060\u3055\u3044\u3002

\u8981\u7d04\u3059\u308b\u3068\u3001\u4e8c\u5206\u63a2\u7d22\u306f\u672c\u8cea\u7684\u306b\u30dd\u30a4\u30f3\u30bf\\(i\\)\u3068\\(j\\)\u306e\u63a2\u7d22\u76ee\u6a19\u3092\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3067\u3059\u3002\u3053\u308c\u3089\u306e\u76ee\u6a19\u306f\u7279\u5b9a\u306e\u8981\u7d20\uff08target\u306a\u3069\uff09\u307e\u305f\u306f\u8981\u7d20\u306e\u7bc4\u56f2\uff08target\u3088\u308a\u5c0f\u3055\u3044\u3082\u306e\u306a\u3069\uff09\u3067\u3042\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002

\u4e8c\u5206\u63a2\u7d22\u306e\u9023\u7d9a\u30eb\u30fc\u30d7\u306b\u304a\u3044\u3066\u3001\u30dd\u30a4\u30f3\u30bf\\(i\\)\u3068\\(j\\)\u306f\u6bb5\u968e\u7684\u306b\u4e8b\u524d\u5b9a\u7fa9\u3055\u308c\u305f\u76ee\u6a19\u306b\u8fd1\u3065\u304d\u307e\u3059\u3002\u6700\u7d42\u7684\u306b\u3001\u305d\u308c\u3089\u306f\u7b54\u3048\u3092\u898b\u3064\u3051\u308b\u304b\u3001\u5883\u754c\u3092\u8d8a\u3048\u305f\u5f8c\u306b\u505c\u6b62\u3057\u307e\u3059\u3002

"},{"location":"chapter_searching/replace_linear_by_hashing/","title":"10.4 \u00a0 \u30cf\u30c3\u30b7\u30e5\u6700\u9069\u5316\u6226\u7565","text":"

\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u554f\u984c\u306b\u304a\u3044\u3066\u3001\u7dda\u5f62\u63a2\u7d22\u3092\u30cf\u30c3\u30b7\u30e5\u30d9\u30fc\u30b9\u306e\u63a2\u7d22\u306b\u7f6e\u304d\u63db\u3048\u308b\u3053\u3068\u3067\u3001\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u6642\u9593\u8a08\u7b97\u91cf\u3092\u524a\u6e1b\u3059\u308b\u3053\u3068\u304c\u3088\u304f\u3042\u308a\u307e\u3059\u3002\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u554f\u984c\u3092\u4f7f\u7528\u3057\u3066\u7406\u89e3\u3092\u6df1\u3081\u307e\u3057\u3087\u3046\u3002

Question

\u6574\u6570\u914d\u5217nums\u3068\u76ee\u6a19\u8981\u7d20target\u304c\u4e0e\u3048\u3089\u308c\u3001\u914d\u5217\u5185\u3067\u300c\u548c\u300d\u304ctarget\u306b\u7b49\u3057\u30442\u3064\u306e\u8981\u7d20\u3092\u63a2\u7d22\u3057\u3001\u305d\u308c\u3089\u306e\u914d\u5217\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u8fd4\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u4efb\u610f\u306e\u89e3\u304c\u53d7\u3051\u5165\u308c\u3089\u308c\u307e\u3059\u3002

"},{"location":"chapter_searching/replace_linear_by_hashing/#1041","title":"10.4.1 \u00a0 \u7dda\u5f62\u63a2\u7d22\uff1a\u6642\u9593\u3092\u7a7a\u9593\u3068\u4ea4\u63db","text":"

\u3059\u3079\u3066\u306e\u53ef\u80fd\u306a\u7d44\u307f\u5408\u308f\u305b\u3092\u76f4\u63a5\u6a2a\u65ad\u3059\u308b\u3053\u3068\u3092\u8003\u3048\u3066\u307f\u307e\u3059\u3002\u4e0b\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u30cd\u30b9\u30c8\u3057\u305f\u30eb\u30fc\u30d7\u3092\u958b\u59cb\u3057\u3001\u5404\u53cd\u5fa9\u30672\u3064\u306e\u6574\u6570\u306e\u548c\u304ctarget\u306b\u7b49\u3057\u3044\u304b\u3069\u3046\u304b\u3092\u5224\u65ad\u3057\u307e\u3059\u3002\u305d\u3046\u3067\u3042\u308c\u3070\u3001\u305d\u308c\u3089\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u8fd4\u3057\u307e\u3059\u3002

\u56f3 10-9 \u00a0 Linear search solution for two-sum problem

\u30b3\u30fc\u30c9\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby two_sum.py
def two_sum_brute_force(nums: list[int], target: int) -> list[int]:\n    \"\"\"\u65b9\u6cd5\u4e00\uff1a\u30d6\u30eb\u30fc\u30c8\u30d5\u30a9\u30fc\u30b9\u5217\u6319\"\"\"\n    # \u4e8c\u91cd\u30eb\u30fc\u30d7\u3001\u6642\u9593\u8a08\u7b97\u91cf\u306f O(n^2)\n    for i in range(len(nums) - 1):\n        for j in range(i + 1, len(nums)):\n            if nums[i] + nums[j] == target:\n                return [i, j]\n    return []\n
two_sum.cpp
/* \u65b9\u6cd5\u4e00\uff1a\u30d6\u30eb\u30fc\u30c8\u30d5\u30a9\u30fc\u30b9\u5217\u6319 */\nvector<int> twoSumBruteForce(vector<int> &nums, int target) {\n    int size = nums.size();\n    // \u4e8c\u91cd\u30eb\u30fc\u30d7\u3001\u6642\u9593\u8a08\u7b97\u91cf\u306fO(n^2)\n    for (int i = 0; i < size - 1; i++) {\n        for (int j = i + 1; j < size; j++) {\n            if (nums[i] + nums[j] == target)\n                return {i, j};\n        }\n    }\n    return {};\n}\n
two_sum.java
/* \u65b9\u6cd5\u4e00: \u66b4\u529b\u5217\u6319 */\nint[] twoSumBruteForce(int[] nums, int target) {\n    int size = nums.length;\n    // \u4e8c\u91cd\u30eb\u30fc\u30d7\u3001\u6642\u9593\u8a08\u7b97\u91cf\u306f O(n^2)\n    for (int i = 0; i < size - 1; i++) {\n        for (int j = i + 1; j < size; j++) {\n            if (nums[i] + nums[j] == target)\n                return new int[] { i, j };\n        }\n    }\n    return new int[0];\n}\n
two_sum.cs
[class]{two_sum}-[func]{TwoSumBruteForce}\n
two_sum.go
[class]{}-[func]{twoSumBruteForce}\n
two_sum.swift
[class]{}-[func]{twoSumBruteForce}\n
two_sum.js
[class]{}-[func]{twoSumBruteForce}\n
two_sum.ts
[class]{}-[func]{twoSumBruteForce}\n
two_sum.dart
[class]{}-[func]{twoSumBruteForce}\n
two_sum.rs
[class]{}-[func]{two_sum_brute_force}\n
two_sum.c
[class]{}-[func]{twoSumBruteForce}\n
two_sum.kt
[class]{}-[func]{twoSumBruteForce}\n
two_sum.rb
[class]{}-[func]{two_sum_brute_force}\n

\u3053\u306e\u65b9\u6cd5\u306e\u6642\u9593\u8a08\u7b97\u91cf\u306f\\(O(n^2)\\)\u3001\u7a7a\u9593\u8a08\u7b97\u91cf\u306f\\(O(1)\\)\u3067\u3001\u5927\u5bb9\u91cf\u30c7\u30fc\u30bf\u3067\u306f\u975e\u5e38\u306b\u6642\u9593\u304c\u304b\u304b\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002

"},{"location":"chapter_searching/replace_linear_by_hashing/#1042","title":"10.4.2 \u00a0 \u30cf\u30c3\u30b7\u30e5\u63a2\u7d22\uff1a\u7a7a\u9593\u3092\u6642\u9593\u3068\u4ea4\u63db","text":"

\u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb\u306e\u4f7f\u7528\u3092\u8003\u3048\u3066\u307f\u307e\u3057\u3087\u3046\u3002\u30ad\u30fc\u3068\u5024\u306e\u30da\u30a2\u306f\u305d\u308c\u305e\u308c\u914d\u5217\u8981\u7d20\u3068\u305d\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3067\u3059\u3002\u914d\u5217\u3092\u30eb\u30fc\u30d7\u3057\u3001\u5404\u53cd\u5fa9\u4e2d\u306b\u4e0b\u56f3\u306b\u793a\u3059\u30b9\u30c6\u30c3\u30d7\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002

  1. \u6570\u5024target - nums[i]\u304c\u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb\u306b\u3042\u308b\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002\u3042\u308b\u5834\u5408\u306f\u3001\u3053\u308c\u30892\u3064\u306e\u8981\u7d20\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u76f4\u63a5\u8fd4\u3057\u307e\u3059\u3002
  2. \u30ad\u30fc\u3068\u5024\u306e\u30da\u30a2nums[i]\u3068\u30a4\u30f3\u30c7\u30c3\u30af\u30b9i\u3092\u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb\u306b\u8ffd\u52a0\u3057\u307e\u3059\u3002
<1><2><3>

\u56f3 10-10 \u00a0 Help hash table solve two-sum

\u5b9f\u88c5\u30b3\u30fc\u30c9\u306f\u4ee5\u4e0b\u306b\u793a\u3055\u308c\u3001\u5358\u4e00\u306e\u30eb\u30fc\u30d7\u306e\u307f\u304c\u5fc5\u8981\u3067\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby two_sum.py
def two_sum_hash_table(nums: list[int], target: int) -> list[int]:\n    \"\"\"\u65b9\u6cd5\u4e8c\uff1a\u88dc\u52a9\u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb\"\"\"\n    # \u88dc\u52a9\u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb\u3001\u7a7a\u9593\u8a08\u7b97\u91cf\u306f O(n)\n    dic = {}\n    # \u5358\u4e00\u30eb\u30fc\u30d7\u3001\u6642\u9593\u8a08\u7b97\u91cf\u306f O(n)\n    for i in range(len(nums)):\n        if target - nums[i] in dic:\n            return [dic[target - nums[i]], i]\n        dic[nums[i]] = i\n    return []\n
two_sum.cpp
/* \u65b9\u6cd5\u4e8c\uff1a\u88dc\u52a9\u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb */\nvector<int> twoSumHashTable(vector<int> &nums, int target) {\n    int size = nums.size();\n    // \u88dc\u52a9\u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb\u3001\u7a7a\u9593\u8a08\u7b97\u91cf\u306fO(n)\n    unordered_map<int, int> dic;\n    // \u5358\u5c64\u30eb\u30fc\u30d7\u3001\u6642\u9593\u8a08\u7b97\u91cf\u306fO(n)\n    for (int i = 0; i < size; i++) {\n        if (dic.find(target - nums[i]) != dic.end()) {\n            return {dic[target - nums[i]], i};\n        }\n        dic.emplace(nums[i], i);\n    }\n    return {};\n}\n
two_sum.java
/* \u65b9\u6cd5\u4e8c: \u88dc\u52a9\u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb */\nint[] twoSumHashTable(int[] nums, int target) {\n    int size = nums.length;\n    // \u88dc\u52a9\u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb\u3001\u7a7a\u9593\u8a08\u7b97\u91cf\u306f O(n)\n    Map<Integer, Integer> dic = new HashMap<>();\n    // \u5358\u4e00\u5c64\u30eb\u30fc\u30d7\u3001\u6642\u9593\u8a08\u7b97\u91cf\u306f O(n)\n    for (int i = 0; i < size; i++) {\n        if (dic.containsKey(target - nums[i])) {\n            return new int[] { dic.get(target - nums[i]), i };\n        }\n        dic.put(nums[i], i);\n    }\n    return new int[0];\n}\n
two_sum.cs
[class]{two_sum}-[func]{TwoSumHashTable}\n
two_sum.go
[class]{}-[func]{twoSumHashTable}\n
two_sum.swift
[class]{}-[func]{twoSumHashTable}\n
two_sum.js
[class]{}-[func]{twoSumHashTable}\n
two_sum.ts
[class]{}-[func]{twoSumHashTable}\n
two_sum.dart
[class]{}-[func]{twoSumHashTable}\n
two_sum.rs
[class]{}-[func]{two_sum_hash_table}\n
two_sum.c
[class]{HashTable}-[func]{}\n\n[class]{}-[func]{twoSumHashTable}\n
two_sum.kt
[class]{}-[func]{twoSumHashTable}\n
two_sum.rb
[class]{}-[func]{two_sum_hash_table}\n

\u3053\u306e\u65b9\u6cd5\u306f\u3001\u30cf\u30c3\u30b7\u30e5\u63a2\u7d22\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u6642\u9593\u8a08\u7b97\u91cf\u3092\\(O(n^2)\\)\u304b\u3089\\(O(n)\\)\u306b\u524a\u6e1b\u3057\u3001\u5b9f\u884c\u6642\u52b9\u7387\u3092\u5927\u5e45\u306b\u5411\u4e0a\u3055\u305b\u307e\u3059\u3002

\u8ffd\u52a0\u306e\u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb\u3092\u7dad\u6301\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u305f\u3081\u3001\u7a7a\u9593\u8a08\u7b97\u91cf\u306f\\(O(n)\\)\u3067\u3059\u3002\u305d\u308c\u306b\u3082\u304b\u304b\u308f\u3089\u305a\u3001\u3053\u306e\u65b9\u6cd5\u306f\u5168\u4f53\u7684\u306b\u3088\u308a\u5747\u8861\u306e\u3068\u308c\u305f\u6642\u7a7a\u9593\u52b9\u7387\u3092\u6301\u3061\u3001\u3053\u306e\u554f\u984c\u306e\u6700\u9069\u89e3\u3068\u306a\u308a\u307e\u3059\u3002

"},{"location":"chapter_searching/searching_algorithm_revisited/","title":"10.5 \u00a0 \u63a2\u7d22\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u518d\u691c\u8a0e","text":"

\u63a2\u7d22\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\uff08\u691c\u7d22\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\uff09\u306f\u3001\u914d\u5217\u3001\u9023\u7d50\u30ea\u30b9\u30c8\u3001\u6728\u3001\u30b0\u30e9\u30d5\u306a\u3069\u306e\u30c7\u30fc\u30bf\u69cb\u9020\u5185\u3067\u7279\u5b9a\u306e\u57fa\u6e96\u3092\u6e80\u305f\u30591\u3064\u4ee5\u4e0a\u306e\u8981\u7d20\u3092\u53d6\u5f97\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002

\u63a2\u7d22\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306f\u3001\u305d\u306e\u30a2\u30d7\u30ed\u30fc\u30c1\u306b\u57fa\u3065\u3044\u3066\u4ee5\u4e0b\u306e2\u3064\u306e\u30ab\u30c6\u30b4\u30ea\u306b\u5206\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

\u3053\u308c\u3089\u306e\u30c8\u30d4\u30c3\u30af\u306f\u524d\u306e\u7ae0\u3067\u7d39\u4ecb\u3055\u308c\u305f\u305f\u3081\u3001\u79c1\u305f\u3061\u306b\u306f\u99b4\u67d3\u307f\u306e\u306a\u3044\u3082\u306e\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3088\u308a\u4f53\u7cfb\u7684\u306a\u89b3\u70b9\u304b\u3089\u63a2\u7d22\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3092\u518d\u691c\u8a0e\u3057\u307e\u3059\u3002

"},{"location":"chapter_searching/searching_algorithm_revisited/#1051","title":"10.5.1 \u00a0 \u7dcf\u5f53\u305f\u308a\u63a2\u7d22","text":"

\u7dcf\u5f53\u305f\u308a\u63a2\u7d22\u306f\u3001\u30c7\u30fc\u30bf\u69cb\u9020\u306e\u3059\u3079\u3066\u306e\u8981\u7d20\u3092\u6a2a\u65ad\u3059\u308b\u3053\u3068\u3067\u76ee\u6a19\u8981\u7d20\u3092\u7279\u5b9a\u3057\u307e\u3059\u3002

\u7dcf\u5f53\u305f\u308a\u63a2\u7d22\u306e\u5229\u70b9\u306f\u3001\u305d\u306e\u5358\u7d14\u3055\u3068\u6c4e\u7528\u6027\u3067\u3042\u308a\u3001**\u30c7\u30fc\u30bf\u306e\u524d\u51e6\u7406\u3084\u8ffd\u52a0\u306e\u30c7\u30fc\u30bf\u69cb\u9020\u306e\u52a9\u3051\u304c\u4e0d\u8981**\u3067\u3059\u3002

\u305f\u3060\u3057\u3001**\u3053\u306e\u30bf\u30a4\u30d7\u306e\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u6642\u9593\u8a08\u7b97\u91cf\u306f\\(O(n)\\)**\u3067\u3001\\(n\\)\u306f\u8981\u7d20\u6570\u3067\u3042\u308b\u305f\u3081\u3001\u5927\u898f\u6a21\u306a\u30c7\u30fc\u30bf\u30bb\u30c3\u30c8\u3067\u306f\u6027\u80fd\u304c\u60aa\u304f\u306a\u308a\u307e\u3059\u3002

"},{"location":"chapter_searching/searching_algorithm_revisited/#1052","title":"10.5.2 \u00a0 \u9069\u5fdc\u7684\u63a2\u7d22","text":"

\u9069\u5fdc\u7684\u63a2\u7d22\u306f\u3001\u30c7\u30fc\u30bf\u306e\u56fa\u6709\u306e\u6027\u8cea\uff08\u9806\u5e8f\u306a\u3069\uff09\u3092\u4f7f\u7528\u3057\u3066\u63a2\u7d22\u30d7\u30ed\u30bb\u30b9\u3092\u6700\u9069\u5316\u3057\u3001\u305d\u308c\u306b\u3088\u308a\u76ee\u6a19\u8981\u7d20\u3092\u3088\u308a\u52b9\u7387\u7684\u306b\u7279\u5b9a\u3057\u307e\u3059\u3002

\u3053\u308c\u3089\u306e\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u5229\u70b9\u306f\u9ad8\u52b9\u7387\u3067\u3042\u308a\u3001\u6642\u9593\u8a08\u7b97\u91cf\u304c\\(O(\\log n)\\)\u307e\u305f\u306f\\(O(1)\\)\u306b\u307e\u3067\u9054\u3057\u307e\u3059\u3002

\u305f\u3060\u3057\u3001\u3053\u308c\u3089\u306e\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3092\u4f7f\u7528\u3059\u308b\u306b\u306f\u3001\u591a\u304f\u306e\u5834\u5408\u30c7\u30fc\u30bf\u306e\u524d\u51e6\u7406\u304c\u5fc5\u8981\u3067\u3059\u3002\u4f8b\u3048\u3070\u3001\u4e8c\u5206\u63a2\u7d22\u3067\u306f\u4e8b\u524d\u306b\u914d\u5217\u3092\u30bd\u30fc\u30c8\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u3001\u30cf\u30c3\u30b7\u30e5\u63a2\u7d22\u3068\u6728\u63a2\u7d22\u306e\u4e21\u65b9\u3067\u8ffd\u52a0\u306e\u30c7\u30fc\u30bf\u69cb\u9020\u306e\u52a9\u3051\u304c\u5fc5\u8981\u3067\u3059\u3002\u3053\u308c\u3089\u306e\u69cb\u9020\u3092\u7dad\u6301\u3059\u308b\u3053\u3068\u3082\u3001\u6642\u9593\u3068\u7a7a\u9593\u306e\u9762\u3067\u3088\u308a\u591a\u304f\u306e\u30aa\u30fc\u30d0\u30fc\u30d8\u30c3\u30c9\u304c\u5fc5\u8981\u3067\u3059\u3002

Tip

\u9069\u5fdc\u7684\u63a2\u7d22\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306f\u3001\u591a\u304f\u306e\u5834\u5408\u63a2\u7d22\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3068\u547c\u3070\u308c\u3001\u4e3b\u306b\u7279\u5b9a\u306e\u30c7\u30fc\u30bf\u69cb\u9020\u5185\u3067\u76ee\u6a19\u8981\u7d20\u3092\u8fc5\u901f\u306b\u53d6\u5f97\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002

"},{"location":"chapter_searching/searching_algorithm_revisited/#1053","title":"10.5.3 \u00a0 \u63a2\u7d22\u65b9\u6cd5\u306e\u9078\u629e","text":"

\u30b5\u30a4\u30ba\\(n\\)\u306e\u30c7\u30fc\u30bf\u30bb\u30c3\u30c8\u304c\u4e0e\u3048\u3089\u308c\u305f\u5834\u5408\u3001\u7dda\u5f62\u63a2\u7d22\u3001\u4e8c\u5206\u63a2\u7d22\u3001\u6728\u63a2\u7d22\u3001\u30cf\u30c3\u30b7\u30e5\u63a2\u7d22\u3001\u307e\u305f\u306f\u305d\u306e\u4ed6\u306e\u65b9\u6cd5\u3092\u4f7f\u7528\u3057\u3066\u76ee\u6a19\u8981\u7d20\u3092\u53d6\u5f97\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u65b9\u6cd5\u306e\u52d5\u4f5c\u539f\u7406\u3092\u4e0b\u56f3\u306b\u793a\u3057\u307e\u3059\u3002

\u56f3 10-11 \u00a0 Various search strategies

\u524d\u8ff0\u306e\u65b9\u6cd5\u306e\u7279\u6027\u3068\u64cd\u4f5c\u52b9\u7387\u3092\u4ee5\u4e0b\u306e\u8868\u306b\u793a\u3057\u307e\u3059\u3002

\u8868 10-1 \u00a0 \u63a2\u7d22\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u52b9\u7387\u306e\u6bd4\u8f03

\u7dda\u5f62\u63a2\u7d22 \u4e8c\u5206\u63a2\u7d22 \u6728\u63a2\u7d22 \u30cf\u30c3\u30b7\u30e5\u63a2\u7d22 \u8981\u7d20\u63a2\u7d22 \\(O(n)\\) \\(O(\\log n)\\) \\(O(\\log n)\\) \\(O(1)\\) \u8981\u7d20\u633f\u5165 \\(O(1)\\) \\(O(n)\\) \\(O(\\log n)\\) \\(O(1)\\) \u8981\u7d20\u524a\u9664 \\(O(n)\\) \\(O(n)\\) \\(O(\\log n)\\) \\(O(1)\\) \u8ffd\u52a0\u7a7a\u9593 \\(O(1)\\) \\(O(1)\\) \\(O(n)\\) \\(O(n)\\) \u30c7\u30fc\u30bf\u524d\u51e6\u7406 / \u30bd\u30fc\u30c8 \\(O(n \\log n)\\) \u6728\u69cb\u7bc9 \\(O(n \\log n)\\) \u30cf\u30c3\u30b7\u30e5\u30c6\u30fc\u30d6\u30eb\u69cb\u7bc9 \\(O(n)\\) \u30c7\u30fc\u30bf\u9806\u5e8f\u6027 \u7121\u9806\u5e8f \u9806\u5e8f \u9806\u5e8f \u7121\u9806\u5e8f

\u63a2\u7d22\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u9078\u629e\u306f\u3001\u30c7\u30fc\u30bf\u91cf\u3001\u63a2\u7d22\u6027\u80fd\u8981\u4ef6\u3001\u30c7\u30fc\u30bf\u30af\u30a8\u30ea\u3068\u66f4\u65b0\u306e\u983b\u5ea6\u306a\u3069\u306b\u3082\u4f9d\u5b58\u3057\u307e\u3059\u3002

\u7dda\u5f62\u63a2\u7d22

\u4e8c\u5206\u63a2\u7d22

\u30cf\u30c3\u30b7\u30e5\u63a2\u7d22

\u6728\u63a2\u7d22

"},{"location":"chapter_searching/summary/","title":"10.6 \u00a0 \u307e\u3068\u3081","text":""},{"location":"chapter_sorting/","title":"\u7b2c 11 \u7ae0 \u00a0 \u30bd\u30fc\u30c8","text":"

Abstract

\u30bd\u30fc\u30c8\u306f\u6df7\u6c8c\u3092\u79e9\u5e8f\u306b\u5909\u3048\u308b\u9b54\u6cd5\u306e\u9375\u306e\u3088\u3046\u306a\u3082\u306e\u3067\u3001\u30c7\u30fc\u30bf\u3092\u3088\u308a\u52b9\u7387\u7684\u306b\u7406\u89e3\u3057\u51e6\u7406\u3059\u308b\u3053\u3068\u3092\u53ef\u80fd\u306b\u3057\u307e\u3059\u3002

\u5358\u7d14\u306a\u6607\u9806\u3067\u3042\u308d\u3046\u3068\u8907\u96d1\u306a\u30ab\u30c6\u30b4\u30ea\u914d\u5217\u3067\u3042\u308d\u3046\u3068\u3001\u30bd\u30fc\u30c8\u306f\u30c7\u30fc\u30bf\u306e\u8abf\u548c\u7f8e\u3092\u660e\u3089\u304b\u306b\u3057\u307e\u3059\u3002

"},{"location":"chapter_sorting/#_1","title":"\u7ae0\u306e\u5185\u5bb9","text":""},{"location":"chapter_sorting/bubble_sort/","title":"11.3 \u00a0 \u30d0\u30d6\u30eb\u30bd\u30fc\u30c8","text":"

\u30d0\u30d6\u30eb\u30bd\u30fc\u30c8\u306f\u3001\u96a3\u63a5\u3059\u308b\u8981\u7d20\u3092\u7d99\u7d9a\u7684\u306b\u6bd4\u8f03\u3057\u4ea4\u63db\u3059\u308b\u3053\u3068\u3067\u52d5\u4f5c\u3057\u307e\u3059\u3002\u3053\u306e\u30d7\u30ed\u30bb\u30b9\u306f\u6ce1\u304c\u5e95\u304b\u3089\u4e0a\u306b\u4e0a\u6607\u3059\u308b\u3088\u3046\u306a\u3082\u306e\u306a\u306e\u3067\u3001\u300c\u30d0\u30d6\u30eb\u30bd\u30fc\u30c8\u300d\u3068\u540d\u4ed8\u3051\u3089\u308c\u307e\u3057\u305f\u3002

\u4e0b\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u30d0\u30d6\u30ea\u30f3\u30b0\u30d7\u30ed\u30bb\u30b9\u306f\u8981\u7d20\u4ea4\u63db\u3092\u4f7f\u7528\u3057\u3066\u30b7\u30df\u30e5\u30ec\u30fc\u30c8\u3067\u304d\u307e\u3059\uff1a\u914d\u5217\u306e\u5de6\u7aef\u304b\u3089\u958b\u59cb\u3057\u3066\u53f3\u306b\u79fb\u52d5\u3057\u3001\u96a3\u63a5\u3059\u308b\u8981\u7d20\u306e\u5404\u30da\u30a2\u3092\u6bd4\u8f03\u3057\u307e\u3059\u3002\u5de6\u306e\u8981\u7d20\u304c\u53f3\u306e\u8981\u7d20\u3088\u308a\u5927\u304d\u3044\u5834\u5408\u306f\u3001\u305d\u308c\u3089\u3092\u4ea4\u63db\u3057\u307e\u3059\u3002\u6a2a\u65ad\u5f8c\u3001\u6700\u5927\u8981\u7d20\u306f\u914d\u5217\u306e\u53f3\u7aef\u306b\u30d0\u30d6\u30eb\u30a2\u30c3\u30d7\u3057\u307e\u3059\u3002

<1><2><3><4><5><6><7>

\u56f3 11-4 \u00a0 Simulating bubble process using element swap

"},{"location":"chapter_sorting/bubble_sort/#1131","title":"11.3.1 \u00a0 \u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u30d7\u30ed\u30bb\u30b9","text":"

\u914d\u5217\u306e\u9577\u3055\u3092\\(n\\)\u3068\u3057\u307e\u3059\u3002\u30d0\u30d6\u30eb\u30bd\u30fc\u30c8\u306e\u30b9\u30c6\u30c3\u30d7\u306f\u4e0b\u56f3\u306b\u793a\u3055\u308c\u307e\u3059\uff1a

  1. \u307e\u305a\u3001\\(n\\)\u500b\u306e\u8981\u7d20\u306b\u5bfe\u3057\u30661\u56de\u306e\u300c\u30d0\u30d6\u30eb\u300d\u30d1\u30b9\u3092\u5b9f\u884c\u3057\u3001\u6700\u5927\u8981\u7d20\u3092\u6b63\u3057\u3044\u4f4d\u7f6e\u306b\u4ea4\u63db\u3057\u307e\u3059\u3002
  2. \u6b21\u306b\u3001\u6b8b\u308a\u306e\\(n - 1\\)\u500b\u306e\u8981\u7d20\u306b\u5bfe\u3057\u3066\u300c\u30d0\u30d6\u30eb\u300d\u30d1\u30b9\u3092\u5b9f\u884c\u3057\u30012\u756a\u76ee\u306b\u5927\u304d\u3044\u8981\u7d20\u3092\u6b63\u3057\u3044\u4f4d\u7f6e\u306b\u4ea4\u63db\u3057\u307e\u3059\u3002
  3. \u3053\u306e\u65b9\u6cd5\u3067\u7d9a\u884c\u3057\u307e\u3059\uff1b\\(n - 1\\)\u56de\u306e\u30d1\u30b9\u306e\u5f8c\u3001\u6700\u5927\\(n - 1\\)\u500b\u306e\u8981\u7d20\u304c\u6b63\u3057\u3044\u4f4d\u7f6e\u306b\u79fb\u52d5\u3055\u308c\u307e\u3059\u3002
  4. \u6b8b\u308a\u306e\u552f\u4e00\u306e\u8981\u7d20\u306f**\u5fc5\u305a**\u6700\u5c0f\u3067\u3042\u308b\u305f\u3081\u3001**\u3055\u3089\u306a\u308b**\u30bd\u30fc\u30c8\u306f\u5fc5\u8981\u3042\u308a\u307e\u305b\u3093\u3002\u3053\u306e\u6642\u70b9\u3067\u3001\u914d\u5217\u306f\u30bd\u30fc\u30c8\u3055\u308c\u307e\u3059\u3002

\u56f3 11-5 \u00a0 Bubble sort process

\u30b3\u30fc\u30c9\u4f8b\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby bubble_sort.py
def bubble_sort(nums: list[int]):\n    \"\"\"\u30d0\u30d6\u30eb\u30bd\u30fc\u30c8\"\"\"\n    n = len(nums)\n    # \u5916\u5074\u306e\u30eb\u30fc\u30d7\uff1a\u672a\u30bd\u30fc\u30c8\u7bc4\u56f2\u306f [0, i]\n    for i in range(n - 1, 0, -1):\n        # \u5185\u5074\u306e\u30eb\u30fc\u30d7\uff1a\u672a\u30bd\u30fc\u30c8\u7bc4\u56f2 [0, i] \u306e\u6700\u5927\u8981\u7d20\u3092\u7bc4\u56f2\u306e\u53f3\u7aef\u306b\u79fb\u52d5\n        for j in range(i):\n            if nums[j] > nums[j + 1]:\n                # nums[j] \u3068 nums[j + 1] \u3092\u4ea4\u63db\n                nums[j], nums[j + 1] = nums[j + 1], nums[j]\n
bubble_sort.cpp
/* \u30d0\u30d6\u30eb\u30bd\u30fc\u30c8 */\nvoid bubbleSort(vector<int> &nums) {\n    // \u5916\u5074\u30eb\u30fc\u30d7\uff1a\u672a\u30bd\u30fc\u30c8\u7bc4\u56f2\u306f[0, i]\n    for (int i = nums.size() - 1; i > 0; i--) {\n        // \u5185\u5074\u30eb\u30fc\u30d7\uff1a\u672a\u30bd\u30fc\u30c8\u7bc4\u56f2[0, i]\u5185\u306e\u6700\u5927\u8981\u7d20\u3092\u7bc4\u56f2\u306e\u53f3\u7aef\u306b\u4ea4\u63db\n        for (int j = 0; j < i; j++) {\n            if (nums[j] > nums[j + 1]) {\n                // nums[j]\u3068nums[j + 1]\u3092\u4ea4\u63db\n                // \u3053\u3053\u3067\u306fstd\u306eswap\u3092\u4f7f\u7528\n                swap(nums[j], nums[j + 1]);\n            }\n        }\n    }\n}\n
bubble_sort.java
/* \u30d0\u30d6\u30eb\u30bd\u30fc\u30c8 */\nvoid bubbleSort(int[] nums) {\n    // \u5916\u5074\u30eb\u30fc\u30d7: \u672a\u30bd\u30fc\u30c8\u7bc4\u56f2\u306f [0, i]\n    for (int i = nums.length - 1; i > 0; i--) {\n        // \u5185\u5074\u30eb\u30fc\u30d7: \u672a\u30bd\u30fc\u30c8\u7bc4\u56f2 [0, i] \u306e\u6700\u5927\u8981\u7d20\u3092\u7bc4\u56f2\u306e\u53f3\u7aef\u306b\u4ea4\u63db\n        for (int j = 0; j < i; j++) {\n            if (nums[j] > nums[j + 1]) {\n                // nums[j] \u3068 nums[j + 1] \u3092\u4ea4\u63db\n                int tmp = nums[j];\n                nums[j] = nums[j + 1];\n                nums[j + 1] = tmp;\n            }\n        }\n    }\n}\n
bubble_sort.cs
[class]{bubble_sort}-[func]{BubbleSort}\n
bubble_sort.go
[class]{}-[func]{bubbleSort}\n
bubble_sort.swift
[class]{}-[func]{bubbleSort}\n
bubble_sort.js
[class]{}-[func]{bubbleSort}\n
bubble_sort.ts
[class]{}-[func]{bubbleSort}\n
bubble_sort.dart
[class]{}-[func]{bubbleSort}\n
bubble_sort.rs
[class]{}-[func]{bubble_sort}\n
bubble_sort.c
[class]{}-[func]{bubbleSort}\n
bubble_sort.kt
[class]{}-[func]{bubbleSort}\n
bubble_sort.rb
[class]{}-[func]{bubble_sort}\n
"},{"location":"chapter_sorting/bubble_sort/#1132","title":"11.3.2 \u00a0 \u52b9\u7387\u306e\u6700\u9069\u5316","text":"

\u300c\u30d0\u30d6\u30ea\u30f3\u30b0\u300d\u306e\u30e9\u30a6\u30f3\u30c9\u4e2d\u306b\u4ea4\u63db\u304c\u767a\u751f\u3057\u306a\u3044\u5834\u5408\u3001\u914d\u5217\u306f\u3059\u3067\u306b\u30bd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308b\u305f\u3081\u3001\u3059\u3050\u306b\u623b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u3092\u691c\u51fa\u3059\u308b\u305f\u3081\u306b\u3001flag\u5909\u6570\u3092\u8ffd\u52a0\u3067\u304d\u307e\u3059\uff1b\u30d1\u30b9\u3067\u4ea4\u63db\u304c\u884c\u308f\u308c\u306a\u3044\u5834\u5408\u306f\u3001\u30d5\u30e9\u30b0\u3092\u8a2d\u5b9a\u3057\u3066\u65e9\u671f\u306b\u623b\u308a\u307e\u3059\u3002

\u3053\u306e\u6700\u9069\u5316\u304c\u3042\u3063\u3066\u3082\u3001\u30d0\u30d6\u30eb\u30bd\u30fc\u30c8\u306e\u6700\u60aa\u6642\u9593\u8a08\u7b97\u91cf\u3068\u5e73\u5747\u6642\u9593\u8a08\u7b97\u91cf\u306f\\(O(n^2)\\)\u306e\u307e\u307e\u3067\u3059\u3002\u305f\u3060\u3057\u3001\u5165\u529b\u914d\u5217\u304c\u3059\u3067\u306b\u30bd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308b\u5834\u5408\u3001\u6700\u826f\u30b1\u30fc\u30b9\u6642\u9593\u8a08\u7b97\u91cf\u306f\\(O(n)\\)\u307e\u3067\u4f4e\u304f\u306a\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby bubble_sort.py
def bubble_sort_with_flag(nums: list[int]):\n    \"\"\"\u30d0\u30d6\u30eb\u30bd\u30fc\u30c8\uff08\u30d5\u30e9\u30b0\u306b\u3088\u308b\u6700\u9069\u5316\uff09\"\"\"\n    n = len(nums)\n    # \u5916\u5074\u306e\u30eb\u30fc\u30d7\uff1a\u672a\u30bd\u30fc\u30c8\u7bc4\u56f2\u306f [0, i]\n    for i in range(n - 1, 0, -1):\n        flag = False  # \u30d5\u30e9\u30b0\u3092\u521d\u671f\u5316\n        # \u5185\u5074\u306e\u30eb\u30fc\u30d7\uff1a\u672a\u30bd\u30fc\u30c8\u7bc4\u56f2 [0, i] \u306e\u6700\u5927\u8981\u7d20\u3092\u7bc4\u56f2\u306e\u53f3\u7aef\u306b\u79fb\u52d5\n        for j in range(i):\n            if nums[j] > nums[j + 1]:\n                # nums[j] \u3068 nums[j + 1] \u3092\u4ea4\u63db\n                nums[j], nums[j + 1] = nums[j + 1], nums[j]\n                flag = True  # \u8981\u7d20\u3092\u4ea4\u63db\u3057\u305f\u3053\u3068\u3092\u8a18\u9332\n        if not flag:\n            break  # \u3053\u306e\u56de\u306e\u300c\u30d0\u30d6\u30ea\u30f3\u30b0\u300d\u3067\u8981\u7d20\u304c\u4ea4\u63db\u3055\u308c\u306a\u304b\u3063\u305f\u5834\u5408\u3001\u7d42\u4e86\n
bubble_sort.cpp
/* \u30d0\u30d6\u30eb\u30bd\u30fc\u30c8\uff08\u30d5\u30e9\u30b0\u6700\u9069\u5316\u7248\uff09*/\nvoid bubbleSortWithFlag(vector<int> &nums) {\n    // \u5916\u5074\u30eb\u30fc\u30d7\uff1a\u672a\u30bd\u30fc\u30c8\u7bc4\u56f2\u306f[0, i]\n    for (int i = nums.size() - 1; i > 0; i--) {\n        bool flag = false; // \u30d5\u30e9\u30b0\u3092\u521d\u671f\u5316\n        // \u5185\u5074\u30eb\u30fc\u30d7\uff1a\u672a\u30bd\u30fc\u30c8\u7bc4\u56f2[0, i]\u5185\u306e\u6700\u5927\u8981\u7d20\u3092\u7bc4\u56f2\u306e\u53f3\u7aef\u306b\u4ea4\u63db\n        for (int j = 0; j < i; j++) {\n            if (nums[j] > nums[j + 1]) {\n                // nums[j]\u3068nums[j + 1]\u3092\u4ea4\u63db\n                // \u3053\u3053\u3067\u306fstd\u306eswap\u3092\u4f7f\u7528\n                swap(nums[j], nums[j + 1]);\n                flag = true; // \u4ea4\u63db\u3055\u308c\u305f\u8981\u7d20\u3092\u8a18\u9332\n            }\n        }\n        if (!flag)\n            break; // \u3053\u306e\u56de\u306e\u300c\u30d0\u30d6\u30ea\u30f3\u30b0\u300d\u3067\u8981\u7d20\u304c\u4ea4\u63db\u3055\u308c\u306a\u304b\u3063\u305f\u5834\u5408\u3001\u7d42\u4e86\n    }\n}\n
bubble_sort.java
/* \u30d0\u30d6\u30eb\u30bd\u30fc\u30c8\uff08\u30d5\u30e9\u30b0\u306b\u3088\u308b\u6700\u9069\u5316\uff09 */\nvoid bubbleSortWithFlag(int[] nums) {\n    // \u5916\u5074\u30eb\u30fc\u30d7: \u672a\u30bd\u30fc\u30c8\u7bc4\u56f2\u306f [0, i]\n    for (int i = nums.length - 1; i > 0; i--) {\n        boolean flag = false; // \u30d5\u30e9\u30b0\u3092\u521d\u671f\u5316\n        // \u5185\u5074\u30eb\u30fc\u30d7: \u672a\u30bd\u30fc\u30c8\u7bc4\u56f2 [0, i] \u306e\u6700\u5927\u8981\u7d20\u3092\u7bc4\u56f2\u306e\u53f3\u7aef\u306b\u4ea4\u63db\n        for (int j = 0; j < i; j++) {\n            if (nums[j] > nums[j + 1]) {\n                // nums[j] \u3068 nums[j + 1] \u3092\u4ea4\u63db\n                int tmp = nums[j];\n                nums[j] = nums[j + 1];\n                nums[j + 1] = tmp;\n                flag = true; // \u4ea4\u63db\u3055\u308c\u305f\u8981\u7d20\u3092\u8a18\u9332\n            }\n        }\n        if (!flag)\n            break; // \u3053\u306e\u300c\u30d0\u30d6\u30ea\u30f3\u30b0\u300d\u30e9\u30a6\u30f3\u30c9\u3067\u8981\u7d20\u304c\u4ea4\u63db\u3055\u308c\u306a\u304b\u3063\u305f\u5834\u5408\u3001\u7d42\u4e86\n    }\n}\n
bubble_sort.cs
[class]{bubble_sort}-[func]{BubbleSortWithFlag}\n
bubble_sort.go
[class]{}-[func]{bubbleSortWithFlag}\n
bubble_sort.swift
[class]{}-[func]{bubbleSortWithFlag}\n
bubble_sort.js
[class]{}-[func]{bubbleSortWithFlag}\n
bubble_sort.ts
[class]{}-[func]{bubbleSortWithFlag}\n
bubble_sort.dart
[class]{}-[func]{bubbleSortWithFlag}\n
bubble_sort.rs
[class]{}-[func]{bubble_sort_with_flag}\n
bubble_sort.c
[class]{}-[func]{bubbleSortWithFlag}\n
bubble_sort.kt
[class]{}-[func]{bubbleSortWithFlag}\n
bubble_sort.rb
[class]{}-[func]{bubble_sort_with_flag}\n
"},{"location":"chapter_sorting/bubble_sort/#1133","title":"11.3.3 \u00a0 \u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u7279\u6027","text":""},{"location":"chapter_sorting/bucket_sort/","title":"11.8 \u00a0 \u30d0\u30b1\u30c3\u30c8\u30bd\u30fc\u30c8","text":"

\u524d\u8ff0\u306e\u30bd\u30fc\u30c8\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306f\u3059\u3079\u3066\u300c\u6bd4\u8f03\u30d9\u30fc\u30b9\u306e\u30bd\u30fc\u30c8\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u300d\u3067\u3001\u5024\u3092\u6bd4\u8f03\u3059\u308b\u3053\u3068\u3067\u8981\u7d20\u3092\u30bd\u30fc\u30c8\u3057\u307e\u3059\u3002\u3053\u306e\u3088\u3046\u306a\u30bd\u30fc\u30c8\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306f \\(O(n \\log n)\\) \u3088\u308a\u826f\u3044\u6642\u9593\u8a08\u7b97\u91cf\u3092\u6301\u3064\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002\u6b21\u306b\u3001\u7dda\u5f62\u6642\u9593\u8a08\u7b97\u91cf\u3092\u9054\u6210\u3067\u304d\u308b\u3044\u304f\u3064\u304b\u306e\u300c\u975e\u6bd4\u8f03\u30bd\u30fc\u30c8\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u300d\u306b\u3064\u3044\u3066\u8b70\u8ad6\u3057\u307e\u3059\u3002

\u30d0\u30b1\u30c3\u30c8\u30bd\u30fc\u30c8\u306f\u5206\u5272\u7d71\u6cbb\u6226\u7565\u306e\u5178\u578b\u7684\u306a\u5fdc\u7528\u3067\u3059\u3002\u4e00\u9023\u306e\u9806\u5e8f\u4ed8\u3051\u3089\u308c\u305f\u30d0\u30b1\u30c3\u30c8\u3092\u8a2d\u5b9a\u3057\u3001\u5404\u30d0\u30b1\u30c3\u30c8\u304c\u30c7\u30fc\u30bf\u306e\u7bc4\u56f2\u3092\u542b\u307f\u3001\u5165\u529b\u30c7\u30fc\u30bf\u3092\u3053\u308c\u3089\u306e\u30d0\u30b1\u30c3\u30c8\u306b\u5747\u7b49\u306b\u5206\u6563\u3055\u305b\u308b\u3053\u3068\u3067\u52d5\u4f5c\u3057\u307e\u3059\u3002\u305d\u3057\u3066\u3001\u5404\u30d0\u30b1\u30c3\u30c8\u5185\u306e\u30c7\u30fc\u30bf\u3092\u500b\u5225\u306b\u30bd\u30fc\u30c8\u3057\u307e\u3059\u3002\u6700\u5f8c\u306b\u3001\u3059\u3079\u3066\u306e\u30d0\u30b1\u30c3\u30c8\u304b\u3089\u306e\u30bd\u30fc\u30c8\u6e08\u307f\u30c7\u30fc\u30bf\u3092\u9806\u6b21\u30de\u30fc\u30b8\u3057\u3066\u6700\u7d42\u7d50\u679c\u3092\u751f\u6210\u3057\u307e\u3059\u3002

"},{"location":"chapter_sorting/bucket_sort/#1181","title":"11.8.1 \u00a0 \u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u904e\u7a0b","text":"

\u9577\u3055 \\(n\\) \u306e\u914d\u5217\u3067\u3001\\([0, 1)\\) \u306e\u7bc4\u56f2\u306e\u6d6e\u52d5\u5c0f\u6570\u70b9\u6570\u3092\u8003\u3048\u3066\u307f\u307e\u3059\u3002\u30d0\u30b1\u30c3\u30c8\u30bd\u30fc\u30c8\u306e\u904e\u7a0b\u306f\u4ee5\u4e0b\u306e\u56f3\u306b\u793a\u3055\u308c\u3066\u3044\u307e\u3059\u3002

  1. \\(k\\) \u500b\u306e\u30d0\u30b1\u30c3\u30c8\u3092\u521d\u671f\u5316\u3057\u3001\\(n\\) \u500b\u306e\u8981\u7d20\u3092\u3053\u308c\u3089\u306e \\(k\\) \u500b\u306e\u30d0\u30b1\u30c3\u30c8\u306b\u5206\u6563\u3055\u305b\u307e\u3059\u3002
  2. \u5404\u30d0\u30b1\u30c3\u30c8\u3092\u500b\u5225\u306b\u30bd\u30fc\u30c8\u3057\u307e\u3059\uff08\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\u306e\u7d44\u307f\u8fbc\u307f\u30bd\u30fc\u30c8\u95a2\u6570\u3092\u4f7f\u7528\uff09\u3002
  3. \u6700\u5c0f\u304b\u3089\u6700\u5927\u306e\u30d0\u30b1\u30c3\u30c8\u306e\u9806\u5e8f\u3067\u7d50\u679c\u3092\u30de\u30fc\u30b8\u3057\u307e\u3059\u3002

\u56f3 11-13 \u00a0 \u30d0\u30b1\u30c3\u30c8\u30bd\u30fc\u30c8\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u904e\u7a0b

\u30b3\u30fc\u30c9\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby bucket_sort.py
def bucket_sort(nums: list[float]):\n    \"\"\"\u30d0\u30b1\u30c3\u30c8\u30bd\u30fc\u30c8\"\"\"\n    # k = n/2 \u500b\u306e\u30d0\u30b1\u30c3\u30c8\u3092\u521d\u671f\u5316\u3001\u5404\u30d0\u30b1\u30c3\u30c8\u306b\u5e73\u57472\u500b\u306e\u8981\u7d20\u3092\u914d\u7f6e\u3059\u308b\u3053\u3068\u3092\u671f\u5f85\n    k = len(nums) // 2\n    buckets = [[] for _ in range(k)]\n    # 1. \u914d\u5217\u8981\u7d20\u3092\u5404\u30d0\u30b1\u30c3\u30c8\u306b\u5206\u6563\n    for num in nums:\n        # \u5165\u529b\u30c7\u30fc\u30bf\u7bc4\u56f2\u306f [0, 1)\u3001num * k \u3092\u4f7f\u7528\u3057\u3066\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u7bc4\u56f2 [0, k-1] \u306b\u30de\u30c3\u30d4\u30f3\u30b0\n        i = int(num * k)\n        # num \u3092\u30d0\u30b1\u30c3\u30c8 i \u306b\u8ffd\u52a0\n        buckets[i].append(num)\n    # 2. \u5404\u30d0\u30b1\u30c3\u30c8\u3092\u30bd\u30fc\u30c8\n    for bucket in buckets:\n        # \u7d44\u307f\u8fbc\u307f\u30bd\u30fc\u30c8\u95a2\u6570\u3092\u4f7f\u7528\u3001\u4ed6\u306e\u30bd\u30fc\u30c8\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306b\u7f6e\u304d\u63db\u3048\u308b\u3053\u3068\u3082\u53ef\u80fd\n        bucket.sort()\n    # 3. \u30d0\u30b1\u30c3\u30c8\u3092\u8d70\u67fb\u3057\u3066\u7d50\u679c\u3092\u30de\u30fc\u30b8\n    i = 0\n    for bucket in buckets:\n        for num in bucket:\n            nums[i] = num\n            i += 1\n
bucket_sort.cpp
/* \u30d0\u30b1\u30c3\u30c8\u30bd\u30fc\u30c8 */\nvoid bucketSort(vector<float> &nums) {\n    // k = n/2\u500b\u306e\u30d0\u30b1\u30c3\u30c8\u3092\u521d\u671f\u5316\u3001\u5404\u30d0\u30b1\u30c3\u30c8\u306b2\u3064\u306e\u8981\u7d20\u3092\u5272\u308a\u5f53\u3066\u308b\u3053\u3068\u3092\u671f\u5f85\n    int k = nums.size() / 2;\n    vector<vector<float>> buckets(k);\n    // 1. \u914d\u5217\u8981\u7d20\u3092\u5404\u30d0\u30b1\u30c3\u30c8\u306b\u5206\u914d\n    for (float num : nums) {\n        // \u5165\u529b\u30c7\u30fc\u30bf\u7bc4\u56f2\u306f[0, 1)\u3001num * k\u3092\u4f7f\u7528\u3057\u3066\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u7bc4\u56f2[0, k-1]\u306b\u30de\u30c3\u30d7\n        int i = num * k;\n        // bucket_idx\u30d0\u30b1\u30c3\u30c8\u306b\u6570\u5024\u3092\u8ffd\u52a0\n        buckets[i].push_back(num);\n    }\n    // 2. \u5404\u30d0\u30b1\u30c3\u30c8\u3092\u30bd\u30fc\u30c8\n    for (vector<float> &bucket : buckets) {\n        // \u7d44\u307f\u8fbc\u307f\u30bd\u30fc\u30c8\u95a2\u6570\u3092\u4f7f\u7528\u3001\u4ed6\u306e\u30bd\u30fc\u30c8\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306b\u7f6e\u304d\u63db\u3048\u308b\u3053\u3068\u3082\u53ef\u80fd\n        sort(bucket.begin(), bucket.end());\n    }\n    // 3. \u30d0\u30b1\u30c3\u30c8\u3092\u8d70\u67fb\u3057\u3066\u7d50\u679c\u3092\u30de\u30fc\u30b8\n    int i = 0;\n    for (vector<float> &bucket : buckets) {\n        for (float num : bucket) {\n            nums[i++] = num;\n        }\n    }\n}\n
bucket_sort.java
/* \u30d0\u30b1\u30c3\u30c8\u30bd\u30fc\u30c8 */\nvoid bucketSort(float[] nums) {\n    // k = n/2 \u500b\u306e\u30d0\u30b1\u30c3\u30c8\u3092\u521d\u671f\u5316\u3001\u5404\u30d0\u30b1\u30c3\u30c8\u306b\u671f\u5f85\u3055\u308c\u308b\u8981\u7d20\u6570\u306f 2 \u500b\n    int k = nums.length / 2;\n    List<List<Float>> buckets = new ArrayList<>();\n    for (int i = 0; i < k; i++) {\n        buckets.add(new ArrayList<>());\n    }\n    // 1. \u914d\u5217\u8981\u7d20\u3092\u5404\u30d0\u30b1\u30c3\u30c8\u306b\u5206\u6563\n    for (float num : nums) {\n        // \u5165\u529b\u30c7\u30fc\u30bf\u7bc4\u56f2\u306f [0, 1)\u3001num * k \u3092\u4f7f\u3063\u3066\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u7bc4\u56f2 [0, k-1] \u306b\u30de\u30c3\u30d4\u30f3\u30b0\n        int i = (int) (num * k);\n        // num \u3092\u30d0\u30b1\u30c3\u30c8 i \u306b\u8ffd\u52a0\n        buckets.get(i).add(num);\n    }\n    // 2. \u5404\u30d0\u30b1\u30c3\u30c8\u3092\u30bd\u30fc\u30c8\n    for (List<Float> bucket : buckets) {\n        // \u7d44\u307f\u8fbc\u307f\u30bd\u30fc\u30c8\u95a2\u6570\u3092\u4f7f\u7528\u3001\u4ed6\u306e\u30bd\u30fc\u30c8\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306b\u7f6e\u304d\u63db\u3048\u308b\u3053\u3068\u3082\u53ef\u80fd\n        Collections.sort(bucket);\n    }\n    // 3. \u30d0\u30b1\u30c3\u30c8\u3092\u8d70\u67fb\u3057\u3066\u7d50\u679c\u3092\u30de\u30fc\u30b8\n    int i = 0;\n    for (List<Float> bucket : buckets) {\n        for (float num : bucket) {\n            nums[i++] = num;\n        }\n    }\n}\n
bucket_sort.cs
[class]{bucket_sort}-[func]{BucketSort}\n
bucket_sort.go
[class]{}-[func]{bucketSort}\n
bucket_sort.swift
[class]{}-[func]{bucketSort}\n
bucket_sort.js
[class]{}-[func]{bucketSort}\n
bucket_sort.ts
[class]{}-[func]{bucketSort}\n
bucket_sort.dart
[class]{}-[func]{bucketSort}\n
bucket_sort.rs
[class]{}-[func]{bucket_sort}\n
bucket_sort.c
[class]{}-[func]{bucketSort}\n
bucket_sort.kt
[class]{}-[func]{bucketSort}\n
bucket_sort.rb
[class]{}-[func]{bucket_sort}\n
"},{"location":"chapter_sorting/bucket_sort/#1182","title":"11.8.2 \u00a0 \u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u7279\u5fb4","text":"

\u30d0\u30b1\u30c3\u30c8\u30bd\u30fc\u30c8\u306f\u975e\u5e38\u306b\u5927\u304d\u306a\u30c7\u30fc\u30bf\u30bb\u30c3\u30c8\u306e\u51e6\u7406\u306b\u9069\u3057\u3066\u3044\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001\u5165\u529b\u30c7\u30fc\u30bf\u306b100\u4e07\u500b\u306e\u8981\u7d20\u304c\u542b\u307e\u308c\u3001\u30b7\u30b9\u30c6\u30e0\u30e1\u30e2\u30ea\u306e\u5236\u9650\u306b\u3088\u308a\u3059\u3079\u3066\u306e\u30c7\u30fc\u30bf\u3092\u540c\u6642\u306b\u30ed\u30fc\u30c9\u3067\u304d\u306a\u3044\u5834\u5408\u3001\u30c7\u30fc\u30bf\u30921,000\u500b\u306e\u30d0\u30b1\u30c3\u30c8\u306b\u5206\u5272\u3057\u3001\u5404\u30d0\u30b1\u30c3\u30c8\u3092\u500b\u5225\u306b\u30bd\u30fc\u30c8\u3057\u3066\u304b\u3089\u7d50\u679c\u3092\u30de\u30fc\u30b8\u3067\u304d\u307e\u3059\u3002

"},{"location":"chapter_sorting/bucket_sort/#1183","title":"11.8.3 \u00a0 \u5747\u7b49\u5206\u6563\u3092\u9054\u6210\u3059\u308b\u65b9\u6cd5","text":"

\u30d0\u30b1\u30c3\u30c8\u30bd\u30fc\u30c8\u306e\u7406\u8ad6\u7684\u6642\u9593\u8a08\u7b97\u91cf\u306f \\(O(n)\\) \u306b\u9054\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u91cd\u8981\u306a\u3053\u3068\u306f\u3001\u3059\u3079\u3066\u306e\u30d0\u30b1\u30c3\u30c8\u306b\u8981\u7d20\u3092\u5747\u7b49\u306b\u5206\u6563\u3055\u305b\u308b\u3053\u3068\u3067\u3059\u3002\u5b9f\u4e16\u754c\u306e\u30c7\u30fc\u30bf\u306f\u3057\u3070\u3057\u3070\u5747\u4e00\u306b\u5206\u6563\u3055\u308c\u3066\u3044\u306a\u3044\u304b\u3089\u3067\u3059\u3002\u4f8b\u3048\u3070\u3001eBay\u306e\u3059\u3079\u3066\u306e\u5546\u54c1\u3092\u4fa1\u683c\u7bc4\u56f2\u306710\u500b\u306e\u30d0\u30b1\u30c3\u30c8\u306b\u5747\u7b49\u306b\u5206\u6563\u3055\u305b\u305f\u3044\u3068\u3057\u307e\u3059\u3002\u3057\u304b\u3057\u3001\u5546\u54c1\u4fa1\u683c\u306e\u5206\u6563\u306f\u5747\u7b49\u3067\u306a\u3044\u53ef\u80fd\u6027\u304c\u3042\u308a\u3001100\u30c9\u30eb\u672a\u6e80\u306e\u5546\u54c1\u304c\u591a\u304f\u3001500\u30c9\u30eb\u4ee5\u4e0a\u306e\u5546\u54c1\u304c\u5c11\u306a\u3044\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002\u4fa1\u683c\u7bc4\u56f2\u3092\u5747\u7b49\u306b10\u5206\u5272\u3059\u308b\u3068\u3001\u5404\u30d0\u30b1\u30c3\u30c8\u306e\u5546\u54c1\u6570\u306e\u5dee\u304c\u5927\u304d\u304f\u306a\u308a\u307e\u3059\u3002

\u5747\u7b49\u5206\u6563\u3092\u9054\u6210\u3059\u308b\u305f\u3081\u306b\u3001\u6700\u521d\u306b\u304a\u304a\u3088\u305d\u306e\u5883\u754c\u3092\u8a2d\u5b9a\u3057\u3066\u3001\u30c7\u30fc\u30bf\u30923\u3064\u306e\u30d0\u30b1\u30c3\u30c8\u306b\u5927\u307e\u304b\u306b\u5206\u5272\u3067\u304d\u307e\u3059\u3002\u5206\u6563\u304c\u5b8c\u4e86\u3057\u305f\u5f8c\u3001\u3088\u308a\u591a\u304f\u306e\u30a2\u30a4\u30c6\u30e0\u3092\u6301\u3064\u30d0\u30b1\u30c3\u30c8\u3092\u3055\u3089\u306b3\u3064\u306e\u30d0\u30b1\u30c3\u30c8\u306b\u5206\u5272\u3057\u3001\u3059\u3079\u3066\u306e\u30d0\u30b1\u30c3\u30c8\u306e\u8981\u7d20\u6570\u304c\u307b\u307c\u7b49\u3057\u304f\u306a\u308b\u307e\u3067\u7d9a\u3051\u307e\u3059\u3002

\u4ee5\u4e0b\u306e\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u3053\u306e\u65b9\u6cd5\u306f\u672c\u8cea\u7684\u306b\u518d\u5e30\u6728\u3092\u69cb\u7bc9\u3057\u3001\u8449\u30ce\u30fc\u30c9\u306e\u8981\u7d20\u6570\u304c\u3067\u304d\u308b\u3060\u3051\u5747\u7b49\u306b\u306a\u308b\u3053\u3068\u3092\u76ee\u6307\u3057\u307e\u3059\u3002\u3082\u3061\u308d\u3093\u3001\u5404\u30e9\u30a6\u30f3\u30c9\u3067\u30c7\u30fc\u30bf\u30923\u3064\u306e\u30d0\u30b1\u30c3\u30c8\u306b\u5206\u5272\u3059\u308b\u5fc5\u8981\u306f\u3042\u308a\u307e\u305b\u3093 - \u5206\u5272\u6226\u7565\u306f\u30c7\u30fc\u30bf\u306e\u72ec\u7279\u306a\u7279\u6027\u306b\u9069\u5fdc\u7684\u306b\u8abf\u6574\u3067\u304d\u307e\u3059\u3002

\u56f3 11-14 \u00a0 \u30d0\u30b1\u30c3\u30c8\u306e\u518d\u5e30\u7684\u5206\u5272

\u5546\u54c1\u4fa1\u683c\u306e\u78ba\u7387\u5206\u5e03\u3092\u4e8b\u524d\u306b\u77e5\u3063\u3066\u3044\u308b\u5834\u5408\u3001\u30c7\u30fc\u30bf\u306e\u78ba\u7387\u5206\u5e03\u306b\u57fa\u3065\u3044\u3066\u5404\u30d0\u30b1\u30c3\u30c8\u306e\u4fa1\u683c\u5883\u754c\u3092\u8a2d\u5b9a\u3067\u304d\u307e\u3059\u3002\u30c7\u30fc\u30bf\u5206\u5e03\u3092\u5177\u4f53\u7684\u306b\u8a08\u7b97\u3059\u308b\u5fc5\u8981\u306f\u5fc5\u305a\u3057\u3082\u306a\u304f\u3001\u4ee3\u308f\u308a\u306b\u78ba\u7387\u30e2\u30c7\u30eb\u3092\u4f7f\u7528\u3057\u3066\u30c7\u30fc\u30bf\u7279\u6027\u306b\u57fa\u3065\u3044\u3066\u8fd1\u4f3c\u3067\u304d\u308b\u3053\u3068\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002

\u4ee5\u4e0b\u306e\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u5546\u54c1\u4fa1\u683c\u304c\u6b63\u898f\u5206\u5e03\u306b\u5f93\u3046\u3068\u4eee\u5b9a\u3059\u308b\u3068\u3001\u30d0\u30b1\u30c3\u30c8\u9593\u3067\u30a2\u30a4\u30c6\u30e0\u306e\u5206\u6563\u306e\u30d0\u30e9\u30f3\u30b9\u3092\u53d6\u308b\u305f\u3081\u306b\u5408\u7406\u7684\u306a\u4fa1\u683c\u533a\u9593\u3092\u5b9a\u7fa9\u3067\u304d\u307e\u3059\u3002

\u56f3 11-15 \u00a0 \u78ba\u7387\u5206\u5e03\u306b\u57fa\u3065\u304f\u30d0\u30b1\u30c3\u30c8\u5206\u5272

"},{"location":"chapter_sorting/counting_sort/","title":"11.9 \u00a0 \u8a08\u6570\u30bd\u30fc\u30c8","text":"

\u8a08\u6570\u30bd\u30fc\u30c8\u306f\u8981\u7d20\u306e\u6570\u3092\u30ab\u30a6\u30f3\u30c8\u3059\u308b\u3053\u3068\u3067\u30bd\u30fc\u30c8\u3092\u5b9f\u73fe\u3057\u3001\u901a\u5e38\u306f\u6574\u6570\u914d\u5217\u306b\u9069\u7528\u3055\u308c\u307e\u3059\u3002

"},{"location":"chapter_sorting/counting_sort/#1191","title":"11.9.1 \u00a0 \u7c21\u5358\u306a\u5b9f\u88c5","text":"

\u7c21\u5358\u306a\u4f8b\u304b\u3089\u59cb\u3081\u307e\u3057\u3087\u3046\u3002\u9577\u3055 \\(n\\) \u306e\u914d\u5217 nums \u304c\u4e0e\u3048\u3089\u308c\u3001\u3059\u3079\u3066\u306e\u8981\u7d20\u304c\u300c\u975e\u8ca0\u6574\u6570\u300d\u3067\u3042\u308b\u5834\u5408\u3001\u8a08\u6570\u30bd\u30fc\u30c8\u306e\u5168\u4f53\u7684\u306a\u904e\u7a0b\u306f\u4ee5\u4e0b\u306e\u56f3\u306b\u793a\u3055\u308c\u3066\u3044\u307e\u3059\u3002

  1. \u914d\u5217\u3092\u8d70\u67fb\u3057\u3066\u6700\u5927\u6570\u3092\u898b\u3064\u3051\u3001\u305d\u308c\u3092 \\(m\\) \u3068\u3057\u3001\u9577\u3055 \\(m + 1\\) \u306e\u88dc\u52a9\u914d\u5217 counter \u3092\u4f5c\u6210\u3057\u307e\u3059\u3002
  2. counter \u3092\u4f7f\u7528\u3057\u3066 nums \u5185\u306e\u5404\u6570\u306e\u51fa\u73fe\u56de\u6570\u3092\u30ab\u30a6\u30f3\u30c8\u3057\u307e\u3059\u3002\u3053\u3053\u3067 counter[num] \u306f\u6570 num \u306e\u51fa\u73fe\u56de\u6570\u306b\u5bfe\u5fdc\u3057\u307e\u3059\u3002\u30ab\u30a6\u30f3\u30c8\u65b9\u6cd5\u306f\u7c21\u5358\u3067\u3001nums \u3092\u8d70\u67fb\u3057\uff08\u73fe\u5728\u306e\u6570\u3092 num \u3068\u3059\u308b\uff09\u3001\u5404\u30e9\u30a6\u30f3\u30c9\u3067 counter[num] \u3092 \\(1\\) \u5897\u3084\u3057\u307e\u3059\u3002
  3. counter \u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306f\u81ea\u7136\u306b\u9806\u5e8f\u4ed8\u3051\u3089\u308c\u3066\u3044\u308b\u305f\u3081\u3001\u3059\u3079\u3066\u306e\u6570\u306f\u672c\u8cea\u7684\u306b\u3059\u3067\u306b\u30bd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u6b21\u306b\u3001counter \u3092\u8d70\u67fb\u3057\u3001\u51fa\u73fe\u9806\u306b nums \u3092\u6607\u9806\u3067\u57cb\u3081\u307e\u3059\u3002

\u56f3 11-16 \u00a0 \u8a08\u6570\u30bd\u30fc\u30c8\u306e\u904e\u7a0b

\u30b3\u30fc\u30c9\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby counting_sort.py
def counting_sort_naive(nums: list[int]):\n    \"\"\"\u8a08\u6570\u30bd\u30fc\u30c8\"\"\"\n    # \u30b7\u30f3\u30d7\u30eb\u306a\u5b9f\u88c5\u3001\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u30bd\u30fc\u30c8\u306b\u306f\u4f7f\u7528\u3067\u304d\u306a\u3044\n    # 1. \u914d\u5217\u5185\u306e\u6700\u5927\u8981\u7d20 m \u3092\u7d71\u8a08\n    m = 0\n    for num in nums:\n        m = max(m, num)\n    # 2. \u5404\u6570\u5b57\u306e\u51fa\u73fe\u56de\u6570\u3092\u7d71\u8a08\n    # counter[num] \u306f num \u306e\u51fa\u73fe\u56de\u6570\u3092\u8868\u3059\n    counter = [0] * (m + 1)\n    for num in nums:\n        counter[num] += 1\n    # 3. counter \u3092\u8d70\u67fb\u3057\u3001\u5404\u8981\u7d20\u3092\u5143\u306e\u914d\u5217 nums \u306b\u57cb\u3081\u623b\u3057\n    i = 0\n    for num in range(m + 1):\n        for _ in range(counter[num]):\n            nums[i] = num\n            i += 1\n
counting_sort.cpp
/* \u30ab\u30a6\u30f3\u30c8\u30bd\u30fc\u30c8 */\n// \u7c21\u5358\u306a\u5b9f\u88c5\u3001\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u30bd\u30fc\u30c8\u306b\u306f\u4f7f\u7528\u3067\u304d\u306a\u3044\nvoid countingSortNaive(vector<int> &nums) {\n    // 1. \u914d\u5217\u306e\u6700\u5927\u8981\u7d20m\u3092\u7d71\u8a08\n    int m = 0;\n    for (int num : nums) {\n        m = max(m, num);\n    }\n    // 2. \u5404\u6570\u5b57\u306e\u51fa\u73fe\u56de\u6570\u3092\u7d71\u8a08\n    // counter[num]\u306fnum\u306e\u51fa\u73fe\u56de\u6570\u3092\u8868\u3059\n    vector<int> counter(m + 1, 0);\n    for (int num : nums) {\n        counter[num]++;\n    }\n    // 3. counter\u3092\u8d70\u67fb\u3057\u3001\u5404\u8981\u7d20\u3092\u5143\u306e\u914d\u5217nums\u306b\u623b\u3059\n    int i = 0;\n    for (int num = 0; num < m + 1; num++) {\n        for (int j = 0; j < counter[num]; j++, i++) {\n            nums[i] = num;\n        }\n    }\n}\n
counting_sort.java
/* \u8a08\u6570\u30bd\u30fc\u30c8 */\n// \u7c21\u5358\u306a\u5b9f\u88c5\u3001\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u30bd\u30fc\u30c8\u306b\u306f\u4f7f\u7528\u3067\u304d\u306a\u3044\nvoid countingSortNaive(int[] nums) {\n    // 1. \u914d\u5217\u306e\u6700\u5927\u8981\u7d20 m \u3092\u7d71\u8a08\n    int m = 0;\n    for (int num : nums) {\n        m = Math.max(m, num);\n    }\n    // 2. \u5404\u6570\u5b57\u306e\u51fa\u73fe\u56de\u6570\u3092\u7d71\u8a08\n    // counter[num] \u306f num \u306e\u51fa\u73fe\u56de\u6570\u3092\u8868\u3059\n    int[] counter = new int[m + 1];\n    for (int num : nums) {\n        counter[num]++;\n    }\n    // 3. counter \u3092\u8d70\u67fb\u3057\u3001\u5404\u8981\u7d20\u3092\u5143\u306e\u914d\u5217 nums \u306b\u623b\u3059\n    int i = 0;\n    for (int num = 0; num < m + 1; num++) {\n        for (int j = 0; j < counter[num]; j++, i++) {\n            nums[i] = num;\n        }\n    }\n}\n
counting_sort.cs
[class]{counting_sort}-[func]{CountingSortNaive}\n
counting_sort.go
[class]{}-[func]{countingSortNaive}\n
counting_sort.swift
[class]{}-[func]{countingSortNaive}\n
counting_sort.js
[class]{}-[func]{countingSortNaive}\n
counting_sort.ts
[class]{}-[func]{countingSortNaive}\n
counting_sort.dart
[class]{}-[func]{countingSortNaive}\n
counting_sort.rs
[class]{}-[func]{counting_sort_naive}\n
counting_sort.c
[class]{}-[func]{countingSortNaive}\n
counting_sort.kt
[class]{}-[func]{countingSortNaive}\n
counting_sort.rb
[class]{}-[func]{counting_sort_naive}\n

\u8a08\u6570\u30bd\u30fc\u30c8\u3068\u30d0\u30b1\u30c3\u30c8\u30bd\u30fc\u30c8\u306e\u95a2\u4fc2

\u30d0\u30b1\u30c3\u30c8\u30bd\u30fc\u30c8\u306e\u89b3\u70b9\u304b\u3089\u3001\u8a08\u6570\u30bd\u30fc\u30c8\u306b\u304a\u3051\u308b\u8a08\u6570\u914d\u5217 counter \u306e\u5404\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u30d0\u30b1\u30c3\u30c8\u3068\u8003\u3048\u3001\u30ab\u30a6\u30f3\u30c8\u306e\u904e\u7a0b\u3092\u8981\u7d20\u3092\u5bfe\u5fdc\u3059\u308b\u30d0\u30b1\u30c3\u30c8\u306b\u5206\u6563\u3055\u305b\u308b\u3053\u3068\u3068\u8003\u3048\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u672c\u8cea\u7684\u306b\u3001\u8a08\u6570\u30bd\u30fc\u30c8\u306f\u6574\u6570\u30c7\u30fc\u30bf\u306e\u305f\u3081\u306e\u30d0\u30b1\u30c3\u30c8\u30bd\u30fc\u30c8\u306e\u7279\u5225\u306a\u30b1\u30fc\u30b9\u3067\u3059\u3002

"},{"location":"chapter_sorting/counting_sort/#1192","title":"11.9.2 \u00a0 \u5b8c\u5168\u306a\u5b9f\u88c5","text":"

\u6ce8\u610f\u6df1\u3044\u8aad\u8005\u306f\u6c17\u4ed8\u304f\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u304c\u3001\u5165\u529b\u30c7\u30fc\u30bf\u304c\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u5834\u5408\u3001\u4e0a\u8a18\u306e\u624b\u9806 3. \u306f\u7121\u52b9\u3067\u3059\u3002\u5165\u529b\u30c7\u30fc\u30bf\u304c\u5546\u54c1\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3067\u3001\u4fa1\u683c\uff08\u30af\u30e9\u30b9\u30e1\u30f3\u30d0\u5909\u6570\uff09\u3067\u5546\u54c1\u3092\u30bd\u30fc\u30c8\u3057\u305f\u3044\u3068\u3057\u307e\u3059\u3002\u3057\u304b\u3057\u3001\u4e0a\u8a18\u306e\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306f\u7d50\u679c\u3068\u3057\u3066\u30bd\u30fc\u30c8\u6e08\u307f\u306e\u4fa1\u683c\u306e\u307f\u3092\u63d0\u4f9b\u3067\u304d\u307e\u3059\u3002

\u3067\u306f\u3001\u5143\u306e\u30c7\u30fc\u30bf\u306e\u30bd\u30fc\u30c8\u7d50\u679c\u3092\u3069\u306e\u3088\u3046\u306b\u53d6\u5f97\u3067\u304d\u308b\u3067\u3057\u3087\u3046\u304b\uff1f\u307e\u305a\u3001counter \u306e\u300c\u524d\u7f6e\u548c\u300d\u3092\u8a08\u7b97\u3057\u307e\u3059\u3002\u540d\u524d\u304c\u793a\u3059\u3088\u3046\u306b\u3001\u30a4\u30f3\u30c7\u30c3\u30af\u30b9 i \u3067\u306e\u524d\u7f6e\u548c prefix[i] \u306f\u3001\u914d\u5217\u306e\u6700\u521d\u306e i \u500b\u306e\u8981\u7d20\u306e\u548c\u306b\u7b49\u3057\u3044\u3067\u3059\uff1a

\\[ \\text{prefix}[i] = \\sum_{j=0}^i \\text{counter[j]} \\]

\u524d\u7f6e\u548c\u306b\u306f\u660e\u78ba\u306a\u610f\u5473\u304c\u3042\u308a\u307e\u3059\u3002prefix[num] - 1 \u306f\u7d50\u679c\u914d\u5217 res \u306b\u304a\u3051\u308b\u8981\u7d20 num \u306e\u6700\u5f8c\u306e\u51fa\u73fe\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u8868\u3057\u307e\u3059\u3002\u3053\u306e\u60c5\u5831\u306f\u91cd\u8981\u3067\u3001\u5404\u8981\u7d20\u304c\u7d50\u679c\u914d\u5217\u306e\u3069\u3053\u306b\u73fe\u308c\u308b\u3079\u304d\u304b\u3092\u6559\u3048\u3066\u304f\u308c\u307e\u3059\u3002\u6b21\u306b\u3001\u5143\u306e\u914d\u5217 nums \u306e\u5404\u8981\u7d20 num \u3092\u9006\u9806\u3067\u8d70\u67fb\u3057\u3001\u5404\u53cd\u5fa9\u3067\u4ee5\u4e0b\u306e2\u3064\u306e\u624b\u9806\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002

  1. \u30a4\u30f3\u30c7\u30c3\u30af\u30b9 prefix[num] - 1 \u3067\u914d\u5217 res \u306b num \u3092\u57cb\u3081\u307e\u3059\u3002
  2. \u524d\u7f6e\u548c prefix[num] \u3092 \\(1\\) \u6e1b\u3089\u3057\u3066\u3001num \u3092\u914d\u7f6e\u3059\u308b\u6b21\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u53d6\u5f97\u3057\u307e\u3059\u3002

\u8d70\u67fb\u5f8c\u3001\u914d\u5217 res \u306b\u306f\u30bd\u30fc\u30c8\u3055\u308c\u305f\u7d50\u679c\u304c\u542b\u307e\u308c\u3001\u6700\u5f8c\u306b res \u304c\u5143\u306e\u914d\u5217 nums \u3092\u7f6e\u304d\u63db\u3048\u307e\u3059\u3002\u5b8c\u5168\u306a\u8a08\u6570\u30bd\u30fc\u30c8\u306e\u904e\u7a0b\u306f\u4ee5\u4e0b\u306e\u56f3\u306b\u793a\u3055\u308c\u3066\u3044\u307e\u3059\u3002

<1><2><3><4><5><6><7><8>

\u56f3 11-17 \u00a0 \u8a08\u6570\u30bd\u30fc\u30c8\u306e\u904e\u7a0b

\u8a08\u6570\u30bd\u30fc\u30c8\u306e\u5b9f\u88c5\u30b3\u30fc\u30c9\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby counting_sort.py
def counting_sort(nums: list[int]):\n    \"\"\"\u8a08\u6570\u30bd\u30fc\u30c8\"\"\"\n    # \u5b8c\u5168\u306a\u5b9f\u88c5\u3001\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u30bd\u30fc\u30c8\u304c\u53ef\u80fd\u3067\u3001\u5b89\u5b9a\u30bd\u30fc\u30c8\n    # 1. \u914d\u5217\u5185\u306e\u6700\u5927\u8981\u7d20 m \u3092\u7d71\u8a08\n    m = max(nums)\n    # 2. \u5404\u6570\u5b57\u306e\u51fa\u73fe\u56de\u6570\u3092\u7d71\u8a08\n    # counter[num] \u306f num \u306e\u51fa\u73fe\u56de\u6570\u3092\u8868\u3059\n    counter = [0] * (m + 1)\n    for num in nums:\n        counter[num] += 1\n    # 3. counter \u306e\u524d\u7f6e\u548c\u3092\u8a08\u7b97\u3057\u3001\u300c\u51fa\u73fe\u56de\u6570\u300d\u3092\u300c\u672b\u5c3e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u300d\u306b\u5909\u63db\n    # counter[num]-1 \u306f res \u306b\u304a\u3044\u3066 num \u304c\u6700\u5f8c\u306b\u51fa\u73fe\u3059\u308b\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\n    for i in range(m):\n        counter[i + 1] += counter[i]\n    # 4. nums \u3092\u9006\u9806\u306b\u8d70\u67fb\u3057\u3001\u5404\u8981\u7d20\u3092\u7d50\u679c\u914d\u5217 res \u306b\u914d\u7f6e\n    # \u7d50\u679c\u3092\u8a18\u9332\u3059\u308b\u305f\u3081\u306e\u914d\u5217 res \u3092\u521d\u671f\u5316\n    n = len(nums)\n    res = [0] * n\n    for i in range(n - 1, -1, -1):\n        num = nums[i]\n        res[counter[num] - 1] = num  # num \u3092\u5bfe\u5fdc\u3059\u308b\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306b\u914d\u7f6e\n        counter[num] -= 1  # \u524d\u7f6e\u548c\u30921\u6e1b\u3089\u3057\u3001num \u3092\u914d\u7f6e\u3059\u308b\u6b21\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u53d6\u5f97\n    # \u7d50\u679c\u914d\u5217 res \u3092\u4f7f\u7528\u3057\u3066\u5143\u306e\u914d\u5217 nums \u3092\u4e0a\u66f8\u304d\n    for i in range(n):\n        nums[i] = res[i]\n
counting_sort.cpp
/* \u30ab\u30a6\u30f3\u30c8\u30bd\u30fc\u30c8 */\n// \u5b8c\u5168\u306a\u5b9f\u88c5\u3001\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u30bd\u30fc\u30c8\u304c\u53ef\u80fd\u3067\u5b89\u5b9a\u30bd\u30fc\u30c8\nvoid countingSort(vector<int> &nums) {\n    // 1. \u914d\u5217\u306e\u6700\u5927\u8981\u7d20m\u3092\u7d71\u8a08\n    int m = 0;\n    for (int num : nums) {\n        m = max(m, num);\n    }\n    // 2. \u5404\u6570\u5b57\u306e\u51fa\u73fe\u56de\u6570\u3092\u7d71\u8a08\n    // counter[num]\u306fnum\u306e\u51fa\u73fe\u56de\u6570\u3092\u8868\u3059\n    vector<int> counter(m + 1, 0);\n    for (int num : nums) {\n        counter[num]++;\n    }\n    // 3. counter\u306e\u524d\u7f00\u548c\u3092\u8a08\u7b97\u3057\u3001\u300c\u51fa\u73fe\u56de\u6570\u300d\u3092\u300c\u672b\u5c3e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u300d\u306b\u5909\u63db\n    // counter[num]-1\u306fnum\u304cres\u3067\u73fe\u308c\u308b\u6700\u5f8c\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\n    for (int i = 0; i < m; i++) {\n        counter[i + 1] += counter[i];\n    }\n    // 4. nums\u3092\u9006\u9806\u3067\u8d70\u67fb\u3057\u3001\u5404\u8981\u7d20\u3092\u7d50\u679c\u914d\u5217res\u306b\u914d\u7f6e\n    // \u7d50\u679c\u3092\u8a18\u9332\u3059\u308b\u914d\u5217res\u3092\u521d\u671f\u5316\n    int n = nums.size();\n    vector<int> res(n);\n    for (int i = n - 1; i >= 0; i--) {\n        int num = nums[i];\n        res[counter[num] - 1] = num; // num\u3092\u5bfe\u5fdc\u3059\u308b\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306b\u914d\u7f6e\n        counter[num]--;              // \u524d\u7f00\u548c\u30921\u6e1b\u3089\u3057\u3001num\u3092\u914d\u7f6e\u3059\u308b\u6b21\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u53d6\u5f97\n    }\n    // \u7d50\u679c\u914d\u5217res\u3067\u5143\u306e\u914d\u5217nums\u3092\u4e0a\u66f8\u304d\n    nums = res;\n}\n
counting_sort.java
/* \u8a08\u6570\u30bd\u30fc\u30c8 */\n// \u5b8c\u5168\u306a\u5b9f\u88c5\u3001\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u30bd\u30fc\u30c8\u3067\u304d\u3001\u5b89\u5b9a\u30bd\u30fc\u30c8\nvoid countingSort(int[] nums) {\n    // 1. \u914d\u5217\u306e\u6700\u5927\u8981\u7d20 m \u3092\u7d71\u8a08\n    int m = 0;\n    for (int num : nums) {\n        m = Math.max(m, num);\n    }\n    // 2. \u5404\u6570\u5b57\u306e\u51fa\u73fe\u56de\u6570\u3092\u7d71\u8a08\n    // counter[num] \u306f num \u306e\u51fa\u73fe\u56de\u6570\u3092\u8868\u3059\n    int[] counter = new int[m + 1];\n    for (int num : nums) {\n        counter[num]++;\n    }\n    // 3. counter \u306e\u7d2f\u7a4d\u548c\u3092\u8a08\u7b97\u3057\u3001\u300c\u51fa\u73fe\u56de\u6570\u300d\u3092\u300c\u5c3b\u5c3e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u300d\u306b\u5909\u63db\n    // counter[num]-1 \u306f res \u5185\u3067 num \u304c\u51fa\u73fe\u3059\u308b\u6700\u5f8c\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\n    for (int i = 0; i < m; i++) {\n        counter[i + 1] += counter[i];\n    }\n    // 4. nums \u3092\u9006\u9806\u306b\u8d70\u67fb\u3057\u3001\u5404\u8981\u7d20\u3092\u7d50\u679c\u914d\u5217 res \u306b\u914d\u7f6e\n    // \u7d50\u679c\u3092\u8a18\u9332\u3059\u308b\u914d\u5217 res \u3092\u521d\u671f\u5316\n    int n = nums.length;\n    int[] res = new int[n];\n    for (int i = n - 1; i >= 0; i--) {\n        int num = nums[i];\n        res[counter[num] - 1] = num; // num \u3092\u5bfe\u5fdc\u3059\u308b\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306b\u914d\u7f6e\n        counter[num]--; // \u7d2f\u7a4d\u548c\u3092 1 \u6e1b\u7b97\u3057\u3001num \u3092\u914d\u7f6e\u3059\u308b\u6b21\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u53d6\u5f97\n    }\n    // \u7d50\u679c\u914d\u5217 res \u3092\u4f7f\u3063\u3066\u5143\u306e\u914d\u5217 nums \u3092\u4e0a\u66f8\u304d\n    for (int i = 0; i < n; i++) {\n        nums[i] = res[i];\n    }\n}\n
counting_sort.cs
[class]{counting_sort}-[func]{CountingSort}\n
counting_sort.go
[class]{}-[func]{countingSort}\n
counting_sort.swift
[class]{}-[func]{countingSort}\n
counting_sort.js
[class]{}-[func]{countingSort}\n
counting_sort.ts
[class]{}-[func]{countingSort}\n
counting_sort.dart
[class]{}-[func]{countingSort}\n
counting_sort.rs
[class]{}-[func]{counting_sort}\n
counting_sort.c
[class]{}-[func]{countingSort}\n
counting_sort.kt
[class]{}-[func]{countingSort}\n
counting_sort.rb
[class]{}-[func]{counting_sort}\n
"},{"location":"chapter_sorting/counting_sort/#1193","title":"11.9.3 \u00a0 \u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u7279\u5fb4","text":""},{"location":"chapter_sorting/counting_sort/#1194","title":"11.9.4 \u00a0 \u5236\u9650\u4e8b\u9805","text":"

\u4eca\u307e\u3067\u306b\u3001\u8a08\u6570\u30bd\u30fc\u30c8\u306f\u975e\u5e38\u306b\u5de7\u5999\u3060\u3068\u611f\u3058\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002\u5358\u306b\u91cf\u3092\u30ab\u30a6\u30f3\u30c8\u3059\u308b\u3060\u3051\u3067\u52b9\u7387\u7684\u306a\u30bd\u30fc\u30c8\u3092\u5b9f\u73fe\u3067\u304d\u308b\u304b\u3089\u3067\u3059\u3002\u3057\u304b\u3057\u3001\u8a08\u6570\u30bd\u30fc\u30c8\u3092\u4f7f\u7528\u3059\u308b\u305f\u3081\u306e\u524d\u63d0\u6761\u4ef6\u306f\u6bd4\u8f03\u7684\u53b3\u3057\u3044\u3067\u3059\u3002

\u8a08\u6570\u30bd\u30fc\u30c8\u306f\u975e\u8ca0\u6574\u6570\u306b\u306e\u307f\u9069\u7528\u3067\u304d\u307e\u3059\u3002\u4ed6\u306e\u30bf\u30a4\u30d7\u306e\u30c7\u30fc\u30bf\u306b\u9069\u7528\u3057\u305f\u3044\u5834\u5408\u3001\u3053\u308c\u3089\u306e\u30c7\u30fc\u30bf\u304c\u8981\u7d20\u306e\u5143\u306e\u9806\u5e8f\u3092\u5909\u66f4\u3059\u308b\u3053\u3068\u306a\u304f\u975e\u8ca0\u6574\u6570\u306b\u5909\u63db\u3067\u304d\u308b\u3053\u3068\u3092\u4fdd\u8a3c\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001\u8ca0\u306e\u6574\u6570\u3092\u542b\u3080\u914d\u5217\u306e\u5834\u5408\u3001\u6700\u521d\u306b\u3059\u3079\u3066\u306e\u6570\u306b\u5b9a\u6570\u3092\u52a0\u3048\u3066\u3001\u3059\u3079\u3066\u3092\u6b63\u306e\u6570\u306b\u5909\u63db\u3057\u3001\u30bd\u30fc\u30c8\u5b8c\u4e86\u5f8c\u306b\u5143\u306b\u623b\u3059\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

\u8a08\u6570\u30bd\u30fc\u30c8\u306f\u5024\u306e\u7bc4\u56f2\u304c\u5c0f\u3055\u3044\u5927\u304d\u306a\u30c7\u30fc\u30bf\u30bb\u30c3\u30c8\u306b\u9069\u3057\u3066\u3044\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001\u4e0a\u8a18\u306e\u4f8b\u3067\u306f\u3001\\(m\\) \u306f\u5927\u304d\u3059\u304e\u308b\u3079\u304d\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u305d\u3046\u3067\u306a\u3051\u308c\u3070\u3001\u3042\u307e\u308a\u306b\u3082\u591a\u304f\u306e\u30b9\u30da\u30fc\u30b9\u3092\u5360\u6709\u3057\u3066\u3057\u307e\u3044\u307e\u3059\u3002\u305d\u3057\u3066 \\(n \\ll m\\) \u306e\u5834\u5408\u3001\u8a08\u6570\u30bd\u30fc\u30c8\u306f \\(O(m)\\) \u6642\u9593\u3092\u4f7f\u7528\u3057\u3001\\(O(n \\log n)\\) \u30bd\u30fc\u30c8\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3088\u308a\u9045\u3044\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002

"},{"location":"chapter_sorting/heap_sort/","title":"11.7 \u00a0 \u30d2\u30fc\u30d7\u30bd\u30fc\u30c8","text":"

Tip

\u3053\u306e\u7bc0\u3092\u8aad\u3080\u524d\u306b\u3001\u300c\u30d2\u30fc\u30d7\u300d\u306e\u7ae0\u3092\u5fc5\u305a\u5b8c\u4e86\u3055\u305b\u3066\u304f\u3060\u3055\u3044\u3002

\u30d2\u30fc\u30d7\u30bd\u30fc\u30c8\u306f\u3001\u30d2\u30fc\u30d7\u30c7\u30fc\u30bf\u69cb\u9020\u306b\u57fa\u3065\u304f\u52b9\u7387\u7684\u306a\u30bd\u30fc\u30c8\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3067\u3059\u3002\u3059\u3067\u306b\u5b66\u7fd2\u3057\u305f\u300c\u30d2\u30fc\u30d7\u306e\u69cb\u7bc9\u300d\u3068\u300c\u8981\u7d20\u306e\u62bd\u51fa\u300d\u64cd\u4f5c\u3092\u4f7f\u7528\u3057\u3066\u30d2\u30fc\u30d7\u30bd\u30fc\u30c8\u3092\u5b9f\u88c5\u3067\u304d\u307e\u3059\u3002

  1. \u914d\u5217\u3092\u5165\u529b\u3057\u3001\u6700\u5c0f\u30d2\u30fc\u30d7\u3092\u69cb\u7bc9\u3057\u307e\u3059\u3002\u3053\u3053\u3067\u3001\u6700\u5c0f\u8981\u7d20\u304c\u30d2\u30fc\u30d7\u306e\u9802\u4e0a\u306b\u4f4d\u7f6e\u3057\u307e\u3059\u3002
  2. \u7d99\u7d9a\u7684\u306b\u62bd\u51fa\u64cd\u4f5c\u3092\u5b9f\u884c\u3057\u3001\u62bd\u51fa\u3055\u308c\u305f\u8981\u7d20\u3092\u9806\u6b21\u8a18\u9332\u3057\u3066\u3001\u6700\u5c0f\u304b\u3089\u6700\u5927\u307e\u3067\u306e\u30bd\u30fc\u30c8\u6e08\u307f\u30ea\u30b9\u30c8\u3092\u53d6\u5f97\u3057\u307e\u3059\u3002

\u4e0a\u8a18\u306e\u65b9\u6cd5\u306f\u5b9f\u73fe\u53ef\u80fd\u3067\u3059\u304c\u3001\u30dd\u30c3\u30d7\u3055\u308c\u305f\u8981\u7d20\u3092\u683c\u7d0d\u3059\u308b\u305f\u3081\u306e\u8ffd\u52a0\u306e\u914d\u5217\u304c\u5fc5\u8981\u3067\u3001\u3084\u3084\u7a7a\u9593\u3092\u6d88\u8cbb\u3057\u307e\u3059\u3002\u5b9f\u969b\u306b\u306f\u3001\u901a\u5e38\u3001\u3088\u308a\u512a\u96c5\u306a\u5b9f\u88c5\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002

"},{"location":"chapter_sorting/heap_sort/#1171","title":"11.7.1 \u00a0 \u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u6d41\u308c","text":"

\u914d\u5217\u306e\u9577\u3055\u3092 \\(n\\) \u3068\u3059\u308b\u3068\u3001\u30d2\u30fc\u30d7\u30bd\u30fc\u30c8\u306e\u904e\u7a0b\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\u3002

  1. \u914d\u5217\u3092\u5165\u529b\u3057\u3001\u6700\u5927\u30d2\u30fc\u30d7\u3092\u69cb\u7bc9\u3057\u307e\u3059\u3002\u3053\u306e\u624b\u9806\u306e\u5f8c\u3001\u6700\u5927\u8981\u7d20\u304c\u30d2\u30fc\u30d7\u306e\u9802\u4e0a\u306b\u4f4d\u7f6e\u3057\u307e\u3059\u3002
  2. \u30d2\u30fc\u30d7\u306e\u9802\u4e0a\u8981\u7d20\uff08\u6700\u521d\u306e\u8981\u7d20\uff09\u3068\u30d2\u30fc\u30d7\u306e\u5e95\u90e8\u8981\u7d20\uff08\u6700\u5f8c\u306e\u8981\u7d20\uff09\u3092\u4ea4\u63db\u3057\u307e\u3059\u3002\u3053\u306e\u4ea4\u63db\u306e\u5f8c\u3001\u30d2\u30fc\u30d7\u306e\u9577\u3055\u3092 \\(1\\) \u6e1b\u3089\u3057\u3001\u30bd\u30fc\u30c8\u6e08\u307f\u8981\u7d20\u306e\u6570\u3092 \\(1\\) \u5897\u3084\u3057\u307e\u3059\u3002
  3. \u30d2\u30fc\u30d7\u306e\u9802\u4e0a\u304b\u3089\u958b\u59cb\u3057\u3066\u3001\u4e0a\u304b\u3089\u4e0b\u3078\u306esift-down\u64cd\u4f5c\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002sift-down\u306e\u5f8c\u3001\u30d2\u30fc\u30d7\u306e\u6027\u8cea\u304c\u5fa9\u5143\u3055\u308c\u307e\u3059\u3002
  4. \u624b\u9806 2. \u3068 3. \u3092\u7e70\u308a\u8fd4\u3057\u307e\u3059\u3002\\(n - 1\\) \u30e9\u30a6\u30f3\u30c9\u30eb\u30fc\u30d7\u3057\u3066\u3001\u914d\u5217\u306e\u30bd\u30fc\u30c8\u3092\u5b8c\u4e86\u3057\u307e\u3059\u3002

Tip

\u5b9f\u969b\u3001\u8981\u7d20\u62bd\u51fa\u64cd\u4f5c\u3082\u624b\u9806 2. \u3068 3. \u3092\u542b\u307f\u3001\u62bd\u51fa\u3055\u308c\u305f\u8981\u7d20\u3092\u30d2\u30fc\u30d7\u304b\u3089\u524a\u9664\u3059\u308b\u8ffd\u52a0\u306e\u624b\u9806\u304c\u3042\u308a\u307e\u3059\u3002

<1><2><3><4><5><6><7><8><9><10><11><12>

\u56f3 11-12 \u00a0 \u30d2\u30fc\u30d7\u30bd\u30fc\u30c8\u306e\u904e\u7a0b

\u30b3\u30fc\u30c9\u306e\u5b9f\u88c5\u3067\u306f\u3001\u300c\u30d2\u30fc\u30d7\u300d\u306e\u7ae0\u304b\u3089\u306esift-down\u95a2\u6570 sift_down() \u3092\u4f7f\u7528\u3057\u307e\u3057\u305f\u3002\u6700\u5927\u8981\u7d20\u304c\u62bd\u51fa\u3055\u308c\u308b\u306b\u3064\u308c\u3066\u30d2\u30fc\u30d7\u306e\u9577\u3055\u304c\u6e1b\u5c11\u3059\u308b\u305f\u3081\u3001sift_down() \u95a2\u6570\u306b\u9577\u3055\u30d1\u30e9\u30e1\u30fc\u30bf \\(n\\) \u3092\u8ffd\u52a0\u3057\u3066\u3001\u30d2\u30fc\u30d7\u306e\u73fe\u5728\u306e\u6709\u52b9\u9577\u3092\u6307\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u3053\u3068\u306b\u6ce8\u610f\u3059\u308b\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002\u30b3\u30fc\u30c9\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby heap_sort.py
def sift_down(nums: list[int], n: int, i: int):\n    \"\"\"\u30d2\u30fc\u30d7\u306e\u9577\u3055\u304c n\u3001\u30ce\u30fc\u30c9 i \u304b\u3089\u4e0a\u304b\u3089\u4e0b\u3078\u30d2\u30fc\u30d7\u5316\u3092\u958b\u59cb\"\"\"\n    while True:\n        # i\u3001l\u3001r \u306e\u4e2d\u3067\u6700\u5927\u306e\u30ce\u30fc\u30c9\u3092\u5224\u5b9a\u3057\u3001ma \u3068\u3059\u308b\n        l = 2 * i + 1\n        r = 2 * i + 2\n        ma = i\n        if l < n and nums[l] > nums[ma]:\n            ma = l\n        if r < n and nums[r] > nums[ma]:\n            ma = r\n        # \u30ce\u30fc\u30c9 i \u304c\u6700\u5927\u307e\u305f\u306f l\u3001r \u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u304c\u7bc4\u56f2\u5916\u306e\u5834\u5408\u3001\u3055\u3089\u306a\u308b\u30d2\u30fc\u30d7\u5316\u306f\u4e0d\u8981\u3001\u30eb\u30fc\u30d7\u3092\u629c\u3051\u308b\n        if ma == i:\n            break\n        # 2\u3064\u306e\u30ce\u30fc\u30c9\u3092\u4ea4\u63db\n        nums[i], nums[ma] = nums[ma], nums[i]\n        # \u4e0b\u5411\u304d\u306b\u30d2\u30fc\u30d7\u5316\u3092\u30eb\u30fc\u30d7\n        i = ma\n\ndef heap_sort(nums: list[int]):\n    \"\"\"\u30d2\u30fc\u30d7\u30bd\u30fc\u30c8\"\"\"\n    # \u30d2\u30fc\u30d7\u69cb\u7bc9\u64cd\u4f5c\uff1a\u8449\u30ce\u30fc\u30c9\u4ee5\u5916\u306e\u3059\u3079\u3066\u306e\u30ce\u30fc\u30c9\u3092\u30d2\u30fc\u30d7\u5316\n    for i in range(len(nums) // 2 - 1, -1, -1):\n        sift_down(nums, len(nums), i)\n    # \u30d2\u30fc\u30d7\u304b\u3089\u6700\u5927\u8981\u7d20\u3092\u62bd\u51fa\u3057\u3001n-1 \u56de\u7e70\u308a\u8fd4\u3059\n    for i in range(len(nums) - 1, 0, -1):\n        # \u30eb\u30fc\u30c8\u30ce\u30fc\u30c9\u3068\u6700\u3082\u53f3\u306e\u8449\u30ce\u30fc\u30c9\u3092\u4ea4\u63db\uff08\u6700\u521d\u306e\u8981\u7d20\u3068\u6700\u5f8c\u306e\u8981\u7d20\u3092\u4ea4\u63db\uff09\n        nums[0], nums[i] = nums[i], nums[0]\n        # \u30eb\u30fc\u30c8\u30ce\u30fc\u30c9\u304b\u3089\u4e0a\u304b\u3089\u4e0b\u3078\u30d2\u30fc\u30d7\u5316\u3092\u958b\u59cb\n        sift_down(nums, i, 0)\n
heap_sort.cpp
/* \u30d2\u30fc\u30d7\u306e\u9577\u3055\u306fn\u3001\u30ce\u30fc\u30c9i\u304b\u3089\u4e0a\u304b\u3089\u4e0b\u3078\u30d2\u30fc\u30d7\u5316\u3092\u958b\u59cb */\nvoid siftDown(vector<int> &nums, int n, int i) {\n    while (true) {\n        // i\u3001l\u3001r \u306e\u4e2d\u3067\u6700\u5927\u306e\u30ce\u30fc\u30c9\u3092\u6c7a\u5b9a\u3057\u3001ma\u3068\u3057\u3066\u8a18\u9332\n        int l = 2 * i + 1;\n        int r = 2 * i + 2;\n        int ma = i;\n        if (l < n && nums[l] > nums[ma])\n            ma = l;\n        if (r < n && nums[r] > nums[ma])\n            ma = r;\n        // \u30ce\u30fc\u30c9i\u304c\u6700\u5927\u304b\u3001\u30a4\u30f3\u30c7\u30c3\u30af\u30b9l\u3001r\u304c\u5883\u754c\u5916\u306e\u5834\u5408\u3001\u305d\u308c\u4ee5\u4e0a\u306e\u30d2\u30fc\u30d7\u5316\u306f\u4e0d\u8981\u3067\u7d42\u4e86\n        if (ma == i) {\n            break;\n        }\n        // \u4e8c\u3064\u306e\u30ce\u30fc\u30c9\u3092\u4ea4\u63db\n        swap(nums[i], nums[ma]);\n        // \u4e0b\u5411\u304d\u306b\u30d2\u30fc\u30d7\u5316\u3092\u30eb\u30fc\u30d7\n        i = ma;\n    }\n}\n\n/* \u30d2\u30fc\u30d7\u30bd\u30fc\u30c8 */\nvoid heapSort(vector<int> &nums) {\n    // \u30d2\u30fc\u30d7\u69cb\u7bc9\u64cd\u4f5c\uff1a\u8449\u4ee5\u5916\u306e\u3059\u3079\u3066\u306e\u30ce\u30fc\u30c9\u3092\u30d2\u30fc\u30d7\u5316\n    for (int i = nums.size() / 2 - 1; i >= 0; --i) {\n        siftDown(nums, nums.size(), i);\n    }\n    // \u30d2\u30fc\u30d7\u304b\u3089\u6700\u5927\u8981\u7d20\u3092\u62bd\u51fa\u3057\u3001n-1\u56de\u7e70\u308a\u8fd4\u3059\n    for (int i = nums.size() - 1; i > 0; --i) {\n        // \u30eb\u30fc\u30c8\u30ce\u30fc\u30c9\u3092\u6700\u53f3\u8449\u30ce\u30fc\u30c9\u3068\u4ea4\u63db\uff08\u6700\u521d\u306e\u8981\u7d20\u3092\u6700\u5f8c\u306e\u8981\u7d20\u3068\u4ea4\u63db\uff09\n        swap(nums[0], nums[i]);\n        // \u30eb\u30fc\u30c8\u30ce\u30fc\u30c9\u304b\u3089\u4e0a\u304b\u3089\u4e0b\u3078\u30d2\u30fc\u30d7\u5316\u3092\u958b\u59cb\n        siftDown(nums, i, 0);\n    }\n}\n
heap_sort.java
/* \u30d2\u30fc\u30d7\u306e\u9577\u3055\u306f n\u3001\u30ce\u30fc\u30c9 i \u304b\u3089\u4e0a\u304b\u3089\u4e0b\u3078\u30d2\u30fc\u30d7\u5316\u958b\u59cb */\nvoid siftDown(int[] nums, int n, int i) {\n    while (true) {\n        // i, l, r \u306e\u4e2d\u3067\u6700\u5927\u306e\u30ce\u30fc\u30c9\u3092\u5224\u5b9a\u3057\u3001ma \u3068\u3059\u308b\n        int l = 2 * i + 1;\n        int r = 2 * i + 2;\n        int ma = i;\n        if (l < n && nums[l] > nums[ma])\n            ma = l;\n        if (r < n && nums[r] > nums[ma])\n            ma = r;\n        // \u30ce\u30fc\u30c9 i \u304c\u6700\u5927\u3001\u307e\u305f\u306f\u30a4\u30f3\u30c7\u30c3\u30af\u30b9 l, r \u304c\u7bc4\u56f2\u5916\u306e\u5834\u5408\u3001\u3055\u3089\u306a\u308b\u30d2\u30fc\u30d7\u5316\u306f\u4e0d\u8981\u3001\u30d6\u30ec\u30fc\u30af\n        if (ma == i)\n            break;\n        // 2\u3064\u306e\u30ce\u30fc\u30c9\u3092\u4ea4\u63db\n        int temp = nums[i];\n        nums[i] = nums[ma];\n        nums[ma] = temp;\n        // \u4e0b\u5411\u304d\u306b\u30d2\u30fc\u30d7\u5316\u3092\u30eb\u30fc\u30d7\n        i = ma;\n    }\n}\n\n/* \u30d2\u30fc\u30d7\u30bd\u30fc\u30c8 */\nvoid heapSort(int[] nums) {\n    // \u30d2\u30fc\u30d7\u69cb\u7bc9\u64cd\u4f5c: \u8449\u30ce\u30fc\u30c9\u4ee5\u5916\u306e\u3059\u3079\u3066\u306e\u30ce\u30fc\u30c9\u3092\u30d2\u30fc\u30d7\u5316\n    for (int i = nums.length / 2 - 1; i >= 0; i--) {\n        siftDown(nums, nums.length, i);\n    }\n    // \u30d2\u30fc\u30d7\u304b\u3089\u6700\u5927\u8981\u7d20\u3092\u62bd\u51fa\u3057\u3001n-1 \u56de\u7e70\u308a\u8fd4\u3057\n    for (int i = nums.length - 1; i > 0; i--) {\n        // \u30eb\u30fc\u30c8\u30ce\u30fc\u30c9\u3068\u6700\u3082\u53f3\u306e\u8449\u30ce\u30fc\u30c9\u3092\u4ea4\u63db\uff08\u6700\u521d\u306e\u8981\u7d20\u3068\u6700\u5f8c\u306e\u8981\u7d20\u3092\u4ea4\u63db\uff09\n        int tmp = nums[0];\n        nums[0] = nums[i];\n        nums[i] = tmp;\n        // \u30eb\u30fc\u30c8\u30ce\u30fc\u30c9\u304b\u3089\u4e0a\u304b\u3089\u4e0b\u3078\u30d2\u30fc\u30d7\u5316\u958b\u59cb\n        siftDown(nums, i, 0);\n    }\n}\n
heap_sort.cs
[class]{heap_sort}-[func]{SiftDown}\n\n[class]{heap_sort}-[func]{HeapSort}\n
heap_sort.go
[class]{}-[func]{siftDown}\n\n[class]{}-[func]{heapSort}\n
heap_sort.swift
[class]{}-[func]{siftDown}\n\n[class]{}-[func]{heapSort}\n
heap_sort.js
[class]{}-[func]{siftDown}\n\n[class]{}-[func]{heapSort}\n
heap_sort.ts
[class]{}-[func]{siftDown}\n\n[class]{}-[func]{heapSort}\n
heap_sort.dart
[class]{}-[func]{siftDown}\n\n[class]{}-[func]{heapSort}\n
heap_sort.rs
[class]{}-[func]{sift_down}\n\n[class]{}-[func]{heap_sort}\n
heap_sort.c
[class]{}-[func]{siftDown}\n\n[class]{}-[func]{heapSort}\n
heap_sort.kt
[class]{}-[func]{siftDown}\n\n[class]{}-[func]{heapSort}\n
heap_sort.rb
[class]{}-[func]{sift_down}\n\n[class]{}-[func]{heap_sort}\n
"},{"location":"chapter_sorting/heap_sort/#1172","title":"11.7.2 \u00a0 \u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u7279\u5fb4","text":""},{"location":"chapter_sorting/insertion_sort/","title":"11.4 \u00a0 \u633f\u5165\u30bd\u30fc\u30c8","text":"

\u633f\u5165\u30bd\u30fc\u30c8\u306f\u3001\u30c8\u30e9\u30f3\u30d7\u306e\u30c7\u30c3\u30ad\u3092\u624b\u52d5\u3067\u30bd\u30fc\u30c8\u3059\u308b\u30d7\u30ed\u30bb\u30b9\u306b\u3088\u304f\u4f3c\u305f\u52d5\u4f5c\u3092\u3059\u308b\u30b7\u30f3\u30d7\u30eb\u306a\u30bd\u30fc\u30c8\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3067\u3059\u3002

\u5177\u4f53\u7684\u306b\u306f\u3001\u672a\u30bd\u30fc\u30c8\u533a\u9593\u304b\u3089\u30d9\u30fc\u30b9\u8981\u7d20\u3092\u9078\u629e\u3057\u3001\u305d\u306e\u5de6\u5074\u306e\u30bd\u30fc\u30c8\u6e08\u307f\u533a\u9593\u306e\u8981\u7d20\u3068\u6bd4\u8f03\u3057\u3066\u3001\u8981\u7d20\u3092\u6b63\u3057\u3044\u4f4d\u7f6e\u306b\u633f\u5165\u3057\u307e\u3059\u3002

\u4e0b\u56f3\u306f\u3001\u8981\u7d20\u304c\u914d\u5217\u306b\u633f\u5165\u3055\u308c\u308b\u65b9\u6cd5\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002\u30d9\u30fc\u30b9\u8981\u7d20\u3092base\u3068\u3059\u308b\u3068\u3001\u30bf\u30fc\u30b2\u30c3\u30c8\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u304b\u3089base\u307e\u3067\u306e\u3059\u3079\u3066\u306e\u8981\u7d20\u3092\u53f3\u306b1\u3064\u305a\u3064\u30b7\u30d5\u30c8\u3057\u3001\u305d\u306e\u5f8cbase\u3092\u30bf\u30fc\u30b2\u30c3\u30c8\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306b\u5272\u308a\u5f53\u3066\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

\u56f3 11-6 \u00a0 Single insertion operation

"},{"location":"chapter_sorting/insertion_sort/#1141","title":"11.4.1 \u00a0 \u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u30d7\u30ed\u30bb\u30b9","text":"

\u633f\u5165\u30bd\u30fc\u30c8\u306e\u5168\u4f53\u7684\u306a\u30d7\u30ed\u30bb\u30b9\u306f\u4e0b\u56f3\u306b\u793a\u3055\u308c\u307e\u3059\u3002

  1. \u914d\u5217\u306e\u6700\u521d\u306e\u8981\u7d20\u3092\u30bd\u30fc\u30c8\u6e08\u307f\u3068\u307f\u306a\u3057\u307e\u3059\u3002
  2. 2\u756a\u76ee\u306e\u8981\u7d20\u3092base\u3068\u3057\u3066\u9078\u629e\u3057\u3001\u6b63\u3057\u3044\u4f4d\u7f6e\u306b\u633f\u5165\u3057\u3066\u3001\u6700\u521d\u306e2\u3064\u306e\u8981\u7d20\u3092\u30bd\u30fc\u30c8\u6e08\u307f\u306b\u3057\u307e\u3059\u3002
  3. 3\u756a\u76ee\u306e\u8981\u7d20\u3092base\u3068\u3057\u3066\u9078\u629e\u3057\u3001\u6b63\u3057\u3044\u4f4d\u7f6e\u306b\u633f\u5165\u3057\u3066\u3001\u6700\u521d\u306e3\u3064\u306e\u8981\u7d20\u3092\u30bd\u30fc\u30c8\u6e08\u307f\u306b\u3057\u307e\u3059\u3002
  4. \u3053\u306e\u65b9\u6cd5\u3067\u7d9a\u884c\u3057\u3001\u6700\u5f8c\u306e\u53cd\u5fa9\u3067\u306f\u3001\u6700\u5f8c\u306e\u8981\u7d20\u3092base\u3068\u3057\u3066\u53d6\u308a\u3001\u6b63\u3057\u3044\u4f4d\u7f6e\u306b\u633f\u5165\u3057\u305f\u5f8c\u3001\u3059\u3079\u3066\u306e\u8981\u7d20\u304c\u30bd\u30fc\u30c8\u3055\u308c\u307e\u3059\u3002

\u56f3 11-7 \u00a0 Insertion sort process

\u30b3\u30fc\u30c9\u4f8b\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby insertion_sort.py
def insertion_sort(nums: list[int]):\n    \"\"\"\u633f\u5165\u30bd\u30fc\u30c8\"\"\"\n    # \u5916\u5074\u306e\u30eb\u30fc\u30d7\uff1a\u30bd\u30fc\u30c8\u6e08\u307f\u7bc4\u56f2\u306f [0, i-1]\n    for i in range(1, len(nums)):\n        base = nums[i]\n        j = i - 1\n        # \u5185\u5074\u306e\u30eb\u30fc\u30d7\uff1abase \u3092\u30bd\u30fc\u30c8\u6e08\u307f\u7bc4\u56f2 [0, i-1] \u306e\u6b63\u3057\u3044\u4f4d\u7f6e\u306b\u633f\u5165\n        while j >= 0 and nums[j] > base:\n            nums[j + 1] = nums[j]  # nums[j] \u3092\u53f3\u306b1\u3064\u79fb\u52d5\n            j -= 1\n        nums[j + 1] = base  # base \u3092\u6b63\u3057\u3044\u4f4d\u7f6e\u306b\u4ee3\u5165\n
insertion_sort.cpp
/* \u633f\u5165\u30bd\u30fc\u30c8 */\nvoid insertionSort(vector<int> &nums) {\n    // \u5916\u5074\u30eb\u30fc\u30d7\uff1a\u30bd\u30fc\u30c8\u6e08\u307f\u7bc4\u56f2\u306f[0, i-1]\n    for (int i = 1; i < nums.size(); i++) {\n        int base = nums[i], j = i - 1;\n        // \u5185\u5074\u30eb\u30fc\u30d7\uff1abase\u3092\u30bd\u30fc\u30c8\u6e08\u307f\u7bc4\u56f2[0, i-1]\u5185\u306e\u6b63\u3057\u3044\u4f4d\u7f6e\u306b\u633f\u5165\n        while (j >= 0 && nums[j] > base) {\n            nums[j + 1] = nums[j]; // nums[j]\u3092\u4e00\u3064\u53f3\u306b\u79fb\u52d5\n            j--;\n        }\n        nums[j + 1] = base; // base\u3092\u6b63\u3057\u3044\u4f4d\u7f6e\u306b\u4ee3\u5165\n    }\n}\n
insertion_sort.java
/* \u633f\u5165\u30bd\u30fc\u30c8 */\nvoid insertionSort(int[] nums) {\n    // \u5916\u5074\u30eb\u30fc\u30d7: \u30bd\u30fc\u30c8\u6e08\u307f\u7bc4\u56f2\u306f [0, i-1]\n    for (int i = 1; i < nums.length; i++) {\n        int base = nums[i], j = i - 1;\n        // \u5185\u5074\u30eb\u30fc\u30d7: base \u3092\u30bd\u30fc\u30c8\u6e08\u307f\u7bc4\u56f2 [0, i-1] \u306e\u6b63\u3057\u3044\u4f4d\u7f6e\u306b\u633f\u5165\n        while (j >= 0 && nums[j] > base) {\n            nums[j + 1] = nums[j]; // nums[j] \u3092\u53f3\u306b1\u3064\u79fb\u52d5\n            j--;\n        }\n        nums[j + 1] = base;        // base \u3092\u6b63\u3057\u3044\u4f4d\u7f6e\u306b\u4ee3\u5165\n    }\n}\n
insertion_sort.cs
[class]{insertion_sort}-[func]{InsertionSort}\n
insertion_sort.go
[class]{}-[func]{insertionSort}\n
insertion_sort.swift
[class]{}-[func]{insertionSort}\n
insertion_sort.js
[class]{}-[func]{insertionSort}\n
insertion_sort.ts
[class]{}-[func]{insertionSort}\n
insertion_sort.dart
[class]{}-[func]{insertionSort}\n
insertion_sort.rs
[class]{}-[func]{insertion_sort}\n
insertion_sort.c
[class]{}-[func]{insertionSort}\n
insertion_sort.kt
[class]{}-[func]{insertionSort}\n
insertion_sort.rb
[class]{}-[func]{insertion_sort}\n
"},{"location":"chapter_sorting/insertion_sort/#1142","title":"11.4.2 \u00a0 \u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u7279\u6027","text":""},{"location":"chapter_sorting/insertion_sort/#1143","title":"11.4.3 \u00a0 \u633f\u5165\u30bd\u30fc\u30c8\u306e\u5229\u70b9","text":"

\u633f\u5165\u30bd\u30fc\u30c8\u306e\u6642\u9593\u8a08\u7b97\u91cf\u306f\\(O(n^2)\\)\u3067\u3001\u6b21\u306b\u5b66\u7fd2\u3059\u308b\u30af\u30a4\u30c3\u30af\u30bd\u30fc\u30c8\u306e\u6642\u9593\u8a08\u7b97\u91cf\u306f\\(O(n \\log n)\\)\u3067\u3059\u3002\u633f\u5165\u30bd\u30fc\u30c8\u306f\u3088\u308a\u9ad8\u3044\u6642\u9593\u8a08\u7b97\u91cf\u3092\u6301\u3061\u307e\u3059\u304c\u3001\u5c0f\u3055\u306a\u5165\u529b\u30b5\u30a4\u30ba\u3067\u306f\u901a\u5e38\u3088\u308a\u9ad8\u901f\u3067\u3059\u3002

\u3053\u306e\u7d50\u8ad6\u306f\u7dda\u5f62\u63a2\u7d22\u3068\u4e8c\u5206\u63a2\u7d22\u306e\u7d50\u8ad6\u3068\u4f3c\u3066\u3044\u307e\u3059\u3002\u6642\u9593\u8a08\u7b97\u91cf\u304c\\(O(n \\log n)\\)\u3067\u5206\u5272\u7d71\u6cbb\u6226\u7565\u306b\u57fa\u3065\u304f\u30af\u30a4\u30c3\u30af\u30bd\u30fc\u30c8\u306a\u3069\u306e\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306f\u3001\u591a\u304f\u306e\u5834\u5408\u3088\u308a\u591a\u304f\u306e\u5358\u4f4d\u64cd\u4f5c\u3092\u542b\u307f\u307e\u3059\u3002\u5c0f\u3055\u306a\u5165\u529b\u30b5\u30a4\u30ba\u3067\u306f\u3001\\(n^2\\)\u3068\\(n \\log n\\)\u306e\u6570\u5024\u306f\u8fd1\u304f\u3001\u8a08\u7b97\u91cf\u304c\u652f\u914d\u7684\u3067\u306a\u304f\u3001\u30e9\u30a6\u30f3\u30c9\u3042\u305f\u308a\u306e\u5358\u4f4d\u64cd\u4f5c\u6570\u304c\u6c7a\u5b9a\u7684\u306a\u5f79\u5272\u3092\u679c\u305f\u3057\u307e\u3059\u3002

\u5b9f\u969b\u3001\u591a\u304f\u306e\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\uff08Java\u306a\u3069\uff09\u306f\u3001\u7d44\u307f\u8fbc\u307f\u30bd\u30fc\u30c8\u95a2\u6570\u5185\u3067\u633f\u5165\u30bd\u30fc\u30c8\u3092\u4f7f\u7528\u3057\u3066\u3044\u307e\u3059\u3002\u4e00\u822c\u7684\u306a\u30a2\u30d7\u30ed\u30fc\u30c1\u306f\uff1a\u9577\u3044\u914d\u5217\u306b\u5bfe\u3057\u3066\u306f\u3001\u30af\u30a4\u30c3\u30af\u30bd\u30fc\u30c8\u306a\u3069\u306e\u5206\u5272\u7d71\u6cbb\u6226\u7565\u306b\u57fa\u3065\u304f\u30bd\u30fc\u30c8\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3092\u4f7f\u7528\u3057\u3001\u77ed\u3044\u914d\u5217\u306b\u5bfe\u3057\u3066\u306f\u633f\u5165\u30bd\u30fc\u30c8\u3092\u76f4\u63a5\u4f7f\u7528\u3057\u307e\u3059\u3002

\u30d0\u30d6\u30eb\u30bd\u30fc\u30c8\u3001\u9078\u629e\u30bd\u30fc\u30c8\u3001\u633f\u5165\u30bd\u30fc\u30c8\u306f\u3059\u3079\u3066\u6642\u9593\u8a08\u7b97\u91cf\\(O(n^2)\\)\u3092\u6301\u3061\u307e\u3059\u304c\u3001\u5b9f\u969b\u306b\u306f\u3001\u633f\u5165\u30bd\u30fc\u30c8\u306f\u30d0\u30d6\u30eb\u30bd\u30fc\u30c8\u3084\u9078\u629e\u30bd\u30fc\u30c8\u3088\u308a\u3082\u4e00\u822c\u7684\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002\u4e3b\u306a\u7406\u7531\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\u3002

"},{"location":"chapter_sorting/merge_sort/","title":"11.6 \u00a0 \u30de\u30fc\u30b8\u30bd\u30fc\u30c8","text":"

\u30de\u30fc\u30b8\u30bd\u30fc\u30c8\u306f\u5206\u5272\u7d71\u6cbb\u6226\u7565\u306b\u57fa\u3065\u304f\u30bd\u30fc\u30c8\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3067\u3001\u4e0b\u56f3\u306b\u793a\u3059\u300c\u5206\u5272\u300d\u3068\u300c\u30de\u30fc\u30b8\u300d\u30d5\u30a7\u30fc\u30ba\u3092\u542b\u307f\u307e\u3059\u3002

  1. \u5206\u5272\u30d5\u30a7\u30fc\u30ba\uff1a\u4e2d\u70b9\u304b\u3089\u914d\u5217\u3092\u518d\u5e30\u7684\u306b\u5206\u5272\u3057\u3001\u9577\u3044\u914d\u5217\u306e\u30bd\u30fc\u30c8\u554f\u984c\u3092\u3088\u308a\u77ed\u3044\u914d\u5217\u306b\u5909\u63db\u3057\u307e\u3059\u3002
  2. \u30de\u30fc\u30b8\u30d5\u30a7\u30fc\u30ba\uff1a\u30b5\u30d6\u914d\u5217\u306e\u9577\u3055\u304c1\u306b\u306a\u3063\u305f\u3068\u304d\u306b\u5206\u5272\u3092\u505c\u6b62\u3057\u3001\u305d\u306e\u5f8c\u30de\u30fc\u30b8\u3092\u958b\u59cb\u3057\u307e\u3059\u30022\u3064\u306e\u77ed\u3044\u30bd\u30fc\u30c8\u6e08\u307f\u914d\u5217\u3092\u9023\u7d9a\u7684\u306b\u3088\u308a\u9577\u3044\u30bd\u30fc\u30c8\u6e08\u307f\u914d\u5217\u306b\u30de\u30fc\u30b8\u3057\u3001\u30d7\u30ed\u30bb\u30b9\u304c\u5b8c\u4e86\u3059\u308b\u307e\u3067\u7d9a\u884c\u3057\u307e\u3059\u3002

\u56f3 11-10 \u00a0 The divide and merge phases of merge sort

"},{"location":"chapter_sorting/merge_sort/#1161","title":"11.6.1 \u00a0 \u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u30ef\u30fc\u30af\u30d5\u30ed\u30fc","text":"

\u4e0b\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u300c\u5206\u5272\u30d5\u30a7\u30fc\u30ba\u300d\u306f\u4e2d\u70b9\u304b\u3089\u914d\u5217\u3092\u4e0a\u304b\u3089\u4e0b\u306b2\u3064\u306e\u30b5\u30d6\u914d\u5217\u306b\u518d\u5e30\u7684\u306b\u5206\u5272\u3057\u307e\u3059\u3002

  1. \u4e2d\u70b9mid\u3092\u8a08\u7b97\u3057\u3001\u5de6\u30b5\u30d6\u914d\u5217\uff08\u533a\u9593[left, mid]\uff09\u3068\u53f3\u30b5\u30d6\u914d\u5217\uff08\u533a\u9593[mid + 1, right]\uff09\u3092\u518d\u5e30\u7684\u306b\u5206\u5272\u3057\u307e\u3059\u3002
  2. \u30b5\u30d6\u914d\u5217\u306e\u9577\u3055\u304c1\u306b\u306a\u308b\u307e\u3067\u30b9\u30c6\u30c3\u30d71.\u3092\u518d\u5e30\u7684\u306b\u7d9a\u884c\u3057\u3001\u305d\u306e\u5f8c\u505c\u6b62\u3057\u307e\u3059\u3002

\u300c\u30de\u30fc\u30b8\u30d5\u30a7\u30fc\u30ba\u300d\u306f\u5de6\u3068\u53f3\u306e\u30b5\u30d6\u914d\u5217\u3092\u4e0b\u304b\u3089\u4e0a\u306b\u30bd\u30fc\u30c8\u6e08\u307f\u914d\u5217\u306b\u7d50\u5408\u3057\u307e\u3059\u3002\u91cd\u8981\u306a\u306e\u306f\u3001\u30de\u30fc\u30b8\u304c\u9577\u30551\u306e\u30b5\u30d6\u914d\u5217\u304b\u3089\u958b\u59cb\u3055\u308c\u3001\u30de\u30fc\u30b8\u30d5\u30a7\u30fc\u30ba\u4e2d\u306b\u5404\u30b5\u30d6\u914d\u5217\u304c\u30bd\u30fc\u30c8\u3055\u308c\u308b\u3053\u3068\u3067\u3059\u3002

<1><2><3><4><5><6><7><8><9><10>

\u56f3 11-11 \u00a0 Merge sort process

\u30de\u30fc\u30b8\u30bd\u30fc\u30c8\u306e\u518d\u5e30\u9806\u5e8f\u306f\u4e8c\u5206\u6728\u306e\u5f8c\u9806\u6a2a\u65ad\u3068\u4e00\u81f4\u3059\u308b\u3053\u3068\u304c\u89b3\u5bdf\u3067\u304d\u307e\u3059\u3002

\u30de\u30fc\u30b8\u30bd\u30fc\u30c8\u306e\u5b9f\u88c5\u306f\u4ee5\u4e0b\u306e\u30b3\u30fc\u30c9\u306b\u793a\u3055\u308c\u307e\u3059\u3002nums\u3067\u30de\u30fc\u30b8\u3055\u308c\u308b\u533a\u9593\u306f[left, right]\u3067\u3001tmp\u306e\u5bfe\u5fdc\u3059\u308b\u533a\u9593\u306f[0, right - left]\u3067\u3042\u308b\u3053\u3068\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby merge_sort.py
def merge(nums: list[int], left: int, mid: int, right: int):\n    \"\"\"\u5de6\u30b5\u30d6\u914d\u5217\u3068\u53f3\u30b5\u30d6\u914d\u5217\u3092\u30de\u30fc\u30b8\"\"\"\n    # \u5de6\u30b5\u30d6\u914d\u5217\u533a\u9593\u306f [left, mid]\u3001\u53f3\u30b5\u30d6\u914d\u5217\u533a\u9593\u306f [mid+1, right]\n    # \u4e00\u6642\u914d\u5217 tmp \u3092\u4f5c\u6210\u3057\u3066\u30de\u30fc\u30b8\u7d50\u679c\u3092\u683c\u7d0d\n    tmp = [0] * (right - left + 1)\n    # \u5de6\u53f3\u30b5\u30d6\u914d\u5217\u306e\u958b\u59cb\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u521d\u671f\u5316\n    i, j, k = left, mid + 1, 0\n    # \u4e21\u65b9\u306e\u30b5\u30d6\u914d\u5217\u306b\u8981\u7d20\u304c\u6b8b\u3063\u3066\u3044\u308b\u9593\u3001\u3088\u308a\u5c0f\u3055\u3044\u8981\u7d20\u3092\u4e00\u6642\u914d\u5217\u306b\u30b3\u30d4\u30fc\n    while i <= mid and j <= right:\n        if nums[i] <= nums[j]:\n            tmp[k] = nums[i]\n            i += 1\n        else:\n            tmp[k] = nums[j]\n            j += 1\n        k += 1\n    # \u6b8b\u3063\u305f\u5de6\u53f3\u30b5\u30d6\u914d\u5217\u306e\u8981\u7d20\u3092\u4e00\u6642\u914d\u5217\u306b\u30b3\u30d4\u30fc\n    while i <= mid:\n        tmp[k] = nums[i]\n        i += 1\n        k += 1\n    while j <= right:\n        tmp[k] = nums[j]\n        j += 1\n        k += 1\n    # \u4e00\u6642\u914d\u5217 tmp \u306e\u8981\u7d20\u3092\u5143\u306e\u914d\u5217 nums \u306e\u5bfe\u5fdc\u3059\u308b\u533a\u9593\u306b\u30b3\u30d4\u30fc\u30d0\u30c3\u30af\n    for k in range(0, len(tmp)):\n        nums[left + k] = tmp[k]\n\ndef merge_sort(nums: list[int], left: int, right: int):\n    \"\"\"\u30de\u30fc\u30b8\u30bd\u30fc\u30c8\"\"\"\n    # \u7d42\u4e86\u6761\u4ef6\n    if left >= right:\n        return  # \u30b5\u30d6\u914d\u5217\u306e\u9577\u3055\u304c1\u306e\u3068\u304d\u306b\u518d\u5e30\u3092\u7d42\u4e86\n    # \u5206\u5272\u6bb5\u968e\n    mid = left + (right - left) // 2  # \u4e2d\u70b9\u3092\u8a08\u7b97\n    merge_sort(nums, left, mid)  # \u5de6\u30b5\u30d6\u914d\u5217\u3092\u518d\u5e30\u7684\u306b\u51e6\u7406\n    merge_sort(nums, mid + 1, right)  # \u53f3\u30b5\u30d6\u914d\u5217\u3092\u518d\u5e30\u7684\u306b\u51e6\u7406\n    # \u30de\u30fc\u30b8\u6bb5\u968e\n    merge(nums, left, mid, right)\n
merge_sort.cpp
/* \u5de6\u30b5\u30d6\u914d\u5217\u3068\u53f3\u30b5\u30d6\u914d\u5217\u3092\u30de\u30fc\u30b8 */\nvoid merge(vector<int> &nums, int left, int mid, int right) {\n    // \u5de6\u30b5\u30d6\u914d\u5217\u306e\u533a\u9593\u306f[left, mid]\u3001\u53f3\u30b5\u30d6\u914d\u5217\u306e\u533a\u9593\u306f[mid+1, right]\n    // \u30de\u30fc\u30b8\u7d50\u679c\u3092\u4fdd\u5b58\u3059\u308b\u4e00\u6642\u914d\u5217tmp\u3092\u4f5c\u6210\n    vector<int> tmp(right - left + 1);\n    // \u5de6\u53f3\u30b5\u30d6\u914d\u5217\u306e\u958b\u59cb\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u521d\u671f\u5316\n    int i = left, j = mid + 1, k = 0;\n    // \u4e21\u30b5\u30d6\u914d\u5217\u306b\u8981\u7d20\u304c\u3042\u308b\u9593\u3001\u5c0f\u3055\u3044\u65b9\u306e\u8981\u7d20\u3092\u4e00\u6642\u914d\u5217\u306b\u30b3\u30d4\u30fc\n    while (i <= mid && j <= right) {\n        if (nums[i] <= nums[j])\n            tmp[k++] = nums[i++];\n        else\n            tmp[k++] = nums[j++];\n    }\n    // \u5de6\u53f3\u30b5\u30d6\u914d\u5217\u306e\u6b8b\u308a\u306e\u8981\u7d20\u3092\u4e00\u6642\u914d\u5217\u306b\u30b3\u30d4\u30fc\n    while (i <= mid) {\n        tmp[k++] = nums[i++];\n    }\n    while (j <= right) {\n        tmp[k++] = nums[j++];\n    }\n    // \u4e00\u6642\u914d\u5217tmp\u306e\u8981\u7d20\u3092\u5143\u306e\u914d\u5217nums\u306e\u5bfe\u5fdc\u3059\u308b\u533a\u9593\u306b\u30b3\u30d4\u30fc\n    for (k = 0; k < tmp.size(); k++) {\n        nums[left + k] = tmp[k];\n    }\n}\n\n/* \u30de\u30fc\u30b8\u30bd\u30fc\u30c8 */\nvoid mergeSort(vector<int> &nums, int left, int right) {\n    // \u7d42\u4e86\u6761\u4ef6\n    if (left >= right)\n        return; // \u30b5\u30d6\u914d\u5217\u306e\u9577\u3055\u304c1\u306e\u6642\u3001\u518d\u5e30\u3092\u7d42\u4e86\n    // \u5206\u5272\u6bb5\u968e\n    int mid = left + (right - left) / 2;    // \u4e2d\u70b9\u3092\u8a08\u7b97\n    mergeSort(nums, left, mid);      // \u5de6\u30b5\u30d6\u914d\u5217\u3092\u518d\u5e30\u7684\u306b\u51e6\u7406\n    mergeSort(nums, mid + 1, right); // \u53f3\u30b5\u30d6\u914d\u5217\u3092\u518d\u5e30\u7684\u306b\u51e6\u7406\n    // \u30de\u30fc\u30b8\u6bb5\u968e\n    merge(nums, left, mid, right);\n}\n
merge_sort.java
/* \u5de6\u90e8\u5206\u914d\u5217\u3068\u53f3\u90e8\u5206\u914d\u5217\u3092\u30de\u30fc\u30b8 */\nvoid merge(int[] nums, int left, int mid, int right) {\n    // \u5de6\u90e8\u5206\u914d\u5217\u533a\u9593\u306f [left, mid]\u3001\u53f3\u90e8\u5206\u914d\u5217\u533a\u9593\u306f [mid+1, right]\n    // \u4e00\u6642\u914d\u5217 tmp \u3092\u4f5c\u6210\u3057\u3066\u30de\u30fc\u30b8\u7d50\u679c\u3092\u683c\u7d0d\n    int[] tmp = new int[right - left + 1];\n    // \u5de6\u53f3\u90e8\u5206\u914d\u5217\u306e\u958b\u59cb\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u521d\u671f\u5316\n    int i = left, j = mid + 1, k = 0;\n    // \u4e21\u90e8\u5206\u914d\u5217\u306b\u307e\u3060\u8981\u7d20\u304c\u3042\u308b\u9593\u3001\u6bd4\u8f03\u3057\u3066\u3088\u308a\u5c0f\u3055\u3044\u8981\u7d20\u3092\u4e00\u6642\u914d\u5217\u306b\u30b3\u30d4\u30fc\n    while (i <= mid && j <= right) {\n        if (nums[i] <= nums[j])\n            tmp[k++] = nums[i++];\n        else\n            tmp[k++] = nums[j++];\n    }\n    // \u5de6\u53f3\u90e8\u5206\u914d\u5217\u306e\u6b8b\u308a\u306e\u8981\u7d20\u3092\u4e00\u6642\u914d\u5217\u306b\u30b3\u30d4\u30fc\n    while (i <= mid) {\n        tmp[k++] = nums[i++];\n    }\n    while (j <= right) {\n        tmp[k++] = nums[j++];\n    }\n    // \u4e00\u6642\u914d\u5217 tmp \u306e\u8981\u7d20\u3092\u5143\u306e\u914d\u5217 nums \u306e\u5bfe\u5fdc\u3059\u308b\u533a\u9593\u306b\u30b3\u30d4\u30fc\u30d0\u30c3\u30af\n    for (k = 0; k < tmp.length; k++) {\n        nums[left + k] = tmp[k];\n    }\n}\n\n/* \u30de\u30fc\u30b8\u30bd\u30fc\u30c8 */\nvoid mergeSort(int[] nums, int left, int right) {\n    // \u7d42\u4e86\u6761\u4ef6\n    if (left >= right)\n        return; // \u90e8\u5206\u914d\u5217\u306e\u9577\u3055\u304c 1 \u306e\u3068\u304d\u518d\u5e30\u3092\u7d42\u4e86\n    // \u5206\u5272\u6bb5\u968e\n    int mid = left + (right - left) / 2; // \u4e2d\u70b9\u3092\u8a08\u7b97\n    mergeSort(nums, left, mid); // \u5de6\u90e8\u5206\u914d\u5217\u3092\u518d\u5e30\u7684\u306b\u51e6\u7406\n    mergeSort(nums, mid + 1, right); // \u53f3\u90e8\u5206\u914d\u5217\u3092\u518d\u5e30\u7684\u306b\u51e6\u7406\n    // \u30de\u30fc\u30b8\u6bb5\u968e\n    merge(nums, left, mid, right);\n}\n
merge_sort.cs
[class]{merge_sort}-[func]{Merge}\n\n[class]{merge_sort}-[func]{MergeSort}\n
merge_sort.go
[class]{}-[func]{merge}\n\n[class]{}-[func]{mergeSort}\n
merge_sort.swift
[class]{}-[func]{merge}\n\n[class]{}-[func]{mergeSort}\n
merge_sort.js
[class]{}-[func]{merge}\n\n[class]{}-[func]{mergeSort}\n
merge_sort.ts
[class]{}-[func]{merge}\n\n[class]{}-[func]{mergeSort}\n
merge_sort.dart
[class]{}-[func]{merge}\n\n[class]{}-[func]{mergeSort}\n
merge_sort.rs
[class]{}-[func]{merge}\n\n[class]{}-[func]{merge_sort}\n
merge_sort.c
[class]{}-[func]{merge}\n\n[class]{}-[func]{mergeSort}\n
merge_sort.kt
[class]{}-[func]{merge}\n\n[class]{}-[func]{mergeSort}\n
merge_sort.rb
[class]{}-[func]{merge}\n\n[class]{}-[func]{merge_sort}\n
"},{"location":"chapter_sorting/merge_sort/#1162","title":"11.6.2 \u00a0 \u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u7279\u6027","text":""},{"location":"chapter_sorting/merge_sort/#1163","title":"11.6.3 \u00a0 \u9023\u7d50\u30ea\u30b9\u30c8\u306e\u30bd\u30fc\u30c8","text":"

\u9023\u7d50\u30ea\u30b9\u30c8\u306e\u5834\u5408\u3001\u30de\u30fc\u30b8\u30bd\u30fc\u30c8\u306f\u4ed6\u306e\u30bd\u30fc\u30c8\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3088\u308a\u3082\u5927\u304d\u306a\u5229\u70b9\u304c\u3042\u308a\u307e\u3059\u3002\u9023\u7d50\u30ea\u30b9\u30c8\u30bd\u30fc\u30c8\u30bf\u30b9\u30af\u306e\u7a7a\u9593\u8a08\u7b97\u91cf\u3092\\(O(1)\\)\u306b\u6700\u9069\u5316\u3067\u304d\u307e\u3059\u3002

\u5b9f\u88c5\u306e\u8a73\u7d30\u306f\u6bd4\u8f03\u7684\u8907\u96d1\u3067\u3001\u8208\u5473\u306e\u3042\u308b\u8aad\u8005\u306f\u95a2\u9023\u8cc7\u6599\u3092\u53c2\u7167\u3057\u3066\u5b66\u7fd2\u3057\u3066\u304f\u3060\u3055\u3044\u3002

"},{"location":"chapter_sorting/quick_sort/","title":"11.5 \u00a0 \u30af\u30a4\u30c3\u30af\u30bd\u30fc\u30c8","text":"

\u30af\u30a4\u30c3\u30af\u30bd\u30fc\u30c8\u306f\u5206\u5272\u7d71\u6cbb\u6226\u7565\u306b\u57fa\u3065\u304f\u30bd\u30fc\u30c8\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3067\u3001\u305d\u306e\u52b9\u7387\u6027\u3068\u5e45\u5e83\u3044\u5fdc\u7528\u3067\u77e5\u3089\u308c\u3066\u3044\u307e\u3059\u3002

\u30af\u30a4\u30c3\u30af\u30bd\u30fc\u30c8\u306e\u30b3\u30a2\u64cd\u4f5c\u306f\u300c\u30d4\u30dc\u30c3\u30c8\u5206\u5272\u300d\u3067\u3001\u914d\u5217\u304b\u3089\u8981\u7d20\u3092\u300c\u30d4\u30dc\u30c3\u30c8\u300d\u3068\u3057\u3066\u9078\u629e\u3057\u3001\u30d4\u30dc\u30c3\u30c8\u3088\u308a\u5c0f\u3055\u3044\u3059\u3079\u3066\u306e\u8981\u7d20\u3092\u305d\u306e\u5de6\u5074\u306b\u79fb\u52d5\u3057\u3001\u30d4\u30dc\u30c3\u30c8\u3088\u308a\u5927\u304d\u3044\u3059\u3079\u3066\u306e\u8981\u7d20\u3092\u305d\u306e\u53f3\u5074\u306b\u79fb\u52d5\u3059\u308b\u3053\u3068\u3092\u76ee\u7684\u3068\u3057\u3066\u3044\u307e\u3059\u3002\u5177\u4f53\u7684\u306b\u3001\u30d4\u30dc\u30c3\u30c8\u5206\u5272\u306e\u30d7\u30ed\u30bb\u30b9\u306f\u4e0b\u56f3\u306b\u793a\u3055\u308c\u307e\u3059\u3002

  1. \u914d\u5217\u306e\u6700\u3082\u5de6\u306e\u8981\u7d20\u3092\u30d4\u30dc\u30c3\u30c8\u3068\u3057\u3066\u9078\u629e\u3057\u30012\u3064\u306e\u30dd\u30a4\u30f3\u30bfi\u3068j\u3092\u521d\u671f\u5316\u3057\u3066\u914d\u5217\u306e\u4e21\u7aef\u3092\u305d\u308c\u305e\u308c\u6307\u3059\u3088\u3046\u306b\u3057\u307e\u3059\u3002
  2. \u5404\u30e9\u30a6\u30f3\u30c9\u3067i\uff08j\uff09\u3092\u4f7f\u7528\u3057\u3066\u30d4\u30dc\u30c3\u30c8\u3088\u308a\u5927\u304d\u3044\uff08\u5c0f\u3055\u3044\uff09\u6700\u521d\u306e\u8981\u7d20\u3092\u63a2\u7d22\u3057\u3001\u6b21\u306b\u3053\u308c\u30892\u3064\u306e\u8981\u7d20\u3092\u4ea4\u63db\u3059\u308b\u30eb\u30fc\u30d7\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002
  3. i\u3068j\u304c\u51fa\u4f1a\u3046\u307e\u3067\u30b9\u30c6\u30c3\u30d72.\u3092\u7e70\u308a\u8fd4\u3057\u3001\u6700\u5f8c\u306b\u30d4\u30dc\u30c3\u30c8\u30922\u3064\u306e\u30b5\u30d6\u914d\u5217\u306e\u5883\u754c\u306b\u4ea4\u63db\u3057\u307e\u3059\u3002
<1><2><3><4><5><6><7><8><9>

\u56f3 11-8 \u00a0 Pivot division process

\u30d4\u30dc\u30c3\u30c8\u5206\u5272\u5f8c\u3001\u5143\u306e\u914d\u5217\u306f3\u3064\u306e\u90e8\u5206\u306b\u5206\u5272\u3055\u308c\u307e\u3059\uff1a\u5de6\u30b5\u30d6\u914d\u5217\u3001\u30d4\u30dc\u30c3\u30c8\u3001\u53f3\u30b5\u30d6\u914d\u5217\u3067\u3001\u300c\u5de6\u30b5\u30d6\u914d\u5217\u306e\u4efb\u610f\u306e\u8981\u7d20 \\(\\leq\\) \u30d4\u30dc\u30c3\u30c8 \\(\\leq\\) \u53f3\u30b5\u30d6\u914d\u5217\u306e\u4efb\u610f\u306e\u8981\u7d20\u300d\u3092\u6e80\u305f\u3057\u307e\u3059\u3002\u3057\u305f\u304c\u3063\u3066\u3001\u3053\u308c\u30892\u3064\u306e\u30b5\u30d6\u914d\u5217\u306e\u307f\u3092\u30bd\u30fc\u30c8\u3059\u308c\u3070\u3088\u3044\u306e\u3067\u3059\u3002

\u30af\u30a4\u30c3\u30af\u30bd\u30fc\u30c8\u306e\u5206\u5272\u7d71\u6cbb\u6226\u7565

\u30d4\u30dc\u30c3\u30c8\u5206\u5272\u306e\u672c\u8cea\u306f\u3001\u3088\u308a\u9577\u3044\u914d\u5217\u306e\u30bd\u30fc\u30c8\u554f\u984c\u3092\u3088\u308a\u77ed\u30442\u3064\u306e\u914d\u5217\u306b\u7c21\u7d20\u5316\u3059\u308b\u3053\u3068\u3067\u3059\u3002

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby quick_sort.py
def partition(self, nums: list[int], left: int, right: int) -> int:\n    \"\"\"\u5206\u5272\"\"\"\n    # nums[left] \u3092\u30d4\u30dc\u30c3\u30c8\u3068\u3057\u3066\u4f7f\u7528\n    i, j = left, right\n    while i < j:\n        while i < j and nums[j] >= nums[left]:\n            j -= 1  # \u53f3\u304b\u3089\u5de6\u3078\u30d4\u30dc\u30c3\u30c8\u3088\u308a\u5c0f\u3055\u3044\u6700\u521d\u306e\u8981\u7d20\u3092\u63a2\u3059\n        while i < j and nums[i] <= nums[left]:\n            i += 1  # \u5de6\u304b\u3089\u53f3\u3078\u30d4\u30dc\u30c3\u30c8\u3088\u308a\u5927\u304d\u3044\u6700\u521d\u306e\u8981\u7d20\u3092\u63a2\u3059\n        # \u8981\u7d20\u3092\u4ea4\u63db\n        nums[i], nums[j] = nums[j], nums[i]\n    # \u30d4\u30dc\u30c3\u30c8\u30922\u3064\u306e\u30b5\u30d6\u914d\u5217\u306e\u5883\u754c\u306b\u4ea4\u63db\n    nums[i], nums[left] = nums[left], nums[i]\n    return i  # \u30d4\u30dc\u30c3\u30c8\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u8fd4\u3059\n
quick_sort.cpp
/* \u5206\u5272 */\nint partition(vector<int> &nums, int left, int right) {\n    // nums[left]\u3092\u30d4\u30dc\u30c3\u30c8\u3068\u3057\u3066\u4f7f\u7528\n    int i = left, j = right;\n    while (i < j) {\n        while (i < j && nums[j] >= nums[left])\n            j--; // \u53f3\u304b\u3089\u5de6\u3078\u30d4\u30dc\u30c3\u30c8\u3088\u308a\u5c0f\u3055\u3044\u6700\u521d\u306e\u8981\u7d20\u3092\u691c\u7d22\n        while (i < j && nums[i] <= nums[left])\n            i++;          // \u5de6\u304b\u3089\u53f3\u3078\u30d4\u30dc\u30c3\u30c8\u3088\u308a\u5927\u304d\u3044\u6700\u521d\u306e\u8981\u7d20\u3092\u691c\u7d22\n        swap(nums, i, j); // \u3053\u308c\u3089\u4e8c\u3064\u306e\u8981\u7d20\u3092\u4ea4\u63db\n    }\n    swap(nums, i, left); // \u30d4\u30dc\u30c3\u30c8\u3092\u4e8c\u3064\u306e\u30b5\u30d6\u914d\u5217\u306e\u5883\u754c\u306b\u4ea4\u63db\n    return i;            // \u30d4\u30dc\u30c3\u30c8\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u8fd4\u3059\n}\n
quick_sort.java
/* \u8981\u7d20\u3092\u4ea4\u63db */\nvoid swap(int[] nums, int i, int j) {\n    int tmp = nums[i];\n    nums[i] = nums[j];\n    nums[j] = tmp;\n}\n\n/* \u5206\u5272 */\nint partition(int[] nums, int left, int right) {\n    // nums[left] \u3092\u57fa\u6e96\u5024\u3068\u3057\u3066\u4f7f\u7528\n    int i = left, j = right;\n    while (i < j) {\n        while (i < j && nums[j] >= nums[left])\n            j--;          // \u53f3\u304b\u3089\u5de6\u3078\u3001\u57fa\u6e96\u5024\u3088\u308a\u5c0f\u3055\u3044\u6700\u521d\u306e\u8981\u7d20\u3092\u691c\u7d22\n        while (i < j && nums[i] <= nums[left])\n            i++;          // \u5de6\u304b\u3089\u53f3\u3078\u3001\u57fa\u6e96\u5024\u3088\u308a\u5927\u304d\u3044\u6700\u521d\u306e\u8981\u7d20\u3092\u691c\u7d22\n        swap(nums, i, j); // \u3053\u308c\u30892\u3064\u306e\u8981\u7d20\u3092\u4ea4\u63db\n    }\n    swap(nums, i, left);  // \u57fa\u6e96\u5024\u30922\u3064\u306e\u90e8\u5206\u914d\u5217\u306e\u5883\u754c\u306b\u4ea4\u63db\n    return i;             // \u57fa\u6e96\u5024\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u8fd4\u3059\n}\n
quick_sort.cs
[class]{quickSort}-[func]{Swap}\n\n[class]{quickSort}-[func]{Partition}\n
quick_sort.go
[class]{quickSort}-[func]{partition}\n
quick_sort.swift
[class]{}-[func]{partition}\n
quick_sort.js
[class]{QuickSort}-[func]{swap}\n\n[class]{QuickSort}-[func]{partition}\n
quick_sort.ts
[class]{QuickSort}-[func]{swap}\n\n[class]{QuickSort}-[func]{partition}\n
quick_sort.dart
[class]{QuickSort}-[func]{_swap}\n\n[class]{QuickSort}-[func]{_partition}\n
quick_sort.rs
[class]{QuickSort}-[func]{partition}\n
quick_sort.c
[class]{}-[func]{swap}\n\n[class]{}-[func]{partition}\n
quick_sort.kt
[class]{}-[func]{swap}\n\n[class]{}-[func]{partition}\n
quick_sort.rb
[class]{QuickSort}-[func]{partition}\n
"},{"location":"chapter_sorting/quick_sort/#1151","title":"11.5.1 \u00a0 \u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u30d7\u30ed\u30bb\u30b9","text":"

\u30af\u30a4\u30c3\u30af\u30bd\u30fc\u30c8\u306e\u5168\u4f53\u7684\u306a\u30d7\u30ed\u30bb\u30b9\u306f\u4e0b\u56f3\u306b\u793a\u3055\u308c\u307e\u3059\u3002

  1. \u307e\u305a\u3001\u5143\u306e\u914d\u5217\u306b\u5bfe\u3057\u3066\u300c\u30d4\u30dc\u30c3\u30c8\u5206\u5272\u300d\u3092\u5b9f\u884c\u3057\u3001\u672a\u30bd\u30fc\u30c8\u306e\u5de6\u3068\u53f3\u306e\u30b5\u30d6\u914d\u5217\u3092\u53d6\u5f97\u3057\u307e\u3059\u3002
  2. \u6b21\u306b\u3001\u5de6\u3068\u53f3\u306e\u30b5\u30d6\u914d\u5217\u306b\u5bfe\u3057\u3066\u305d\u308c\u305e\u308c\u518d\u5e30\u7684\u306b\u300c\u30d4\u30dc\u30c3\u30c8\u5206\u5272\u300d\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002
  3. \u30b5\u30d6\u914d\u5217\u306e\u9577\u3055\u304c1\u306b\u306a\u308b\u307e\u3067\u518d\u5e30\u3092\u7d9a\u3051\u3001\u914d\u5217\u5168\u4f53\u306e\u30bd\u30fc\u30c8\u3092\u5b8c\u4e86\u3057\u307e\u3059\u3002

\u56f3 11-9 \u00a0 Quick sort process

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby quick_sort.py
def quick_sort(self, nums: list[int], left: int, right: int):\n    \"\"\"\u30af\u30a4\u30c3\u30af\u30bd\u30fc\u30c8\"\"\"\n    # \u30b5\u30d6\u914d\u5217\u306e\u9577\u3055\u304c1\u306e\u3068\u304d\u306b\u518d\u5e30\u3092\u7d42\u4e86\n    if left >= right:\n        return\n    # \u5206\u5272\n    pivot = self.partition(nums, left, right)\n    # \u5de6\u30b5\u30d6\u914d\u5217\u3068\u53f3\u30b5\u30d6\u914d\u5217\u3092\u518d\u5e30\u7684\u306b\u51e6\u7406\n    self.quick_sort(nums, left, pivot - 1)\n    self.quick_sort(nums, pivot + 1, right)\n
quick_sort.cpp
/* \u30af\u30a4\u30c3\u30af\u30bd\u30fc\u30c8 */\nvoid quickSort(vector<int> &nums, int left, int right) {\n    // \u30b5\u30d6\u914d\u5217\u306e\u9577\u3055\u304c1\u306e\u6642\u3001\u518d\u5e30\u3092\u7d42\u4e86\n    if (left >= right)\n        return;\n    // \u5206\u5272\n    int pivot = partition(nums, left, right);\n    // \u5de6\u30b5\u30d6\u914d\u5217\u3068\u53f3\u30b5\u30d6\u914d\u5217\u3092\u518d\u5e30\u7684\u306b\u51e6\u7406\n    quickSort(nums, left, pivot - 1);\n    quickSort(nums, pivot + 1, right);\n}\n
quick_sort.java
/* \u30af\u30a4\u30c3\u30af\u30bd\u30fc\u30c8 */\nvoid quickSort(int[] nums, int left, int right) {\n    // \u90e8\u5206\u914d\u5217\u306e\u9577\u3055\u304c 1 \u306e\u3068\u304d\u518d\u5e30\u3092\u7d42\u4e86\n    if (left >= right)\n        return;\n    // \u5206\u5272\n    int pivot = partition(nums, left, right);\n    // \u5de6\u90e8\u5206\u914d\u5217\u3068\u53f3\u90e8\u5206\u914d\u5217\u3092\u518d\u5e30\u7684\u306b\u51e6\u7406\n    quickSort(nums, left, pivot - 1);\n    quickSort(nums, pivot + 1, right);\n}\n
quick_sort.cs
[class]{quickSort}-[func]{QuickSort}\n
quick_sort.go
[class]{quickSort}-[func]{quickSort}\n
quick_sort.swift
[class]{}-[func]{quickSort}\n
quick_sort.js
[class]{QuickSort}-[func]{quickSort}\n
quick_sort.ts
[class]{QuickSort}-[func]{quickSort}\n
quick_sort.dart
[class]{QuickSort}-[func]{quickSort}\n
quick_sort.rs
[class]{QuickSort}-[func]{quick_sort}\n
quick_sort.c
[class]{}-[func]{quickSort}\n
quick_sort.kt
[class]{}-[func]{quickSort}\n
quick_sort.rb
[class]{QuickSort}-[func]{quick_sort}\n
"},{"location":"chapter_sorting/quick_sort/#1152","title":"11.5.2 \u00a0 \u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u7279\u5fb4","text":""},{"location":"chapter_sorting/quick_sort/#1153","title":"11.5.3 \u00a0 \u306a\u305c\u30af\u30a4\u30c3\u30af\u30bd\u30fc\u30c8\u306f\u9ad8\u901f\u306a\u306e\u304b","text":"

\u540d\u524d\u304c\u793a\u3059\u3088\u3046\u306b\u3001\u30af\u30a4\u30c3\u30af\u30bd\u30fc\u30c8\u306f\u52b9\u7387\u6027\u306e\u9762\u3067\u4e00\u5b9a\u306e\u5229\u70b9\u3092\u6301\u3064\u3079\u304d\u3067\u3059\u3002\u30af\u30a4\u30c3\u30af\u30bd\u30fc\u30c8\u306e\u5e73\u5747\u6642\u9593\u8a08\u7b97\u91cf\u306f\u300c\u30de\u30fc\u30b8\u30bd\u30fc\u30c8\u300d\u3084\u300c\u30d2\u30fc\u30d7\u30bd\u30fc\u30c8\u300d\u3068\u540c\u3058\u3067\u3059\u304c\u3001\u4ee5\u4e0b\u306e\u7406\u7531\u3067\u4e00\u822c\u7684\u306b\u3088\u308a\u52b9\u7387\u7684\u3067\u3059\u3002

"},{"location":"chapter_sorting/quick_sort/#1154","title":"11.5.4 \u00a0 \u30d4\u30dc\u30c3\u30c8\u6700\u9069\u5316","text":"

\u30af\u30a4\u30c3\u30af\u30bd\u30fc\u30c8\u306e\u6642\u9593\u52b9\u7387\u306f\u7279\u5b9a\u306e\u5165\u529b\u3067\u52a3\u5316\u3059\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001\u5165\u529b\u914d\u5217\u304c\u5b8c\u5168\u306b\u9006\u9806\u306e\u5834\u5408\u3001\u6700\u3082\u5de6\u306e\u8981\u7d20\u3092\u30d4\u30dc\u30c3\u30c8\u3068\u3057\u3066\u9078\u629e\u3059\u308b\u305f\u3081\u3001\u30d4\u30dc\u30c3\u30c8\u5206\u5272\u5f8c\u3001\u30d4\u30dc\u30c3\u30c8\u306f\u914d\u5217\u306e\u53f3\u7aef\u306b\u4ea4\u63db\u3055\u308c\u3001\u5de6\u30b5\u30d6\u914d\u5217\u306e\u9577\u3055\u304c\\(n - 1\\)\u3001\u53f3\u30b5\u30d6\u914d\u5217\u306e\u9577\u3055\u304c\\(0\\)\u306b\u306a\u308a\u307e\u3059\u3002\u3053\u306e\u65b9\u6cd5\u3092\u7d9a\u3051\u308b\u3068\u3001\u5404\u30e9\u30a6\u30f3\u30c9\u306e\u30d4\u30dc\u30c3\u30c8\u5206\u5272\u3067\u30b5\u30d6\u914d\u5217\u306e\u9577\u3055\u304c\\(0\\)\u306b\u306a\u308a\u3001\u5206\u5272\u7d71\u6cbb\u6226\u7565\u304c\u5931\u6557\u3057\u3001\u30af\u30a4\u30c3\u30af\u30bd\u30fc\u30c8\u306f\u300c\u30d0\u30d6\u30eb\u30bd\u30fc\u30c8\u300d\u306b\u4f3c\u305f\u5f62\u306b\u52a3\u5316\u3057\u307e\u3059\u3002

\u3053\u306e\u72b6\u6cc1\u3092\u907f\u3051\u308b\u305f\u3081\u3001\u30d4\u30dc\u30c3\u30c8\u5206\u5272\u3067\u30d4\u30dc\u30c3\u30c8\u9078\u629e\u6226\u7565\u3092\u6700\u9069\u5316\u3067\u304d\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001\u8981\u7d20\u3092\u30e9\u30f3\u30c0\u30e0\u306b\u9078\u629e\u3057\u3066\u30d4\u30dc\u30c3\u30c8\u3068\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u305f\u3060\u3057\u3001\u904b\u304c\u60aa\u304f\u3001\u4e00\u8cab\u3057\u3066\u6700\u9069\u3067\u306a\u3044\u30d4\u30dc\u30c3\u30c8\u3092\u9078\u629e\u3057\u305f\u5834\u5408\u3001\u52b9\u7387\u306f\u307e\u3060\u6e80\u8db3\u3067\u304d\u307e\u305b\u3093\u3002

\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\u306f\u901a\u5e38\u300c\u7591\u4f3c\u4e71\u6570\u300d\u3092\u751f\u6210\u3059\u308b\u3053\u3068\u306b\u6ce8\u610f\u3059\u308b\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002\u7591\u4f3c\u4e71\u6570\u30b7\u30fc\u30b1\u30f3\u30b9\u306b\u5bfe\u3057\u3066\u7279\u5b9a\u306e\u30c6\u30b9\u30c8\u30b1\u30fc\u30b9\u3092\u69cb\u7bc9\u3059\u308b\u3068\u3001\u30af\u30a4\u30c3\u30af\u30bd\u30fc\u30c8\u306e\u52b9\u7387\u306f\u307e\u3060\u52a3\u5316\u3059\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002

\u3055\u3089\u306a\u308b\u6539\u5584\u306e\u305f\u3081\u30013\u3064\u306e\u5019\u88dc\u8981\u7d20\uff08\u901a\u5e38\u306f\u914d\u5217\u306e\u6700\u521d\u3001\u6700\u5f8c\u3001\u4e2d\u70b9\u306e\u8981\u7d20\uff09\u3092\u9078\u629e\u3057\u3001**\u3053\u308c\u30893\u3064\u306e\u5019\u88dc\u8981\u7d20\u306e\u4e2d\u592e\u5024\u3092\u30d4\u30dc\u30c3\u30c8\u3068\u3057\u3066\u4f7f\u7528**\u3067\u304d\u307e\u3059\u3002\u3053\u306e\u65b9\u6cd5\u3067\u3001\u30d4\u30dc\u30c3\u30c8\u304c\u300c\u5c0f\u3055\u3059\u304e\u305a\u5927\u304d\u3059\u304e\u306a\u3044\u300d\u78ba\u7387\u304c\u5927\u5e45\u306b\u5897\u52a0\u3057\u307e\u3059\u3002\u3082\u3061\u308d\u3093\u3001\u3055\u3089\u306b\u591a\u304f\u306e\u5019\u88dc\u8981\u7d20\u3092\u9078\u629e\u3057\u3066\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u5805\u7262\u6027\u3092\u3055\u3089\u306b\u5411\u4e0a\u3055\u305b\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002\u3053\u306e\u65b9\u6cd5\u306b\u3088\u308a\u3001\u6642\u9593\u8a08\u7b97\u91cf\u304c\\(O(n^2)\\)\u306b\u52a3\u5316\u3059\u308b\u78ba\u7387\u304c\u5927\u5e45\u306b\u524a\u6e1b\u3055\u308c\u307e\u3059\u3002

\u30b5\u30f3\u30d7\u30eb\u30b3\u30fc\u30c9\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby quick_sort.py
def median_three(self, nums: list[int], left: int, mid: int, right: int) -> int:\n    \"\"\"3\u3064\u306e\u5019\u88dc\u8981\u7d20\u306e\u4e2d\u592e\u5024\u3092\u9078\u629e\"\"\"\n    l, m, r = nums[left], nums[mid], nums[right]\n    if (l <= m <= r) or (r <= m <= l):\n        return mid  # m \u306f l \u3068 r \u306e\u9593\n    if (m <= l <= r) or (r <= l <= m):\n        return left  # l \u306f m \u3068 r \u306e\u9593\n    return right\n\ndef partition(self, nums: list[int], left: int, right: int) -> int:\n    \"\"\"\u5206\u5272\uff08\u4e09\u70b9\u4e2d\u592e\u5024\uff09\"\"\"\n    # nums[left] \u3092\u30d4\u30dc\u30c3\u30c8\u3068\u3057\u3066\u4f7f\u7528\n    med = self.median_three(nums, left, (left + right) // 2, right)\n    # \u4e2d\u592e\u5024\u3092\u914d\u5217\u306e\u6700\u5de6\u7aef\u306b\u4ea4\u63db\n    nums[left], nums[med] = nums[med], nums[left]\n    # nums[left] \u3092\u30d4\u30dc\u30c3\u30c8\u3068\u3057\u3066\u4f7f\u7528\n    i, j = left, right\n    while i < j:\n        while i < j and nums[j] >= nums[left]:\n            j -= 1  # \u53f3\u304b\u3089\u5de6\u3078\u30d4\u30dc\u30c3\u30c8\u3088\u308a\u5c0f\u3055\u3044\u6700\u521d\u306e\u8981\u7d20\u3092\u63a2\u3059\n        while i < j and nums[i] <= nums[left]:\n            i += 1  # \u5de6\u304b\u3089\u53f3\u3078\u30d4\u30dc\u30c3\u30c8\u3088\u308a\u5927\u304d\u3044\u6700\u521d\u306e\u8981\u7d20\u3092\u63a2\u3059\n        # \u8981\u7d20\u3092\u4ea4\u63db\n        nums[i], nums[j] = nums[j], nums[i]\n    # \u30d4\u30dc\u30c3\u30c8\u30922\u3064\u306e\u30b5\u30d6\u914d\u5217\u306e\u5883\u754c\u306b\u4ea4\u63db\n    nums[i], nums[left] = nums[left], nums[i]\n    return i  # \u30d4\u30dc\u30c3\u30c8\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u8fd4\u3059\n
quick_sort.cpp
/* \u4e09\u3064\u306e\u5019\u88dc\u8981\u7d20\u306e\u4e2d\u592e\u5024\u3092\u9078\u629e */\nint medianThree(vector<int> &nums, int left, int mid, int right) {\n    int l = nums[left], m = nums[mid], r = nums[right];\n    if ((l <= m && m <= r) || (r <= m && m <= l))\n        return mid; // m\u306fl\u3068r\u306e\u9593\n    if ((m <= l && l <= r) || (r <= l && l <= m))\n        return left; // l\u306fm\u3068r\u306e\u9593\n    return right;\n}\n\n/* \u5206\u5272\uff08\u4e09\u3064\u306e\u4e2d\u592e\u5024\uff09 */\nint partition(vector<int> &nums, int left, int right) {\n    // \u4e09\u3064\u306e\u5019\u88dc\u8981\u7d20\u306e\u4e2d\u592e\u5024\u3092\u9078\u629e\n    int med = medianThree(nums, left, (left + right) / 2, right);\n    // \u4e2d\u592e\u5024\u3092\u914d\u5217\u306e\u6700\u5de6\u4f4d\u7f6e\u306b\u4ea4\u63db\n    swap(nums, left, med);\n    // nums[left]\u3092\u30d4\u30dc\u30c3\u30c8\u3068\u3057\u3066\u4f7f\u7528\n    int i = left, j = right;\n    while (i < j) {\n        while (i < j && nums[j] >= nums[left])\n            j--; // \u53f3\u304b\u3089\u5de6\u3078\u30d4\u30dc\u30c3\u30c8\u3088\u308a\u5c0f\u3055\u3044\u6700\u521d\u306e\u8981\u7d20\u3092\u691c\u7d22\n        while (i < j && nums[i] <= nums[left])\n            i++;          // \u5de6\u304b\u3089\u53f3\u3078\u30d4\u30dc\u30c3\u30c8\u3088\u308a\u5927\u304d\u3044\u6700\u521d\u306e\u8981\u7d20\u3092\u691c\u7d22\n        swap(nums, i, j); // \u3053\u308c\u3089\u4e8c\u3064\u306e\u8981\u7d20\u3092\u4ea4\u63db\n    }\n    swap(nums, i, left); // \u30d4\u30dc\u30c3\u30c8\u3092\u4e8c\u3064\u306e\u30b5\u30d6\u914d\u5217\u306e\u5883\u754c\u306b\u4ea4\u63db\n    return i;            // \u30d4\u30dc\u30c3\u30c8\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u8fd4\u3059\n}\n
quick_sort.java
/* 3\u3064\u306e\u5019\u88dc\u8981\u7d20\u306e\u4e2d\u592e\u5024\u3092\u9078\u629e */\nint medianThree(int[] nums, int left, int mid, int right) {\n    int l = nums[left], m = nums[mid], r = nums[right];\n    if ((l <= m && m <= r) || (r <= m && m <= l))\n        return mid; // m \u306f l \u3068 r \u306e\u9593\n    if ((m <= l && l <= r) || (r <= l && l <= m))\n        return left; // l \u306f m \u3068 r \u306e\u9593\n    return right;\n}\n\n/* \u5206\u5272\uff083\u3064\u306e\u4e2d\u592e\u5024\uff09 */\nint partition(int[] nums, int left, int right) {\n    // 3\u3064\u306e\u5019\u88dc\u8981\u7d20\u306e\u4e2d\u592e\u5024\u3092\u9078\u629e\n    int med = medianThree(nums, left, (left + right) / 2, right);\n    // \u4e2d\u592e\u5024\u3092\u914d\u5217\u306e\u6700\u5de6\u7aef\u306e\u4f4d\u7f6e\u306b\u4ea4\u63db\n    swap(nums, left, med);\n    // nums[left] \u3092\u57fa\u6e96\u5024\u3068\u3057\u3066\u4f7f\u7528\n    int i = left, j = right;\n    while (i < j) {\n        while (i < j && nums[j] >= nums[left])\n            j--;          // \u53f3\u304b\u3089\u5de6\u3078\u3001\u57fa\u6e96\u5024\u3088\u308a\u5c0f\u3055\u3044\u6700\u521d\u306e\u8981\u7d20\u3092\u691c\u7d22\n        while (i < j && nums[i] <= nums[left])\n            i++;          // \u5de6\u304b\u3089\u53f3\u3078\u3001\u57fa\u6e96\u5024\u3088\u308a\u5927\u304d\u3044\u6700\u521d\u306e\u8981\u7d20\u3092\u691c\u7d22\n        swap(nums, i, j); // \u3053\u308c\u30892\u3064\u306e\u8981\u7d20\u3092\u4ea4\u63db\n    }\n    swap(nums, i, left);  // \u57fa\u6e96\u5024\u30922\u3064\u306e\u90e8\u5206\u914d\u5217\u306e\u5883\u754c\u306b\u4ea4\u63db\n    return i;             // \u57fa\u6e96\u5024\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u8fd4\u3059\n}\n
quick_sort.cs
[class]{QuickSortMedian}-[func]{MedianThree}\n\n[class]{QuickSortMedian}-[func]{Partition}\n
quick_sort.go
[class]{quickSortMedian}-[func]{medianThree}\n\n[class]{quickSortMedian}-[func]{partition}\n
quick_sort.swift
[class]{}-[func]{medianThree}\n\n[class]{}-[func]{partitionMedian}\n
quick_sort.js
[class]{QuickSortMedian}-[func]{medianThree}\n\n[class]{QuickSortMedian}-[func]{partition}\n
quick_sort.ts
[class]{QuickSortMedian}-[func]{medianThree}\n\n[class]{QuickSortMedian}-[func]{partition}\n
quick_sort.dart
[class]{QuickSortMedian}-[func]{_medianThree}\n\n[class]{QuickSortMedian}-[func]{_partition}\n
quick_sort.rs
[class]{QuickSortMedian}-[func]{median_three}\n\n[class]{QuickSortMedian}-[func]{partition}\n
quick_sort.c
[class]{}-[func]{medianThree}\n\n[class]{}-[func]{partitionMedian}\n
quick_sort.kt
[class]{}-[func]{medianThree}\n\n[class]{}-[func]{partitionMedian}\n
quick_sort.rb
[class]{QuickSortMedian}-[func]{median_three}\n\n[class]{QuickSortMedian}-[func]{partition}\n
"},{"location":"chapter_sorting/quick_sort/#1155","title":"11.5.5 \u00a0 \u672b\u5c3e\u518d\u5e30\u6700\u9069\u5316","text":"

\u7279\u5b9a\u306e\u5165\u529b\u3067\u306f\u3001\u30af\u30a4\u30c3\u30af\u30bd\u30fc\u30c8\u306f\u3088\u308a\u591a\u304f\u306e\u7a7a\u9593\u3092\u5360\u6709\u3059\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001\u5b8c\u5168\u306b\u9806\u5e8f\u4ed8\u3051\u3089\u308c\u305f\u5165\u529b\u914d\u5217\u3092\u8003\u3048\u3066\u307f\u307e\u3057\u3087\u3046\u3002\u518d\u5e30\u3067\u306e\u30b5\u30d6\u914d\u5217\u306e\u9577\u3055\u3092\\(m\\)\u3068\u3057\u307e\u3059\u3002\u5404\u30e9\u30a6\u30f3\u30c9\u306e\u30d4\u30dc\u30c3\u30c8\u5206\u5272\u3067\u3001\u9577\u3055\\(0\\)\u306e\u5de6\u30b5\u30d6\u914d\u5217\u3068\u9577\u3055\\(m - 1\\)\u306e\u53f3\u30b5\u30d6\u914d\u5217\u304c\u751f\u6210\u3055\u308c\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u518d\u5e30\u547c\u3073\u51fa\u3057\u3054\u3068\u306b\u554f\u984c\u30b5\u30a4\u30ba\u304c1\u3064\u306e\u8981\u7d20\u306e\u307f\u6e1b\u5c11\u3059\u308b\u3053\u3068\u3092\u610f\u5473\u3057\u3001\u5404\u30ec\u30d9\u30eb\u306e\u518d\u5e30\u3067\u306e\u524a\u6e1b\u304c\u975e\u5e38\u306b\u5c0f\u3055\u304f\u306a\u308a\u307e\u3059\u3002 \u7d50\u679c\u3068\u3057\u3066\u3001\u518d\u5e30\u30c4\u30ea\u30fc\u306e\u9ad8\u3055\u306f\\(n \u2212 1\\)\u306b\u9054\u3059\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u3001\u3053\u308c\u306b\u306f\\(O(n)\\)\u306e\u30b9\u30bf\u30c3\u30af\u30d5\u30ec\u30fc\u30e0\u7a7a\u9593\u304c\u5fc5\u8981\u3067\u3059\u3002

\u30b9\u30bf\u30c3\u30af\u30d5\u30ec\u30fc\u30e0\u7a7a\u9593\u306e\u84c4\u7a4d\u3092\u9632\u3050\u305f\u3081\u3001\u5404\u30e9\u30a6\u30f3\u30c9\u306e\u30d4\u30dc\u30c3\u30c8\u30bd\u30fc\u30c8\u5f8c\u306b2\u3064\u306e\u30b5\u30d6\u914d\u5217\u306e\u9577\u3055\u3092\u6bd4\u8f03\u3057\u3001**\u3088\u308a\u77ed\u3044\u30b5\u30d6\u914d\u5217\u306e\u307f\u3092\u518d\u5e30\u7684\u306b\u30bd\u30fc\u30c8**\u3067\u304d\u307e\u3059\u3002\u3088\u308a\u77ed\u3044\u30b5\u30d6\u914d\u5217\u306e\u9577\u3055\u306f\\(n / 2\\)\u3092\u8d85\u3048\u306a\u3044\u305f\u3081\u3001\u3053\u306e\u65b9\u6cd5\u306f\u518d\u5e30\u6df1\u5ea6\u304c\\(\\log n\\)\u3092\u8d85\u3048\u306a\u3044\u3053\u3068\u3092\u4fdd\u8a3c\u3057\u3001\u6700\u60aa\u7a7a\u9593\u8a08\u7b97\u91cf\u3092\\(O(\\log n)\\)\u306b\u6700\u9069\u5316\u3057\u307e\u3059\u3002\u30b3\u30fc\u30c9\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby quick_sort.py
def quick_sort(self, nums: list[int], left: int, right: int):\n    \"\"\"\u30af\u30a4\u30c3\u30af\u30bd\u30fc\u30c8\uff08\u672b\u5c3e\u518d\u5e30\u6700\u9069\u5316\uff09\"\"\"\n    # \u30b5\u30d6\u914d\u5217\u306e\u9577\u3055\u304c1\u306e\u3068\u304d\u306b\u7d42\u4e86\n    while left < right:\n        # \u5206\u5272\u64cd\u4f5c\n        pivot = self.partition(nums, left, right)\n        # 2\u3064\u306e\u30b5\u30d6\u914d\u5217\u306e\u3046\u3061\u77ed\u3044\u65b9\u306b\u5bfe\u3057\u3066\u30af\u30a4\u30c3\u30af\u30bd\u30fc\u30c8\u3092\u5b9f\u884c\n        if pivot - left < right - pivot:\n            self.quick_sort(nums, left, pivot - 1)  # \u5de6\u30b5\u30d6\u914d\u5217\u3092\u518d\u5e30\u7684\u306b\u30bd\u30fc\u30c8\n            left = pivot + 1  # \u6b8b\u308a\u306e\u672a\u30bd\u30fc\u30c8\u533a\u9593\u306f [pivot + 1, right]\n        else:\n            self.quick_sort(nums, pivot + 1, right)  # \u53f3\u30b5\u30d6\u914d\u5217\u3092\u518d\u5e30\u7684\u306b\u30bd\u30fc\u30c8\n            right = pivot - 1  # \u6b8b\u308a\u306e\u672a\u30bd\u30fc\u30c8\u533a\u9593\u306f [left, pivot - 1]\n
quick_sort.cpp
/* \u30af\u30a4\u30c3\u30af\u30bd\u30fc\u30c8\uff08\u672b\u5c3e\u518d\u5e30\u6700\u9069\u5316\uff09 */\nvoid quickSort(vector<int> &nums, int left, int right) {\n    // \u30b5\u30d6\u914d\u5217\u306e\u9577\u3055\u304c1\u306e\u6642\u7d42\u4e86\n    while (left < right) {\n        // \u5206\u5272\u64cd\u4f5c\n        int pivot = partition(nums, left, right);\n        // \u4e8c\u3064\u306e\u30b5\u30d6\u914d\u5217\u306e\u3046\u3061\u77ed\u3044\u65b9\u3067\u30af\u30a4\u30c3\u30af\u30bd\u30fc\u30c8\u3092\u5b9f\u884c\n        if (pivot - left < right - pivot) {\n            quickSort(nums, left, pivot - 1); // \u5de6\u30b5\u30d6\u914d\u5217\u3092\u518d\u5e30\u7684\u306b\u30bd\u30fc\u30c8\n            left = pivot + 1;                 // \u6b8b\u308a\u306e\u672a\u30bd\u30fc\u30c8\u533a\u9593\u306f[pivot + 1, right]\n        } else {\n            quickSort(nums, pivot + 1, right); // \u53f3\u30b5\u30d6\u914d\u5217\u3092\u518d\u5e30\u7684\u306b\u30bd\u30fc\u30c8\n            right = pivot - 1;                 // \u6b8b\u308a\u306e\u672a\u30bd\u30fc\u30c8\u533a\u9593\u306f[left, pivot - 1]\n        }\n    }\n}\n
quick_sort.java
/* \u30af\u30a4\u30c3\u30af\u30bd\u30fc\u30c8\uff08\u672b\u5c3e\u518d\u5e30\u6700\u9069\u5316\uff09 */\nvoid quickSort(int[] nums, int left, int right) {\n    // \u90e8\u5206\u914d\u5217\u306e\u9577\u3055\u304c 1 \u306e\u3068\u304d\u7d42\u4e86\n    while (left < right) {\n        // \u5206\u5272\u64cd\u4f5c\n        int pivot = partition(nums, left, right);\n        // 2\u3064\u306e\u90e8\u5206\u914d\u5217\u306e\u3046\u3061\u77ed\u3044\u65b9\u306b\u30af\u30a4\u30c3\u30af\u30bd\u30fc\u30c8\u3092\u5b9f\u884c\n        if (pivot - left < right - pivot) {\n            quickSort(nums, left, pivot - 1); // \u5de6\u90e8\u5206\u914d\u5217\u3092\u518d\u5e30\u7684\u306b\u30bd\u30fc\u30c8\n            left = pivot + 1; // \u6b8b\u308a\u306e\u672a\u30bd\u30fc\u30c8\u533a\u9593\u306f [pivot + 1, right]\n        } else {\n            quickSort(nums, pivot + 1, right); // \u53f3\u90e8\u5206\u914d\u5217\u3092\u518d\u5e30\u7684\u306b\u30bd\u30fc\u30c8\n            right = pivot - 1; // \u6b8b\u308a\u306e\u672a\u30bd\u30fc\u30c8\u533a\u9593\u306f [left, pivot - 1]\n        }\n    }\n}\n
quick_sort.cs
[class]{QuickSortTailCall}-[func]{QuickSort}\n
quick_sort.go
[class]{quickSortTailCall}-[func]{quickSort}\n
quick_sort.swift
[class]{}-[func]{quickSortTailCall}\n
quick_sort.js
[class]{QuickSortTailCall}-[func]{quickSort}\n
quick_sort.ts
[class]{QuickSortTailCall}-[func]{quickSort}\n
quick_sort.dart
[class]{QuickSortTailCall}-[func]{quickSort}\n
quick_sort.rs
[class]{QuickSortTailCall}-[func]{quick_sort}\n
quick_sort.c
[class]{}-[func]{quickSortTailCall}\n
quick_sort.kt
[class]{}-[func]{quickSortTailCall}\n
quick_sort.rb
[class]{QuickSortTailCall}-[func]{quick_sort}\n
"},{"location":"chapter_sorting/radix_sort/","title":"11.10 \u00a0 \u57fa\u6570\u30bd\u30fc\u30c8","text":"

\u524d\u306e\u7bc0\u3067\u306f\u8a08\u6570\u30bd\u30fc\u30c8\u3092\u7d39\u4ecb\u3057\u307e\u3057\u305f\u3002\u3053\u308c\u306f\u3001\u30c7\u30fc\u30bf\u30b5\u30a4\u30ba \\(n\\) \u304c\u5927\u304d\u3044\u304c\u30c7\u30fc\u30bf\u7bc4\u56f2 \\(m\\) \u304c\u5c0f\u3055\u3044\u30b7\u30ca\u30ea\u30aa\u306b\u9069\u3057\u3066\u3044\u307e\u3059\u3002\\(n = 10^6\\) \u306e\u5b66\u751fID\u3092\u30bd\u30fc\u30c8\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u3001\u5404ID\u304c \\(8\\) \u6841\u306e\u6570\u5b57\u3067\u3042\u308b\u3068\u3057\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u30c7\u30fc\u30bf\u7bc4\u56f2 \\(m = 10^8\\) \u304c\u975e\u5e38\u306b\u5927\u304d\u3044\u3053\u3068\u3092\u610f\u5473\u3057\u307e\u3059\u3002\u3053\u306e\u5834\u5408\u3001\u8a08\u6570\u30bd\u30fc\u30c8\u3092\u4f7f\u7528\u3059\u308b\u3068\u3001\u5927\u91cf\u306e\u30e1\u30e2\u30ea\u30b9\u30da\u30fc\u30b9\u304c\u5fc5\u8981\u306b\u306a\u308a\u307e\u3059\u3002\u57fa\u6570\u30bd\u30fc\u30c8\u306f\u3053\u306e\u72b6\u6cc1\u3092\u56de\u907f\u3067\u304d\u307e\u3059\u3002

\u57fa\u6570\u30bd\u30fc\u30c8\u306f\u8a08\u6570\u30bd\u30fc\u30c8\u3068\u540c\u3058\u6838\u5fc3\u6982\u5ff5\u3092\u5171\u6709\u3057\u3001\u8981\u7d20\u306e\u983b\u5ea6\u3092\u30ab\u30a6\u30f3\u30c8\u3059\u308b\u3053\u3068\u3067\u30bd\u30fc\u30c8\u3057\u307e\u3059\u3002\u540c\u6642\u306b\u3001\u57fa\u6570\u30bd\u30fc\u30c8\u306f\u6570\u5b57\u306e\u6841\u9593\u306e\u6f38\u9032\u7684\u95a2\u4fc2\u3092\u5229\u7528\u3057\u3066\u3053\u308c\u3092\u57fa\u76e4\u3068\u3057\u3066\u3044\u307e\u3059\u3002\u6841\u3092\u4e00\u5ea6\u306b\u4e00\u3064\u305a\u3064\u51e6\u7406\u3057\u3066\u30bd\u30fc\u30c8\u3057\u3001\u6700\u7d42\u7684\u306a\u30bd\u30fc\u30c8\u9806\u5e8f\u3092\u9054\u6210\u3057\u307e\u3059\u3002

"},{"location":"chapter_sorting/radix_sort/#11101","title":"11.10.1 \u00a0 \u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u904e\u7a0b","text":"

\u5b66\u751fID\u30c7\u30fc\u30bf\u3092\u4f8b\u3068\u3057\u3066\u3001\u6700\u4e0b\u4f4d\u6841\u3092 \\(1\\) \u756a\u76ee\u3001\u6700\u4e0a\u4f4d\u6841\u3092 \\(8\\) \u756a\u76ee\u3068\u3059\u308b\u3068\u3001\u57fa\u6570\u30bd\u30fc\u30c8\u306e\u904e\u7a0b\u306f\u4ee5\u4e0b\u306e\u56f3\u306b\u793a\u3055\u308c\u3066\u3044\u307e\u3059\u3002

  1. \u6841 \\(k = 1\\) \u3092\u521d\u671f\u5316\u3057\u307e\u3059\u3002
  2. \u5b66\u751fID\u306e \\(k\\) \u756a\u76ee\u306e\u6841\u306b\u5bfe\u3057\u3066\u300c\u8a08\u6570\u30bd\u30fc\u30c8\u300d\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002\u5b8c\u4e86\u5f8c\u3001\u30c7\u30fc\u30bf\u306f \\(k\\) \u756a\u76ee\u306e\u6841\u306b\u57fa\u3065\u3044\u3066\u6700\u5c0f\u304b\u3089\u6700\u5927\u307e\u3067\u30bd\u30fc\u30c8\u3055\u308c\u307e\u3059\u3002
  3. \\(k\\) \u3092 \\(1\\) \u5897\u3084\u3057\u3001\u624b\u9806 2. \u306b\u623b\u3063\u3066\u53cd\u5fa9\u3092\u7d9a\u3051\u3001\u3059\u3079\u3066\u306e\u6841\u304c\u30bd\u30fc\u30c8\u3055\u308c\u308b\u307e\u3067\u7d9a\u3051\u307e\u3059\u3002\u3053\u306e\u6642\u70b9\u3067\u904e\u7a0b\u304c\u7d42\u4e86\u3057\u307e\u3059\u3002

\u56f3 11-18 \u00a0 \u57fa\u6570\u30bd\u30fc\u30c8\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u904e\u7a0b

\u4ee5\u4e0b\u3001\u30b3\u30fc\u30c9\u5b9f\u88c5\u3092\u8a73\u3057\u304f\u898b\u3066\u307f\u307e\u3059\u3002\u57fa\u6570 \\(d\\) \u3067\u306e\u6570 \\(x\\) \u306b\u5bfe\u3057\u3066\u3001\u305d\u306e \\(k\\) \u756a\u76ee\u306e\u6841 \\(x_k\\) \u3092\u53d6\u5f97\u3059\u308b\u306b\u306f\u3001\u4ee5\u4e0b\u306e\u8a08\u7b97\u5f0f\u3092\u4f7f\u7528\u3067\u304d\u307e\u3059\uff1a

\\[ x_k = \\lfloor\\frac{x}{d^{k-1}}\\rfloor \\bmod d \\]

\u3053\u3053\u3067 \\(\\lfloor a \\rfloor\\) \u306f\u6d6e\u52d5\u5c0f\u6570\u70b9\u6570 \\(a\\) \u306e\u5207\u308a\u6368\u3066\u3092\u8868\u3057\u3001\\(\\bmod \\: d\\) \u306f \\(d\\) \u306b\u3088\u308b\u5270\u4f59\u3092\u8868\u3057\u307e\u3059\u3002\u5b66\u751fID\u30c7\u30fc\u30bf\u306e\u5834\u5408\u3001\\(d = 10\\) \u3067 \\(k \\in [1, 8]\\) \u3067\u3059\u3002

\u3055\u3089\u306b\u3001\\(k\\) \u756a\u76ee\u306e\u6841\u306b\u57fa\u3065\u3044\u3066\u30bd\u30fc\u30c8\u3067\u304d\u308b\u3088\u3046\u306b\u3001\u8a08\u6570\u30bd\u30fc\u30c8\u306e\u30b3\u30fc\u30c9\u3092\u5c11\u3057\u4fee\u6b63\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby radix_sort.py
def digit(num: int, exp: int) -> int:\n    \"\"\"\u8981\u7d20 num \u306e k \u756a\u76ee\u306e\u6841\u3092\u53d6\u5f97\u3001exp = 10^(k-1)\"\"\"\n    # k \u306e\u4ee3\u308f\u308a\u306b exp \u3092\u6e21\u3059\u3053\u3068\u3067\u3001\u3053\u3053\u3067\u30b3\u30b9\u30c8\u306e\u9ad8\u3044\u7d2f\u4e57\u8a08\u7b97\u3092\u907f\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u308b\n    return (num // exp) % 10\n\ndef counting_sort_digit(nums: list[int], exp: int):\n    \"\"\"\u8a08\u6570\u30bd\u30fc\u30c8\uff08nums \u306e k \u756a\u76ee\u306e\u6841\u306b\u57fa\u3065\u304f\uff09\"\"\"\n    # 10\u9032\u6570\u306e\u6841\u306e\u7bc4\u56f2\u306f 0~9\u3001\u3057\u305f\u304c\u3063\u3066\u9577\u305510\u306e\u30d0\u30b1\u30c3\u30c8\u914d\u5217\u304c\u5fc5\u8981\n    counter = [0] * 10\n    n = len(nums)\n    # \u6570\u5b57 0~9 \u306e\u51fa\u73fe\u56de\u6570\u3092\u7d71\u8a08\n    for i in range(n):\n        d = digit(nums[i], exp)  # nums[i] \u306e k \u756a\u76ee\u306e\u6841\u3092\u53d6\u5f97\u3001d \u3068\u3059\u308b\n        counter[d] += 1  # \u6570\u5b57 d \u306e\u51fa\u73fe\u56de\u6570\u3092\u7d71\u8a08\n    # \u524d\u7f6e\u548c\u3092\u8a08\u7b97\u3057\u3001\u300c\u51fa\u73fe\u56de\u6570\u300d\u3092\u300c\u914d\u5217\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u300d\u306b\u5909\u63db\n    for i in range(1, 10):\n        counter[i] += counter[i - 1]\n    # \u9006\u9806\u306b\u8d70\u67fb\u3057\u3001\u30d0\u30b1\u30c3\u30c8\u7d71\u8a08\u306b\u57fa\u3065\u3044\u3066\u5404\u8981\u7d20\u3092 res \u306b\u914d\u7f6e\n    res = [0] * n\n    for i in range(n - 1, -1, -1):\n        d = digit(nums[i], exp)\n        j = counter[d] - 1  # \u914d\u5217\u5185\u306e d \u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9 j \u3092\u53d6\u5f97\n        res[j] = nums[i]  # \u73fe\u5728\u306e\u8981\u7d20\u3092\u30a4\u30f3\u30c7\u30c3\u30af\u30b9 j \u306b\u914d\u7f6e\n        counter[d] -= 1  # d \u306e\u6570\u30921\u6e1b\u3089\u3059\n    # \u7d50\u679c\u3092\u4f7f\u7528\u3057\u3066\u5143\u306e\u914d\u5217 nums \u3092\u4e0a\u66f8\u304d\n    for i in range(n):\n        nums[i] = res[i]\n\ndef radix_sort(nums: list[int]):\n    \"\"\"\u57fa\u6570\u30bd\u30fc\u30c8\"\"\"\n    # \u914d\u5217\u306e\u6700\u5927\u8981\u7d20\u3092\u53d6\u5f97\u3057\u3001\u6700\u5927\u6841\u6570\u3092\u5224\u5b9a\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\n    m = max(nums)\n    # \u6700\u4e0b\u4f4d\u6841\u304b\u3089\u6700\u4e0a\u4f4d\u6841\u307e\u3067\u8d70\u67fb\n    exp = 1\n    while exp <= m:\n        # \u914d\u5217\u8981\u7d20\u306e k \u756a\u76ee\u306e\u6841\u306b\u5bfe\u3057\u3066\u8a08\u6570\u30bd\u30fc\u30c8\u3092\u5b9f\u884c\n        # k = 1 -> exp = 1\n        # k = 2 -> exp = 10\n        # \u3064\u307e\u308a\u3001exp = 10^(k-1)\n        counting_sort_digit(nums, exp)\n        exp *= 10\n
radix_sort.cpp
/* \u8981\u7d20num\u306ek\u756a\u76ee\u306e\u6841\u3092\u53d6\u5f97\u3001exp = 10^(k-1) */\nint digit(int num, int exp) {\n    // k\u306e\u4ee3\u308f\u308a\u306bexp\u3092\u6e21\u3059\u3053\u3068\u3067\u3001\u3053\u3053\u3067\u7e70\u308a\u8fd4\u3055\u308c\u308b\u9ad8\u4fa1\u306a\u51aa\u4e57\u8a08\u7b97\u3092\u907f\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u308b\n    return (num / exp) % 10;\n}\n\n/* \u30ab\u30a6\u30f3\u30c8\u30bd\u30fc\u30c8\uff08nums\u306ek\u756a\u76ee\u306e\u6841\u306b\u57fa\u3065\u304f\uff09 */\nvoid countingSortDigit(vector<int> &nums, int exp) {\n    // 10\u9032\u6570\u306e\u6841\u7bc4\u56f2\u306f0~9\u306a\u306e\u3067\u3001\u9577\u305510\u306e\u30d0\u30b1\u30c3\u30c8\u914d\u5217\u304c\u5fc5\u8981\n    vector<int> counter(10, 0);\n    int n = nums.size();\n    // \u6570\u5b570~9\u306e\u51fa\u73fe\u56de\u6570\u3092\u7d71\u8a08\n    for (int i = 0; i < n; i++) {\n        int d = digit(nums[i], exp); // nums[i]\u306ek\u756a\u76ee\u306e\u6841\u3092\u53d6\u5f97\u3001d\u3068\u3057\u3066\u8a18\u9332\n        counter[d]++;                // \u6570\u5b57d\u306e\u51fa\u73fe\u56de\u6570\u3092\u7d71\u8a08\n    }\n    // \u524d\u7f00\u548c\u3092\u8a08\u7b97\u3057\u3001\u300c\u51fa\u73fe\u56de\u6570\u300d\u3092\u300c\u914d\u5217\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u300d\u306b\u5909\u63db\n    for (int i = 1; i < 10; i++) {\n        counter[i] += counter[i - 1];\n    }\n    // \u9006\u9806\u3067\u8d70\u67fb\u3057\u3001\u30d0\u30b1\u30c3\u30c8\u7d71\u8a08\u306b\u57fa\u3065\u3044\u3066\u5404\u8981\u7d20\u3092res\u306b\u914d\u7f6e\n    vector<int> res(n, 0);\n    for (int i = n - 1; i >= 0; i--) {\n        int d = digit(nums[i], exp);\n        int j = counter[d] - 1; // d\u304c\u914d\u5217\u5185\u306b\u3042\u308b\u30a4\u30f3\u30c7\u30c3\u30af\u30b9j\u3092\u53d6\u5f97\n        res[j] = nums[i];       // \u73fe\u5728\u306e\u8981\u7d20\u3092\u30a4\u30f3\u30c7\u30c3\u30af\u30b9j\u306b\u914d\u7f6e\n        counter[d]--;           // d\u306e\u30ab\u30a6\u30f3\u30c8\u30921\u6e1b\u3089\u3059\n    }\n    // \u7d50\u679c\u3067\u5143\u306e\u914d\u5217nums\u3092\u4e0a\u66f8\u304d\n    for (int i = 0; i < n; i++)\n        nums[i] = res[i];\n}\n\n/* \u57fa\u6570\u30bd\u30fc\u30c8 */\nvoid radixSort(vector<int> &nums) {\n    // \u914d\u5217\u306e\u6700\u5927\u8981\u7d20\u3092\u53d6\u5f97\u3001\u6700\u5927\u6841\u6570\u3092\u5224\u5b9a\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\n    int m = *max_element(nums.begin(), nums.end());\n    // \u6700\u4e0b\u4f4d\u6841\u304b\u3089\u6700\u4e0a\u4f4d\u6841\u307e\u3067\u8d70\u67fb\n    for (int exp = 1; exp <= m; exp *= 10)\n        // \u914d\u5217\u8981\u7d20\u306ek\u756a\u76ee\u306e\u6841\u3067\u30ab\u30a6\u30f3\u30c8\u30bd\u30fc\u30c8\u3092\u5b9f\u884c\n        // k = 1 -> exp = 1\n        // k = 2 -> exp = 10\n        // \u3064\u307e\u308a\u3001exp = 10^(k-1)\n        countingSortDigit(nums, exp);\n}\n
radix_sort.java
/* \u8981\u7d20 num \u306e k \u756a\u76ee\u306e\u6841\u3092\u53d6\u5f97\u3001exp = 10^(k-1) */\nint digit(int num, int exp) {\n    // k \u306e\u4ee3\u308f\u308a\u306b exp \u3092\u6e21\u3059\u3053\u3068\u3067\u3001\u3053\u3053\u3067\u30b3\u30b9\u30c8\u306e\u9ad8\u3044\u7d2f\u4e57\u8a08\u7b97\u306e\u7e70\u308a\u8fd4\u3057\u3092\u907f\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u308b\n    return (num / exp) % 10;\n}\n\n/* \u8a08\u6570\u30bd\u30fc\u30c8\uff08nums \u306e k \u756a\u76ee\u306e\u6841\u306b\u57fa\u3065\u304f\uff09 */\nvoid countingSortDigit(int[] nums, int exp) {\n    // 10\u9032\u6570\u306e\u6841\u306e\u7bc4\u56f2\u306f 0~9\u3001\u3057\u305f\u304c\u3063\u3066\u9577\u3055 10 \u306e\u30d0\u30b1\u30c3\u30c8\u914d\u5217\u304c\u5fc5\u8981\n    int[] counter = new int[10];\n    int n = nums.length;\n    // \u6841 0~9 \u306e\u51fa\u73fe\u56de\u6570\u3092\u7d71\u8a08\n    for (int i = 0; i < n; i++) {\n        int d = digit(nums[i], exp); // nums[i] \u306e k \u756a\u76ee\u306e\u6841\u3092\u53d6\u5f97\u3001d \u3068\u3059\u308b\n        counter[d]++;                // \u6841 d \u306e\u51fa\u73fe\u56de\u6570\u3092\u7d71\u8a08\n    }\n    // \u7d2f\u7a4d\u548c\u3092\u8a08\u7b97\u3057\u3001\u300c\u51fa\u73fe\u56de\u6570\u300d\u3092\u300c\u914d\u5217\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u300d\u306b\u5909\u63db\n    for (int i = 1; i < 10; i++) {\n        counter[i] += counter[i - 1];\n    }\n    // \u9006\u9806\u306b\u8d70\u67fb\u3057\u3001\u30d0\u30b1\u30c3\u30c8\u7d71\u8a08\u306b\u57fa\u3065\u3044\u3066\u5404\u8981\u7d20\u3092 res \u306b\u914d\u7f6e\n    int[] res = new int[n];\n    for (int i = n - 1; i >= 0; i--) {\n        int d = digit(nums[i], exp);\n        int j = counter[d] - 1; // \u914d\u5217\u5185\u3067\u306e d \u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9 j \u3092\u53d6\u5f97\n        res[j] = nums[i];       // \u73fe\u5728\u306e\u8981\u7d20\u3092\u30a4\u30f3\u30c7\u30c3\u30af\u30b9 j \u306b\u914d\u7f6e\n        counter[d]--;           // d \u306e\u30ab\u30a6\u30f3\u30c8\u3092 1 \u6e1b\u3089\u3059\n    }\n    // \u7d50\u679c\u3067\u5143\u306e\u914d\u5217 nums \u3092\u4e0a\u66f8\u304d\n    for (int i = 0; i < n; i++)\n        nums[i] = res[i];\n}\n\n/* \u57fa\u6570\u30bd\u30fc\u30c8 */\nvoid radixSort(int[] nums) {\n    // \u914d\u5217\u306e\u6700\u5927\u8981\u7d20\u3092\u53d6\u5f97\u3057\u3001\u6700\u5927\u6841\u6570\u3092\u5224\u5b9a\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\n    int m = Integer.MIN_VALUE;\n    for (int num : nums)\n        if (num > m)\n            m = num;\n    // \u6700\u4e0b\u4f4d\u6841\u304b\u3089\u6700\u4e0a\u4f4d\u6841\u307e\u3067\u8d70\u67fb\n    for (int exp = 1; exp <= m; exp *= 10) {\n        // \u914d\u5217\u8981\u7d20\u306e k \u756a\u76ee\u306e\u6841\u306b\u5bfe\u3057\u3066\u8a08\u6570\u30bd\u30fc\u30c8\u3092\u5b9f\u884c\n        // k = 1 -> exp = 1\n        // k = 2 -> exp = 10\n        // \u3059\u306a\u308f\u3061 exp = 10^(k-1)\n        countingSortDigit(nums, exp);\n    }\n}\n
radix_sort.cs
[class]{radix_sort}-[func]{Digit}\n\n[class]{radix_sort}-[func]{CountingSortDigit}\n\n[class]{radix_sort}-[func]{RadixSort}\n
radix_sort.go
[class]{}-[func]{digit}\n\n[class]{}-[func]{countingSortDigit}\n\n[class]{}-[func]{radixSort}\n
radix_sort.swift
[class]{}-[func]{digit}\n\n[class]{}-[func]{countingSortDigit}\n\n[class]{}-[func]{radixSort}\n
radix_sort.js
[class]{}-[func]{digit}\n\n[class]{}-[func]{countingSortDigit}\n\n[class]{}-[func]{radixSort}\n
radix_sort.ts
[class]{}-[func]{digit}\n\n[class]{}-[func]{countingSortDigit}\n\n[class]{}-[func]{radixSort}\n
radix_sort.dart
[class]{}-[func]{digit}\n\n[class]{}-[func]{countingSortDigit}\n\n[class]{}-[func]{radixSort}\n
radix_sort.rs
[class]{}-[func]{digit}\n\n[class]{}-[func]{counting_sort_digit}\n\n[class]{}-[func]{radix_sort}\n
radix_sort.c
[class]{}-[func]{digit}\n\n[class]{}-[func]{countingSortDigit}\n\n[class]{}-[func]{radixSort}\n
radix_sort.kt
[class]{}-[func]{digit}\n\n[class]{}-[func]{countingSortDigit}\n\n[class]{}-[func]{radixSort}\n
radix_sort.rb
[class]{}-[func]{digit}\n\n[class]{}-[func]{counting_sort_digit}\n\n[class]{}-[func]{radix_sort}\n

\u306a\u305c\u6700\u4e0b\u4f4d\u6841\u304b\u3089\u958b\u59cb\u3059\u308b\u306e\u304b\uff1f

\u9023\u7d9a\u3059\u308b\u30bd\u30fc\u30c8\u30e9\u30a6\u30f3\u30c9\u3067\u306f\u3001\u5f8c\u306e\u30e9\u30a6\u30f3\u30c9\u306e\u7d50\u679c\u304c\u524d\u306e\u30e9\u30a6\u30f3\u30c9\u306e\u7d50\u679c\u3092\u4e0a\u66f8\u304d\u3057\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001\u6700\u521d\u306e\u30e9\u30a6\u30f3\u30c9\u306e\u7d50\u679c\u304c \\(a < b\\) \u3067\u30012\u756a\u76ee\u306e\u30e9\u30a6\u30f3\u30c9\u304c \\(a > b\\) \u306e\u5834\u5408\u30012\u756a\u76ee\u306e\u30e9\u30a6\u30f3\u30c9\u306e\u7d50\u679c\u304c\u6700\u521d\u306e\u30e9\u30a6\u30f3\u30c9\u306e\u7d50\u679c\u3092\u7f6e\u304d\u63db\u3048\u307e\u3059\u3002\u4e0a\u4f4d\u6841\u306f\u4e0b\u4f4d\u6841\u3088\u308a\u512a\u5148\u3055\u308c\u308b\u305f\u3081\u3001\u4e0a\u4f4d\u6841\u306e\u524d\u306b\u4e0b\u4f4d\u6841\u3092\u30bd\u30fc\u30c8\u3059\u308b\u3053\u3068\u304c\u7406\u306b\u304b\u306a\u3063\u3066\u3044\u307e\u3059\u3002

"},{"location":"chapter_sorting/radix_sort/#11102","title":"11.10.2 \u00a0 \u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u7279\u5fb4","text":"

\u8a08\u6570\u30bd\u30fc\u30c8\u3068\u6bd4\u8f03\u3057\u3066\u3001\u57fa\u6570\u30bd\u30fc\u30c8\u306f\u3088\u308a\u5927\u304d\u306a\u6570\u5024\u7bc4\u56f2\u306b\u9069\u3057\u3066\u3044\u307e\u3059\u304c\u3001\u30c7\u30fc\u30bf\u304c\u56fa\u5b9a\u6841\u6570\u3067\u8868\u73fe\u3067\u304d\u3001\u6841\u6570\u304c\u3042\u307e\u308a\u5927\u304d\u304f\u306a\u3044\u3053\u3068\u3092\u524d\u63d0\u3068\u3057\u3066\u3044\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001\u6d6e\u52d5\u5c0f\u6570\u70b9\u6570\u306f\u6841\u6570 \\(k\\) \u304c\u5927\u304d\u3044\u53ef\u80fd\u6027\u304c\u3042\u308a\u3001\u6642\u9593\u8a08\u7b97\u91cf \\(O(nk) \\gg O(n^2)\\) \u306b\u3064\u306a\u304c\u308b\u53ef\u80fd\u6027\u304c\u3042\u308b\u305f\u3081\u3001\u57fa\u6570\u30bd\u30fc\u30c8\u306b\u306f\u9069\u3057\u3066\u3044\u307e\u305b\u3093\u3002

"},{"location":"chapter_sorting/selection_sort/","title":"11.2 \u00a0 \u9078\u629e\u30bd\u30fc\u30c8","text":"

\u9078\u629e\u30bd\u30fc\u30c8\u306f\u975e\u5e38\u306b\u30b7\u30f3\u30d7\u30eb\u306a\u539f\u7406\u3067\u52d5\u4f5c\u3057\u307e\u3059\uff1a\u5404\u53cd\u5fa9\u3067\u672a\u30bd\u30fc\u30c8\u533a\u9593\u304b\u3089\u6700\u5c0f\u8981\u7d20\u3092\u9078\u629e\u3057\u3001\u30bd\u30fc\u30c8\u6e08\u307f\u30bb\u30af\u30b7\u30e7\u30f3\u306e\u672b\u5c3e\u306b\u79fb\u52d5\u3059\u308b\u30eb\u30fc\u30d7\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002

\u914d\u5217\u306e\u9577\u3055\u3092\\(n\\)\u3068\u3059\u308b\u3068\u3001\u9078\u629e\u30bd\u30fc\u30c8\u306e\u30b9\u30c6\u30c3\u30d7\u306f\u4e0b\u56f3\u306b\u793a\u3055\u308c\u307e\u3059\u3002

  1. \u6700\u521d\u306b\u3001\u3059\u3079\u3066\u306e\u8981\u7d20\u306f\u672a\u30bd\u30fc\u30c8\u3067\u3001\u3064\u307e\u308a\u672a\u30bd\u30fc\u30c8\uff08\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\uff09\u533a\u9593\u306f\\([0, n-1]\\)\u3067\u3059\u3002
  2. \u533a\u9593\\([0, n-1]\\)\u306e\u6700\u5c0f\u8981\u7d20\u3092\u9078\u629e\u3057\u3001\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\\(0\\)\u306e\u8981\u7d20\u3068\u4ea4\u63db\u3057\u307e\u3059\u3002\u3053\u306e\u5f8c\u3001\u914d\u5217\u306e\u6700\u521d\u306e\u8981\u7d20\u304c\u30bd\u30fc\u30c8\u3055\u308c\u307e\u3059\u3002
  3. \u533a\u9593\\([1, n-1]\\)\u306e\u6700\u5c0f\u8981\u7d20\u3092\u9078\u629e\u3057\u3001\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\\(1\\)\u306e\u8981\u7d20\u3068\u4ea4\u63db\u3057\u307e\u3059\u3002\u3053\u306e\u5f8c\u3001\u914d\u5217\u306e\u6700\u521d\u306e2\u3064\u306e\u8981\u7d20\u304c\u30bd\u30fc\u30c8\u3055\u308c\u307e\u3059\u3002
  4. \u3053\u306e\u65b9\u6cd5\u3067\u7d9a\u884c\u3057\u307e\u3059\u3002\\(n - 1\\)\u30e9\u30a6\u30f3\u30c9\u306e\u9078\u629e\u3068\u4ea4\u63db\u306e\u5f8c\u3001\u6700\u521d\u306e\\(n - 1\\)\u500b\u306e\u8981\u7d20\u304c\u30bd\u30fc\u30c8\u3055\u308c\u307e\u3059\u3002
  5. \u6b8b\u308a\u306e\u552f\u4e00\u306e\u8981\u7d20\u306f\u7d50\u679c\u7684\u306b\u6700\u5927\u8981\u7d20\u3067\u3042\u308a\u3001\u30bd\u30fc\u30c8\u3059\u308b\u5fc5\u8981\u304c\u306a\u3044\u305f\u3081\u3001\u914d\u5217\u306f\u30bd\u30fc\u30c8\u3055\u308c\u307e\u3059\u3002
<1><2><3><4><5><6><7><8><9><10><11>

\u56f3 11-2 \u00a0 Selection sort process

\u30b3\u30fc\u30c9\u3067\u306f\u3001\\(k\\)\u3092\u4f7f\u7528\u3057\u3066\u672a\u30bd\u30fc\u30c8\u533a\u9593\u5185\u306e\u6700\u5c0f\u8981\u7d20\u3092\u8a18\u9332\u3057\u307e\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby selection_sort.py
def selection_sort(nums: list[int]):\n    \"\"\"\u9078\u629e\u30bd\u30fc\u30c8\"\"\"\n    n = len(nums)\n    # \u5916\u5074\u306e\u30eb\u30fc\u30d7\uff1a\u672a\u30bd\u30fc\u30c8\u7bc4\u56f2\u306f [i, n-1]\n    for i in range(n - 1):\n        # \u5185\u5074\u306e\u30eb\u30fc\u30d7\uff1a\u672a\u30bd\u30fc\u30c8\u7bc4\u56f2\u5185\u3067\u6700\u5c0f\u8981\u7d20\u3092\u898b\u3064\u3051\u308b\n        k = i\n        for j in range(i + 1, n):\n            if nums[j] < nums[k]:\n                k = j  # \u6700\u5c0f\u8981\u7d20\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u8a18\u9332\n        # \u6700\u5c0f\u8981\u7d20\u3092\u672a\u30bd\u30fc\u30c8\u7bc4\u56f2\u306e\u5148\u982d\u8981\u7d20\u3068\u4ea4\u63db\n        nums[i], nums[k] = nums[k], nums[i]\n
selection_sort.cpp
/* \u9078\u629e\u30bd\u30fc\u30c8 */\nvoid selectionSort(vector<int> &nums) {\n    int n = nums.size();\n    // \u5916\u5074\u30eb\u30fc\u30d7\uff1a\u672a\u30bd\u30fc\u30c8\u7bc4\u56f2\u306f[i, n-1]\n    for (int i = 0; i < n - 1; i++) {\n        // \u5185\u5074\u30eb\u30fc\u30d7\uff1a\u672a\u30bd\u30fc\u30c8\u7bc4\u56f2\u5185\u3067\u6700\u5c0f\u8981\u7d20\u3092\u898b\u3064\u3051\u308b\n        int k = i;\n        for (int j = i + 1; j < n; j++) {\n            if (nums[j] < nums[k])\n                k = j; // \u6700\u5c0f\u8981\u7d20\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u8a18\u9332\n        }\n        // \u6700\u5c0f\u8981\u7d20\u3092\u672a\u30bd\u30fc\u30c8\u7bc4\u56f2\u306e\u6700\u521d\u306e\u8981\u7d20\u3068\u4ea4\u63db\n        swap(nums[i], nums[k]);\n    }\n}\n
selection_sort.java
/* \u9078\u629e\u30bd\u30fc\u30c8 */\nvoid selectionSort(int[] nums) {\n    int n = nums.length;\n    // \u5916\u5074\u30eb\u30fc\u30d7: \u672a\u30bd\u30fc\u30c8\u7bc4\u56f2\u306f [i, n-1]\n    for (int i = 0; i < n - 1; i++) {\n        // \u5185\u5074\u30eb\u30fc\u30d7: \u672a\u30bd\u30fc\u30c8\u7bc4\u56f2\u5185\u3067\u6700\u5c0f\u8981\u7d20\u3092\u898b\u3064\u3051\u308b\n        int k = i;\n        for (int j = i + 1; j < n; j++) {\n            if (nums[j] < nums[k])\n                k = j; // \u6700\u5c0f\u8981\u7d20\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u8a18\u9332\n        }\n        // \u6700\u5c0f\u8981\u7d20\u3068\u672a\u30bd\u30fc\u30c8\u7bc4\u56f2\u306e\u6700\u521d\u306e\u8981\u7d20\u3092\u4ea4\u63db\n        int temp = nums[i];\n        nums[i] = nums[k];\n        nums[k] = temp;\n    }\n}\n
selection_sort.cs
[class]{selection_sort}-[func]{SelectionSort}\n
selection_sort.go
[class]{}-[func]{selectionSort}\n
selection_sort.swift
[class]{}-[func]{selectionSort}\n
selection_sort.js
[class]{}-[func]{selectionSort}\n
selection_sort.ts
[class]{}-[func]{selectionSort}\n
selection_sort.dart
[class]{}-[func]{selectionSort}\n
selection_sort.rs
[class]{}-[func]{selection_sort}\n
selection_sort.c
[class]{}-[func]{selectionSort}\n
selection_sort.kt
[class]{}-[func]{selectionSort}\n
selection_sort.rb
[class]{}-[func]{selection_sort}\n
"},{"location":"chapter_sorting/selection_sort/#1121","title":"11.2.1 \u00a0 \u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u7279\u6027","text":"

\u56f3 11-3 \u00a0 Selection sort instability example

"},{"location":"chapter_sorting/sorting_algorithm/","title":"11.1 \u00a0 \u30bd\u30fc\u30c8\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0","text":"

\u30bd\u30fc\u30c8\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306f\u3001\u30c7\u30fc\u30bf\u30bb\u30c3\u30c8\u3092\u7279\u5b9a\u306e\u9806\u5e8f\u3067\u914d\u5217\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002\u30bd\u30fc\u30c8\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306f\u3001\u9806\u5e8f\u4ed8\u3051\u3089\u308c\u305f\u30c7\u30fc\u30bf\u306f\u901a\u5e38\u3001\u3088\u308a\u52b9\u7387\u7684\u306b\u63a2\u7d22\u3001\u5206\u6790\u3001\u51e6\u7406\u3067\u304d\u308b\u305f\u3081\u3001\u5e45\u5e83\u3044\u5fdc\u7528\u304c\u3042\u308a\u307e\u3059\u3002

\u4e0b\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u30bd\u30fc\u30c8\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u30c7\u30fc\u30bf\u578b\u306f\u6574\u6570\u3001\u6d6e\u52d5\u5c0f\u6570\u70b9\u6570\u3001\u6587\u5b57\u3001\u6587\u5b57\u5217\u306a\u3069\u3067\u3059\u3002\u30bd\u30fc\u30c8\u57fa\u6e96\u306f\u3001\u6570\u5024\u30b5\u30a4\u30ba\u3001\u6587\u5b57ASCII\u9806\u5e8f\u3001\u307e\u305f\u306f\u30ab\u30b9\u30bf\u30e0\u57fa\u6e96\u306a\u3069\u3001\u5fc5\u8981\u306b\u5fdc\u3058\u3066\u8a2d\u5b9a\u3067\u304d\u307e\u3059\u3002

\u56f3 11-1 \u00a0 Data types and comparator examples

"},{"location":"chapter_sorting/sorting_algorithm/#1111","title":"11.1.1 \u00a0 \u8a55\u4fa1\u6b21\u5143","text":"

\u5b9f\u884c\u52b9\u7387\uff1a\u30bd\u30fc\u30c8\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u6642\u9593\u8a08\u7b97\u91cf\u304c\u3067\u304d\u308b\u3060\u3051\u4f4e\u3044\u3053\u3068\u3092\u671f\u5f85\u3057\u3001\u5168\u4f53\u7684\u306a\u64cd\u4f5c\u6570\u3082\u5c11\u306a\u3044\u3053\u3068\uff08\u6642\u9593\u8a08\u7b97\u91cf\u306e\u5b9a\u6570\u9805\u3092\u4e0b\u3052\u308b\uff09\u3092\u671b\u307f\u307e\u3059\u3002\u5927\u5bb9\u91cf\u30c7\u30fc\u30bf\u3067\u306f\u3001\u5b9f\u884c\u52b9\u7387\u304c\u7279\u306b\u91cd\u8981\u3067\u3059\u3002

\u30a4\u30f3\u30d7\u30ec\u30fc\u30b9\u6027\uff1a\u540d\u524d\u304c\u793a\u3059\u3068\u304a\u308a\u3001\u30a4\u30f3\u30d7\u30ec\u30fc\u30b9\u30bd\u30fc\u30c8\u306f\u5143\u306e\u914d\u5217\u3092\u76f4\u63a5\u64cd\u4f5c\u3059\u308b\u3053\u3068\u3067\u5b9f\u73fe\u3055\u308c\u3001\u8ffd\u52a0\u306e\u30d8\u30eb\u30d1\u30fc\u914d\u5217\u304c\u4e0d\u8981\u3067\u3042\u308b\u305f\u3081\u3001\u30e1\u30e2\u30ea\u3092\u7bc0\u7d04\u3057\u307e\u3059\u3002\u4e00\u822c\u7684\u306b\u3001\u30a4\u30f3\u30d7\u30ec\u30fc\u30b9\u30bd\u30fc\u30c8\u306f\u30c7\u30fc\u30bf\u79fb\u52d5\u64cd\u4f5c\u304c\u5c11\u306a\u304f\u3001\u9ad8\u901f\u3067\u3059\u3002

\u5b89\u5b9a\u6027\uff1a\u5b89\u5b9a\u30bd\u30fc\u30c8\u306f\u3001\u30bd\u30fc\u30c8\u5f8c\u306b\u914d\u5217\u5185\u306e\u7b49\u3057\u3044\u8981\u7d20\u306e\u76f8\u5bfe\u9806\u5e8f\u304c\u5909\u308f\u3089\u306a\u3044\u3053\u3068\u3092\u4fdd\u8a3c\u3057\u307e\u3059\u3002

\u5b89\u5b9a\u30bd\u30fc\u30c8\u306f\u3001\u30de\u30eb\u30c1\u30ad\u30fc\u30bd\u30fc\u30c8\u30b7\u30ca\u30ea\u30aa\u306b\u304a\u3044\u3066\u5fc5\u8981\u6761\u4ef6\u3067\u3059\u3002\u5b66\u751f\u60c5\u5831\u3092\u683c\u7d0d\u3059\u308b\u30c6\u30fc\u30d6\u30eb\u304c\u3042\u308a\u3001\u7b2c1\u5217\u3068\u7b2c2\u5217\u304c\u305d\u308c\u305e\u308c\u540d\u524d\u3068\u5e74\u9f62\u3067\u3042\u308b\u3068\u3057\u307e\u3059\u3002\u3053\u306e\u5834\u5408\u3001\u4e0d\u5b89\u5b9a\u30bd\u30fc\u30c8\u306f\u5165\u529b\u30c7\u30fc\u30bf\u306e\u9806\u5e8f\u3092\u5931\u3046\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\uff1a

# \u5165\u529b\u30c7\u30fc\u30bf\u306f\u540d\u524d\u3067\u30bd\u30fc\u30c8\u6e08\u307f\n# (\u540d\u524d, \u5e74\u9f62)\n  ('A', 19)\n  ('B', 18)\n  ('C', 21)\n  ('D', 19)\n  ('E', 23)\n\n# \u4e0d\u5b89\u5b9a\u30bd\u30fc\u30c8\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3092\u4f7f\u7528\u3057\u3066\u30ea\u30b9\u30c8\u3092\u5e74\u9f62\u3067\u30bd\u30fc\u30c8\u3059\u308b\u3068\u4eee\u5b9a\u3059\u308b\u3068\u3001\n# \u7d50\u679c\u306f('D', 19)\u3068('A', 19)\u306e\u76f8\u5bfe\u4f4d\u7f6e\u3092\u5909\u66f4\u3057\u3001\n# \u5165\u529b\u30c7\u30fc\u30bf\u304c\u540d\u524d\u3067\u30bd\u30fc\u30c8\u6e08\u307f\u3067\u3042\u308b\u3068\u3044\u3046\u6027\u8cea\u304c\u5931\u308f\u308c\u308b\n  ('B', 18)\n  ('D', 19)\n  ('A', 19)\n  ('C', 21)\n  ('E', 23)\n

\u9069\u5fdc\u6027\uff1a\u9069\u5fdc\u30bd\u30fc\u30c8\u306f\u5165\u529b\u30c7\u30fc\u30bf\u5185\u306e\u65e2\u5b58\u306e\u9806\u5e8f\u60c5\u5831\u3092\u6d3b\u7528\u3057\u3066\u8a08\u7b97\u8ca0\u8377\u3092\u524a\u6e1b\u3057\u3001\u3088\u308a\u6700\u9069\u306a\u6642\u9593\u52b9\u7387\u3092\u5b9f\u73fe\u3057\u307e\u3059\u3002\u9069\u5fdc\u30bd\u30fc\u30c8\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u6700\u826f\u30b1\u30fc\u30b9\u6642\u9593\u8a08\u7b97\u91cf\u306f\u3001\u901a\u5e38\u5e73\u5747\u30b1\u30fc\u30b9\u6642\u9593\u8a08\u7b97\u91cf\u3088\u308a\u3082\u512a\u308c\u3066\u3044\u307e\u3059\u3002

\u6bd4\u8f03\u30d9\u30fc\u30b9\u307e\u305f\u306f\u975e\u6bd4\u8f03\u30d9\u30fc\u30b9\uff1a\u6bd4\u8f03\u30d9\u30fc\u30b9\u30bd\u30fc\u30c8\u306f\u6bd4\u8f03\u6f14\u7b97\u5b50\uff08\\(<\\)\u3001\\(=\\)\u3001\\(>\\)\uff09\u306b\u4f9d\u5b58\u3057\u3066\u8981\u7d20\u306e\u76f8\u5bfe\u9806\u5e8f\u3092\u6c7a\u5b9a\u3057\u3001\u914d\u5217\u5168\u4f53\u3092\u30bd\u30fc\u30c8\u3057\u307e\u3059\u3002\u7406\u8ad6\u7684\u6700\u9069\u6642\u9593\u8a08\u7b97\u91cf\u306f\\(O(n \\log n)\\)\u3067\u3059\u3002\u4e00\u65b9\u3001\u975e\u6bd4\u8f03\u30bd\u30fc\u30c8\u306f\u6bd4\u8f03\u6f14\u7b97\u5b50\u3092\u4f7f\u7528\u305b\u305a\u3001\\(O(n)\\)\u306e\u6642\u9593\u8a08\u7b97\u91cf\u3092\u5b9f\u73fe\u3067\u304d\u307e\u3059\u304c\u3001\u6c4e\u7528\u6027\u306f\u6bd4\u8f03\u7684\u52a3\u308a\u307e\u3059\u3002

"},{"location":"chapter_sorting/sorting_algorithm/#1112","title":"11.1.2 \u00a0 \u7406\u60f3\u7684\u306a\u30bd\u30fc\u30c8\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0","text":"

\u9ad8\u901f\u5b9f\u884c\u3001\u30a4\u30f3\u30d7\u30ec\u30fc\u30b9\u3001\u5b89\u5b9a\u3001\u9069\u5fdc\u3001\u6c4e\u7528\u3002\u660e\u3089\u304b\u306b\u3001\u3053\u308c\u3089\u306e\u3059\u3079\u3066\u306e\u7279\u5fb4\u3092\u7d44\u307f\u5408\u308f\u305b\u305f\u30bd\u30fc\u30c8\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306f\u4eca\u65e5\u307e\u3067\u898b\u3064\u304b\u3063\u3066\u3044\u307e\u305b\u3093\u3002\u3057\u305f\u304c\u3063\u3066\u3001\u30bd\u30fc\u30c8\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3092\u9078\u629e\u3059\u308b\u969b\u306f\u3001\u30c7\u30fc\u30bf\u306e\u7279\u5b9a\u306e\u7279\u5fb4\u3068\u554f\u984c\u306e\u8981\u4ef6\u306b\u57fa\u3065\u3044\u3066\u6c7a\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

\u6b21\u306b\u3001\u3055\u307e\u3056\u307e\u306a\u30bd\u30fc\u30c8\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3092\u4e00\u7dd2\u306b\u5b66\u3073\u3001\u4e0a\u8a18\u306e\u8a55\u4fa1\u6b21\u5143\u306b\u57fa\u3065\u3044\u3066\u305d\u308c\u305e\u308c\u306e\u5229\u70b9\u3068\u6b20\u70b9\u3092\u5206\u6790\u3057\u307e\u3059\u3002

"},{"location":"chapter_sorting/summary/","title":"11.11 \u00a0 \u307e\u3068\u3081","text":""},{"location":"chapter_sorting/summary/#1","title":"1. \u00a0 \u91cd\u8981\u306a\u5fa9\u7fd2","text":"

\u56f3 11-19 \u00a0 \u30bd\u30fc\u30c8\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u6bd4\u8f03

"},{"location":"chapter_sorting/summary/#2-q-a","title":"2. \u00a0 Q & A","text":"

Q: \u30bd\u30fc\u30c8\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u5b89\u5b9a\u6027\u306f\u3044\u3064\u5fc5\u8981\u3067\u3059\u304b\uff1f

\u5b9f\u969b\u306b\u306f\u3001\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u4e00\u3064\u306e\u5c5e\u6027\u306b\u57fa\u3065\u3044\u3066\u30bd\u30fc\u30c8\u3059\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001\u5b66\u751f\u306f\u540d\u524d\u3068\u8eab\u9577\u306e\u5c5e\u6027\u3092\u6301\u3061\u3001\u591a\u6bb5\u968e\u30bd\u30fc\u30c8\u3092\u5b9f\u88c5\u3059\u308b\u3053\u3068\u3092\u76ee\u6307\u3057\u307e\u3059\uff1a\u6700\u521d\u306b\u540d\u524d\u3067 (A, 180) (B, 185) (C, 170) (D, 170) \u3092\u53d6\u5f97\u3057\u3001\u6b21\u306b\u8eab\u9577\u3067\u3002\u30bd\u30fc\u30c8\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u304c\u4e0d\u5b89\u5b9a\u306a\u305f\u3081\u3001(D, 170) (C, 170) (A, 180) (B, 185) \u306b\u306a\u3063\u3066\u3057\u307e\u3046\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002

\u5b66\u751fD\u3068C\u306e\u4f4d\u7f6e\u304c\u4ea4\u63db\u3055\u308c\u3001\u540d\u524d\u306e\u9806\u5e8f\u6027\u304c\u7834\u3089\u308c\u3066\u3044\u308b\u306e\u304c\u5206\u304b\u308a\u307e\u3059\u3002\u3053\u308c\u306f\u671b\u307e\u3057\u304f\u3042\u308a\u307e\u305b\u3093\u3002

Q: \u6b69\u54e8\u5206\u5272\u3067\u306e\u300c\u53f3\u304b\u3089\u5de6\u3078\u306e\u691c\u7d22\u300d\u3068\u300c\u5de6\u304b\u3089\u53f3\u3078\u306e\u691c\u7d22\u300d\u306e\u9806\u5e8f\u3092\u4ea4\u63db\u3067\u304d\u307e\u3059\u304b\uff1f

\u3044\u3044\u3048\u3001\u6700\u5de6\u8981\u7d20\u3092\u30d4\u30dc\u30c3\u30c8\u3068\u3057\u3066\u4f7f\u7528\u3059\u308b\u5834\u5408\u3001\u6700\u521d\u306b\u300c\u53f3\u304b\u3089\u5de6\u3078\u306e\u691c\u7d22\u300d\u3092\u884c\u3044\u3001\u6b21\u306b\u300c\u5de6\u304b\u3089\u53f3\u3078\u306e\u691c\u7d22\u300d\u3092\u884c\u3046\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u306e\u7d50\u8ad6\u306f\u3084\u3084\u76f4\u89b3\u306b\u53cd\u3059\u308b\u306e\u3067\u3001\u7406\u7531\u3092\u5206\u6790\u3057\u3066\u307f\u307e\u3057\u3087\u3046\u3002

\u6b69\u54e8\u5206\u5272 partition() \u306e\u6700\u5f8c\u306e\u30b9\u30c6\u30c3\u30d7\u306f nums[left] \u3068 nums[i] \u3092\u4ea4\u63db\u3059\u308b\u3053\u3068\u3067\u3059\u3002\u4ea4\u63db\u5f8c\u3001\u30d4\u30dc\u30c3\u30c8\u306e\u5de6\u5074\u306e\u8981\u7d20\u306f\u3059\u3079\u3066\u30d4\u30dc\u30c3\u30c8\u4ee5\u4e0b\u306b\u306a\u308a\u307e\u3059\u3002\u3053\u308c\u306b\u306f\u6700\u5f8c\u306e\u4ea4\u63db\u524d\u306b nums[left] >= nums[i] \u304c\u6210\u308a\u7acb\u3064\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u300c\u5de6\u304b\u3089\u53f3\u3078\u306e\u691c\u7d22\u300d\u3092\u6700\u521d\u306b\u884c\u3044\u3001\u30d4\u30dc\u30c3\u30c8\u3088\u308a\u5927\u304d\u3044\u8981\u7d20\u304c\u898b\u3064\u304b\u3089\u306a\u3044\u5834\u5408\u3001i == j \u3067\u30eb\u30fc\u30d7\u3092\u7d42\u4e86\u3057\u3001nums[j] == nums[i] > nums[left] \u3068\u306a\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002\u3064\u307e\u308a\u3001\u6700\u7d42\u4ea4\u63db\u64cd\u4f5c\u306f\u30d4\u30dc\u30c3\u30c8\u3088\u308a\u5927\u304d\u3044\u8981\u7d20\u3092\u914d\u5217\u306e\u5de6\u7aef\u306b\u4ea4\u63db\u3057\u3001\u6b69\u54e8\u5206\u5272\u3092\u5931\u6557\u3055\u305b\u307e\u3059\u3002

\u4f8b\u3048\u3070\u3001\u914d\u5217 [0, 0, 0, 0, 1] \u304c\u4e0e\u3048\u3089\u308c\u305f\u5834\u5408\u3001\u6700\u521d\u306b\u300c\u5de6\u304b\u3089\u53f3\u3078\u306e\u691c\u7d22\u300d\u3092\u884c\u3046\u3068\u3001\u6b69\u54e8\u5206\u5272\u5f8c\u306e\u914d\u5217\u306f [1, 0, 0, 0, 0] \u3068\u306a\u308a\u3001\u3053\u308c\u306f\u6b63\u3057\u304f\u3042\u308a\u307e\u305b\u3093\u3002

\u3055\u3089\u306b\u8003\u3048\u308b\u3068\u3001nums[right] \u3092\u30d4\u30dc\u30c3\u30c8\u3068\u3057\u3066\u9078\u629e\u3059\u308b\u5834\u5408\u3001\u307e\u3063\u305f\u304f\u9006\u3067\u3001\u6700\u521d\u306b\u300c\u5de6\u304b\u3089\u53f3\u3078\u306e\u691c\u7d22\u300d\u3092\u884c\u3046\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

Q: \u672b\u5c3e\u518d\u5e30\u6700\u9069\u5316\u306b\u3064\u3044\u3066\u3001\u77ed\u3044\u914d\u5217\u3092\u9078\u629e\u3059\u308b\u3053\u3068\u3067\u518d\u5e30\u306e\u6df1\u3055\u304c \\(\\log n\\) \u3092\u8d85\u3048\u306a\u3044\u3053\u3068\u3092\u4fdd\u8a3c\u3059\u308b\u306e\u306f\u306a\u305c\u3067\u3059\u304b\uff1f

\u518d\u5e30\u306e\u6df1\u3055\u306f\u73fe\u5728\u30ea\u30bf\u30fc\u30f3\u3057\u3066\u3044\u306a\u3044\u518d\u5e30\u30e1\u30bd\u30c3\u30c9\u306e\u6570\u3067\u3059\u3002\u6b69\u54e8\u5206\u5272\u306e\u5404\u30e9\u30a6\u30f3\u30c9\u306f\u5143\u306e\u914d\u5217\u30922\u3064\u306e\u526f\u914d\u5217\u306b\u5206\u5272\u3057\u307e\u3059\u3002\u672b\u5c3e\u518d\u5e30\u6700\u9069\u5316\u306b\u3088\u308a\u3001\u518d\u5e30\u7684\u306b\u7d9a\u884c\u3059\u308b\u526f\u914d\u5217\u306e\u9577\u3055\u306f\u6700\u5927\u3067\u3082\u5143\u306e\u914d\u5217\u9577\u306e\u534a\u5206\u3067\u3059\u3002\u6700\u60aa\u306e\u5834\u5408\u5e38\u306b\u9577\u3055\u3092\u534a\u5206\u306b\u3059\u308b\u3068\u4eee\u5b9a\u3059\u308b\u3068\u3001\u6700\u7d42\u7684\u306a\u518d\u5e30\u306e\u6df1\u3055\u306f \\(\\log n\\) \u306b\u306a\u308a\u307e\u3059\u3002

\u5143\u306e\u30af\u30a4\u30c3\u30af\u30bd\u30fc\u30c8\u3092\u898b\u76f4\u3059\u3068\u3001\u3088\u308a\u5927\u304d\u306a\u914d\u5217\u3092\u7d99\u7d9a\u7684\u306b\u518d\u5e30\u51e6\u7406\u3059\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u3001\u6700\u60aa\u306e\u5834\u5408 \\(n\\)\u3001\\(n - 1\\)\u3001...\u3001\\(2\\)\u3001\\(1\\) \u3067\u3001\u518d\u5e30\u306e\u6df1\u3055\u306f \\(n\\) \u306b\u306a\u308a\u307e\u3059\u3002\u672b\u5c3e\u518d\u5e30\u6700\u9069\u5316\u306f\u3053\u306e\u30b7\u30ca\u30ea\u30aa\u3092\u56de\u907f\u3067\u304d\u307e\u3059\u3002

Q: \u914d\u5217\u306e\u3059\u3079\u3066\u306e\u8981\u7d20\u304c\u7b49\u3057\u3044\u5834\u5408\u3001\u30af\u30a4\u30c3\u30af\u30bd\u30fc\u30c8\u306e\u6642\u9593\u8a08\u7b97\u91cf\u306f \\(O(n^2)\\) \u3067\u3059\u304b\uff1f\u3053\u306e\u52a3\u5316\u30b1\u30fc\u30b9\u3092\u3069\u3046\u51e6\u7406\u3059\u3079\u304d\u3067\u3059\u304b\uff1f

\u306f\u3044\u3002\u3053\u306e\u72b6\u6cc1\u306b\u3064\u3044\u3066\u306f\u3001\u6b69\u54e8\u5206\u5272\u3092\u4f7f\u7528\u3057\u3066\u914d\u5217\u3092\u30d4\u30dc\u30c3\u30c8\u3088\u308a\u5c0f\u3055\u3044\u3001\u7b49\u3057\u3044\u3001\u5927\u304d\u3044\u306e3\u3064\u306e\u90e8\u5206\u306b\u5206\u5272\u3059\u308b\u3053\u3068\u3092\u691c\u8a0e\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u5c0f\u3055\u3044\u90e8\u5206\u3068\u5927\u304d\u3044\u90e8\u5206\u306e\u307f\u3092\u518d\u5e30\u7684\u306b\u9032\u3081\u307e\u3059\u3002\u3053\u306e\u65b9\u6cd5\u3067\u306f\u3001\u3059\u3079\u3066\u306e\u5165\u529b\u8981\u7d20\u304c\u7b49\u3057\u3044\u914d\u5217\u30921\u30e9\u30a6\u30f3\u30c9\u306e\u6b69\u54e8\u5206\u5272\u3060\u3051\u3067\u30bd\u30fc\u30c8\u3067\u304d\u307e\u3059\u3002

Q: \u306a\u305c\u30d0\u30b1\u30c3\u30c8\u30bd\u30fc\u30c8\u306e\u6700\u60aa\u30b1\u30fc\u30b9\u6642\u9593\u8a08\u7b97\u91cf\u306f \\(O(n^2)\\) \u3067\u3059\u304b\uff1f

\u6700\u60aa\u306e\u5834\u5408\u3001\u3059\u3079\u3066\u306e\u8981\u7d20\u304c\u540c\u3058\u30d0\u30b1\u30c3\u30c8\u306b\u914d\u7f6e\u3055\u308c\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u8981\u7d20\u3092\u30bd\u30fc\u30c8\u3059\u308b\u305f\u3081\u306b \\(O(n^2)\\) \u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3092\u4f7f\u7528\u3059\u308b\u5834\u5408\u3001\u6642\u9593\u8a08\u7b97\u91cf\u306f \\(O(n^2)\\) \u306b\u306a\u308a\u307e\u3059\u3002

"},{"location":"chapter_stack_and_queue/","title":"\u7b2c 5 \u7ae0 \u00a0 \u30b9\u30bf\u30c3\u30af\u3068\u30ad\u30e5\u30fc","text":"

Abstract

\u30b9\u30bf\u30c3\u30af\u306f\u7a4d\u307f\u91cd\u306d\u3089\u308c\u305f\u732b\u306e\u3088\u3046\u306a\u3082\u306e\u3067\u3001\u30ad\u30e5\u30fc\u306f\u4e00\u5217\u306b\u4e26\u3093\u3060\u732b\u306e\u3088\u3046\u306a\u3082\u306e\u3067\u3059\u3002

\u305d\u308c\u3089\u306f\u305d\u308c\u305e\u308c\u3001\u5f8c\u5165\u5148\u51fa\uff08LIFO\uff09\u3068\u5148\u5165\u5148\u51fa\uff08FIFO\uff09\u306e\u8ad6\u7406\u95a2\u4fc2\u3092\u8868\u3057\u3066\u3044\u307e\u3059\u3002

"},{"location":"chapter_stack_and_queue/#_1","title":"\u7ae0\u306e\u5185\u5bb9","text":""},{"location":"chapter_stack_and_queue/deque/","title":"5.3 \u00a0 \u4e21\u7aef\u30ad\u30e5\u30fc","text":"

\u30ad\u30e5\u30fc\u3067\u306f\u3001\u5148\u982d\u304b\u3089\u306e\u8981\u7d20\u306e\u524a\u9664\u3084\u672b\u5c3e\u3078\u306e\u8981\u7d20\u306e\u8ffd\u52a0\u306e\u307f\u304c\u53ef\u80fd\u3067\u3059\u3002\u4e0b\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u4e21\u7aef\u30ad\u30e5\u30fc\uff08deque\uff09\u306f\u3088\u308a\u67d4\u8edf\u6027\u3092\u63d0\u4f9b\u3057\u3001\u5148\u982d\u3068\u672b\u5c3e\u306e\u4e21\u65b9\u3067\u8981\u7d20\u306e\u8ffd\u52a0\u3084\u524a\u9664\u3092\u53ef\u80fd\u306b\u3057\u307e\u3059\u3002

\u56f3 5-7 \u00a0 \u4e21\u7aef\u30ad\u30e5\u30fc\u306e\u64cd\u4f5c

"},{"location":"chapter_stack_and_queue/deque/#531","title":"5.3.1 \u00a0 \u4e21\u7aef\u30ad\u30e5\u30fc\u306e\u4e00\u822c\u7684\u306a\u64cd\u4f5c","text":"

\u4e21\u7aef\u30ad\u30e5\u30fc\u306e\u4e00\u822c\u7684\u306a\u64cd\u4f5c\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\u3002\u5177\u4f53\u7684\u306a\u30e1\u30bd\u30c3\u30c9\u540d\u306f\u4f7f\u7528\u3059\u308b\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\u306b\u3088\u3063\u3066\u7570\u306a\u308a\u307e\u3059\u3002

\u8868 5-3 \u00a0 \u4e21\u7aef\u30ad\u30e5\u30fc\u306e\u64cd\u4f5c\u52b9\u7387

\u30e1\u30bd\u30c3\u30c9\u540d \u8aac\u660e \u6642\u9593\u8a08\u7b97\u91cf pushFirst() \u5148\u982d\u306b\u8981\u7d20\u3092\u8ffd\u52a0 \\(O(1)\\) pushLast() \u672b\u5c3e\u306b\u8981\u7d20\u3092\u8ffd\u52a0 \\(O(1)\\) popFirst() \u5148\u982d\u8981\u7d20\u3092\u524a\u9664 \\(O(1)\\) popLast() \u672b\u5c3e\u8981\u7d20\u3092\u524a\u9664 \\(O(1)\\) peekFirst() \u5148\u982d\u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9 \\(O(1)\\) peekLast() \u672b\u5c3e\u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9 \\(O(1)\\)

\u540c\u69d8\u306b\u3001\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\u3067\u5b9f\u88c5\u3055\u308c\u305f\u4e21\u7aef\u30ad\u30e5\u30fc\u30af\u30e9\u30b9\u3092\u76f4\u63a5\u4f7f\u7528\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlin deque.py
from collections import deque\n\n# \u4e21\u7aef\u30ad\u30e5\u30fc\u3092\u521d\u671f\u5316\ndeq: deque[int] = deque()\n\n# \u8981\u7d20\u3092\u30a8\u30f3\u30ad\u30e5\u30fc\ndeq.append(2)      # \u672b\u5c3e\u306b\u8ffd\u52a0\ndeq.append(5)\ndeq.append(4)\ndeq.appendleft(3)  # \u5148\u982d\u306b\u8ffd\u52a0\ndeq.appendleft(1)\n\n# \u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9\nfront: int = deq[0]  # \u5148\u982d\u8981\u7d20\nrear: int = deq[-1]  # \u672b\u5c3e\u8981\u7d20\n\n# \u8981\u7d20\u3092\u30c7\u30ad\u30e5\u30fc\npop_front: int = deq.popleft()  # \u5148\u982d\u8981\u7d20\u3092\u30c7\u30ad\u30e5\u30fc\npop_rear: int = deq.pop()       # \u672b\u5c3e\u8981\u7d20\u3092\u30c7\u30ad\u30e5\u30fc\n\n# \u4e21\u7aef\u30ad\u30e5\u30fc\u306e\u9577\u3055\u3092\u53d6\u5f97\nsize: int = len(deq)\n\n# \u4e21\u7aef\u30ad\u30e5\u30fc\u304c\u7a7a\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\nis_empty: bool = len(deq) == 0\n
deque.cpp
/* \u4e21\u7aef\u30ad\u30e5\u30fc\u3092\u521d\u671f\u5316 */\ndeque<int> deque;\n\n/* \u8981\u7d20\u3092\u30a8\u30f3\u30ad\u30e5\u30fc */\ndeque.push_back(2);   // \u672b\u5c3e\u306b\u8ffd\u52a0\ndeque.push_back(5);\ndeque.push_back(4);\ndeque.push_front(3);  // \u5148\u982d\u306b\u8ffd\u52a0\ndeque.push_front(1);\n\n/* \u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9 */\nint front = deque.front(); // \u5148\u982d\u8981\u7d20\nint back = deque.back();   // \u672b\u5c3e\u8981\u7d20\n\n/* \u8981\u7d20\u3092\u30c7\u30ad\u30e5\u30fc */\ndeque.pop_front();  // \u5148\u982d\u8981\u7d20\u3092\u30c7\u30ad\u30e5\u30fc\ndeque.pop_back();   // \u672b\u5c3e\u8981\u7d20\u3092\u30c7\u30ad\u30e5\u30fc\n\n/* \u4e21\u7aef\u30ad\u30e5\u30fc\u306e\u9577\u3055\u3092\u53d6\u5f97 */\nint size = deque.size();\n\n/* \u4e21\u7aef\u30ad\u30e5\u30fc\u304c\u7a7a\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d */\nbool empty = deque.empty();\n
deque.java
/* \u4e21\u7aef\u30ad\u30e5\u30fc\u3092\u521d\u671f\u5316 */\nDeque<Integer> deque = new LinkedList<>();\n\n/* \u8981\u7d20\u3092\u30a8\u30f3\u30ad\u30e5\u30fc */\ndeque.offerLast(2);   // \u672b\u5c3e\u306b\u8ffd\u52a0\ndeque.offerLast(5);\ndeque.offerLast(4);\ndeque.offerFirst(3);  // \u5148\u982d\u306b\u8ffd\u52a0\ndeque.offerFirst(1);\n\n/* \u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9 */\nint peekFirst = deque.peekFirst();  // \u5148\u982d\u8981\u7d20\nint peekLast = deque.peekLast();    // \u672b\u5c3e\u8981\u7d20\n\n/* \u8981\u7d20\u3092\u30c7\u30ad\u30e5\u30fc */\nint popFirst = deque.pollFirst();  // \u5148\u982d\u8981\u7d20\u3092\u30c7\u30ad\u30e5\u30fc\nint popLast = deque.pollLast();    // \u672b\u5c3e\u8981\u7d20\u3092\u30c7\u30ad\u30e5\u30fc\n\n/* \u4e21\u7aef\u30ad\u30e5\u30fc\u306e\u9577\u3055\u3092\u53d6\u5f97 */\nint size = deque.size();\n\n/* \u4e21\u7aef\u30ad\u30e5\u30fc\u304c\u7a7a\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d */\nboolean isEmpty = deque.isEmpty();\n
deque.cs
/* \u4e21\u7aef\u30ad\u30e5\u30fc\u3092\u521d\u671f\u5316 */\n// C#\u3067\u306f\u3001LinkedList\u3092\u4e21\u7aef\u30ad\u30e5\u30fc\u3068\u3057\u3066\u4f7f\u7528\nLinkedList<int> deque = new();\n\n/* \u8981\u7d20\u3092\u30a8\u30f3\u30ad\u30e5\u30fc */\ndeque.AddLast(2);   // \u672b\u5c3e\u306b\u8ffd\u52a0\ndeque.AddLast(5);\ndeque.AddLast(4);\ndeque.AddFirst(3);  // \u5148\u982d\u306b\u8ffd\u52a0\ndeque.AddFirst(1);\n\n/* \u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9 */\nint peekFirst = deque.First.Value;  // \u5148\u982d\u8981\u7d20\nint peekLast = deque.Last.Value;    // \u672b\u5c3e\u8981\u7d20\n\n/* \u8981\u7d20\u3092\u30c7\u30ad\u30e5\u30fc */\ndeque.RemoveFirst();  // \u5148\u982d\u8981\u7d20\u3092\u30c7\u30ad\u30e5\u30fc\ndeque.RemoveLast();   // \u672b\u5c3e\u8981\u7d20\u3092\u30c7\u30ad\u30e5\u30fc\n\n/* \u4e21\u7aef\u30ad\u30e5\u30fc\u306e\u9577\u3055\u3092\u53d6\u5f97 */\nint size = deque.Count;\n\n/* \u4e21\u7aef\u30ad\u30e5\u30fc\u304c\u7a7a\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d */\nbool isEmpty = deque.Count == 0;\n
deque_test.go
/* \u4e21\u7aef\u30ad\u30e5\u30fc\u3092\u521d\u671f\u5316 */\n// Go\u3067\u306f\u3001list\u3092\u4e21\u7aef\u30ad\u30e5\u30fc\u3068\u3057\u3066\u4f7f\u7528\ndeque := list.New()\n\n/* \u8981\u7d20\u3092\u30a8\u30f3\u30ad\u30e5\u30fc */\ndeque.PushBack(2)      // \u672b\u5c3e\u306b\u8ffd\u52a0\ndeque.PushBack(5)\ndeque.PushBack(4)\ndeque.PushFront(3)     // \u5148\u982d\u306b\u8ffd\u52a0\ndeque.PushFront(1)\n\n/* \u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9 */\nfront := deque.Front() // \u5148\u982d\u8981\u7d20\nrear := deque.Back()   // \u672b\u5c3e\u8981\u7d20\n\n/* \u8981\u7d20\u3092\u30c7\u30ad\u30e5\u30fc */\ndeque.Remove(front)    // \u5148\u982d\u8981\u7d20\u3092\u30c7\u30ad\u30e5\u30fc\ndeque.Remove(rear)     // \u672b\u5c3e\u8981\u7d20\u3092\u30c7\u30ad\u30e5\u30fc\n\n/* \u4e21\u7aef\u30ad\u30e5\u30fc\u306e\u9577\u3055\u3092\u53d6\u5f97 */\nsize := deque.Len()\n\n/* \u4e21\u7aef\u30ad\u30e5\u30fc\u304c\u7a7a\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d */\nisEmpty := deque.Len() == 0\n
deque.swift
/* \u4e21\u7aef\u30ad\u30e5\u30fc\u3092\u521d\u671f\u5316 */\n// Swift\u306b\u306f\u7d44\u307f\u8fbc\u307f\u306e\u4e21\u7aef\u30ad\u30e5\u30fc\u30af\u30e9\u30b9\u304c\u306a\u3044\u305f\u3081\u3001Array\u3092\u4e21\u7aef\u30ad\u30e5\u30fc\u3068\u3057\u3066\u4f7f\u7528\nvar deque: [Int] = []\n\n/* \u8981\u7d20\u3092\u30a8\u30f3\u30ad\u30e5\u30fc */\ndeque.append(2) // \u672b\u5c3e\u306b\u8ffd\u52a0\ndeque.append(5)\ndeque.append(4)\ndeque.insert(3, at: 0) // \u5148\u982d\u306b\u8ffd\u52a0\ndeque.insert(1, at: 0)\n\n/* \u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9 */\nlet peekFirst = deque.first! // \u5148\u982d\u8981\u7d20\nlet peekLast = deque.last!   // \u672b\u5c3e\u8981\u7d20\n\n/* \u8981\u7d20\u3092\u30c7\u30ad\u30e5\u30fc */\n// Array\u3092\u4f7f\u7528\u3059\u308b\u5834\u5408\u3001popFirst\u306e\u8a08\u7b97\u91cf\u306fO(n)\nlet popFirst = deque.removeFirst() // \u5148\u982d\u8981\u7d20\u3092\u30c7\u30ad\u30e5\u30fc\nlet popLast = deque.removeLast()   // \u672b\u5c3e\u8981\u7d20\u3092\u30c7\u30ad\u30e5\u30fc\n\n/* \u4e21\u7aef\u30ad\u30e5\u30fc\u306e\u9577\u3055\u3092\u53d6\u5f97 */\nlet size = deque.count\n\n/* \u4e21\u7aef\u30ad\u30e5\u30fc\u304c\u7a7a\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d */\nlet isEmpty = deque.isEmpty\n
deque.js
/* \u4e21\u7aef\u30ad\u30e5\u30fc\u3092\u521d\u671f\u5316 */\n// JavaScript\u306b\u306f\u7d44\u307f\u8fbc\u307f\u306e\u4e21\u7aef\u30ad\u30e5\u30fc\u304c\u306a\u3044\u305f\u3081\u3001Array\u3092\u4e21\u7aef\u30ad\u30e5\u30fc\u3068\u3057\u3066\u4f7f\u7528\nconst deque = [];\n\n/* \u8981\u7d20\u3092\u30a8\u30f3\u30ad\u30e5\u30fc */\ndeque.push(2);\ndeque.push(5);\ndeque.push(4);\n// \u6ce8\u610f\uff1aunshift()\u306f\u914d\u5217\u306e\u305f\u3081\u6642\u9593\u8a08\u7b97\u91cf\u304cO(n)\ndeque.unshift(3);\ndeque.unshift(1);\n\n/* \u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9 */\nconst peekFirst = deque[0]; // \u5148\u982d\u8981\u7d20\nconst peekLast = deque[deque.length - 1]; // \u672b\u5c3e\u8981\u7d20\n\n/* \u8981\u7d20\u3092\u30c7\u30ad\u30e5\u30fc */\n// \u6ce8\u610f\uff1ashift()\u306f\u914d\u5217\u306e\u305f\u3081\u6642\u9593\u8a08\u7b97\u91cf\u304cO(n)\nconst popFront = deque.shift(); // \u5148\u982d\u8981\u7d20\u3092\u30c7\u30ad\u30e5\u30fc\nconst popBack = deque.pop();    // \u672b\u5c3e\u8981\u7d20\u3092\u30c7\u30ad\u30e5\u30fc\n\n/* \u4e21\u7aef\u30ad\u30e5\u30fc\u306e\u9577\u3055\u3092\u53d6\u5f97 */\nconst size = deque.length;\n\n/* \u4e21\u7aef\u30ad\u30e5\u30fc\u304c\u7a7a\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d */\nconst isEmpty = size === 0;\n
deque.ts
/* \u4e21\u7aef\u30ad\u30e5\u30fc\u3092\u521d\u671f\u5316 */\n// TypeScript\u306b\u306f\u7d44\u307f\u8fbc\u307f\u306e\u4e21\u7aef\u30ad\u30e5\u30fc\u304c\u306a\u3044\u305f\u3081\u3001Array\u3092\u4e21\u7aef\u30ad\u30e5\u30fc\u3068\u3057\u3066\u4f7f\u7528\nconst deque: number[] = [];\n\n/* \u8981\u7d20\u3092\u30a8\u30f3\u30ad\u30e5\u30fc */\ndeque.push(2);\ndeque.push(5);\ndeque.push(4);\n// \u6ce8\u610f\uff1aunshift()\u306f\u914d\u5217\u306e\u305f\u3081\u6642\u9593\u8a08\u7b97\u91cf\u304cO(n)\ndeque.unshift(3);\ndeque.unshift(1);\n\n/* \u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9 */\nconst peekFirst: number = deque[0]; // \u5148\u982d\u8981\u7d20\nconst peekLast: number = deque[deque.length - 1]; // \u672b\u5c3e\u8981\u7d20\n\n/* \u8981\u7d20\u3092\u30c7\u30ad\u30e5\u30fc */\n// \u6ce8\u610f\uff1ashift()\u306f\u914d\u5217\u306e\u305f\u3081\u6642\u9593\u8a08\u7b97\u91cf\u304cO(n)\nconst popFront: number = deque.shift() as number; // \u5148\u982d\u8981\u7d20\u3092\u30c7\u30ad\u30e5\u30fc\nconst popBack: number = deque.pop() as number;    // \u672b\u5c3e\u8981\u7d20\u3092\u30c7\u30ad\u30e5\u30fc\n\n/* \u4e21\u7aef\u30ad\u30e5\u30fc\u306e\u9577\u3055\u3092\u53d6\u5f97 */\nconst size: number = deque.length;\n\n/* \u4e21\u7aef\u30ad\u30e5\u30fc\u304c\u7a7a\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d */\nconst isEmpty: boolean = size === 0;\n
deque.dart
/* \u4e21\u7aef\u30ad\u30e5\u30fc\u3092\u521d\u671f\u5316 */\n// Dart\u3067\u306f\u3001Queue\u304c\u4e21\u7aef\u30ad\u30e5\u30fc\u3068\u3057\u3066\u5b9a\u7fa9\u3055\u308c\u308b\nQueue<int> deque = Queue<int>();\n\n/* \u8981\u7d20\u3092\u30a8\u30f3\u30ad\u30e5\u30fc */\ndeque.addLast(2);  // \u672b\u5c3e\u306b\u8ffd\u52a0\ndeque.addLast(5);\ndeque.addLast(4);\ndeque.addFirst(3); // \u5148\u982d\u306b\u8ffd\u52a0\ndeque.addFirst(1);\n\n/* \u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9 */\nint peekFirst = deque.first; // \u5148\u982d\u8981\u7d20\nint peekLast = deque.last;   // \u672b\u5c3e\u8981\u7d20\n\n/* \u8981\u7d20\u3092\u30c7\u30ad\u30e5\u30fc */\nint popFirst = deque.removeFirst(); // \u5148\u982d\u8981\u7d20\u3092\u30c7\u30ad\u30e5\u30fc\nint popLast = deque.removeLast();   // \u672b\u5c3e\u8981\u7d20\u3092\u30c7\u30ad\u30e5\u30fc\n\n/* \u4e21\u7aef\u30ad\u30e5\u30fc\u306e\u9577\u3055\u3092\u53d6\u5f97 */\nint size = deque.length;\n\n/* \u4e21\u7aef\u30ad\u30e5\u30fc\u304c\u7a7a\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d */\nbool isEmpty = deque.isEmpty;\n
deque.rs
/* \u4e21\u7aef\u30ad\u30e5\u30fc\u3092\u521d\u671f\u5316 */\nlet mut deque: VecDeque<u32> = VecDeque::new();\n\n/* \u8981\u7d20\u3092\u30a8\u30f3\u30ad\u30e5\u30fc */\ndeque.push_back(2);  // \u672b\u5c3e\u306b\u8ffd\u52a0\ndeque.push_back(5);\ndeque.push_back(4);\ndeque.push_front(3); // \u5148\u982d\u306b\u8ffd\u52a0\ndeque.push_front(1);\n\n/* \u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9 */\nif let Some(front) = deque.front() { // \u5148\u982d\u8981\u7d20\n}\nif let Some(rear) = deque.back() {   // \u672b\u5c3e\u8981\u7d20\n}\n\n/* \u8981\u7d20\u3092\u30c7\u30ad\u30e5\u30fc */\nif let Some(pop_front) = deque.pop_front() { // \u5148\u982d\u8981\u7d20\u3092\u30c7\u30ad\u30e5\u30fc\n}\nif let Some(pop_rear) = deque.pop_back() {   // \u672b\u5c3e\u8981\u7d20\u3092\u30c7\u30ad\u30e5\u30fc\n}\n\n/* \u4e21\u7aef\u30ad\u30e5\u30fc\u306e\u9577\u3055\u3092\u53d6\u5f97 */\nlet size = deque.len();\n\n/* \u4e21\u7aef\u30ad\u30e5\u30fc\u304c\u7a7a\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d */\nlet is_empty = deque.is_empty();\n
deque.c
// C\u306b\u306f\u7d44\u307f\u8fbc\u307f\u306e\u4e21\u7aef\u30ad\u30e5\u30fc\u304c\u63d0\u4f9b\u3055\u308c\u3066\u3044\u307e\u305b\u3093\n
deque.kt
\n
"},{"location":"chapter_stack_and_queue/deque/#532","title":"5.3.2 \u00a0 \u4e21\u7aef\u30ad\u30e5\u30fc\u306e\u5b9f\u88c5 *","text":"

\u4e21\u7aef\u30ad\u30e5\u30fc\u306e\u5b9f\u88c5\u306f\u901a\u5e38\u306e\u30ad\u30e5\u30fc\u306e\u5b9f\u88c5\u3068\u4f3c\u3066\u304a\u308a\u3001\u9023\u7d50\u30ea\u30b9\u30c8\u307e\u305f\u306f\u914d\u5217\u3092\u57fa\u76e4\u3068\u306a\u308b\u30c7\u30fc\u30bf\u69cb\u9020\u3068\u3057\u3066\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002

"},{"location":"chapter_stack_and_queue/deque/#1","title":"1. \u00a0 \u53cc\u65b9\u5411\u9023\u7d50\u30ea\u30b9\u30c8\u306b\u57fa\u3065\u304f\u5b9f\u88c5","text":"

\u524d\u7bc0\u3067\u3001\u901a\u5e38\u306e\u5358\u4e00\u9023\u7d50\u30ea\u30b9\u30c8\u3092\u4f7f\u3063\u3066\u30ad\u30e5\u30fc\u3092\u5b9f\u88c5\u3057\u305f\u3053\u3068\u3092\u601d\u3044\u51fa\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u308c\u306f\u5148\u982d\u304b\u3089\u306e\u524a\u9664\uff08\u30c7\u30ad\u30e5\u30fc\u64cd\u4f5c\u306b\u5bfe\u5fdc\uff09\u3068\u672b\u5c3e\u3078\u306e\u65b0\u3057\u3044\u8981\u7d20\u306e\u8ffd\u52a0\uff08\u30a8\u30f3\u30ad\u30e5\u30fc\u64cd\u4f5c\u306b\u5bfe\u5fdc\uff09\u3092\u4fbf\u5229\u306b\u884c\u3048\u308b\u305f\u3081\u3067\u3057\u305f\u3002

\u4e21\u7aef\u30ad\u30e5\u30fc\u3067\u306f\u3001\u5148\u982d\u3068\u672b\u5c3e\u306e\u4e21\u65b9\u3067\u30a8\u30f3\u30ad\u30e5\u30fc\u3068\u30c7\u30ad\u30e5\u30fc\u64cd\u4f5c\u3092\u5b9f\u884c\u3067\u304d\u307e\u3059\u3002\u3064\u307e\u308a\u3001\u4e21\u7aef\u30ad\u30e5\u30fc\u306f\u9006\u65b9\u5411\u306e\u64cd\u4f5c\u3082\u5b9f\u88c5\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u306e\u305f\u3081\u3001\u4e21\u7aef\u30ad\u30e5\u30fc\u306e\u57fa\u76e4\u3068\u306a\u308b\u30c7\u30fc\u30bf\u69cb\u9020\u3068\u3057\u3066\u300c\u53cc\u65b9\u5411\u9023\u7d50\u30ea\u30b9\u30c8\u300d\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002

\u4e0b\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u53cc\u65b9\u5411\u9023\u7d50\u30ea\u30b9\u30c8\u306e\u5148\u982d\u30ce\u30fc\u30c9\u3068\u672b\u5c3e\u30ce\u30fc\u30c9\u3092\u305d\u308c\u305e\u308c\u4e21\u7aef\u30ad\u30e5\u30fc\u306e\u524d\u7aef\u3068\u5f8c\u7aef\u3068\u3057\u3066\u6271\u3044\u3001\u4e21\u7aef\u3067\u306e\u30ce\u30fc\u30c9\u306e\u8ffd\u52a0\u3068\u524a\u9664\u6a5f\u80fd\u3092\u5b9f\u88c5\u3057\u307e\u3059\u3002

LinkedListDequepushLast()pushFirst()popLast()popFirst()

\u56f3 5-8 \u00a0 \u53cc\u65b9\u5411\u9023\u7d50\u30ea\u30b9\u30c8\u306b\u3088\u308b\u4e21\u7aef\u30ad\u30e5\u30fc\u306e\u30a8\u30f3\u30ad\u30e5\u30fc\u3068\u30c7\u30ad\u30e5\u30fc\u64cd\u4f5c\u306e\u5b9f\u88c5

\u5b9f\u88c5\u30b3\u30fc\u30c9\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby linkedlist_deque.py
class ListNode:\n    \"\"\"\u53cc\u65b9\u5411\u9023\u7d50\u30ea\u30b9\u30c8\u30ce\u30fc\u30c9\"\"\"\n\n    def __init__(self, val: int):\n        \"\"\"\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\"\"\"\n        self.val: int = val\n        self.next: ListNode | None = None  # \u5f8c\u7d9a\u30ce\u30fc\u30c9\u3078\u306e\u53c2\u7167\n        self.prev: ListNode | None = None  # \u524d\u99c6\u30ce\u30fc\u30c9\u3078\u306e\u53c2\u7167\n\nclass LinkedListDeque:\n    \"\"\"\u53cc\u65b9\u5411\u9023\u7d50\u30ea\u30b9\u30c8\u30d9\u30fc\u30b9\u306e\u53cc\u7aef\u30ad\u30e5\u30fc\u30af\u30e9\u30b9\"\"\"\n\n    def __init__(self):\n        \"\"\"\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\"\"\"\n        self._front: ListNode | None = None  # \u30d8\u30c3\u30c9\u30ce\u30fc\u30c9 front\n        self._rear: ListNode | None = None  # \u30c6\u30fc\u30eb\u30ce\u30fc\u30c9 rear\n        self._size: int = 0  # \u53cc\u7aef\u30ad\u30e5\u30fc\u306e\u9577\u3055\n\n    def size(self) -> int:\n        \"\"\"\u53cc\u7aef\u30ad\u30e5\u30fc\u306e\u9577\u3055\u3092\u53d6\u5f97\"\"\"\n        return self._size\n\n    def is_empty(self) -> bool:\n        \"\"\"\u53cc\u7aef\u30ad\u30e5\u30fc\u304c\u7a7a\u304b\u3069\u3046\u304b\u3092\u5224\u5b9a\"\"\"\n        return self._size == 0\n\n    def push(self, num: int, is_front: bool):\n        \"\"\"\u30a8\u30f3\u30ad\u30e5\u30fc\u64cd\u4f5c\"\"\"\n        node = ListNode(num)\n        # \u30ea\u30b9\u30c8\u304c\u7a7a\u306e\u5834\u5408\u3001front \u3068 rear \u306e\u4e21\u65b9\u3092 node \u306b\u5411\u3051\u308b\n        if self.is_empty():\n            self._front = self._rear = node\n        # \u524d\u7aef\u30a8\u30f3\u30ad\u30e5\u30fc\u64cd\u4f5c\n        elif is_front:\n            # \u30ce\u30fc\u30c9\u3092\u30ea\u30b9\u30c8\u306e\u5148\u982d\u306b\u8ffd\u52a0\n            self._front.prev = node\n            node.next = self._front\n            self._front = node  # \u30d8\u30c3\u30c9\u30ce\u30fc\u30c9\u3092\u66f4\u65b0\n        # \u5f8c\u7aef\u30a8\u30f3\u30ad\u30e5\u30fc\u64cd\u4f5c\n        else:\n            # \u30ce\u30fc\u30c9\u3092\u30ea\u30b9\u30c8\u306e\u672b\u5c3e\u306b\u8ffd\u52a0\n            self._rear.next = node\n            node.prev = self._rear\n            self._rear = node  # \u30c6\u30fc\u30eb\u30ce\u30fc\u30c9\u3092\u66f4\u65b0\n        self._size += 1  # \u30ad\u30e5\u30fc\u306e\u9577\u3055\u3092\u66f4\u65b0\n\n    def push_first(self, num: int):\n        \"\"\"\u524d\u7aef\u30a8\u30f3\u30ad\u30e5\u30fc\"\"\"\n        self.push(num, True)\n\n    def push_last(self, num: int):\n        \"\"\"\u5f8c\u7aef\u30a8\u30f3\u30ad\u30e5\u30fc\"\"\"\n        self.push(num, False)\n\n    def pop(self, is_front: bool) -> int:\n        \"\"\"\u30c7\u30ad\u30e5\u30fc\u64cd\u4f5c\"\"\"\n        if self.is_empty():\n            raise IndexError(\"Double-ended queue is empty\")\n        # \u524d\u7aef\u30c7\u30ad\u30e5\u30fc\u64cd\u4f5c\n        if is_front:\n            val: int = self._front.val  # \u30d8\u30c3\u30c9\u30ce\u30fc\u30c9\u306e\u5024\u3092\u4e00\u6642\u7684\u306b\u4fdd\u5b58\n            # \u30d8\u30c3\u30c9\u30ce\u30fc\u30c9\u3092\u524a\u9664\n            fnext: ListNode | None = self._front.next\n            if fnext is not None:\n                fnext.prev = None\n                self._front.next = None\n            self._front = fnext  # \u30d8\u30c3\u30c9\u30ce\u30fc\u30c9\u3092\u66f4\u65b0\n        # \u5f8c\u7aef\u30c7\u30ad\u30e5\u30fc\u64cd\u4f5c\n        else:\n            val: int = self._rear.val  # \u30c6\u30fc\u30eb\u30ce\u30fc\u30c9\u306e\u5024\u3092\u4e00\u6642\u7684\u306b\u4fdd\u5b58\n            # \u30c6\u30fc\u30eb\u30ce\u30fc\u30c9\u3092\u524a\u9664\n            rprev: ListNode | None = self._rear.prev\n            if rprev is not None:\n                rprev.next = None\n                self._rear.prev = None\n            self._rear = rprev  # \u30c6\u30fc\u30eb\u30ce\u30fc\u30c9\u3092\u66f4\u65b0\n        self._size -= 1  # \u30ad\u30e5\u30fc\u306e\u9577\u3055\u3092\u66f4\u65b0\n        return val\n\n    def pop_first(self) -> int:\n        \"\"\"\u524d\u7aef\u30c7\u30ad\u30e5\u30fc\"\"\"\n        return self.pop(True)\n\n    def pop_last(self) -> int:\n        \"\"\"\u5f8c\u7aef\u30c7\u30ad\u30e5\u30fc\"\"\"\n        return self.pop(False)\n\n    def peek_first(self) -> int:\n        \"\"\"\u524d\u7aef\u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9\"\"\"\n        if self.is_empty():\n            raise IndexError(\"Double-ended queue is empty\")\n        return self._front.val\n\n    def peek_last(self) -> int:\n        \"\"\"\u5f8c\u7aef\u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9\"\"\"\n        if self.is_empty():\n            raise IndexError(\"Double-ended queue is empty\")\n        return self._rear.val\n\n    def to_array(self) -> list[int]:\n        \"\"\"\u51fa\u529b\u7528\u306e\u914d\u5217\u3092\u8fd4\u3059\"\"\"\n        node = self._front\n        res = [0] * self.size()\n        for i in range(self.size()):\n            res[i] = node.val\n            node = node.next\n        return res\n
linkedlist_deque.cpp
/* \u53cc\u65b9\u5411\u9023\u7d50\u30ea\u30b9\u30c8\u30ce\u30fc\u30c9 */\nstruct DoublyListNode {\n    int val;              // \u30ce\u30fc\u30c9\u306e\u5024\n    DoublyListNode *next; // \u5f8c\u7d9a\u30ce\u30fc\u30c9\u3078\u306e\u30dd\u30a4\u30f3\u30bf\n    DoublyListNode *prev; // \u524d\u7d9a\u30ce\u30fc\u30c9\u3078\u306e\u30dd\u30a4\u30f3\u30bf\n    DoublyListNode(int val) : val(val), prev(nullptr), next(nullptr) {\n    }\n};\n\n/* \u53cc\u65b9\u5411\u9023\u7d50\u30ea\u30b9\u30c8\u306b\u57fa\u3065\u304f\u4e21\u7aef\u30ad\u30e5\u30fc\u30af\u30e9\u30b9 */\nclass LinkedListDeque {\n  private:\n    DoublyListNode *front, *rear; // \u5148\u982d\u30ce\u30fc\u30c9front\u3001\u672b\u5c3e\u30ce\u30fc\u30c9rear\n    int queSize = 0;              // \u4e21\u7aef\u30ad\u30e5\u30fc\u306e\u9577\u3055\n\n  public:\n    /* \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf */\n    LinkedListDeque() : front(nullptr), rear(nullptr) {\n    }\n\n    /* \u30c7\u30b9\u30c8\u30e9\u30af\u30bf */\n    ~LinkedListDeque() {\n        // \u9023\u7d50\u30ea\u30b9\u30c8\u3092\u8d70\u67fb\u3001\u30ce\u30fc\u30c9\u3092\u524a\u9664\u3001\u30e1\u30e2\u30ea\u3092\u89e3\u653e\n        DoublyListNode *pre, *cur = front;\n        while (cur != nullptr) {\n            pre = cur;\n            cur = cur->next;\n            delete pre;\n        }\n    }\n\n    /* \u4e21\u7aef\u30ad\u30e5\u30fc\u306e\u9577\u3055\u3092\u53d6\u5f97 */\n    int size() {\n        return queSize;\n    }\n\n    /* \u4e21\u7aef\u30ad\u30e5\u30fc\u304c\u7a7a\u304b\u3069\u3046\u304b\u3092\u5224\u5b9a */\n    bool isEmpty() {\n        return size() == 0;\n    }\n\n    /* \u30a8\u30f3\u30ad\u30e5\u30fc\u64cd\u4f5c */\n    void push(int num, bool isFront) {\n        DoublyListNode *node = new DoublyListNode(num);\n        // \u30ea\u30b9\u30c8\u304c\u7a7a\u306e\u5834\u5408\u3001front\u3068rear\u306e\u4e21\u65b9\u3092node\u306b\u5411\u3051\u308b\n        if (isEmpty())\n            front = rear = node;\n        // \u5148\u982d\u30a8\u30f3\u30ad\u30e5\u30fc\u64cd\u4f5c\n        else if (isFront) {\n            // \u30ce\u30fc\u30c9\u3092\u30ea\u30b9\u30c8\u306e\u5148\u982d\u306b\u8ffd\u52a0\n            front->prev = node;\n            node->next = front;\n            front = node; // \u5148\u982d\u30ce\u30fc\u30c9\u3092\u66f4\u65b0\n        // \u672b\u5c3e\u30a8\u30f3\u30ad\u30e5\u30fc\u64cd\u4f5c\n        } else {\n            // \u30ce\u30fc\u30c9\u3092\u30ea\u30b9\u30c8\u306e\u672b\u5c3e\u306b\u8ffd\u52a0\n            rear->next = node;\n            node->prev = rear;\n            rear = node; // \u672b\u5c3e\u30ce\u30fc\u30c9\u3092\u66f4\u65b0\n        }\n        queSize++; // \u30ad\u30e5\u30fc\u9577\u3092\u66f4\u65b0\n    }\n\n    /* \u5148\u982d\u30a8\u30f3\u30ad\u30e5\u30fc */\n    void pushFirst(int num) {\n        push(num, true);\n    }\n\n    /* \u672b\u5c3e\u30a8\u30f3\u30ad\u30e5\u30fc */\n    void pushLast(int num) {\n        push(num, false);\n    }\n\n    /* \u30c7\u30ad\u30e5\u30fc\u64cd\u4f5c */\n    int pop(bool isFront) {\n        if (isEmpty())\n            throw out_of_range(\"Queue is empty\");\n        int val;\n        // \u5148\u982d\u30c7\u30ad\u30e5\u30fc\u64cd\u4f5c\n        if (isFront) {\n            val = front->val; // \u5148\u982d\u30ce\u30fc\u30c9\u306e\u5024\u3092\u4e00\u6642\u4fdd\u5b58\n            // \u5148\u982d\u30ce\u30fc\u30c9\u3092\u524a\u9664\n            DoublyListNode *fNext = front->next;\n            if (fNext != nullptr) {\n                fNext->prev = nullptr;\n                front->next = nullptr;\n            }\n            delete front;\n            front = fNext; // \u5148\u982d\u30ce\u30fc\u30c9\u3092\u66f4\u65b0\n        // \u672b\u5c3e\u30c7\u30ad\u30e5\u30fc\u64cd\u4f5c\n        } else {\n            val = rear->val; // \u672b\u5c3e\u30ce\u30fc\u30c9\u306e\u5024\u3092\u4e00\u6642\u4fdd\u5b58\n            // \u672b\u5c3e\u30ce\u30fc\u30c9\u3092\u524a\u9664\n            DoublyListNode *rPrev = rear->prev;\n            if (rPrev != nullptr) {\n                rPrev->next = nullptr;\n                rear->prev = nullptr;\n            }\n            delete rear;\n            rear = rPrev; // \u672b\u5c3e\u30ce\u30fc\u30c9\u3092\u66f4\u65b0\n        }\n        queSize--; // \u30ad\u30e5\u30fc\u9577\u3092\u66f4\u65b0\n        return val;\n    }\n\n    /* \u5148\u982d\u30c7\u30ad\u30e5\u30fc */\n    int popFirst() {\n        return pop(true);\n    }\n\n    /* \u672b\u5c3e\u30c7\u30ad\u30e5\u30fc */\n    int popLast() {\n        return pop(false);\n    }\n\n    /* \u5148\u982d\u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9 */\n    int peekFirst() {\n        if (isEmpty())\n            throw out_of_range(\"Double-ended queue is empty\");\n        return front->val;\n    }\n\n    /* \u672b\u5c3e\u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9 */\n    int peekLast() {\n        if (isEmpty())\n            throw out_of_range(\"Double-ended queue is empty\");\n        return rear->val;\n    }\n\n    /* \u5370\u5237\u7528\u306b\u914d\u5217\u3092\u8fd4\u5374 */\n    vector<int> toVector() {\n        DoublyListNode *node = front;\n        vector<int> res(size());\n        for (int i = 0; i < res.size(); i++) {\n            res[i] = node->val;\n            node = node->next;\n        }\n        return res;\n    }\n};\n
linkedlist_deque.java
/* \u53cc\u65b9\u5411\u9023\u7d50\u30ea\u30b9\u30c8\u30ce\u30fc\u30c9 */\nclass ListNode {\n    int val; // \u30ce\u30fc\u30c9\u5024\n    ListNode next; // \u5f8c\u7d9a\u30ce\u30fc\u30c9\u3078\u306e\u53c2\u7167\n    ListNode prev; // \u524d\u4efb\u30ce\u30fc\u30c9\u3078\u306e\u53c2\u7167\n\n    ListNode(int val) {\n        this.val = val;\n        prev = next = null;\n    }\n}\n\n/* \u53cc\u65b9\u5411\u9023\u7d50\u30ea\u30b9\u30c8\u306b\u57fa\u3065\u304f\u4e21\u7aef\u30ad\u30e5\u30fc\u30af\u30e9\u30b9 */\nclass LinkedListDeque {\n    private ListNode front, rear; // \u5148\u982d\u30ce\u30fc\u30c9 front\u3001\u672b\u5c3e\u30ce\u30fc\u30c9 rear\n    private int queSize = 0; // \u4e21\u7aef\u30ad\u30e5\u30fc\u306e\u9577\u3055\n\n    public LinkedListDeque() {\n        front = rear = null;\n    }\n\n    /* \u4e21\u7aef\u30ad\u30e5\u30fc\u306e\u9577\u3055\u3092\u53d6\u5f97 */\n    public int size() {\n        return queSize;\n    }\n\n    /* \u4e21\u7aef\u30ad\u30e5\u30fc\u304c\u7a7a\u304b\u3069\u3046\u304b\u3092\u5224\u5b9a */\n    public boolean isEmpty() {\n        return size() == 0;\n    }\n\n    /* \u30a8\u30f3\u30ad\u30e5\u30fc\u64cd\u4f5c */\n    private void push(int num, boolean isFront) {\n        ListNode node = new ListNode(num);\n        // \u30ea\u30b9\u30c8\u304c\u7a7a\u306e\u5834\u5408\u3001front \u3068 rear \u306e\u4e21\u65b9\u3092 node \u306b\u6307\u3059\n        if (isEmpty())\n            front = rear = node;\n        // \u5148\u982d\u30a8\u30f3\u30ad\u30e5\u30fc\u64cd\u4f5c\n        else if (isFront) {\n            // node \u3092\u30ea\u30b9\u30c8\u306e\u5148\u982d\u306b\u8ffd\u52a0\n            front.prev = node;\n            node.next = front;\n            front = node; // front \u3092\u66f4\u65b0\n        // \u672b\u5c3e\u30a8\u30f3\u30ad\u30e5\u30fc\u64cd\u4f5c\n        } else {\n            // node \u3092\u30ea\u30b9\u30c8\u306e\u672b\u5c3e\u306b\u8ffd\u52a0\n            rear.next = node;\n            node.prev = rear;\n            rear = node; // rear \u3092\u66f4\u65b0\n        }\n        queSize++; // \u9577\u3055\u3092\u66f4\u65b0\n    }\n\n    /* \u5148\u982d\u30a8\u30f3\u30ad\u30e5\u30fc */\n    public void pushFirst(int num) {\n        push(num, true);\n    }\n\n    /* \u672b\u5c3e\u30a8\u30f3\u30ad\u30e5\u30fc */\n    public void pushLast(int num) {\n        push(num, false);\n    }\n\n    /* \u30c7\u30ad\u30e5\u30fc\u64cd\u4f5c */\n    private int pop(boolean isFront) {\n        if (isEmpty())\n            throw new IndexOutOfBoundsException();\n        int val;\n        // \u5148\u982d\u30c7\u30ad\u30e5\u30fc\u64cd\u4f5c\n        if (isFront) {\n            val = front.val; // \u4e00\u6642\u7684\u306b\u5148\u982d\u30ce\u30fc\u30c9\u5024\u3092\u4fdd\u5b58\n            // \u6b21\u306e\u30ce\u30fc\u30c9\u3092\u524a\u9664\n            ListNode fNext = front.next;\n            if (fNext != null) {\n                fNext.prev = null;\n                front.next = null;\n            }\n            front = fNext; // front \u3092\u66f4\u65b0\n        // \u672b\u5c3e\u30c7\u30ad\u30e5\u30fc\u64cd\u4f5c\n        } else {\n            val = rear.val; // \u4e00\u6642\u7684\u306b\u672b\u5c3e\u30ce\u30fc\u30c9\u5024\u3092\u4fdd\u5b58\n            // \u524d\u306e\u30ce\u30fc\u30c9\u3092\u524a\u9664\n            ListNode rPrev = rear.prev;\n            if (rPrev != null) {\n                rPrev.next = null;\n                rear.prev = null;\n            }\n            rear = rPrev; // rear \u3092\u66f4\u65b0\n        }\n        queSize--; // \u9577\u3055\u3092\u66f4\u65b0\n        return val;\n    }\n\n    /* \u5148\u982d\u30c7\u30ad\u30e5\u30fc */\n    public int popFirst() {\n        return pop(true);\n    }\n\n    /* \u672b\u5c3e\u30c7\u30ad\u30e5\u30fc */\n    public int popLast() {\n        return pop(false);\n    }\n\n    /* \u5148\u982d\u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9 */\n    public int peekFirst() {\n        if (isEmpty())\n            throw new IndexOutOfBoundsException();\n        return front.val;\n    }\n\n    /* \u672b\u5c3e\u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9 */\n    public int peekLast() {\n        if (isEmpty())\n            throw new IndexOutOfBoundsException();\n        return rear.val;\n    }\n\n    /* \u914d\u5217\u3092\u8fd4\u3059 */\n    public int[] toArray() {\n        ListNode node = front;\n        int[] res = new int[size()];\n        for (int i = 0; i < res.length; i++) {\n            res[i] = node.val;\n            node = node.next;\n        }\n        return res;\n    }\n}\n
linkedlist_deque.cs
[class]{ListNode}-[func]{}\n\n[class]{LinkedListDeque}-[func]{}\n
linkedlist_deque.go
[class]{linkedListDeque}-[func]{}\n
linkedlist_deque.swift
[class]{ListNode}-[func]{}\n\n[class]{LinkedListDeque}-[func]{}\n
linkedlist_deque.js
[class]{ListNode}-[func]{}\n\n[class]{LinkedListDeque}-[func]{}\n
linkedlist_deque.ts
[class]{ListNode}-[func]{}\n\n[class]{LinkedListDeque}-[func]{}\n
linkedlist_deque.dart
[class]{ListNode}-[func]{}\n\n[class]{LinkedListDeque}-[func]{}\n
linkedlist_deque.rs
[class]{ListNode}-[func]{}\n\n[class]{LinkedListDeque}-[func]{}\n
linkedlist_deque.c
[class]{DoublyListNode}-[func]{}\n\n[class]{LinkedListDeque}-[func]{}\n
linkedlist_deque.kt
[class]{ListNode}-[func]{}\n\n[class]{LinkedListDeque}-[func]{}\n
linkedlist_deque.rb
[class]{ListNode}-[func]{}\n\n[class]{LinkedListDeque}-[func]{}\n
"},{"location":"chapter_stack_and_queue/deque/#2","title":"2. \u00a0 \u914d\u5217\u306b\u57fa\u3065\u304f\u5b9f\u88c5","text":"

\u4e0b\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u914d\u5217\u3067\u30ad\u30e5\u30fc\u3092\u5b9f\u88c5\u3059\u308b\u306e\u3068\u540c\u69d8\u306b\u3001\u5faa\u74b0\u914d\u5217\u3092\u4f7f\u3063\u3066\u4e21\u7aef\u30ad\u30e5\u30fc\u3092\u5b9f\u88c5\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002

ArrayDequepushLast()pushFirst()popLast()popFirst()

\u56f3 5-9 \u00a0 \u914d\u5217\u306b\u3088\u308b\u4e21\u7aef\u30ad\u30e5\u30fc\u306e\u30a8\u30f3\u30ad\u30e5\u30fc\u3068\u30c7\u30ad\u30e5\u30fc\u64cd\u4f5c\u306e\u5b9f\u88c5

\u5b9f\u88c5\u3067\u306f\u300c\u524d\u7aef\u30a8\u30f3\u30ad\u30e5\u30fc\u300d\u3068\u300c\u5f8c\u7aef\u30c7\u30ad\u30e5\u30fc\u300d\u306e\u30e1\u30bd\u30c3\u30c9\u3092\u8ffd\u52a0\u3059\u308b\u3060\u3051\u3067\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby array_deque.py
class ArrayDeque:\n    \"\"\"\u5faa\u74b0\u914d\u5217\u30d9\u30fc\u30b9\u306e\u53cc\u7aef\u30ad\u30e5\u30fc\u30af\u30e9\u30b9\"\"\"\n\n    def __init__(self, capacity: int):\n        \"\"\"\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\"\"\"\n        self._nums: list[int] = [0] * capacity\n        self._front: int = 0\n        self._size: int = 0\n\n    def capacity(self) -> int:\n        \"\"\"\u53cc\u7aef\u30ad\u30e5\u30fc\u306e\u5bb9\u91cf\u3092\u53d6\u5f97\"\"\"\n        return len(self._nums)\n\n    def size(self) -> int:\n        \"\"\"\u53cc\u7aef\u30ad\u30e5\u30fc\u306e\u9577\u3055\u3092\u53d6\u5f97\"\"\"\n        return self._size\n\n    def is_empty(self) -> bool:\n        \"\"\"\u53cc\u7aef\u30ad\u30e5\u30fc\u304c\u7a7a\u304b\u3069\u3046\u304b\u3092\u5224\u5b9a\"\"\"\n        return self._size == 0\n\n    def index(self, i: int) -> int:\n        \"\"\"\u5faa\u74b0\u914d\u5217\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u8a08\u7b97\"\"\"\n        # \u30e2\u30b8\u30e5\u30ed\u6f14\u7b97\u306b\u3088\u3063\u3066\u5faa\u74b0\u914d\u5217\u3092\u5b9f\u88c5\n        # i \u304c\u914d\u5217\u306e\u672b\u5c3e\u3092\u8d85\u3048\u305f\u5834\u5408\u3001\u5148\u982d\u306b\u623b\u308b\n        # i \u304c\u914d\u5217\u306e\u5148\u982d\u3092\u8d85\u3048\u305f\u5834\u5408\u3001\u672b\u5c3e\u306b\u623b\u308b\n        return (i + self.capacity()) % self.capacity()\n\n    def push_first(self, num: int):\n        \"\"\"\u524d\u7aef\u30a8\u30f3\u30ad\u30e5\u30fc\"\"\"\n        if self._size == self.capacity():\n            print(\"\u53cc\u7aef\u30ad\u30e5\u30fc\u304c\u6e80\u676f\u3067\u3059\")\n            return\n        # \u30d5\u30ed\u30f3\u30c8\u30dd\u30a4\u30f3\u30bf\u3092\u5de6\u306b1\u3064\u79fb\u52d5\n        # \u30e2\u30b8\u30e5\u30ed\u6f14\u7b97\u306b\u3088\u3063\u3066\u30d5\u30ed\u30f3\u30c8\u304c\u914d\u5217\u306e\u5148\u982d\u3092\u8d85\u3048\u3066\u672b\u5c3e\u306b\u623b\u308b\u3053\u3068\u3092\u5b9f\u88c5\n        self._front = self.index(self._front - 1)\n        # num \u3092\u524d\u7aef\u306b\u8ffd\u52a0\n        self._nums[self._front] = num\n        self._size += 1\n\n    def push_last(self, num: int):\n        \"\"\"\u5f8c\u7aef\u30a8\u30f3\u30ad\u30e5\u30fc\"\"\"\n        if self._size == self.capacity():\n            print(\"\u53cc\u7aef\u30ad\u30e5\u30fc\u304c\u6e80\u676f\u3067\u3059\")\n            return\n        # \u30ea\u30a2\u30dd\u30a4\u30f3\u30bf\u3092\u8a08\u7b97\u3001\u30ea\u30a2\u30a4\u30f3\u30c7\u30c3\u30af\u30b9 + 1 \u3092\u6307\u3059\n        rear = self.index(self._front + self._size)\n        # num \u3092\u5f8c\u7aef\u306b\u8ffd\u52a0\n        self._nums[rear] = num\n        self._size += 1\n\n    def pop_first(self) -> int:\n        \"\"\"\u524d\u7aef\u30c7\u30ad\u30e5\u30fc\"\"\"\n        num = self.peek_first()\n        # \u30d5\u30ed\u30f3\u30c8\u30dd\u30a4\u30f3\u30bf\u30921\u3064\u5f8c\u308d\u306b\u79fb\u52d5\n        self._front = self.index(self._front + 1)\n        self._size -= 1\n        return num\n\n    def pop_last(self) -> int:\n        \"\"\"\u5f8c\u7aef\u30c7\u30ad\u30e5\u30fc\"\"\"\n        num = self.peek_last()\n        self._size -= 1\n        return num\n\n    def peek_first(self) -> int:\n        \"\"\"\u524d\u7aef\u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9\"\"\"\n        if self.is_empty():\n            raise IndexError(\"Double-ended queue is empty\")\n        return self._nums[self._front]\n\n    def peek_last(self) -> int:\n        \"\"\"\u5f8c\u7aef\u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9\"\"\"\n        if self.is_empty():\n            raise IndexError(\"Double-ended queue is empty\")\n        # \u5f8c\u7aef\u8981\u7d20\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u8a08\u7b97\n        last = self.index(self._front + self._size - 1)\n        return self._nums[last]\n\n    def to_array(self) -> list[int]:\n        \"\"\"\u51fa\u529b\u7528\u306e\u914d\u5217\u3092\u8fd4\u3059\"\"\"\n        # \u6709\u52b9\u306a\u9577\u3055\u7bc4\u56f2\u5185\u306e\u8981\u7d20\u306e\u307f\u3092\u5909\u63db\n        res = []\n        for i in range(self._size):\n            res.append(self._nums[self.index(self._front + i)])\n        return res\n
array_deque.cpp
/* \u5faa\u74b0\u914d\u5217\u306b\u57fa\u3065\u304f\u4e21\u7aef\u30ad\u30e5\u30fc\u30af\u30e9\u30b9 */\nclass ArrayDeque {\n  private:\n    vector<int> nums; // \u4e21\u7aef\u30ad\u30e5\u30fc\u306e\u8981\u7d20\u3092\u683c\u7d0d\u3059\u308b\u914d\u5217\n    int front;        // \u5148\u982d\u30dd\u30a4\u30f3\u30bf\u3001\u5148\u982d\u8981\u7d20\u3092\u6307\u3059\n    int queSize;      // \u4e21\u7aef\u30ad\u30e5\u30fc\u306e\u9577\u3055\n\n  public:\n    /* \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf */\n    ArrayDeque(int capacity) {\n        nums.resize(capacity);\n        front = queSize = 0;\n    }\n\n    /* \u4e21\u7aef\u30ad\u30e5\u30fc\u306e\u5bb9\u91cf\u3092\u53d6\u5f97 */\n    int capacity() {\n        return nums.size();\n    }\n\n    /* \u4e21\u7aef\u30ad\u30e5\u30fc\u306e\u9577\u3055\u3092\u53d6\u5f97 */\n    int size() {\n        return queSize;\n    }\n\n    /* \u4e21\u7aef\u30ad\u30e5\u30fc\u304c\u7a7a\u304b\u3069\u3046\u304b\u3092\u5224\u5b9a */\n    bool isEmpty() {\n        return queSize == 0;\n    }\n\n    /* \u5faa\u74b0\u914d\u5217\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u8a08\u7b97 */\n    int index(int i) {\n        // \u5270\u4f59\u6f14\u7b97\u3067\u5faa\u74b0\u914d\u5217\u3092\u5b9f\u73fe\n        // i\u304c\u914d\u5217\u306e\u672b\u5c3e\u3092\u8d85\u3048\u305f\u5834\u5408\u3001\u5148\u982d\u306b\u623b\u308b\n        // i\u304c\u914d\u5217\u306e\u5148\u982d\u3092\u8d85\u3048\u305f\u5834\u5408\u3001\u672b\u5c3e\u306b\u623b\u308b\n        return (i + capacity()) % capacity();\n    }\n\n    /* \u5148\u982d\u30a8\u30f3\u30ad\u30e5\u30fc */\n    void pushFirst(int num) {\n        if (queSize == capacity()) {\n            cout << \"Double-ended queue is full\" << endl;\n            return;\n        }\n        // \u5148\u982d\u30dd\u30a4\u30f3\u30bf\u30921\u3064\u5de6\u306b\u79fb\u52d5\n        // \u5270\u4f59\u6f14\u7b97\u3067front\u304c\u914d\u5217\u306e\u5148\u982d\u3092\u8d8a\u3048\u3066\u672b\u5c3e\u306b\u623b\u308b\u3053\u3068\u3092\u5b9f\u73fe\n        front = index(front - 1);\n        // num\u3092\u5148\u982d\u306b\u8ffd\u52a0\n        nums[front] = num;\n        queSize++;\n    }\n\n    /* \u672b\u5c3e\u30a8\u30f3\u30ad\u30e5\u30fc */\n    void pushLast(int num) {\n        if (queSize == capacity()) {\n            cout << \"Double-ended queue is full\" << endl;\n            return;\n        }\n        // \u672b\u5c3e\u30dd\u30a4\u30f3\u30bf\u3092\u8a08\u7b97\u3001\u672b\u5c3e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9 + 1\u3092\u6307\u3059\n        int rear = index(front + queSize);\n        // num\u3092\u672b\u5c3e\u306b\u8ffd\u52a0\n        nums[rear] = num;\n        queSize++;\n    }\n\n    /* \u5148\u982d\u30c7\u30ad\u30e5\u30fc */\n    int popFirst() {\n        int num = peekFirst();\n        // \u5148\u982d\u30dd\u30a4\u30f3\u30bf\u30921\u3064\u5f8c\u308d\u306b\u79fb\u52d5\n        front = index(front + 1);\n        queSize--;\n        return num;\n    }\n\n    /* \u672b\u5c3e\u30c7\u30ad\u30e5\u30fc */\n    int popLast() {\n        int num = peekLast();\n        queSize--;\n        return num;\n    }\n\n    /* \u5148\u982d\u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9 */\n    int peekFirst() {\n        if (isEmpty())\n            throw out_of_range(\"Double-ended queue is empty\");\n        return nums[front];\n    }\n\n    /* \u672b\u5c3e\u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9 */\n    int peekLast() {\n        if (isEmpty())\n            throw out_of_range(\"Double-ended queue is empty\");\n        // \u672b\u5c3e\u8981\u7d20\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u8a08\u7b97\n        int last = index(front + queSize - 1);\n        return nums[last];\n    }\n\n    /* \u5370\u5237\u7528\u306b\u914d\u5217\u3092\u8fd4\u5374 */\n    vector<int> toVector() {\n        // \u6709\u52b9\u306a\u9577\u3055\u7bc4\u56f2\u5185\u306e\u8981\u7d20\u306e\u307f\u3092\u5909\u63db\n        vector<int> res(queSize);\n        for (int i = 0, j = front; i < queSize; i++, j++) {\n            res[i] = nums[index(j)];\n        }\n        return res;\n    }\n};\n
array_deque.java
/* \u5faa\u74b0\u914d\u5217\u306b\u57fa\u3065\u304f\u4e21\u7aef\u30ad\u30e5\u30fc\u30af\u30e9\u30b9 */\nclass ArrayDeque {\n    private int[] nums; // \u4e21\u7aef\u30ad\u30e5\u30fc\u306e\u8981\u7d20\u3092\u683c\u7d0d\u3059\u308b\u914d\u5217\n    private int front; // \u5148\u982d\u30dd\u30a4\u30f3\u30bf\u3001\u5148\u982d\u8981\u7d20\u3092\u6307\u3059\n    private int queSize; // \u4e21\u7aef\u30ad\u30e5\u30fc\u306e\u9577\u3055\n\n    /* \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf */\n    public ArrayDeque(int capacity) {\n        this.nums = new int[capacity];\n        front = queSize = 0;\n    }\n\n    /* \u4e21\u7aef\u30ad\u30e5\u30fc\u306e\u5bb9\u91cf\u3092\u53d6\u5f97 */\n    public int capacity() {\n        return nums.length;\n    }\n\n    /* \u4e21\u7aef\u30ad\u30e5\u30fc\u306e\u9577\u3055\u3092\u53d6\u5f97 */\n    public int size() {\n        return queSize;\n    }\n\n    /* \u4e21\u7aef\u30ad\u30e5\u30fc\u304c\u7a7a\u304b\u3069\u3046\u304b\u3092\u5224\u5b9a */\n    public boolean isEmpty() {\n        return queSize == 0;\n    }\n\n    /* \u5faa\u74b0\u914d\u5217\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u8a08\u7b97 */\n    private int index(int i) {\n        // \u30e2\u30b8\u30e5\u30ed\u6f14\u7b97\u306b\u3088\u308a\u5faa\u74b0\u914d\u5217\u3092\u5b9f\u88c5\n        // i \u304c\u914d\u5217\u306e\u672b\u5c3e\u3092\u8d85\u3048\u308b\u5834\u5408\u3001\u5148\u982d\u306b\u623b\u308b\n        // i \u304c\u914d\u5217\u306e\u5148\u982d\u3092\u8d85\u3048\u308b\u5834\u5408\u3001\u672b\u5c3e\u306b\u623b\u308b\n        return (i + capacity()) % capacity();\n    }\n\n    /* \u5148\u982d\u30a8\u30f3\u30ad\u30e5\u30fc */\n    public void pushFirst(int num) {\n        if (queSize == capacity()) {\n            System.out.println(\"\u4e21\u7aef\u30ad\u30e5\u30fc\u304c\u6e80\u676f\u3067\u3059\");\n            return;\n        }\n        // \u5148\u982d\u30dd\u30a4\u30f3\u30bf\u3092\u5de6\u306b\u79fb\u52d5\u3057\u3001\u5883\u754c\u3092\u8d8a\u3048\u308b\u5834\u5408\u306f\u914d\u5217\u306e\u672b\u5c3e\u306b\u56de\u308b\n        front = index(front - 1);\n        // \u5148\u982d\u306b num \u3092\u8ffd\u52a0\n        nums[front] = num;\n        queSize++;\n    }\n\n    /* \u672b\u5c3e\u30a8\u30f3\u30ad\u30e5\u30fc */\n    public void pushLast(int num) {\n        if (queSize == capacity()) {\n            System.out.println(\"\u4e21\u7aef\u30ad\u30e5\u30fc\u304c\u6e80\u676f\u3067\u3059\");\n            return;\n        }\n        // \u672b\u5c3e\u30dd\u30a4\u30f3\u30bf\u3092\u8a08\u7b97\u3057\u3001\u672b\u5c3e\u306b\u8981\u7d20\u3092\u8ffd\u52a0\n        int rear = index(front + queSize);\n        nums[rear] = num;\n        queSize++;\n    }\n\n    /* \u5148\u982d\u30c7\u30ad\u30e5\u30fc */\n    public int popFirst() {\n        int num = peekFirst();\n        // \u5148\u982d\u30dd\u30a4\u30f3\u30bf\u3092\u53f3\u306b\u79fb\u52d5\n        front = index(front + 1);\n        queSize--;\n        return num;\n    }\n\n    /* \u672b\u5c3e\u30c7\u30ad\u30e5\u30fc */\n    public int popLast() {\n        int num = peekLast();\n        queSize--;\n        return num;\n    }\n\n    /* \u5148\u982d\u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9 */\n    public int peekFirst() {\n        if (isEmpty())\n            throw new IndexOutOfBoundsException();\n        return nums[front];\n    }\n\n    /* \u672b\u5c3e\u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9 */\n    public int peekLast() {\n        if (isEmpty())\n            throw new IndexOutOfBoundsException();\n        // \u672b\u5c3e\u8981\u7d20\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u8a08\u7b97\n        int last = index(front + queSize - 1);\n        return nums[last];\n    }\n\n    /* \u914d\u5217\u3092\u8fd4\u3059 */\n    public int[] toArray() {\n        // front \u304b\u3089\u958b\u59cb\u3057\u3066 queSize \u500b\u306e\u8981\u7d20\u306e\u307f\u3092\u30b3\u30d4\u30fc\n        int[] res = new int[queSize];\n        for (int i = 0, j = front; i < queSize; i++, j++) {\n            res[i] = nums[index(j)];\n        }\n        return res;\n    }\n}\n
array_deque.cs
[class]{ArrayDeque}-[func]{}\n
array_deque.go
[class]{arrayDeque}-[func]{}\n
array_deque.swift
[class]{ArrayDeque}-[func]{}\n
array_deque.js
[class]{ArrayDeque}-[func]{}\n
array_deque.ts
[class]{ArrayDeque}-[func]{}\n
array_deque.dart
[class]{ArrayDeque}-[func]{}\n
array_deque.rs
[class]{ArrayDeque}-[func]{}\n
array_deque.c
[class]{ArrayDeque}-[func]{}\n
array_deque.kt
[class]{ArrayDeque}-[func]{}\n
array_deque.rb
[class]{ArrayDeque}-[func]{}\n
"},{"location":"chapter_stack_and_queue/deque/#533","title":"5.3.3 \u00a0 \u4e21\u7aef\u30ad\u30e5\u30fc\u306e\u5fdc\u7528","text":"

\u4e21\u7aef\u30ad\u30e5\u30fc\u306f\u30b9\u30bf\u30c3\u30af\u3068\u30ad\u30e5\u30fc\u306e\u4e21\u65b9\u306e\u30ed\u30b8\u30c3\u30af\u3092\u7d44\u307f\u5408\u308f\u305b\u3066\u3044\u308b\u305f\u3081\u3001\u305d\u308c\u305e\u308c\u306e\u3059\u3079\u3066\u306e\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9\u3092\u5b9f\u88c5\u3067\u304d\u3001\u3088\u308a\u5927\u304d\u306a\u67d4\u8edf\u6027\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002

\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u306e\u300c\u5143\u306b\u623b\u3059\u300d\u6a5f\u80fd\u306f\u901a\u5e38\u30b9\u30bf\u30c3\u30af\u3092\u4f7f\u3063\u3066\u5b9f\u88c5\u3055\u308c\u308b\u3053\u3068\u3092\u77e5\u3063\u3066\u3044\u307e\u3059\uff1a\u30b7\u30b9\u30c6\u30e0\u306f\u5404\u5909\u66f4\u64cd\u4f5c\u3092\u30b9\u30bf\u30c3\u30af\u306bpush\u3057\u3001\u6b21\u306bpop\u3057\u3066\u5143\u306b\u623b\u3059\u3053\u3068\u3092\u5b9f\u88c5\u3057\u307e\u3059\u3002\u3057\u304b\u3057\u3001\u30b7\u30b9\u30c6\u30e0\u30ea\u30bd\u30fc\u30b9\u306e\u5236\u9650\u3092\u8003\u616e\u3057\u3066\u3001\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u306f\u5143\u306b\u623b\u3059\u30b9\u30c6\u30c3\u30d7\u306e\u6570\u3092\u5236\u9650\u3059\u308b\u3053\u3068\u304c\u3088\u304f\u3042\u308a\u307e\u3059\uff08\u4f8b\u3048\u3070\u3001\u6700\u5f8c\u306e50\u30b9\u30c6\u30c3\u30d7\u306e\u307f\u3092\u8a31\u53ef\uff09\u3002\u30b9\u30bf\u30c3\u30af\u306e\u9577\u3055\u304c50\u3092\u8d85\u3048\u305f\u5834\u5408\u3001\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u306f\u30b9\u30bf\u30c3\u30af\u306e\u5e95\u90e8\uff08\u30ad\u30e5\u30fc\u306e\u524d\u7aef\uff09\u3067\u524a\u9664\u64cd\u4f5c\u3092\u5b9f\u884c\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u3057\u304b\u3057\u3001\u901a\u5e38\u306e\u30b9\u30bf\u30c3\u30af\u3067\u306f\u3053\u306e\u6a5f\u80fd\u3092\u5b9f\u884c\u3067\u304d\u306a\u3044\u305f\u3081\u3001\u4e21\u7aef\u30ad\u30e5\u30fc\u304c\u5fc5\u8981\u306b\u306a\u308a\u307e\u3059\u3002\u300c\u5143\u306b\u623b\u3059\u300d\u306e\u30b3\u30a2\u30ed\u30b8\u30c3\u30af\u306f\u4f9d\u7136\u3068\u3057\u3066\u30b9\u30bf\u30c3\u30af\u306e\u5f8c\u5165\u308c\u5148\u51fa\u3057\u539f\u5247\u306b\u5f93\u3044\u307e\u3059\u304c\u3001\u4e21\u7aef\u30ad\u30e5\u30fc\u306f\u3088\u308a\u67d4\u8edf\u306b\u3044\u304f\u3064\u304b\u306e\u8ffd\u52a0\u30ed\u30b8\u30c3\u30af\u3092\u5b9f\u88c5\u3067\u304d\u308b\u3053\u3068\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002

"},{"location":"chapter_stack_and_queue/queue/","title":"5.2 \u00a0 \u30ad\u30e5\u30fc","text":"

\u30ad\u30e5\u30fc\u306f\u3001\u5148\u5165\u5148\u51fa\uff08FIFO\uff09\u30eb\u30fc\u30eb\u306b\u5f93\u3046\u7dda\u5f62\u30c7\u30fc\u30bf\u69cb\u9020\u3067\u3059\u3002\u540d\u524d\u304c\u793a\u3059\u3088\u3046\u306b\u3001\u30ad\u30e5\u30fc\u306f\u884c\u5217\u306e\u73fe\u8c61\u3092\u30b7\u30df\u30e5\u30ec\u30fc\u30c8\u3057\u3001\u65b0\u53c2\u8005\u306f\u5217\u306e\u5f8c\u308d\u306b\u4e26\u3073\u3001\u524d\u306e\u4eba\u304c\u6700\u521d\u306b\u5217\u3092\u96e2\u308c\u307e\u3059\u3002

\u4e0b\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u30ad\u30e5\u30fc\u306e\u524d\u9762\u3092\u300c\u30d8\u30c3\u30c9\u300d\u3001\u5f8c\u9762\u3092\u300c\u30c6\u30fc\u30eb\u300d\u3068\u547c\u3073\u307e\u3059\u3002\u30ad\u30e5\u30fc\u306e\u5f8c\u308d\u306b\u8981\u7d20\u3092\u8ffd\u52a0\u3059\u308b\u64cd\u4f5c\u3092\u300c\u30a8\u30f3\u30ad\u30e5\u30fc\u300d\u3001\u524d\u304b\u3089\u8981\u7d20\u3092\u524a\u9664\u3059\u308b\u64cd\u4f5c\u3092\u300c\u30c7\u30ad\u30e5\u30fc\u300d\u3068\u547c\u3073\u307e\u3059\u3002

\u56f3 5-4 \u00a0 \u30ad\u30e5\u30fc\u306e\u5148\u5165\u5148\u51fa\u30eb\u30fc\u30eb

"},{"location":"chapter_stack_and_queue/queue/#521","title":"5.2.1 \u00a0 \u30ad\u30e5\u30fc\u306e\u4e00\u822c\u7684\u306a\u64cd\u4f5c","text":"

\u30ad\u30e5\u30fc\u306e\u4e00\u822c\u7684\u306a\u64cd\u4f5c\u3092\u4e0b\u8868\u306b\u793a\u3057\u307e\u3059\u3002\u30e1\u30bd\u30c3\u30c9\u540d\u306f\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\u306b\u3088\u3063\u3066\u7570\u306a\u308b\u5834\u5408\u304c\u3042\u308b\u3053\u3068\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u3053\u3067\u306f\u3001\u30b9\u30bf\u30c3\u30af\u3067\u4f7f\u7528\u3057\u305f\u306e\u3068\u540c\u3058\u547d\u540d\u898f\u5247\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002

\u8868 5-2 \u00a0 \u30ad\u30e5\u30fc\u64cd\u4f5c\u306e\u52b9\u7387

\u30e1\u30bd\u30c3\u30c9\u540d \u8aac\u660e \u6642\u9593\u8a08\u7b97\u91cf push() \u8981\u7d20\u3092\u30a8\u30f3\u30ad\u30e5\u30fc\u3001\u30c6\u30fc\u30eb\u306b\u8ffd\u52a0 \\(O(1)\\) pop() \u30d8\u30c3\u30c9\u8981\u7d20\u3092\u30c7\u30ad\u30e5\u30fc \\(O(1)\\) peek() \u30d8\u30c3\u30c9\u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9 \\(O(1)\\)

\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\u3067\u7528\u610f\u3055\u308c\u3066\u3044\u308b\u30ad\u30e5\u30fc\u30af\u30e9\u30b9\u3092\u76f4\u63a5\u4f7f\u7528\u3067\u304d\u307e\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlin queue.py
from collections import deque\n\n# \u30ad\u30e5\u30fc\u3092\u521d\u671f\u5316\n# Python\u3067\u306f\u3001\u4e00\u822c\u7684\u306bdeque\u30af\u30e9\u30b9\u3092\u30ad\u30e5\u30fc\u3068\u3057\u3066\u4f7f\u7528\u3057\u307e\u3059\n# queue.Queue()\u306f\u7d14\u7c8b\u306a\u30ad\u30e5\u30fc\u30af\u30e9\u30b9\u3067\u3059\u304c\u3001\u4f7f\u3044\u306b\u304f\u3044\u305f\u3081\u63a8\u5968\u3055\u308c\u307e\u305b\u3093\nque: deque[int] = deque()\n\n# \u8981\u7d20\u3092\u30a8\u30f3\u30ad\u30e5\u30fc\nque.append(1)\nque.append(3)\nque.append(2)\nque.append(5)\nque.append(4)\n\n# \u6700\u521d\u306e\u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9\nfront: int = que[0]\n\n# \u8981\u7d20\u3092\u30c7\u30ad\u30e5\u30fc\npop: int = que.popleft()\n\n# \u30ad\u30e5\u30fc\u306e\u9577\u3055\u3092\u53d6\u5f97\nsize: int = len(que)\n\n# \u30ad\u30e5\u30fc\u304c\u7a7a\u304b\u3069\u3046\u304b\u30c1\u30a7\u30c3\u30af\nis_empty: bool = len(que) == 0\n
queue.cpp
/* \u30ad\u30e5\u30fc\u3092\u521d\u671f\u5316 */\nqueue<int> queue;\n\n/* \u8981\u7d20\u3092\u30a8\u30f3\u30ad\u30e5\u30fc */\nqueue.push(1);\nqueue.push(3);\nqueue.push(2);\nqueue.push(5);\nqueue.push(4);\n\n/* \u6700\u521d\u306e\u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9 */\nint front = queue.front();\n\n/* \u8981\u7d20\u3092\u30c7\u30ad\u30e5\u30fc */\nqueue.pop();\n\n/* \u30ad\u30e5\u30fc\u306e\u9577\u3055\u3092\u53d6\u5f97 */\nint size = queue.size();\n\n/* \u30ad\u30e5\u30fc\u304c\u7a7a\u304b\u3069\u3046\u304b\u30c1\u30a7\u30c3\u30af */\nbool empty = queue.empty();\n
queue.java
/* \u30ad\u30e5\u30fc\u3092\u521d\u671f\u5316 */\nQueue<Integer> queue = new LinkedList<>();\n\n/* \u8981\u7d20\u3092\u30a8\u30f3\u30ad\u30e5\u30fc */\nqueue.offer(1);\nqueue.offer(3);\nqueue.offer(2);\nqueue.offer(5);\nqueue.offer(4);\n\n/* \u6700\u521d\u306e\u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9 */\nint peek = queue.peek();\n\n/* \u8981\u7d20\u3092\u30c7\u30ad\u30e5\u30fc */\nint pop = queue.poll();\n\n/* \u30ad\u30e5\u30fc\u306e\u9577\u3055\u3092\u53d6\u5f97 */\nint size = queue.size();\n\n/* \u30ad\u30e5\u30fc\u304c\u7a7a\u304b\u3069\u3046\u304b\u30c1\u30a7\u30c3\u30af */\nboolean isEmpty = queue.isEmpty();\n
queue.cs
/* \u30ad\u30e5\u30fc\u3092\u521d\u671f\u5316 */\nQueue<int> queue = new();\n\n/* \u8981\u7d20\u3092\u30a8\u30f3\u30ad\u30e5\u30fc */\nqueue.Enqueue(1);\nqueue.Enqueue(3);\nqueue.Enqueue(2);\nqueue.Enqueue(5);\nqueue.Enqueue(4);\n\n/* \u6700\u521d\u306e\u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9 */\nint peek = queue.Peek();\n\n/* \u8981\u7d20\u3092\u30c7\u30ad\u30e5\u30fc */\nint pop = queue.Dequeue();\n\n/* \u30ad\u30e5\u30fc\u306e\u9577\u3055\u3092\u53d6\u5f97 */\nint size = queue.Count;\n\n/* \u30ad\u30e5\u30fc\u304c\u7a7a\u304b\u3069\u3046\u304b\u30c1\u30a7\u30c3\u30af */\nbool isEmpty = queue.Count == 0;\n
queue_test.go
/* \u30ad\u30e5\u30fc\u3092\u521d\u671f\u5316 */\n// Go\u3067\u306f\u3001list\u3092\u30ad\u30e5\u30fc\u3068\u3057\u3066\u4f7f\u7528\nqueue := list.New()\n\n/* \u8981\u7d20\u3092\u30a8\u30f3\u30ad\u30e5\u30fc */\nqueue.PushBack(1)\nqueue.PushBack(3)\nqueue.PushBack(2)\nqueue.PushBack(5)\nqueue.PushBack(4)\n\n/* \u6700\u521d\u306e\u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9 */\npeek := queue.Front()\n\n/* \u8981\u7d20\u3092\u30c7\u30ad\u30e5\u30fc */\npop := queue.Front()\nqueue.Remove(pop)\n\n/* \u30ad\u30e5\u30fc\u306e\u9577\u3055\u3092\u53d6\u5f97 */\nsize := queue.Len()\n\n/* \u30ad\u30e5\u30fc\u304c\u7a7a\u304b\u3069\u3046\u304b\u30c1\u30a7\u30c3\u30af */\nisEmpty := queue.Len() == 0\n
queue.swift
/* \u30ad\u30e5\u30fc\u3092\u521d\u671f\u5316 */\n// Swift\u306b\u306f\u7d44\u307f\u8fbc\u307f\u306e\u30ad\u30e5\u30fc\u30af\u30e9\u30b9\u304c\u306a\u3044\u305f\u3081\u3001Array\u3092\u30ad\u30e5\u30fc\u3068\u3057\u3066\u4f7f\u7528\nvar queue: [Int] = []\n\n/* \u8981\u7d20\u3092\u30a8\u30f3\u30ad\u30e5\u30fc */\nqueue.append(1)\nqueue.append(3)\nqueue.append(2)\nqueue.append(5)\nqueue.append(4)\n\n/* \u6700\u521d\u306e\u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9 */\nlet peek = queue.first!\n\n/* \u8981\u7d20\u3092\u30c7\u30ad\u30e5\u30fc */\n// \u914d\u5217\u306a\u306e\u3067\u3001removeFirst\u306e\u8a08\u7b97\u91cf\u306fO(n)\nlet pool = queue.removeFirst()\n\n/* \u30ad\u30e5\u30fc\u306e\u9577\u3055\u3092\u53d6\u5f97 */\nlet size = queue.count\n\n/* \u30ad\u30e5\u30fc\u304c\u7a7a\u304b\u3069\u3046\u304b\u30c1\u30a7\u30c3\u30af */\nlet isEmpty = queue.isEmpty\n
queue.js
/* \u30ad\u30e5\u30fc\u3092\u521d\u671f\u5316 */\n// JavaScript\u306b\u306f\u7d44\u307f\u8fbc\u307f\u306e\u30ad\u30e5\u30fc\u304c\u306a\u3044\u305f\u3081\u3001Array\u3092\u30ad\u30e5\u30fc\u3068\u3057\u3066\u4f7f\u7528\nconst queue = [];\n\n/* \u8981\u7d20\u3092\u30a8\u30f3\u30ad\u30e5\u30fc */\nqueue.push(1);\nqueue.push(3);\nqueue.push(2);\nqueue.push(5);\nqueue.push(4);\n\n/* \u6700\u521d\u306e\u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9 */\nconst peek = queue[0];\n\n/* \u8981\u7d20\u3092\u30c7\u30ad\u30e5\u30fc */\n// \u57fa\u790e\u69cb\u9020\u304c\u914d\u5217\u306a\u306e\u3067\u3001shift()\u30e1\u30bd\u30c3\u30c9\u306e\u6642\u9593\u8a08\u7b97\u91cf\u306fO(n)\nconst pop = queue.shift();\n\n/* \u30ad\u30e5\u30fc\u306e\u9577\u3055\u3092\u53d6\u5f97 */\nconst size = queue.length;\n\n/* \u30ad\u30e5\u30fc\u304c\u7a7a\u304b\u3069\u3046\u304b\u30c1\u30a7\u30c3\u30af */\nconst empty = queue.length === 0;\n
queue.ts
/* \u30ad\u30e5\u30fc\u3092\u521d\u671f\u5316 */\n// TypeScript\u306b\u306f\u7d44\u307f\u8fbc\u307f\u306e\u30ad\u30e5\u30fc\u304c\u306a\u3044\u305f\u3081\u3001Array\u3092\u30ad\u30e5\u30fc\u3068\u3057\u3066\u4f7f\u7528\nconst queue: number[] = [];\n\n/* \u8981\u7d20\u3092\u30a8\u30f3\u30ad\u30e5\u30fc */\nqueue.push(1);\nqueue.push(3);\nqueue.push(2);\nqueue.push(5);\nqueue.push(4);\n\n/* \u6700\u521d\u306e\u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9 */\nconst peek = queue[0];\n\n/* \u8981\u7d20\u3092\u30c7\u30ad\u30e5\u30fc */\n// \u57fa\u790e\u69cb\u9020\u304c\u914d\u5217\u306a\u306e\u3067\u3001shift()\u30e1\u30bd\u30c3\u30c9\u306e\u6642\u9593\u8a08\u7b97\u91cf\u306fO(n)\nconst pop = queue.shift();\n\n/* \u30ad\u30e5\u30fc\u306e\u9577\u3055\u3092\u53d6\u5f97 */\nconst size = queue.length;\n\n/* \u30ad\u30e5\u30fc\u304c\u7a7a\u304b\u3069\u3046\u304b\u30c1\u30a7\u30c3\u30af */\nconst empty = queue.length === 0;\n
queue.dart
/* \u30ad\u30e5\u30fc\u3092\u521d\u671f\u5316 */\n// Dart\u306eQueue\u30af\u30e9\u30b9\u306f\u53cc\u65b9\u5411\u30ad\u30e5\u30fc\u3067\u3059\u304c\u3001\u30ad\u30e5\u30fc\u3068\u3057\u3066\u4f7f\u7528\u3067\u304d\u307e\u3059\nQueue<int> queue = Queue();\n\n/* \u8981\u7d20\u3092\u30a8\u30f3\u30ad\u30e5\u30fc */\nqueue.add(1);\nqueue.add(3);\nqueue.add(2);\nqueue.add(5);\nqueue.add(4);\n\n/* \u6700\u521d\u306e\u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9 */\nint peek = queue.first;\n\n/* \u8981\u7d20\u3092\u30c7\u30ad\u30e5\u30fc */\nint pop = queue.removeFirst();\n\n/* \u30ad\u30e5\u30fc\u306e\u9577\u3055\u3092\u53d6\u5f97 */\nint size = queue.length;\n\n/* \u30ad\u30e5\u30fc\u304c\u7a7a\u304b\u3069\u3046\u304b\u30c1\u30a7\u30c3\u30af */\nbool isEmpty = queue.isEmpty;\n
queue.rs
/* \u53cc\u65b9\u5411\u30ad\u30e5\u30fc\u3092\u521d\u671f\u5316 */\n// Rust\u3067\u306f\u3001\u53cc\u65b9\u5411\u30ad\u30e5\u30fc\u3092\u901a\u5e38\u306e\u30ad\u30e5\u30fc\u3068\u3057\u3066\u4f7f\u7528\nlet mut deque: VecDeque<u32> = VecDeque::new();\n\n/* \u8981\u7d20\u3092\u30a8\u30f3\u30ad\u30e5\u30fc */\ndeque.push_back(1);\ndeque.push_back(3);\ndeque.push_back(2);\ndeque.push_back(5);\ndeque.push_back(4);\n\n/* \u6700\u521d\u306e\u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9 */\nif let Some(front) = deque.front() {\n}\n\n/* \u8981\u7d20\u3092\u30c7\u30ad\u30e5\u30fc */\nif let Some(pop) = deque.pop_front() {\n}\n\n/* \u30ad\u30e5\u30fc\u306e\u9577\u3055\u3092\u53d6\u5f97 */\nlet size = deque.len();\n\n/* \u30ad\u30e5\u30fc\u304c\u7a7a\u304b\u3069\u3046\u304b\u30c1\u30a7\u30c3\u30af */\nlet is_empty = deque.is_empty();\n
queue.c
// C\u306f\u7d44\u307f\u8fbc\u307f\u306e\u30ad\u30e5\u30fc\u3092\u63d0\u4f9b\u3057\u3066\u3044\u307e\u305b\u3093\n
queue.kt
\n
"},{"location":"chapter_stack_and_queue/queue/#522","title":"5.2.2 \u00a0 \u30ad\u30e5\u30fc\u306e\u5b9f\u88c5","text":"

\u30ad\u30e5\u30fc\u3092\u5b9f\u88c5\u3059\u308b\u306b\u306f\u3001\u4e00\u65b9\u306e\u7aef\u3067\u8981\u7d20\u3092\u8ffd\u52a0\u3057\u3001\u3082\u3046\u4e00\u65b9\u306e\u7aef\u3067\u8981\u7d20\u3092\u524a\u9664\u3067\u304d\u308b\u30c7\u30fc\u30bf\u69cb\u9020\u304c\u5fc5\u8981\u3067\u3059\u3002\u9023\u7d50\u30ea\u30b9\u30c8\u3068\u914d\u5217\u306e\u4e21\u65b9\u304c\u3053\u306e\u8981\u4ef6\u3092\u6e80\u305f\u3057\u307e\u3059\u3002

"},{"location":"chapter_stack_and_queue/queue/#1","title":"1. \u00a0 \u9023\u7d50\u30ea\u30b9\u30c8\u30d9\u30fc\u30b9\u306e\u5b9f\u88c5","text":"

\u4e0b\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u9023\u7d50\u30ea\u30b9\u30c8\u306e\u300c\u30d8\u30c3\u30c9\u30ce\u30fc\u30c9\u300d\u3068\u300c\u30c6\u30fc\u30eb\u30ce\u30fc\u30c9\u300d\u3092\u305d\u308c\u305e\u308c\u30ad\u30e5\u30fc\u306e\u300c\u30d5\u30ed\u30f3\u30c8\u300d\u3068\u300c\u30ea\u30a2\u300d\u3068\u8003\u3048\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u30ce\u30fc\u30c9\u306f\u5f8c\u308d\u3067\u306e\u307f\u8ffd\u52a0\u3067\u304d\u3001\u524d\u3067\u306e\u307f\u524a\u9664\u3067\u304d\u308b\u3088\u3046\u306b\u898f\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059\u3002

LinkedListQueuepush()pop()

\u56f3 5-5 \u00a0 \u9023\u7d50\u30ea\u30b9\u30c8\u306b\u3088\u308b\u30ad\u30e5\u30fc\u5b9f\u88c5\u306e\u30a8\u30f3\u30ad\u30e5\u30fc\u3068\u30c7\u30ad\u30e5\u30fc\u64cd\u4f5c

\u4ee5\u4e0b\u306f\u3001\u9023\u7d50\u30ea\u30b9\u30c8\u3092\u4f7f\u7528\u3057\u3066\u30ad\u30e5\u30fc\u3092\u5b9f\u88c5\u3059\u308b\u30b3\u30fc\u30c9\u3067\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby linkedlist_queue.py
class LinkedListQueue:\n    \"\"\"\u9023\u7d50\u30ea\u30b9\u30c8\u30d9\u30fc\u30b9\u306e\u30ad\u30e5\u30fc\u30af\u30e9\u30b9\"\"\"\n\n    def __init__(self):\n        \"\"\"\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\"\"\"\n        self._front: ListNode | None = None  # \u30d8\u30c3\u30c9\u30ce\u30fc\u30c9 front\n        self._rear: ListNode | None = None  # \u30c6\u30fc\u30eb\u30ce\u30fc\u30c9 rear\n        self._size: int = 0\n\n    def size(self) -> int:\n        \"\"\"\u30ad\u30e5\u30fc\u306e\u9577\u3055\u3092\u53d6\u5f97\"\"\"\n        return self._size\n\n    def is_empty(self) -> bool:\n        \"\"\"\u30ad\u30e5\u30fc\u304c\u7a7a\u304b\u3069\u3046\u304b\u3092\u5224\u5b9a\"\"\"\n        return self._size == 0\n\n    def push(self, num: int):\n        \"\"\"\u30a8\u30f3\u30ad\u30e5\u30fc\"\"\"\n        # \u30c6\u30fc\u30eb\u30ce\u30fc\u30c9\u306e\u5f8c\u308d\u306b num \u3092\u8ffd\u52a0\n        node = ListNode(num)\n        # \u30ad\u30e5\u30fc\u304c\u7a7a\u306e\u5834\u5408\u3001\u30d8\u30c3\u30c9\u3068\u30c6\u30fc\u30eb\u30ce\u30fc\u30c9\u306e\u4e21\u65b9\u3092\u305d\u306e\u30ce\u30fc\u30c9\u306b\u5411\u3051\u308b\n        if self._front is None:\n            self._front = node\n            self._rear = node\n        # \u30ad\u30e5\u30fc\u304c\u7a7a\u3067\u306a\u3044\u5834\u5408\u3001\u305d\u306e\u30ce\u30fc\u30c9\u3092\u30c6\u30fc\u30eb\u30ce\u30fc\u30c9\u306e\u5f8c\u308d\u306b\u8ffd\u52a0\n        else:\n            self._rear.next = node\n            self._rear = node\n        self._size += 1\n\n    def pop(self) -> int:\n        \"\"\"\u30c7\u30ad\u30e5\u30fc\"\"\"\n        num = self.peek()\n        # \u30d8\u30c3\u30c9\u30ce\u30fc\u30c9\u3092\u524a\u9664\n        self._front = self._front.next\n        self._size -= 1\n        return num\n\n    def peek(self) -> int:\n        \"\"\"\u30d5\u30ed\u30f3\u30c8\u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9\"\"\"\n        if self.is_empty():\n            raise IndexError(\"Queue is empty\")\n        return self._front.val\n\n    def to_list(self) -> list[int]:\n        \"\"\"\u51fa\u529b\u7528\u306e\u30ea\u30b9\u30c8\u306b\u5909\u63db\"\"\"\n        queue = []\n        temp = self._front\n        while temp:\n            queue.append(temp.val)\n            temp = temp.next\n        return queue\n
linkedlist_queue.cpp
/* \u9023\u7d50\u30ea\u30b9\u30c8\u306b\u57fa\u3065\u304f\u30ad\u30e5\u30fc\u30af\u30e9\u30b9 */\nclass LinkedListQueue {\n  private:\n    ListNode *front, *rear; // \u5148\u982d\u30ce\u30fc\u30c9front\u3001\u672b\u5c3e\u30ce\u30fc\u30c9rear\n    int queSize;\n\n  public:\n    LinkedListQueue() {\n        front = nullptr;\n        rear = nullptr;\n        queSize = 0;\n    }\n\n    ~LinkedListQueue() {\n        // \u9023\u7d50\u30ea\u30b9\u30c8\u3092\u8d70\u67fb\u3001\u30ce\u30fc\u30c9\u3092\u524a\u9664\u3001\u30e1\u30e2\u30ea\u3092\u89e3\u653e\n        freeMemoryLinkedList(front);\n    }\n\n    /* \u30ad\u30e5\u30fc\u306e\u9577\u3055\u3092\u53d6\u5f97 */\n    int size() {\n        return queSize;\n    }\n\n    /* \u30ad\u30e5\u30fc\u304c\u7a7a\u304b\u3069\u3046\u304b\u3092\u5224\u5b9a */\n    bool isEmpty() {\n        return queSize == 0;\n    }\n\n    /* \u30a8\u30f3\u30ad\u30e5\u30fc */\n    void push(int num) {\n        // \u672b\u5c3e\u30ce\u30fc\u30c9\u306e\u5f8c\u308d\u306bnum\u3092\u8ffd\u52a0\n        ListNode *node = new ListNode(num);\n        // \u30ad\u30e5\u30fc\u304c\u7a7a\u306e\u5834\u5408\u3001\u5148\u982d\u3068\u672b\u5c3e\u30ce\u30fc\u30c9\u306e\u4e21\u65b9\u3092\u305d\u306e\u30ce\u30fc\u30c9\u306b\u5411\u3051\u308b\n        if (front == nullptr) {\n            front = node;\n            rear = node;\n        }\n        // \u30ad\u30e5\u30fc\u304c\u7a7a\u3067\u306a\u3044\u5834\u5408\u3001\u305d\u306e\u30ce\u30fc\u30c9\u3092\u672b\u5c3e\u30ce\u30fc\u30c9\u306e\u5f8c\u308d\u306b\u8ffd\u52a0\n        else {\n            rear->next = node;\n            rear = node;\n        }\n        queSize++;\n    }\n\n    /* \u30c7\u30ad\u30e5\u30fc */\n    int pop() {\n        int num = peek();\n        // \u5148\u982d\u30ce\u30fc\u30c9\u3092\u524a\u9664\n        ListNode *tmp = front;\n        front = front->next;\n        // \u30e1\u30e2\u30ea\u3092\u89e3\u653e\n        delete tmp;\n        queSize--;\n        return num;\n    }\n\n    /* \u5148\u982d\u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9 */\n    int peek() {\n        if (size() == 0)\n            throw out_of_range(\"Queue is empty\");\n        return front->val;\n    }\n\n    /* \u9023\u7d50\u30ea\u30b9\u30c8\u3092Vector\u306b\u5909\u63db\u3057\u3066\u8fd4\u5374 */\n    vector<int> toVector() {\n        ListNode *node = front;\n        vector<int> res(size());\n        for (int i = 0; i < res.size(); i++) {\n            res[i] = node->val;\n            node = node->next;\n        }\n        return res;\n    }\n};\n
linkedlist_queue.java
/* \u9023\u7d50\u30ea\u30b9\u30c8\u306b\u57fa\u3065\u304f\u30ad\u30e5\u30fc\u30af\u30e9\u30b9 */\nclass LinkedListQueue {\n    private ListNode front, rear; // \u5148\u982d\u30ce\u30fc\u30c9 front\u3001\u672b\u5c3e\u30ce\u30fc\u30c9 rear\n    private int queSize = 0;\n\n    public LinkedListQueue() {\n        front = null;\n        rear = null;\n    }\n\n    /* \u30ad\u30e5\u30fc\u306e\u9577\u3055\u3092\u53d6\u5f97 */\n    public int size() {\n        return queSize;\n    }\n\n    /* \u30ad\u30e5\u30fc\u304c\u7a7a\u304b\u3069\u3046\u304b\u3092\u5224\u5b9a */\n    public boolean isEmpty() {\n        return size() == 0;\n    }\n\n    /* \u30a8\u30f3\u30ad\u30e5\u30fc */\n    public void push(int num) {\n        // \u672b\u5c3e\u30ce\u30fc\u30c9\u306e\u5f8c\u308d\u306b num \u3092\u8ffd\u52a0\n        ListNode node = new ListNode(num);\n        // \u30ad\u30e5\u30fc\u304c\u7a7a\u306e\u5834\u5408\u3001\u5148\u982d\u3068\u672b\u5c3e\u30ce\u30fc\u30c9\u306e\u4e21\u65b9\u3092\u305d\u306e\u30ce\u30fc\u30c9\u306b\u30dd\u30a4\u30f3\u30c8\n        if (front == null) {\n            front = node;\n            rear = node;\n        // \u30ad\u30e5\u30fc\u304c\u7a7a\u3067\u306a\u3044\u5834\u5408\u3001\u305d\u306e\u30ce\u30fc\u30c9\u3092\u672b\u5c3e\u30ce\u30fc\u30c9\u306e\u5f8c\u308d\u306b\u8ffd\u52a0\n        } else {\n            rear.next = node;\n            rear = node;\n        }\n        queSize++;\n    }\n\n    /* \u30c7\u30ad\u30e5\u30fc */\n    public int pop() {\n        int num = peek();\n        // \u5148\u982d\u30ce\u30fc\u30c9\u3092\u524a\u9664\n        front = front.next;\n        queSize--;\n        return num;\n    }\n\n    /* \u5148\u982d\u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9 */\n    public int peek() {\n        if (isEmpty())\n            throw new IndexOutOfBoundsException();\n        return front.val;\n    }\n\n    /* \u9023\u7d50\u30ea\u30b9\u30c8\u3092\u914d\u5217\u306b\u5909\u63db\u3057\u3066\u8fd4\u3059 */\n    public int[] toArray() {\n        ListNode node = front;\n        int[] res = new int[size()];\n        for (int i = 0; i < res.length; i++) {\n            res[i] = node.val;\n            node = node.next;\n        }\n        return res;\n    }\n}\n
linkedlist_queue.cs
[class]{LinkedListQueue}-[func]{}\n
linkedlist_queue.go
[class]{linkedListQueue}-[func]{}\n
linkedlist_queue.swift
[class]{LinkedListQueue}-[func]{}\n
linkedlist_queue.js
[class]{LinkedListQueue}-[func]{}\n
linkedlist_queue.ts
[class]{LinkedListQueue}-[func]{}\n
linkedlist_queue.dart
[class]{LinkedListQueue}-[func]{}\n
linkedlist_queue.rs
[class]{LinkedListQueue}-[func]{}\n
linkedlist_queue.c
[class]{LinkedListQueue}-[func]{}\n
linkedlist_queue.kt
[class]{LinkedListQueue}-[func]{}\n
linkedlist_queue.rb
[class]{LinkedListQueue}-[func]{}\n
"},{"location":"chapter_stack_and_queue/queue/#2","title":"2. \u00a0 \u914d\u5217\u30d9\u30fc\u30b9\u306e\u5b9f\u88c5","text":"

\u914d\u5217\u306e\u6700\u521d\u306e\u8981\u7d20\u3092\u524a\u9664\u3059\u308b\u6642\u9593\u8a08\u7b97\u91cf\u306f\\(O(n)\\)\u3067\u3001\u30c7\u30ad\u30e5\u30fc\u64cd\u4f5c\u304c\u975e\u52b9\u7387\u306b\u306a\u308a\u307e\u3059\u3002\u3057\u304b\u3057\u3001\u3053\u306e\u554f\u984c\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u5de7\u5999\u306b\u56de\u907f\u3067\u304d\u307e\u3059\u3002

\u5909\u6570front\u3092\u4f7f\u7528\u3057\u3066\u30d5\u30ed\u30f3\u30c8\u8981\u7d20\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u793a\u3057\u3001\u5909\u6570size\u3092\u7dad\u6301\u3057\u3066\u30ad\u30e5\u30fc\u306e\u9577\u3055\u3092\u8a18\u9332\u3057\u307e\u3059\u3002rear = front + size\u3092\u5b9a\u7fa9\u3057\u3001\u3053\u308c\u306f\u30c6\u30fc\u30eb\u8981\u7d20\u306e\u76f4\u5f8c\u306e\u4f4d\u7f6e\u3092\u6307\u3057\u307e\u3059\u3002

\u3053\u306e\u8a2d\u8a08\u306b\u3088\u308a\u3001\u914d\u5217\u5185\u306e\u8981\u7d20\u306e\u6709\u52b9\u306a\u9593\u9694\u306f[front, rear - 1]\u3067\u3059\u3002\u5404\u64cd\u4f5c\u306e\u5b9f\u88c5\u65b9\u6cd5\u3092\u4e0b\u56f3\u306b\u793a\u3057\u307e\u3059\u3002

\u30a8\u30f3\u30ad\u30e5\u30fc\u3068\u30c7\u30ad\u30e5\u30fc\u64cd\u4f5c\u306f\u4e21\u65b9\u3068\u3082\u5358\u4e00\u306e\u64cd\u4f5c\u306e\u307f\u3092\u5fc5\u8981\u3068\u3057\u3001\u305d\u308c\u305e\u308c\u306e\u6642\u9593\u8a08\u7b97\u91cf\u306f\\(O(1)\\)\u3067\u3059\u3002

ArrayQueuepush()pop()

\u56f3 5-6 \u00a0 \u914d\u5217\u306b\u3088\u308b\u30ad\u30e5\u30fc\u5b9f\u88c5\u306e\u30a8\u30f3\u30ad\u30e5\u30fc\u3068\u30c7\u30ad\u30e5\u30fc\u64cd\u4f5c

\u554f\u984c\u306b\u6c17\u3065\u304f\u304b\u3082\u3057\u308c\u307e\u305b\u3093\uff1a\u30a8\u30f3\u30ad\u30e5\u30fc\u3068\u30c7\u30ad\u30e5\u30fc\u64cd\u4f5c\u304c\u7d99\u7d9a\u7684\u306b\u5b9f\u884c\u3055\u308c\u308b\u3068\u3001front\u3068rear\u306e\u4e21\u65b9\u304c\u53f3\u306b\u79fb\u52d5\u3057\u3001\u6700\u7d42\u7684\u306b\u914d\u5217\u306e\u672b\u5c3e\u306b\u5230\u9054\u3057\u3066\u305d\u308c\u4ee5\u4e0a\u79fb\u52d5\u3067\u304d\u306a\u304f\u306a\u308a\u307e\u3059\u3002\u3053\u308c\u3092\u89e3\u6c7a\u3059\u308b\u305f\u3081\u306b\u3001\u914d\u5217\u3092\u300c\u5faa\u74b0\u914d\u5217\u300d\u3068\u3057\u3066\u6271\u3044\u3001\u914d\u5217\u306e\u672b\u5c3e\u3092\u5148\u982d\u306b\u63a5\u7d9a\u3057\u307e\u3059\u3002

\u5faa\u74b0\u914d\u5217\u3067\u306f\u3001front\u307e\u305f\u306frear\u304c\u672b\u5c3e\u306b\u5230\u9054\u3059\u308b\u3068\u3001\u914d\u5217\u306e\u5148\u982d\u306b\u30eb\u30fc\u30d7\u30d0\u30c3\u30af\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u306e\u5faa\u74b0\u30d1\u30bf\u30fc\u30f3\u306f\u3001\u4ee5\u4e0b\u306e\u30b3\u30fc\u30c9\u306b\u793a\u3059\u3088\u3046\u306b\u300c\u5270\u4f59\u6f14\u7b97\u300d\u3067\u5b9f\u73fe\u3067\u304d\u307e\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby array_queue.py
class ArrayQueue:\n    \"\"\"\u5faa\u74b0\u914d\u5217\u30d9\u30fc\u30b9\u306e\u30ad\u30e5\u30fc\u30af\u30e9\u30b9\"\"\"\n\n    def __init__(self, size: int):\n        \"\"\"\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\"\"\"\n        self._nums: list[int] = [0] * size  # \u30ad\u30e5\u30fc\u8981\u7d20\u3092\u683c\u7d0d\u3059\u308b\u914d\u5217\n        self._front: int = 0  # \u30d5\u30ed\u30f3\u30c8\u30dd\u30a4\u30f3\u30bf\u3001\u30d5\u30ed\u30f3\u30c8\u8981\u7d20\u3092\u6307\u3059\n        self._size: int = 0  # \u30ad\u30e5\u30fc\u306e\u9577\u3055\n\n    def capacity(self) -> int:\n        \"\"\"\u30ad\u30e5\u30fc\u306e\u5bb9\u91cf\u3092\u53d6\u5f97\"\"\"\n        return len(self._nums)\n\n    def size(self) -> int:\n        \"\"\"\u30ad\u30e5\u30fc\u306e\u9577\u3055\u3092\u53d6\u5f97\"\"\"\n        return self._size\n\n    def is_empty(self) -> bool:\n        \"\"\"\u30ad\u30e5\u30fc\u304c\u7a7a\u304b\u3069\u3046\u304b\u3092\u5224\u5b9a\"\"\"\n        return self._size == 0\n\n    def push(self, num: int):\n        \"\"\"\u30a8\u30f3\u30ad\u30e5\u30fc\"\"\"\n        if self._size == self.capacity():\n            raise IndexError(\"Queue is full\")\n        # \u30ea\u30a2\u30dd\u30a4\u30f3\u30bf\u3092\u8a08\u7b97\u3001\u30ea\u30a2\u30a4\u30f3\u30c7\u30c3\u30af\u30b9 + 1 \u3092\u6307\u3059\n        # \u30e2\u30b8\u30e5\u30ed\u6f14\u7b97\u3092\u4f7f\u7528\u3057\u3066\u30ea\u30a2\u30dd\u30a4\u30f3\u30bf\u3092\u914d\u5217\u306e\u672b\u5c3e\u304b\u3089\u5148\u982d\u306b\u623b\u3059\n        rear: int = (self._front + self._size) % self.capacity()\n        # num \u3092\u30ea\u30a2\u306b\u8ffd\u52a0\n        self._nums[rear] = num\n        self._size += 1\n\n    def pop(self) -> int:\n        \"\"\"\u30c7\u30ad\u30e5\u30fc\"\"\"\n        num: int = self.peek()\n        # \u30d5\u30ed\u30f3\u30c8\u30dd\u30a4\u30f3\u30bf\u30921\u3064\u5f8c\u308d\u306b\u79fb\u52d5\u3001\u672b\u5c3e\u3092\u8d85\u3048\u305f\u5834\u5408\u306f\u914d\u5217\u306e\u5148\u982d\u306b\u623b\u308b\n        self._front = (self._front + 1) % self.capacity()\n        self._size -= 1\n        return num\n\n    def peek(self) -> int:\n        \"\"\"\u30d5\u30ed\u30f3\u30c8\u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9\"\"\"\n        if self.is_empty():\n            raise IndexError(\"Queue is empty\")\n        return self._nums[self._front]\n\n    def to_list(self) -> list[int]:\n        \"\"\"\u51fa\u529b\u7528\u306e\u914d\u5217\u3092\u8fd4\u3059\"\"\"\n        res = [0] * self.size()\n        j: int = self._front\n        for i in range(self.size()):\n            res[i] = self._nums[(j % self.capacity())]\n            j += 1\n        return res\n
array_queue.cpp
/* \u5faa\u74b0\u914d\u5217\u306b\u57fa\u3065\u304f\u30ad\u30e5\u30fc\u30af\u30e9\u30b9 */\nclass ArrayQueue {\n  private:\n    int *nums;       // \u30ad\u30e5\u30fc\u8981\u7d20\u3092\u683c\u7d0d\u3059\u308b\u914d\u5217\n    int front;       // \u5148\u982d\u30dd\u30a4\u30f3\u30bf\u3001\u5148\u982d\u8981\u7d20\u3092\u6307\u3059\n    int queSize;     // \u30ad\u30e5\u30fc\u306e\u9577\u3055\n    int queCapacity; // \u30ad\u30e5\u30fc\u306e\u5bb9\u91cf\n\n  public:\n    ArrayQueue(int capacity) {\n        // \u914d\u5217\u3092\u521d\u671f\u5316\n        nums = new int[capacity];\n        queCapacity = capacity;\n        front = queSize = 0;\n    }\n\n    ~ArrayQueue() {\n        delete[] nums;\n    }\n\n    /* \u30ad\u30e5\u30fc\u306e\u5bb9\u91cf\u3092\u53d6\u5f97 */\n    int capacity() {\n        return queCapacity;\n    }\n\n    /* \u30ad\u30e5\u30fc\u306e\u9577\u3055\u3092\u53d6\u5f97 */\n    int size() {\n        return queSize;\n    }\n\n    /* \u30ad\u30e5\u30fc\u304c\u7a7a\u304b\u3069\u3046\u304b\u3092\u5224\u5b9a */\n    bool isEmpty() {\n        return size() == 0;\n    }\n\n    /* \u30a8\u30f3\u30ad\u30e5\u30fc */\n    void push(int num) {\n        if (queSize == queCapacity) {\n            cout << \"Queue is full\" << endl;\n            return;\n        }\n        // \u672b\u5c3e\u30dd\u30a4\u30f3\u30bf\u3092\u8a08\u7b97\u3001\u672b\u5c3e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9 + 1\u3092\u6307\u3059\n        // \u5270\u4f59\u6f14\u7b97\u3092\u4f7f\u7528\u3057\u3066\u672b\u5c3e\u30dd\u30a4\u30f3\u30bf\u304c\u914d\u5217\u306e\u672b\u5c3e\u304b\u3089\u5148\u982d\u306b\u623b\u308b\u3088\u3046\u306b\u30e9\u30c3\u30d7\n        int rear = (front + queSize) % queCapacity;\n        // num\u3092\u672b\u5c3e\u306b\u8ffd\u52a0\n        nums[rear] = num;\n        queSize++;\n    }\n\n    /* \u30c7\u30ad\u30e5\u30fc */\n    int pop() {\n        int num = peek();\n        // \u5148\u982d\u30dd\u30a4\u30f3\u30bf\u30921\u3064\u5f8c\u308d\u306b\u79fb\u52d5\u3001\u672b\u5c3e\u3092\u8d85\u3048\u305f\u5834\u5408\u306f\u914d\u5217\u306e\u5148\u982d\u306b\u623b\u308b\n        front = (front + 1) % queCapacity;\n        queSize--;\n        return num;\n    }\n\n    /* \u5148\u982d\u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9 */\n    int peek() {\n        if (isEmpty())\n            throw out_of_range(\"Queue is empty\");\n        return nums[front];\n    }\n\n    /* \u914d\u5217\u3092Vector\u306b\u5909\u63db\u3057\u3066\u8fd4\u5374 */\n    vector<int> toVector() {\n        // \u6709\u52b9\u306a\u9577\u3055\u7bc4\u56f2\u5185\u306e\u8981\u7d20\u306e\u307f\u3092\u5909\u63db\n        vector<int> arr(queSize);\n        for (int i = 0, j = front; i < queSize; i++, j++) {\n            arr[i] = nums[j % queCapacity];\n        }\n        return arr;\n    }\n};\n
array_queue.java
/* \u914d\u5217\u306b\u57fa\u3065\u304f\u30ad\u30e5\u30fc\u30af\u30e9\u30b9 */\nclass ArrayQueue {\n    private int[] nums; // \u8981\u7d20\u3092\u683c\u7d0d\u3059\u308b\u914d\u5217\n    private int front; // \u30ad\u30e5\u30fc\u30d8\u30c3\u30c9\u30dd\u30a4\u30f3\u30bf\u3001\u6700\u521d\u306e\u8981\u7d20\u3092\u6307\u3059\n    private int queSize; // \u30ad\u30e5\u30fc\u306e\u9577\u3055\n\n    public ArrayQueue(int capacity) {\n        nums = new int[capacity];\n        front = queSize = 0;\n    }\n\n    /* \u30ad\u30e5\u30fc\u306e\u5bb9\u91cf\u3092\u53d6\u5f97 */\n    public int capacity() {\n        return nums.length;\n    }\n\n    /* \u30ad\u30e5\u30fc\u306e\u9577\u3055\u3092\u53d6\u5f97 */\n    public int size() {\n        return queSize;\n    }\n\n    /* \u30ad\u30e5\u30fc\u304c\u7a7a\u304b\u3069\u3046\u304b\u3092\u5224\u5b9a */\n    public boolean isEmpty() {\n        return queSize == 0;\n    }\n\n    /* \u30a8\u30f3\u30ad\u30e5\u30fc */\n    public void push(int num) {\n        if (queSize == capacity()) {\n            System.out.println(\"\u30ad\u30e5\u30fc\u304c\u6e80\u676f\u3067\u3059\");\n            return;\n        }\n        // \u30ea\u30a2\u30dd\u30a4\u30f3\u30bf\u3092\u8a08\u7b97\uff1afront + queSize\n        // \u30e2\u30b8\u30e5\u30ed\u64cd\u4f5c\u306b\u3088\u308a rear \u304c\u914d\u5217\u306e\u9577\u3055\u3092\u8d85\u3048\u308b\u3053\u3068\u3092\u56de\u907f\n        int rear = (front + queSize) % capacity();\n        // \u8981\u7d20\u3092\u30ad\u30e5\u30fc\u30ea\u30a2\u306b\u8ffd\u52a0\n        nums[rear] = num;\n        queSize++;\n    }\n\n    /* \u30c7\u30ad\u30e5\u30fc */\n    public int pop() {\n        int num = peek();\n        // \u30ad\u30e5\u30fc\u30d8\u30c3\u30c9\u30dd\u30a4\u30f3\u30bf\u3092\u5f8c\u308d\u306b1\u3064\u79fb\u52d5\u3001\u30e2\u30b8\u30e5\u30ed\u64cd\u4f5c\u306b\u3088\u308a\u7bc4\u56f2\u3092\u8d85\u3048\u308b\u3053\u3068\u3092\u56de\u907f\n        front = (front + 1) % capacity();\n        queSize--;\n        return num;\n    }\n\n    /* \u30ad\u30e5\u30fc\u30d8\u30c3\u30c9\u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9 */\n    public int peek() {\n        if (isEmpty())\n            throw new IndexOutOfBoundsException();\n        return nums[front];\n    }\n\n    /* \u914d\u5217\u3092\u8fd4\u3059 */\n    public int[] toArray() {\n        // front \u304b\u3089\u958b\u59cb\u3057\u3066 queSize \u500b\u306e\u8981\u7d20\u306e\u307f\u3092\u30b3\u30d4\u30fc\n        int[] res = new int[queSize];\n        for (int i = 0, j = front; i < queSize; i++, j++) {\n            res[i] = nums[j % capacity()];\n        }\n        return res;\n    }\n}\n
array_queue.cs
[class]{ArrayQueue}-[func]{}\n
array_queue.go
[class]{arrayQueue}-[func]{}\n
array_queue.swift
[class]{ArrayQueue}-[func]{}\n
array_queue.js
[class]{ArrayQueue}-[func]{}\n
array_queue.ts
[class]{ArrayQueue}-[func]{}\n
array_queue.dart
[class]{ArrayQueue}-[func]{}\n
array_queue.rs
[class]{ArrayQueue}-[func]{}\n
array_queue.c
[class]{ArrayQueue}-[func]{}\n
array_queue.kt
[class]{ArrayQueue}-[func]{}\n
array_queue.rb
[class]{ArrayQueue}-[func]{}\n

\u4e0a\u8a18\u306e\u30ad\u30e5\u30fc\u5b9f\u88c5\u306b\u306f\u307e\u3060\u5236\u9650\u304c\u3042\u308a\u307e\u3059\uff1a\u9577\u3055\u304c\u56fa\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u3057\u304b\u3057\u3001\u3053\u306e\u554f\u984c\u306f\u89e3\u6c7a\u304c\u56f0\u96e3\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u914d\u5217\u3092\u5fc5\u8981\u306b\u5fdc\u3058\u3066\u81ea\u52d5\u62e1\u5f35\u3067\u304d\u308b\u52d5\u7684\u914d\u5217\u306b\u7f6e\u304d\u63db\u3048\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u8208\u5473\u306e\u3042\u308b\u8aad\u8005\u306f\u81ea\u5206\u3067\u5b9f\u88c5\u3057\u3066\u307f\u3066\u304f\u3060\u3055\u3044\u3002

2\u3064\u306e\u5b9f\u88c5\u306e\u6bd4\u8f03\u306f\u30b9\u30bf\u30c3\u30af\u306e\u5834\u5408\u3068\u4e00\u8cab\u3057\u3066\u304a\u308a\u3001\u3053\u3053\u3067\u306f\u7e70\u308a\u8fd4\u3057\u307e\u305b\u3093\u3002

"},{"location":"chapter_stack_and_queue/queue/#523","title":"5.2.3 \u00a0 \u30ad\u30e5\u30fc\u306e\u5178\u578b\u7684\u306a\u5fdc\u7528","text":""},{"location":"chapter_stack_and_queue/stack/","title":"5.1 \u00a0 \u30b9\u30bf\u30c3\u30af","text":"

\u30b9\u30bf\u30c3\u30af\u306f\u3001\u5f8c\u5165\u5148\u51fa\uff08LIFO\uff09\u306e\u539f\u5247\u306b\u5f93\u3046\u7dda\u5f62\u30c7\u30fc\u30bf\u69cb\u9020\u3067\u3059\u3002

\u30b9\u30bf\u30c3\u30af\u3092\u30c6\u30fc\u30d6\u30eb\u4e0a\u306e\u76bf\u306e\u5c71\u306b\u4f8b\u3048\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u5e95\u306e\u76bf\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u306b\u306f\u3001\u307e\u305a\u4e0a\u306e\u76bf\u3092\u53d6\u308a\u9664\u304f\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u76bf\u3092\u69d8\u3005\u306a\u7a2e\u985e\u306e\u8981\u7d20\uff08\u6574\u6570\u3001\u6587\u5b57\u3001\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306a\u3069\uff09\u306b\u7f6e\u304d\u63db\u3048\u308b\u3053\u3068\u3067\u3001\u30b9\u30bf\u30c3\u30af\u3068\u547c\u3070\u308c\u308b\u30c7\u30fc\u30bf\u69cb\u9020\u3092\u5f97\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

\u4e0b\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u8981\u7d20\u306e\u5c71\u306e\u4e0a\u90e8\u3092\u300c\u30b9\u30bf\u30c3\u30af\u306e\u30c8\u30c3\u30d7\u300d\u3001\u4e0b\u90e8\u3092\u300c\u30b9\u30bf\u30c3\u30af\u306e\u30dc\u30c8\u30e0\u300d\u3068\u547c\u3073\u307e\u3059\u3002\u30b9\u30bf\u30c3\u30af\u306e\u30c8\u30c3\u30d7\u306b\u8981\u7d20\u3092\u8ffd\u52a0\u3059\u308b\u64cd\u4f5c\u3092\u300c\u30d7\u30c3\u30b7\u30e5\u300d\u3001\u30c8\u30c3\u30d7\u8981\u7d20\u3092\u524a\u9664\u3059\u308b\u64cd\u4f5c\u3092\u300c\u30dd\u30c3\u30d7\u300d\u3068\u547c\u3073\u307e\u3059\u3002

\u56f3 5-1 \u00a0 \u30b9\u30bf\u30c3\u30af\u306e\u5f8c\u5165\u5148\u51fa\u30eb\u30fc\u30eb

"},{"location":"chapter_stack_and_queue/stack/#511","title":"5.1.1 \u00a0 \u30b9\u30bf\u30c3\u30af\u306e\u4e00\u822c\u7684\u306a\u64cd\u4f5c","text":"

\u30b9\u30bf\u30c3\u30af\u306e\u4e00\u822c\u7684\u306a\u64cd\u4f5c\u3092\u4e0b\u8868\u306b\u793a\u3057\u307e\u3059\u3002\u5177\u4f53\u7684\u306a\u30e1\u30bd\u30c3\u30c9\u540d\u306f\u4f7f\u7528\u3059\u308b\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\u306b\u3088\u3063\u3066\u7570\u306a\u308a\u307e\u3059\u3002\u3053\u3053\u3067\u306f\u3001\u4f8b\u3068\u3057\u3066push()\u3001pop()\u3001peek()\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002

\u8868 5-1 \u00a0 \u30b9\u30bf\u30c3\u30af\u64cd\u4f5c\u306e\u52b9\u7387

\u30e1\u30bd\u30c3\u30c9 \u8aac\u660e \u6642\u9593\u8a08\u7b97\u91cf push() \u8981\u7d20\u3092\u30b9\u30bf\u30c3\u30af\u306b\u30d7\u30c3\u30b7\u30e5\uff08\u30c8\u30c3\u30d7\u306b\u8ffd\u52a0\uff09 \\(O(1)\\) pop() \u30b9\u30bf\u30c3\u30af\u304b\u3089\u30c8\u30c3\u30d7\u8981\u7d20\u3092\u30dd\u30c3\u30d7 \\(O(1)\\) peek() \u30b9\u30bf\u30c3\u30af\u306e\u30c8\u30c3\u30d7\u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9 \\(O(1)\\)

\u901a\u5e38\u3001\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\u306b\u7d44\u307f\u8fbc\u307e\u308c\u3066\u3044\u308b\u30b9\u30bf\u30c3\u30af\u30af\u30e9\u30b9\u3092\u76f4\u63a5\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002\u305f\u3060\u3057\u3001\u4e00\u90e8\u306e\u8a00\u8a9e\u3067\u306f\u5177\u4f53\u7684\u306b\u30b9\u30bf\u30c3\u30af\u30af\u30e9\u30b9\u3092\u63d0\u4f9b\u3057\u3066\u3044\u306a\u3044\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u5834\u5408\u3001\u8a00\u8a9e\u306e\u300c\u914d\u5217\u300d\u307e\u305f\u306f\u300c\u9023\u7d50\u30ea\u30b9\u30c8\u300d\u3092\u30b9\u30bf\u30c3\u30af\u3068\u3057\u3066\u4f7f\u7528\u3057\u3001\u30d7\u30ed\u30b0\u30e9\u30e0\u3067\u30b9\u30bf\u30c3\u30af\u30ed\u30b8\u30c3\u30af\u306b\u95a2\u9023\u3057\u306a\u3044\u64cd\u4f5c\u3092\u7121\u8996\u3067\u304d\u307e\u3059\u3002

PythonC++JavaC#GoSwiftJSTSDartRustCKotlin stack.py
# \u30b9\u30bf\u30c3\u30af\u3092\u521d\u671f\u5316\n# Python\u306b\u306f\u7d44\u307f\u8fbc\u307f\u306e\u30b9\u30bf\u30c3\u30af\u30af\u30e9\u30b9\u304c\u306a\u3044\u305f\u3081\u3001list\u3092\u30b9\u30bf\u30c3\u30af\u3068\u3057\u3066\u4f7f\u7528\nstack: list[int] = []\n\n# \u8981\u7d20\u3092\u30b9\u30bf\u30c3\u30af\u306b\u30d7\u30c3\u30b7\u30e5\nstack.append(1)\nstack.append(3)\nstack.append(2)\nstack.append(5)\nstack.append(4)\n\n# \u30b9\u30bf\u30c3\u30af\u306e\u30c8\u30c3\u30d7\u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9\npeek: int = stack[-1]\n\n# \u30b9\u30bf\u30c3\u30af\u304b\u3089\u8981\u7d20\u3092\u30dd\u30c3\u30d7\npop: int = stack.pop()\n\n# \u30b9\u30bf\u30c3\u30af\u306e\u9577\u3055\u3092\u53d6\u5f97\nsize: int = len(stack)\n\n# \u30b9\u30bf\u30c3\u30af\u304c\u7a7a\u304b\u3069\u3046\u304b\u30c1\u30a7\u30c3\u30af\nis_empty: bool = len(stack) == 0\n
stack.cpp
/* \u30b9\u30bf\u30c3\u30af\u3092\u521d\u671f\u5316 */\nstack<int> stack;\n\n/* \u8981\u7d20\u3092\u30b9\u30bf\u30c3\u30af\u306b\u30d7\u30c3\u30b7\u30e5 */\nstack.push(1);\nstack.push(3);\nstack.push(2);\nstack.push(5);\nstack.push(4);\n\n/* \u30b9\u30bf\u30c3\u30af\u306e\u30c8\u30c3\u30d7\u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9 */\nint top = stack.top();\n\n/* \u30b9\u30bf\u30c3\u30af\u304b\u3089\u8981\u7d20\u3092\u30dd\u30c3\u30d7 */\nstack.pop(); // \u623b\u308a\u5024\u306a\u3057\n\n/* \u30b9\u30bf\u30c3\u30af\u306e\u9577\u3055\u3092\u53d6\u5f97 */\nint size = stack.size();\n\n/* \u30b9\u30bf\u30c3\u30af\u304c\u7a7a\u304b\u3069\u3046\u304b\u30c1\u30a7\u30c3\u30af */\nbool empty = stack.empty();\n
stack.java
/* \u30b9\u30bf\u30c3\u30af\u3092\u521d\u671f\u5316 */\nStack<Integer> stack = new Stack<>();\n\n/* \u8981\u7d20\u3092\u30b9\u30bf\u30c3\u30af\u306b\u30d7\u30c3\u30b7\u30e5 */\nstack.push(1);\nstack.push(3);\nstack.push(2);\nstack.push(5);\nstack.push(4);\n\n/* \u30b9\u30bf\u30c3\u30af\u306e\u30c8\u30c3\u30d7\u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9 */\nint peek = stack.peek();\n\n/* \u30b9\u30bf\u30c3\u30af\u304b\u3089\u8981\u7d20\u3092\u30dd\u30c3\u30d7 */\nint pop = stack.pop();\n\n/* \u30b9\u30bf\u30c3\u30af\u306e\u9577\u3055\u3092\u53d6\u5f97 */\nint size = stack.size();\n\n/* \u30b9\u30bf\u30c3\u30af\u304c\u7a7a\u304b\u3069\u3046\u304b\u30c1\u30a7\u30c3\u30af */\nboolean isEmpty = stack.isEmpty();\n
stack.cs
/* \u30b9\u30bf\u30c3\u30af\u3092\u521d\u671f\u5316 */\nStack<int> stack = new();\n\n/* \u8981\u7d20\u3092\u30b9\u30bf\u30c3\u30af\u306b\u30d7\u30c3\u30b7\u30e5 */\nstack.Push(1);\nstack.Push(3);\nstack.Push(2);\nstack.Push(5);\nstack.Push(4);\n\n/* \u30b9\u30bf\u30c3\u30af\u306e\u30c8\u30c3\u30d7\u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9 */\nint peek = stack.Peek();\n\n/* \u30b9\u30bf\u30c3\u30af\u304b\u3089\u8981\u7d20\u3092\u30dd\u30c3\u30d7 */\nint pop = stack.Pop();\n\n/* \u30b9\u30bf\u30c3\u30af\u306e\u9577\u3055\u3092\u53d6\u5f97 */\nint size = stack.Count;\n\n/* \u30b9\u30bf\u30c3\u30af\u304c\u7a7a\u304b\u3069\u3046\u304b\u30c1\u30a7\u30c3\u30af */\nbool isEmpty = stack.Count == 0;\n
stack_test.go
/* \u30b9\u30bf\u30c3\u30af\u3092\u521d\u671f\u5316 */\n// Go\u3067\u306f\u3001Slice\u3092\u30b9\u30bf\u30c3\u30af\u3068\u3057\u3066\u4f7f\u7528\u3059\u308b\u3053\u3068\u304c\u63a8\u5968\u3055\u308c\u307e\u3059\nvar stack []int\n\n/* \u8981\u7d20\u3092\u30b9\u30bf\u30c3\u30af\u306b\u30d7\u30c3\u30b7\u30e5 */\nstack = append(stack, 1)\nstack = append(stack, 3)\nstack = append(stack, 2)\nstack = append(stack, 5)\nstack = append(stack, 4)\n\n/* \u30b9\u30bf\u30c3\u30af\u306e\u30c8\u30c3\u30d7\u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9 */\npeek := stack[len(stack)-1]\n\n/* \u30b9\u30bf\u30c3\u30af\u304b\u3089\u8981\u7d20\u3092\u30dd\u30c3\u30d7 */\npop := stack[len(stack)-1]\nstack = stack[:len(stack)-1]\n\n/* \u30b9\u30bf\u30c3\u30af\u306e\u9577\u3055\u3092\u53d6\u5f97 */\nsize := len(stack)\n\n/* \u30b9\u30bf\u30c3\u30af\u304c\u7a7a\u304b\u3069\u3046\u304b\u30c1\u30a7\u30c3\u30af */\nisEmpty := len(stack) == 0\n
stack.swift
/* \u30b9\u30bf\u30c3\u30af\u3092\u521d\u671f\u5316 */\n// Swift\u306b\u306f\u7d44\u307f\u8fbc\u307f\u306e\u30b9\u30bf\u30c3\u30af\u30af\u30e9\u30b9\u304c\u306a\u3044\u305f\u3081\u3001Array\u3092\u30b9\u30bf\u30c3\u30af\u3068\u3057\u3066\u4f7f\u7528\nvar stack: [Int] = []\n\n/* \u8981\u7d20\u3092\u30b9\u30bf\u30c3\u30af\u306b\u30d7\u30c3\u30b7\u30e5 */\nstack.append(1)\nstack.append(3)\nstack.append(2)\nstack.append(5)\nstack.append(4)\n\n/* \u30b9\u30bf\u30c3\u30af\u306e\u30c8\u30c3\u30d7\u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9 */\nlet peek = stack.last!\n\n/* \u30b9\u30bf\u30c3\u30af\u304b\u3089\u8981\u7d20\u3092\u30dd\u30c3\u30d7 */\nlet pop = stack.removeLast()\n\n/* \u30b9\u30bf\u30c3\u30af\u306e\u9577\u3055\u3092\u53d6\u5f97 */\nlet size = stack.count\n\n/* \u30b9\u30bf\u30c3\u30af\u304c\u7a7a\u304b\u3069\u3046\u304b\u30c1\u30a7\u30c3\u30af */\nlet isEmpty = stack.isEmpty\n
stack.js
/* \u30b9\u30bf\u30c3\u30af\u3092\u521d\u671f\u5316 */\n// JavaScript\u306b\u306f\u7d44\u307f\u8fbc\u307f\u306e\u30b9\u30bf\u30c3\u30af\u30af\u30e9\u30b9\u304c\u306a\u3044\u305f\u3081\u3001Array\u3092\u30b9\u30bf\u30c3\u30af\u3068\u3057\u3066\u4f7f\u7528\nconst stack = [];\n\n/* \u8981\u7d20\u3092\u30b9\u30bf\u30c3\u30af\u306b\u30d7\u30c3\u30b7\u30e5 */\nstack.push(1);\nstack.push(3);\nstack.push(2);\nstack.push(5);\nstack.push(4);\n\n/* \u30b9\u30bf\u30c3\u30af\u306e\u30c8\u30c3\u30d7\u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9 */\nconst peek = stack[stack.length-1];\n\n/* \u30b9\u30bf\u30c3\u30af\u304b\u3089\u8981\u7d20\u3092\u30dd\u30c3\u30d7 */\nconst pop = stack.pop();\n\n/* \u30b9\u30bf\u30c3\u30af\u306e\u9577\u3055\u3092\u53d6\u5f97 */\nconst size = stack.length;\n\n/* \u30b9\u30bf\u30c3\u30af\u304c\u7a7a\u304b\u3069\u3046\u304b\u30c1\u30a7\u30c3\u30af */\nconst is_empty = stack.length === 0;\n
stack.ts
/* \u30b9\u30bf\u30c3\u30af\u3092\u521d\u671f\u5316 */\n// TypeScript\u306b\u306f\u7d44\u307f\u8fbc\u307f\u306e\u30b9\u30bf\u30c3\u30af\u30af\u30e9\u30b9\u304c\u306a\u3044\u305f\u3081\u3001Array\u3092\u30b9\u30bf\u30c3\u30af\u3068\u3057\u3066\u4f7f\u7528\nconst stack: number[] = [];\n\n/* \u8981\u7d20\u3092\u30b9\u30bf\u30c3\u30af\u306b\u30d7\u30c3\u30b7\u30e5 */\nstack.push(1);\nstack.push(3);\nstack.push(2);\nstack.push(5);\nstack.push(4);\n\n/* \u30b9\u30bf\u30c3\u30af\u306e\u30c8\u30c3\u30d7\u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9 */\nconst peek = stack[stack.length - 1];\n\n/* \u30b9\u30bf\u30c3\u30af\u304b\u3089\u8981\u7d20\u3092\u30dd\u30c3\u30d7 */\nconst pop = stack.pop();\n\n/* \u30b9\u30bf\u30c3\u30af\u306e\u9577\u3055\u3092\u53d6\u5f97 */\nconst size = stack.length;\n\n/* \u30b9\u30bf\u30c3\u30af\u304c\u7a7a\u304b\u3069\u3046\u304b\u30c1\u30a7\u30c3\u30af */\nconst is_empty = stack.length === 0;\n
stack.dart
/* \u30b9\u30bf\u30c3\u30af\u3092\u521d\u671f\u5316 */\n// Dart\u306b\u306f\u7d44\u307f\u8fbc\u307f\u306e\u30b9\u30bf\u30c3\u30af\u30af\u30e9\u30b9\u304c\u306a\u3044\u305f\u3081\u3001List\u3092\u30b9\u30bf\u30c3\u30af\u3068\u3057\u3066\u4f7f\u7528\nList<int> stack = [];\n\n/* \u8981\u7d20\u3092\u30b9\u30bf\u30c3\u30af\u306b\u30d7\u30c3\u30b7\u30e5 */\nstack.add(1);\nstack.add(3);\nstack.add(2);\nstack.add(5);\nstack.add(4);\n\n/* \u30b9\u30bf\u30c3\u30af\u306e\u30c8\u30c3\u30d7\u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9 */\nint peek = stack.last;\n\n/* \u30b9\u30bf\u30c3\u30af\u304b\u3089\u8981\u7d20\u3092\u30dd\u30c3\u30d7 */\nint pop = stack.removeLast();\n\n/* \u30b9\u30bf\u30c3\u30af\u306e\u9577\u3055\u3092\u53d6\u5f97 */\nint size = stack.length;\n\n/* \u30b9\u30bf\u30c3\u30af\u304c\u7a7a\u304b\u3069\u3046\u304b\u30c1\u30a7\u30c3\u30af */\nbool isEmpty = stack.isEmpty;\n
stack.rs
/* \u30b9\u30bf\u30c3\u30af\u3092\u521d\u671f\u5316 */\n// Vec\u3092\u30b9\u30bf\u30c3\u30af\u3068\u3057\u3066\u4f7f\u7528\nlet mut stack: Vec<i32> = Vec::new();\n\n/* \u8981\u7d20\u3092\u30b9\u30bf\u30c3\u30af\u306b\u30d7\u30c3\u30b7\u30e5 */\nstack.push(1);\nstack.push(3);\nstack.push(2);\nstack.push(5);\nstack.push(4);\n\n/* \u30b9\u30bf\u30c3\u30af\u306e\u30c8\u30c3\u30d7\u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9 */\nlet top = stack.last().unwrap();\n\n/* \u30b9\u30bf\u30c3\u30af\u304b\u3089\u8981\u7d20\u3092\u30dd\u30c3\u30d7 */\nlet pop = stack.pop().unwrap();\n\n/* \u30b9\u30bf\u30c3\u30af\u306e\u9577\u3055\u3092\u53d6\u5f97 */\nlet size = stack.len();\n\n/* \u30b9\u30bf\u30c3\u30af\u304c\u7a7a\u304b\u3069\u3046\u304b\u30c1\u30a7\u30c3\u30af */\nlet is_empty = stack.is_empty();\n
stack.c
// C\u306f\u7d44\u307f\u8fbc\u307f\u306e\u30b9\u30bf\u30c3\u30af\u3092\u63d0\u4f9b\u3057\u3066\u3044\u307e\u305b\u3093\n
stack.kt
\n
"},{"location":"chapter_stack_and_queue/stack/#512","title":"5.1.2 \u00a0 \u30b9\u30bf\u30c3\u30af\u306e\u5b9f\u88c5","text":"

\u30b9\u30bf\u30c3\u30af\u304c\u3069\u306e\u3088\u3046\u306b\u52d5\u4f5c\u3059\u308b\u304b\u3092\u3088\u308a\u6df1\u304f\u7406\u89e3\u3059\u308b\u305f\u3081\u306b\u3001\u81ea\u5206\u3067\u30b9\u30bf\u30c3\u30af\u30af\u30e9\u30b9\u3092\u5b9f\u88c5\u3057\u3066\u307f\u307e\u3057\u3087\u3046\u3002

\u30b9\u30bf\u30c3\u30af\u306f\u5f8c\u5165\u5148\u51fa\u306e\u539f\u5247\u306b\u5f93\u3046\u305f\u3081\u3001\u30b9\u30bf\u30c3\u30af\u306e\u30c8\u30c3\u30d7\u3067\u306e\u307f\u8981\u7d20\u3092\u8ffd\u52a0\u307e\u305f\u306f\u524a\u9664\u3067\u304d\u307e\u3059\u3002\u3057\u304b\u3057\u3001\u914d\u5217\u3068\u9023\u7d50\u30ea\u30b9\u30c8\u306e\u4e21\u65b9\u306f\u4efb\u610f\u306e\u4f4d\u7f6e\u3067\u8981\u7d20\u3092\u8ffd\u52a0\u30fb\u524a\u9664\u3067\u304d\u308b\u305f\u3081\u3001\u30b9\u30bf\u30c3\u30af\u306f\u5236\u9650\u3055\u308c\u305f\u914d\u5217\u307e\u305f\u306f\u9023\u7d50\u30ea\u30b9\u30c8\u3068\u898b\u306a\u3059\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u8a00\u3044\u63db\u3048\u308c\u3070\u3001\u914d\u5217\u3084\u9023\u7d50\u30ea\u30b9\u30c8\u306e\u7279\u5b9a\u306e\u7121\u95a2\u4fc2\u306a\u64cd\u4f5c\u3092\u300c\u906e\u853d\u300d\u3057\u3066\u3001\u5916\u90e8\u306e\u52d5\u4f5c\u3092\u30b9\u30bf\u30c3\u30af\u306e\u7279\u6027\u306b\u5408\u308f\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

"},{"location":"chapter_stack_and_queue/stack/#1","title":"1. \u00a0 \u9023\u7d50\u30ea\u30b9\u30c8\u30d9\u30fc\u30b9\u306e\u5b9f\u88c5","text":"

\u9023\u7d50\u30ea\u30b9\u30c8\u3092\u4f7f\u7528\u3057\u3066\u30b9\u30bf\u30c3\u30af\u3092\u5b9f\u88c5\u3059\u308b\u5834\u5408\u3001\u30ea\u30b9\u30c8\u306e\u30d8\u30c3\u30c9\u30ce\u30fc\u30c9\u3092\u30b9\u30bf\u30c3\u30af\u306e\u30c8\u30c3\u30d7\u3001\u30c6\u30fc\u30eb\u30ce\u30fc\u30c9\u3092\u30b9\u30bf\u30c3\u30af\u306e\u30dc\u30c8\u30e0\u3068\u8003\u3048\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

\u4e0b\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u30d7\u30c3\u30b7\u30e5\u64cd\u4f5c\u3067\u306f\u3001\u5358\u306b\u9023\u7d50\u30ea\u30b9\u30c8\u306e\u30d8\u30c3\u30c9\u306b\u8981\u7d20\u3092\u633f\u5165\u3057\u307e\u3059\u3002\u3053\u306e\u30ce\u30fc\u30c9\u633f\u5165\u65b9\u6cd5\u306f\u300c\u30d8\u30c3\u30c9\u633f\u5165\u300d\u3068\u3057\u3066\u77e5\u3089\u308c\u3066\u3044\u307e\u3059\u3002\u30dd\u30c3\u30d7\u64cd\u4f5c\u3067\u306f\u3001\u30ea\u30b9\u30c8\u304b\u3089\u30d8\u30c3\u30c9\u30ce\u30fc\u30c9\u3092\u524a\u9664\u3059\u308b\u3060\u3051\u3067\u3059\u3002

LinkedListStackpush()pop()

\u56f3 5-2 \u00a0 \u9023\u7d50\u30ea\u30b9\u30c8\u306b\u3088\u308b\u30b9\u30bf\u30c3\u30af\u5b9f\u88c5\u306e\u30d7\u30c3\u30b7\u30e5\u3068\u30dd\u30c3\u30d7\u64cd\u4f5c

\u4ee5\u4e0b\u306f\u3001\u9023\u7d50\u30ea\u30b9\u30c8\u306b\u57fa\u3065\u304f\u30b9\u30bf\u30c3\u30af\u5b9f\u88c5\u306e\u30b5\u30f3\u30d7\u30eb\u30b3\u30fc\u30c9\u3067\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby linkedlist_stack.py
class LinkedListStack:\n    \"\"\"\u9023\u7d50\u30ea\u30b9\u30c8\u30d9\u30fc\u30b9\u306e\u30b9\u30bf\u30c3\u30af\u30af\u30e9\u30b9\"\"\"\n\n    def __init__(self):\n        \"\"\"\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\"\"\"\n        self._peek: ListNode | None = None\n        self._size: int = 0\n\n    def size(self) -> int:\n        \"\"\"\u30b9\u30bf\u30c3\u30af\u306e\u9577\u3055\u3092\u53d6\u5f97\"\"\"\n        return self._size\n\n    def is_empty(self) -> bool:\n        \"\"\"\u30b9\u30bf\u30c3\u30af\u304c\u7a7a\u304b\u3069\u3046\u304b\u3092\u5224\u5b9a\"\"\"\n        return self._size == 0\n\n    def push(self, val: int):\n        \"\"\"\u30d7\u30c3\u30b7\u30e5\"\"\"\n        node = ListNode(val)\n        node.next = self._peek\n        self._peek = node\n        self._size += 1\n\n    def pop(self) -> int:\n        \"\"\"\u30dd\u30c3\u30d7\"\"\"\n        num = self.peek()\n        self._peek = self._peek.next\n        self._size -= 1\n        return num\n\n    def peek(self) -> int:\n        \"\"\"\u30b9\u30bf\u30c3\u30af\u30c8\u30c3\u30d7\u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9\"\"\"\n        if self.is_empty():\n            raise IndexError(\"Stack is empty\")\n        return self._peek.val\n\n    def to_list(self) -> list[int]:\n        \"\"\"\u51fa\u529b\u7528\u306e\u30ea\u30b9\u30c8\u306b\u5909\u63db\"\"\"\n        arr = []\n        node = self._peek\n        while node:\n            arr.append(node.val)\n            node = node.next\n        arr.reverse()\n        return arr\n
linkedlist_stack.cpp
/* \u9023\u7d50\u30ea\u30b9\u30c8\u306b\u57fa\u3065\u304f\u30b9\u30bf\u30c3\u30af\u30af\u30e9\u30b9 */\nclass LinkedListStack {\n  private:\n    ListNode *stackTop; // \u5148\u982d\u30ce\u30fc\u30c9\u3092\u30b9\u30bf\u30c3\u30af\u30c8\u30c3\u30d7\u3068\u3057\u3066\u4f7f\u7528\n    int stkSize;        // \u30b9\u30bf\u30c3\u30af\u306e\u9577\u3055\n\n  public:\n    LinkedListStack() {\n        stackTop = nullptr;\n        stkSize = 0;\n    }\n\n    ~LinkedListStack() {\n        // \u9023\u7d50\u30ea\u30b9\u30c8\u3092\u8d70\u67fb\u3001\u30ce\u30fc\u30c9\u3092\u524a\u9664\u3001\u30e1\u30e2\u30ea\u3092\u89e3\u653e\n        freeMemoryLinkedList(stackTop);\n    }\n\n    /* \u30b9\u30bf\u30c3\u30af\u306e\u9577\u3055\u3092\u53d6\u5f97 */\n    int size() {\n        return stkSize;\n    }\n\n    /* \u30b9\u30bf\u30c3\u30af\u304c\u7a7a\u304b\u3069\u3046\u304b\u3092\u5224\u5b9a */\n    bool isEmpty() {\n        return size() == 0;\n    }\n\n    /* \u30d7\u30c3\u30b7\u30e5 */\n    void push(int num) {\n        ListNode *node = new ListNode(num);\n        node->next = stackTop;\n        stackTop = node;\n        stkSize++;\n    }\n\n    /* \u30dd\u30c3\u30d7 */\n    int pop() {\n        int num = top();\n        ListNode *tmp = stackTop;\n        stackTop = stackTop->next;\n        // \u30e1\u30e2\u30ea\u3092\u89e3\u653e\n        delete tmp;\n        stkSize--;\n        return num;\n    }\n\n    /* \u30b9\u30bf\u30c3\u30af\u30c8\u30c3\u30d7\u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9 */\n    int top() {\n        if (isEmpty())\n            throw out_of_range(\"Stack is empty\");\n        return stackTop->val;\n    }\n\n    /* \u30ea\u30b9\u30c8\u3092\u914d\u5217\u306b\u5909\u63db\u3057\u3066\u8fd4\u5374 */\n    vector<int> toVector() {\n        ListNode *node = stackTop;\n        vector<int> res(size());\n        for (int i = res.size() - 1; i >= 0; i--) {\n            res[i] = node->val;\n            node = node->next;\n        }\n        return res;\n    }\n};\n
linkedlist_stack.java
/* \u9023\u7d50\u30ea\u30b9\u30c8\u306b\u57fa\u3065\u304f\u30b9\u30bf\u30c3\u30af\u30af\u30e9\u30b9 */\nclass LinkedListStack {\n    private ListNode stackPeek; // \u30d8\u30c3\u30c9\u30ce\u30fc\u30c9\u3092\u30b9\u30bf\u30c3\u30af\u30c8\u30c3\u30d7\u3068\u3057\u3066\u4f7f\u7528\n    private int stkSize = 0; // \u30b9\u30bf\u30c3\u30af\u306e\u9577\u3055\n\n    public LinkedListStack() {\n        stackPeek = null;\n    }\n\n    /* \u30b9\u30bf\u30c3\u30af\u306e\u9577\u3055\u3092\u53d6\u5f97 */\n    public int size() {\n        return stkSize;\n    }\n\n    /* \u30b9\u30bf\u30c3\u30af\u304c\u7a7a\u304b\u3069\u3046\u304b\u3092\u5224\u5b9a */\n    public boolean isEmpty() {\n        return size() == 0;\n    }\n\n    /* \u30d7\u30c3\u30b7\u30e5 */\n    public void push(int num) {\n        ListNode node = new ListNode(num);\n        node.next = stackPeek;\n        stackPeek = node;\n        stkSize++;\n    }\n\n    /* \u30dd\u30c3\u30d7 */\n    public int pop() {\n        int num = peek();\n        stackPeek = stackPeek.next;\n        stkSize--;\n        return num;\n    }\n\n    /* \u30b9\u30bf\u30c3\u30af\u30c8\u30c3\u30d7\u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9 */\n    public int peek() {\n        if (isEmpty())\n            throw new IndexOutOfBoundsException();\n        return stackPeek.val;\n    }\n\n    /* List \u3092 Array \u306b\u5909\u63db\u3057\u3066\u8fd4\u3059 */\n    public int[] toArray() {\n        ListNode node = stackPeek;\n        int[] res = new int[size()];\n        for (int i = res.length - 1; i >= 0; i--) {\n            res[i] = node.val;\n            node = node.next;\n        }\n        return res;\n    }\n}\n
linkedlist_stack.cs
[class]{LinkedListStack}-[func]{}\n
linkedlist_stack.go
[class]{linkedListStack}-[func]{}\n
linkedlist_stack.swift
[class]{LinkedListStack}-[func]{}\n
linkedlist_stack.js
[class]{LinkedListStack}-[func]{}\n
linkedlist_stack.ts
[class]{LinkedListStack}-[func]{}\n
linkedlist_stack.dart
[class]{LinkedListStack}-[func]{}\n
linkedlist_stack.rs
[class]{LinkedListStack}-[func]{}\n
linkedlist_stack.c
[class]{LinkedListStack}-[func]{}\n
linkedlist_stack.kt
[class]{LinkedListStack}-[func]{}\n
linkedlist_stack.rb
[class]{LinkedListStack}-[func]{}\n
"},{"location":"chapter_stack_and_queue/stack/#2","title":"2. \u00a0 \u914d\u5217\u30d9\u30fc\u30b9\u306e\u5b9f\u88c5","text":"

\u914d\u5217\u3092\u4f7f\u7528\u3057\u3066\u30b9\u30bf\u30c3\u30af\u3092\u5b9f\u88c5\u3059\u308b\u5834\u5408\u3001\u914d\u5217\u306e\u672b\u5c3e\u3092\u30b9\u30bf\u30c3\u30af\u306e\u30c8\u30c3\u30d7\u3068\u8003\u3048\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u4e0b\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u30d7\u30c3\u30b7\u30e5\u3068\u30dd\u30c3\u30d7\u64cd\u4f5c\u306f\u3001\u305d\u308c\u305e\u308c\u914d\u5217\u306e\u672b\u5c3e\u3067\u306e\u8981\u7d20\u306e\u8ffd\u52a0\u3068\u524a\u9664\u306b\u5bfe\u5fdc\u3057\u3001\u3069\u3061\u3089\u3082\u6642\u9593\u8a08\u7b97\u91cf\\(O(1)\\)\u3067\u3059\u3002

ArrayStackpush()pop()

\u56f3 5-3 \u00a0 \u914d\u5217\u306b\u3088\u308b\u30b9\u30bf\u30c3\u30af\u5b9f\u88c5\u306e\u30d7\u30c3\u30b7\u30e5\u3068\u30dd\u30c3\u30d7\u64cd\u4f5c

\u30b9\u30bf\u30c3\u30af\u306b\u30d7\u30c3\u30b7\u30e5\u3055\u308c\u308b\u8981\u7d20\u304c\u7d99\u7d9a\u7684\u306b\u5897\u52a0\u3059\u308b\u53ef\u80fd\u6027\u304c\u3042\u308b\u305f\u3081\u3001\u52d5\u7684\u914d\u5217\u3092\u4f7f\u7528\u3067\u304d\u3001\u914d\u5217\u62e1\u5f35\u3092\u81ea\u5206\u3067\u51e6\u7406\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u305b\u3093\u3002\u4ee5\u4e0b\u306f\u30b5\u30f3\u30d7\u30eb\u30b3\u30fc\u30c9\u3067\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby array_stack.py
class ArrayStack:\n    \"\"\"\u914d\u5217\u30d9\u30fc\u30b9\u306e\u30b9\u30bf\u30c3\u30af\u30af\u30e9\u30b9\"\"\"\n\n    def __init__(self):\n        \"\"\"\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\"\"\"\n        self._stack: list[int] = []\n\n    def size(self) -> int:\n        \"\"\"\u30b9\u30bf\u30c3\u30af\u306e\u9577\u3055\u3092\u53d6\u5f97\"\"\"\n        return len(self._stack)\n\n    def is_empty(self) -> bool:\n        \"\"\"\u30b9\u30bf\u30c3\u30af\u304c\u7a7a\u304b\u3069\u3046\u304b\u3092\u5224\u5b9a\"\"\"\n        return self.size() == 0\n\n    def push(self, item: int):\n        \"\"\"\u30d7\u30c3\u30b7\u30e5\"\"\"\n        self._stack.append(item)\n\n    def pop(self) -> int:\n        \"\"\"\u30dd\u30c3\u30d7\"\"\"\n        if self.is_empty():\n            raise IndexError(\"Stack is empty\")\n        return self._stack.pop()\n\n    def peek(self) -> int:\n        \"\"\"\u30b9\u30bf\u30c3\u30af\u30c8\u30c3\u30d7\u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9\"\"\"\n        if self.is_empty():\n            raise IndexError(\"Stack is empty\")\n        return self._stack[-1]\n\n    def to_list(self) -> list[int]:\n        \"\"\"\u51fa\u529b\u7528\u306e\u914d\u5217\u3092\u8fd4\u3059\"\"\"\n        return self._stack\n
array_stack.cpp
/* \u914d\u5217\u306b\u57fa\u3065\u304f\u30b9\u30bf\u30c3\u30af\u30af\u30e9\u30b9 */\nclass ArrayStack {\n  private:\n    vector<int> stack;\n\n  public:\n    /* \u30b9\u30bf\u30c3\u30af\u306e\u9577\u3055\u3092\u53d6\u5f97 */\n    int size() {\n        return stack.size();\n    }\n\n    /* \u30b9\u30bf\u30c3\u30af\u304c\u7a7a\u304b\u3069\u3046\u304b\u3092\u5224\u5b9a */\n    bool isEmpty() {\n        return stack.size() == 0;\n    }\n\n    /* \u30d7\u30c3\u30b7\u30e5 */\n    void push(int num) {\n        stack.push_back(num);\n    }\n\n    /* \u30dd\u30c3\u30d7 */\n    int pop() {\n        int num = top();\n        stack.pop_back();\n        return num;\n    }\n\n    /* \u30b9\u30bf\u30c3\u30af\u30c8\u30c3\u30d7\u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9 */\n    int top() {\n        if (isEmpty())\n            throw out_of_range(\"Stack is empty\");\n        return stack.back();\n    }\n\n    /* Vector\u3092\u8fd4\u5374 */\n    vector<int> toVector() {\n        return stack;\n    }\n};\n
array_stack.java
/* \u914d\u5217\u306b\u57fa\u3065\u304f\u30b9\u30bf\u30c3\u30af\u30af\u30e9\u30b9 */\nclass ArrayStack {\n    private ArrayList<Integer> stack;\n\n    public ArrayStack() {\n        // \u30ea\u30b9\u30c8\uff08\u52d5\u7684\u914d\u5217\uff09\u3092\u521d\u671f\u5316\n        stack = new ArrayList<>();\n    }\n\n    /* \u30b9\u30bf\u30c3\u30af\u306e\u9577\u3055\u3092\u53d6\u5f97 */\n    public int size() {\n        return stack.size();\n    }\n\n    /* \u30b9\u30bf\u30c3\u30af\u304c\u7a7a\u304b\u3069\u3046\u304b\u3092\u5224\u5b9a */\n    public boolean isEmpty() {\n        return size() == 0;\n    }\n\n    /* \u30d7\u30c3\u30b7\u30e5 */\n    public void push(int num) {\n        stack.add(num);\n    }\n\n    /* \u30dd\u30c3\u30d7 */\n    public int pop() {\n        if (isEmpty())\n            throw new IndexOutOfBoundsException();\n        return stack.remove(size() - 1);\n    }\n\n    /* \u30b9\u30bf\u30c3\u30af\u30c8\u30c3\u30d7\u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9 */\n    public int peek() {\n        if (isEmpty())\n            throw new IndexOutOfBoundsException();\n        return stack.get(size() - 1);\n    }\n\n    /* List \u3092 Array \u306b\u5909\u63db\u3057\u3066\u8fd4\u3059 */\n    public Object[] toArray() {\n        return stack.toArray();\n    }\n}\n
array_stack.cs
[class]{ArrayStack}-[func]{}\n
array_stack.go
[class]{arrayStack}-[func]{}\n
array_stack.swift
[class]{ArrayStack}-[func]{}\n
array_stack.js
[class]{ArrayStack}-[func]{}\n
array_stack.ts
[class]{ArrayStack}-[func]{}\n
array_stack.dart
[class]{ArrayStack}-[func]{}\n
array_stack.rs
[class]{ArrayStack}-[func]{}\n
array_stack.c
[class]{ArrayStack}-[func]{}\n
array_stack.kt
[class]{ArrayStack}-[func]{}\n
array_stack.rb
[class]{ArrayStack}-[func]{}\n
"},{"location":"chapter_stack_and_queue/stack/#513-2","title":"5.1.3 \u00a0 2\u3064\u306e\u5b9f\u88c5\u306e\u6bd4\u8f03","text":"

\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u308b\u64cd\u4f5c

\u4e21\u65b9\u306e\u5b9f\u88c5\u306f\u3001\u30b9\u30bf\u30c3\u30af\u3067\u5b9a\u7fa9\u3055\u308c\u305f\u3059\u3079\u3066\u306e\u64cd\u4f5c\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u307e\u3059\u3002\u914d\u5217\u5b9f\u88c5\u306f\u3055\u3089\u306b\u30e9\u30f3\u30c0\u30e0\u30a2\u30af\u30bb\u30b9\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u307e\u3059\u304c\u3001\u3053\u308c\u306f\u30b9\u30bf\u30c3\u30af\u5b9a\u7fa9\u306e\u7bc4\u56f2\u3092\u8d85\u3048\u3066\u304a\u308a\u3001\u4e00\u822c\u7684\u306b\u306f\u4f7f\u7528\u3055\u308c\u307e\u305b\u3093\u3002

\u6642\u9593\u52b9\u7387

\u914d\u5217\u30d9\u30fc\u30b9\u306e\u5b9f\u88c5\u3067\u306f\u3001\u30d7\u30c3\u30b7\u30e5\u3068\u30dd\u30c3\u30d7\u64cd\u4f5c\u306e\u4e21\u65b9\u304c\u4e8b\u524d\u306b\u5272\u308a\u5f53\u3066\u3089\u308c\u305f\u9023\u7d9a\u30e1\u30e2\u30ea\u3067\u767a\u751f\u3057\u3001\u826f\u597d\u306a\u30ad\u30e3\u30c3\u30b7\u30e5\u5c40\u6240\u6027\u304c\u3042\u308b\u305f\u3081\u52b9\u7387\u304c\u9ad8\u304f\u306a\u308a\u307e\u3059\u3002\u3057\u304b\u3057\u3001\u30d7\u30c3\u30b7\u30e5\u64cd\u4f5c\u304c\u914d\u5217\u5bb9\u91cf\u3092\u8d85\u3048\u308b\u5834\u5408\u3001\u30ea\u30b5\u30a4\u30ba\u30e1\u30ab\u30cb\u30ba\u30e0\u304c\u30c8\u30ea\u30ac\u30fc\u3055\u308c\u3001\u305d\u306e\u30d7\u30c3\u30b7\u30e5\u64cd\u4f5c\u306e\u6642\u9593\u8a08\u7b97\u91cf\u306f\\(O(n)\\)\u306b\u306a\u308a\u307e\u3059\u3002

\u9023\u7d50\u30ea\u30b9\u30c8\u5b9f\u88c5\u3067\u306f\u3001\u30ea\u30b9\u30c8\u62e1\u5f35\u306f\u975e\u5e38\u306b\u67d4\u8edf\u3067\u3001\u914d\u5217\u62e1\u5f35\u306e\u3088\u3046\u306a\u52b9\u7387\u4f4e\u4e0b\u306e\u554f\u984c\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u3057\u304b\u3057\u3001\u30d7\u30c3\u30b7\u30e5\u64cd\u4f5c\u306b\u306f\u30ce\u30fc\u30c9\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u521d\u671f\u5316\u3068\u30dd\u30a4\u30f3\u30bf\u306e\u5909\u66f4\u304c\u5fc5\u8981\u306a\u305f\u3081\u3001\u52b9\u7387\u306f\u6bd4\u8f03\u7684\u4f4e\u304f\u306a\u308a\u307e\u3059\u3002\u30d7\u30c3\u30b7\u30e5\u3055\u308c\u308b\u8981\u7d20\u304c\u3059\u3067\u306b\u30ce\u30fc\u30c9\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u5834\u5408\u3001\u521d\u671f\u5316\u30b9\u30c6\u30c3\u30d7\u3092\u30b9\u30ad\u30c3\u30d7\u3067\u304d\u3001\u52b9\u7387\u304c\u5411\u4e0a\u3057\u307e\u3059\u3002

\u3057\u305f\u304c\u3063\u3066\u3001\u30d7\u30c3\u30b7\u30e5\u3068\u30dd\u30c3\u30d7\u64cd\u4f5c\u306e\u8981\u7d20\u304cint\u3084double\u306a\u3069\u306e\u57fa\u672c\u30c7\u30fc\u30bf\u578b\u306e\u5834\u5408\u3001\u4ee5\u4e0b\u306e\u7d50\u8ad6\u3092\u5c0e\u304f\u3053\u3068\u304c\u3067\u304d\u307e\u3059\uff1a

\u7a7a\u9593\u52b9\u7387

\u30ea\u30b9\u30c8\u3092\u521d\u671f\u5316\u3059\u308b\u969b\u3001\u30b7\u30b9\u30c6\u30e0\u306f\u300c\u521d\u671f\u5bb9\u91cf\u300d\u3092\u5272\u308a\u5f53\u3066\u307e\u3059\u304c\u3001\u3053\u308c\u306f\u5b9f\u969b\u306e\u5fc5\u8981\u91cf\u3092\u8d85\u3048\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002\u3055\u3089\u306b\u3001\u62e1\u5f35\u30e1\u30ab\u30cb\u30ba\u30e0\u306f\u901a\u5e38\u3001\u7279\u5b9a\u306e\u4fc2\u6570\uff082\u500d\u306a\u3069\uff09\u3067\u5bb9\u91cf\u3092\u5897\u52a0\u3055\u305b\u3001\u3053\u308c\u3082\u5b9f\u969b\u306e\u5fc5\u8981\u91cf\u3092\u8d85\u3048\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002\u3057\u305f\u304c\u3063\u3066\u3001\u914d\u5217\u30d9\u30fc\u30b9\u306e\u30b9\u30bf\u30c3\u30af\u306f\u4e00\u90e8\u306e\u7a7a\u9593\u3092\u7121\u99c4\u306b\u3059\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002

\u3057\u304b\u3057\u3001\u9023\u7d50\u30ea\u30b9\u30c8\u30ce\u30fc\u30c9\u306f\u30dd\u30a4\u30f3\u30bf\u3092\u683c\u7d0d\u3059\u308b\u305f\u3081\u306e\u8ffd\u52a0\u7a7a\u9593\u304c\u5fc5\u8981\u306a\u305f\u3081\u3001\u9023\u7d50\u30ea\u30b9\u30c8\u30ce\u30fc\u30c9\u304c\u5360\u6709\u3059\u308b\u7a7a\u9593\u306f\u6bd4\u8f03\u7684\u5927\u304d\u304f\u306a\u308a\u307e\u3059\u3002

\u307e\u3068\u3081\u308b\u3068\u3001\u3069\u3061\u3089\u306e\u5b9f\u88c5\u304c\u3088\u308a\u30e1\u30e2\u30ea\u52b9\u7387\u7684\u304b\u3092\u5358\u7d14\u306b\u5224\u65ad\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002\u7279\u5b9a\u306e\u72b6\u6cc1\u306b\u57fa\u3065\u304f\u5206\u6790\u304c\u5fc5\u8981\u3067\u3059\u3002

"},{"location":"chapter_stack_and_queue/stack/#514","title":"5.1.4 \u00a0 \u30b9\u30bf\u30c3\u30af\u306e\u5178\u578b\u7684\u306a\u5fdc\u7528","text":""},{"location":"chapter_stack_and_queue/summary/","title":"5.4 \u00a0 \u307e\u3068\u3081","text":""},{"location":"chapter_stack_and_queue/summary/#1","title":"1. \u00a0 \u91cd\u8981\u306a\u30dd\u30a4\u30f3\u30c8","text":""},{"location":"chapter_stack_and_queue/summary/#2-q-a","title":"2. \u00a0 Q & A","text":"

Q: \u30d6\u30e9\u30a6\u30b6\u306e\u9032\u3080\u30fb\u623b\u308b\u6a5f\u80fd\u306f\u53cc\u65b9\u5411\u9023\u7d50\u30ea\u30b9\u30c8\u3067\u5b9f\u88c5\u3055\u308c\u3066\u3044\u308b\u306e\u3067\u3059\u304b\uff1f

\u30d6\u30e9\u30a6\u30b6\u306e\u9032\u3080\u30fb\u623b\u308b\u30ca\u30d3\u30b2\u30fc\u30b7\u30e7\u30f3\u306f\u672c\u8cea\u7684\u306b\u300c\u30b9\u30bf\u30c3\u30af\u300d\u6982\u5ff5\u306e\u73fe\u308c\u3067\u3059\u3002\u30e6\u30fc\u30b6\u30fc\u304c\u65b0\u3057\u3044\u30da\u30fc\u30b8\u3092\u8a2a\u554f\u3059\u308b\u3068\u3001\u305d\u306e\u30da\u30fc\u30b8\u304c\u30b9\u30bf\u30c3\u30af\u306e\u5148\u982d\u306b\u8ffd\u52a0\u3055\u308c\u307e\u3059\u3002\u623b\u308b\u30dc\u30bf\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\u3068\u3001\u30da\u30fc\u30b8\u304c\u30b9\u30bf\u30c3\u30af\u306e\u5148\u982d\u304b\u3089\u30dd\u30c3\u30d7\u3055\u308c\u307e\u3059\u3002\u4e21\u7aef\u30ad\u30e5\u30fc\uff08deque\uff09\u306f\u3001\u300c\u4e21\u7aef\u30ad\u30e5\u30fc\u300d\u306e\u7ae0\u3067\u8ff0\u3079\u305f\u3088\u3046\u306b\u3001\u3044\u304f\u3064\u304b\u306e\u8ffd\u52a0\u64cd\u4f5c\u3092\u4fbf\u5229\u306b\u5b9f\u88c5\u3067\u304d\u307e\u3059\u3002

Q: \u30b9\u30bf\u30c3\u30af\u304b\u3089\u30dd\u30c3\u30d7\u3057\u305f\u5f8c\u3001\u30dd\u30c3\u30d7\u3055\u308c\u305f\u30ce\u30fc\u30c9\u306e\u30e1\u30e2\u30ea\u3092\u89e3\u653e\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u304b\uff1f

\u30dd\u30c3\u30d7\u3055\u308c\u305f\u30ce\u30fc\u30c9\u304c\u5f8c\u3067\u4f7f\u7528\u3055\u308c\u308b\u5834\u5408\u306f\u3001\u305d\u306e\u30e1\u30e2\u30ea\u3092\u89e3\u653e\u3059\u308b\u5fc5\u8981\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u81ea\u52d5\u30ac\u30d9\u30fc\u30b8\u30b3\u30ec\u30af\u30b7\u30e7\u30f3\u3092\u6301\u3064Java\u3084Python\u306a\u3069\u306e\u8a00\u8a9e\u3067\u306f\u3001\u624b\u52d5\u306e\u30e1\u30e2\u30ea\u89e3\u653e\u306f\u5fc5\u8981\u3042\u308a\u307e\u305b\u3093\u3002C\u3084C++\u3067\u306f\u3001\u624b\u52d5\u306e\u30e1\u30e2\u30ea\u89e3\u653e\u304c\u5fc5\u8981\u3067\u3059\u3002

Q: \u4e21\u7aef\u30ad\u30e5\u30fc\u306f2\u3064\u306e\u30b9\u30bf\u30c3\u30af\u3092\u7d50\u5408\u3057\u305f\u3082\u306e\u306e\u3088\u3046\u306b\u898b\u3048\u307e\u3059\u3002\u305d\u306e\u7528\u9014\u306f\u4f55\u3067\u3059\u304b\uff1f

\u4e21\u7aef\u30ad\u30e5\u30fc\u306f\u3001\u30b9\u30bf\u30c3\u30af\u3068\u30ad\u30e5\u30fc\u306e\u7d44\u307f\u5408\u308f\u305b\u307e\u305f\u306f2\u3064\u306e\u30b9\u30bf\u30c3\u30af\u3092\u7d50\u5408\u3057\u305f\u3082\u306e\u3067\u3001\u30b9\u30bf\u30c3\u30af\u3068\u30ad\u30e5\u30fc\u306e\u4e21\u65b9\u306e\u30ed\u30b8\u30c3\u30af\u3092\u793a\u3057\u307e\u3059\u3002\u3057\u305f\u304c\u3063\u3066\u3001\u30b9\u30bf\u30c3\u30af\u3068\u30ad\u30e5\u30fc\u306e\u3059\u3079\u3066\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u5b9f\u88c5\u3067\u304d\u3001\u3088\u308a\u5927\u304d\u306a\u67d4\u8edf\u6027\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002

Q: \u5143\u306b\u623b\u3059\u3068\u3084\u308a\u76f4\u3057\u306f\u5177\u4f53\u7684\u306b\u3069\u306e\u3088\u3046\u306b\u5b9f\u88c5\u3055\u308c\u308b\u306e\u3067\u3059\u304b\uff1f

\u5143\u306b\u623b\u3059\u3068\u3084\u308a\u76f4\u3057\u306e\u64cd\u4f5c\u306f2\u3064\u306e\u30b9\u30bf\u30c3\u30af\u3092\u4f7f\u3063\u3066\u5b9f\u88c5\u3055\u308c\u307e\u3059\uff1a\u5143\u306b\u623b\u3059\u7528\u306e\u30b9\u30bf\u30c3\u30afA\u3068\u3084\u308a\u76f4\u3057\u7528\u306e\u30b9\u30bf\u30c3\u30afB\u3067\u3059\u3002

  1. \u30e6\u30fc\u30b6\u30fc\u304c\u64cd\u4f5c\u3092\u5b9f\u884c\u3059\u308b\u305f\u3073\u306b\u3001\u305d\u308c\u304c\u30b9\u30bf\u30c3\u30afA\u306b\u30d7\u30c3\u30b7\u30e5\u3055\u308c\u3001\u30b9\u30bf\u30c3\u30afB\u304c\u30af\u30ea\u30a2\u3055\u308c\u307e\u3059\u3002
  2. \u30e6\u30fc\u30b6\u30fc\u304c\u300c\u5143\u306b\u623b\u3059\u300d\u3092\u5b9f\u884c\u3059\u308b\u3068\u3001\u6700\u65b0\u306e\u64cd\u4f5c\u304c\u30b9\u30bf\u30c3\u30afA\u304b\u3089\u30dd\u30c3\u30d7\u3055\u308c\u3001\u30b9\u30bf\u30c3\u30afB\u306b\u30d7\u30c3\u30b7\u30e5\u3055\u308c\u307e\u3059\u3002
  3. \u30e6\u30fc\u30b6\u30fc\u304c\u300c\u3084\u308a\u76f4\u3057\u300d\u3092\u5b9f\u884c\u3059\u308b\u3068\u3001\u6700\u65b0\u306e\u64cd\u4f5c\u304c\u30b9\u30bf\u30c3\u30afB\u304b\u3089\u30dd\u30c3\u30d7\u3055\u308c\u3001\u30b9\u30bf\u30c3\u30afA\u306b\u623b\u3055\u308c\u307e\u3059\u3002
"},{"location":"chapter_tree/","title":"\u7b2c 7 \u7ae0 \u00a0 \u6728","text":"

Abstract

\u305d\u3073\u3048\u7acb\u3064\u6728\u306f\u6d3b\u529b\u306b\u6e80\u3061\u305f\u672c\u8cea\u3092\u653e\u3061\u3001\u6df1\u3044\u6839\u3068\u8c4a\u304b\u306a\u8449\u3092\u8a87\u308a\u306a\u304c\u3089\u3082\u3001\u305d\u306e\u679d\u306f\u758e\u3089\u306b\u6563\u3089\u3070\u308a\u3001\u5e7d\u7384\u306a\u96f0\u56f2\u6c17\u3092\u91b8\u3057\u51fa\u3057\u3066\u3044\u307e\u3059\u3002

\u305d\u308c\u306f\u30c7\u30fc\u30bf\u306b\u304a\u3051\u308b\u5206\u5272\u7d71\u6cbb\u306e\u9bae\u3084\u304b\u306a\u5f62\u3092\u79c1\u305f\u3061\u306b\u793a\u3057\u3066\u3044\u307e\u3059\u3002

"},{"location":"chapter_tree/#_1","title":"\u7ae0\u306e\u5185\u5bb9","text":""},{"location":"chapter_tree/array_representation_of_tree/","title":"7.3 \u00a0 \u4e8c\u5206\u6728\u306e\u914d\u5217\u8868\u73fe","text":"

\u9023\u7d50\u30ea\u30b9\u30c8\u8868\u73fe\u3067\u306f\u3001\u4e8c\u5206\u6728\u306e\u683c\u7d0d\u5358\u4f4d\u306f\u30ce\u30fc\u30c9TreeNode\u3067\u3042\u308a\u3001\u30ce\u30fc\u30c9\u306f\u30dd\u30a4\u30f3\u30bf\u306b\u3088\u3063\u3066\u63a5\u7d9a\u3055\u308c\u307e\u3059\u3002\u9023\u7d50\u30ea\u30b9\u30c8\u8868\u73fe\u3067\u306e\u4e8c\u5206\u6728\u306e\u57fa\u672c\u64cd\u4f5c\u306b\u3064\u3044\u3066\u306f\u524d\u306e\u7bc0\u3067\u7d39\u4ecb\u3057\u307e\u3057\u305f\u3002

\u3067\u306f\u3001\u914d\u5217\u3092\u4f7f\u3063\u3066\u4e8c\u5206\u6728\u3092\u8868\u73fe\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u308b\u3067\u3057\u3087\u3046\u304b\uff1f\u7b54\u3048\u306f\u30a4\u30a8\u30b9\u3067\u3059\u3002

"},{"location":"chapter_tree/array_representation_of_tree/#731","title":"7.3.1 \u00a0 \u5b8c\u5168\u4e8c\u5206\u6728\u306e\u8868\u73fe","text":"

\u307e\u305a\u7c21\u5358\u306a\u30b1\u30fc\u30b9\u304b\u3089\u5206\u6790\u3057\u3066\u307f\u307e\u3057\u3087\u3046\u3002\u5b8c\u5168\u4e8c\u5206\u6728\u304c\u4e0e\u3048\u3089\u308c\u305f\u3068\u304d\u3001\u30ec\u30d9\u30eb\u9806\u63a2\u7d22\u306e\u9806\u5e8f\u306b\u5f93\u3063\u3066\u3059\u3079\u3066\u306e\u30ce\u30fc\u30c9\u3092\u914d\u5217\u306b\u683c\u7d0d\u3057\u3001\u5404\u30ce\u30fc\u30c9\u306f\u4e00\u610f\u306e\u914d\u5217\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306b\u5bfe\u5fdc\u3057\u307e\u3059\u3002

\u30ec\u30d9\u30eb\u9806\u63a2\u7d22\u306e\u7279\u6027\u306b\u57fa\u3065\u3044\u3066\u3001\u89aa\u30ce\u30fc\u30c9\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3068\u305d\u306e\u5b50\u30ce\u30fc\u30c9\u306e\u9593\u306e\u300c\u30de\u30c3\u30d4\u30f3\u30b0\u516c\u5f0f\u300d\u3092\u5c0e\u304d\u51fa\u3059\u3053\u3068\u304c\u3067\u304d\u307e\u3059\uff1a\u30ce\u30fc\u30c9\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u304c\\(i\\)\u306e\u5834\u5408\u3001\u305d\u306e\u5de6\u306e\u5b50\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306f\\(2i + 1\\)\u3001\u53f3\u306e\u5b50\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306f\\(2i + 2\\)\u3067\u3059\u3002\u4e0b\u56f3\u306f\u3001\u3055\u307e\u3056\u307e\u306a\u30ce\u30fc\u30c9\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u9593\u306e\u30de\u30c3\u30d4\u30f3\u30b0\u95a2\u4fc2\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002

\u56f3 7-12 \u00a0 \u5b8c\u5168\u4e8c\u5206\u6728\u306e\u914d\u5217\u8868\u73fe

\u30de\u30c3\u30d4\u30f3\u30b0\u516c\u5f0f\u306f\u3001\u9023\u7d50\u30ea\u30b9\u30c8\u306e\u30ce\u30fc\u30c9\u53c2\u7167\uff08\u30dd\u30a4\u30f3\u30bf\uff09\u3068\u540c\u69d8\u306e\u5f79\u5272\u3092\u679c\u305f\u3057\u307e\u3059\u3002\u914d\u5217\u5185\u306e\u4efb\u610f\u306e\u30ce\u30fc\u30c9\u304c\u4e0e\u3048\u3089\u308c\u305f\u3068\u304d\u3001\u30de\u30c3\u30d4\u30f3\u30b0\u516c\u5f0f\u3092\u4f7f\u7528\u3057\u3066\u305d\u306e\u5de6\uff08\u53f3\uff09\u306e\u5b50\u30ce\u30fc\u30c9\u306b\u30a2\u30af\u30bb\u30b9\u3067\u304d\u307e\u3059\u3002

"},{"location":"chapter_tree/array_representation_of_tree/#732","title":"7.3.2 \u00a0 \u4efb\u610f\u306e\u4e8c\u5206\u6728\u306e\u8868\u73fe","text":"

\u5b8c\u5168\u4e8c\u5206\u6728\u306f\u7279\u5225\u306a\u30b1\u30fc\u30b9\u3067\u3059\u3002\u4e8c\u5206\u6728\u306e\u4e2d\u9593\u30ec\u30d9\u30eb\u306b\u306f\u591a\u304f\u306eNone\u5024\u304c\u5b58\u5728\u3059\u308b\u3053\u3068\u304c\u3088\u304f\u3042\u308a\u307e\u3059\u3002\u30ec\u30d9\u30eb\u9806\u63a2\u7d22\u306e\u30b7\u30fc\u30b1\u30f3\u30b9\u306b\u306f\u3053\u308c\u3089\u306eNone\u5024\u304c\u542b\u307e\u308c\u306a\u3044\u305f\u3081\u3001\u3053\u306e\u30b7\u30fc\u30b1\u30f3\u30b9\u3060\u3051\u306b\u4f9d\u5b58\u3057\u3066None\u5024\u306e\u6570\u3068\u5206\u5e03\u3092\u63a8\u6e2c\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002\u3064\u307e\u308a\u3001\u8907\u6570\u306e\u4e8c\u5206\u6728\u69cb\u9020\u304c\u540c\u3058\u30ec\u30d9\u30eb\u9806\u63a2\u7d22\u30b7\u30fc\u30b1\u30f3\u30b9\u3068\u4e00\u81f4\u3059\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002

\u4e0b\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u5b8c\u5168\u3067\u306a\u3044\u4e8c\u5206\u6728\u304c\u4e0e\u3048\u3089\u308c\u305f\u5834\u5408\u3001\u4e0a\u8a18\u306e\u914d\u5217\u8868\u73fe\u65b9\u6cd5\u306f\u5931\u6557\u3057\u307e\u3059\u3002

\u56f3 7-13 \u00a0 \u30ec\u30d9\u30eb\u9806\u63a2\u7d22\u30b7\u30fc\u30b1\u30f3\u30b9\u304c\u8907\u6570\u306e\u4e8c\u5206\u6728\u306e\u53ef\u80fd\u6027\u306b\u5bfe\u5fdc

\u3053\u306e\u554f\u984c\u3092\u89e3\u6c7a\u3059\u308b\u305f\u3081\u306b\u3001\u30ec\u30d9\u30eb\u9806\u63a2\u7d22\u30b7\u30fc\u30b1\u30f3\u30b9\u3067\u3059\u3079\u3066\u306eNone\u5024\u3092\u660e\u793a\u7684\u306b\u66f8\u304d\u51fa\u3059\u3053\u3068\u3092\u691c\u8a0e\u3067\u304d\u307e\u3059\u3002\u4e0b\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u3053\u306e\u51e6\u7406\u5f8c\u3001\u30ec\u30d9\u30eb\u9806\u63a2\u7d22\u30b7\u30fc\u30b1\u30f3\u30b9\u306f\u4e8c\u5206\u6728\u3092\u4e00\u610f\u306b\u8868\u73fe\u3067\u304d\u307e\u3059\u3002\u30b5\u30f3\u30d7\u30eb\u30b3\u30fc\u30c9\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby
# \u4e8c\u5206\u6728\u306e\u914d\u5217\u8868\u73fe\n# None\u3092\u4f7f\u7528\u3057\u3066\u7a7a\u306e\u30b9\u30ed\u30c3\u30c8\u3092\u8868\u73fe\ntree = [1, 2, 3, 4, None, 6, 7, 8, 9, None, None, 12, None, None, 15]\n
/* \u4e8c\u5206\u6728\u306e\u914d\u5217\u8868\u73fe */\n// \u6700\u5927\u6574\u6570\u5024INT_MAX\u3092\u4f7f\u7528\u3057\u3066\u7a7a\u306e\u30b9\u30ed\u30c3\u30c8\u3092\u30de\u30fc\u30af\nvector<int> tree = {1, 2, 3, 4, INT_MAX, 6, 7, 8, 9, INT_MAX, INT_MAX, 12, INT_MAX, INT_MAX, 15};\n
/* \u4e8c\u5206\u6728\u306e\u914d\u5217\u8868\u73fe */\n// Integer\u30e9\u30c3\u30d1\u30fc\u30af\u30e9\u30b9\u3092\u4f7f\u7528\u3057\u3066null\u3067\u7a7a\u306e\u30b9\u30ed\u30c3\u30c8\u3092\u30de\u30fc\u30af\nInteger[] tree = { 1, 2, 3, 4, null, 6, 7, 8, 9, null, null, 12, null, null, 15 };\n
/* \u4e8c\u5206\u6728\u306e\u914d\u5217\u8868\u73fe */\n// nullable int (int?)\u3092\u4f7f\u7528\u3057\u3066null\u3067\u7a7a\u306e\u30b9\u30ed\u30c3\u30c8\u3092\u30de\u30fc\u30af\nint?[] tree = [1, 2, 3, 4, null, 6, 7, 8, 9, null, null, 12, null, null, 15];\n
/* \u4e8c\u5206\u6728\u306e\u914d\u5217\u8868\u73fe */\n// any\u578b\u30b9\u30e9\u30a4\u30b9\u3092\u4f7f\u7528\u3057\u3066nil\u3067\u7a7a\u306e\u30b9\u30ed\u30c3\u30c8\u3092\u30de\u30fc\u30af\ntree := []any{1, 2, 3, 4, nil, 6, 7, 8, 9, nil, nil, 12, nil, nil, 15}\n
/* \u4e8c\u5206\u6728\u306e\u914d\u5217\u8868\u73fe */\n// optional Int (Int?)\u3092\u4f7f\u7528\u3057\u3066nil\u3067\u7a7a\u306e\u30b9\u30ed\u30c3\u30c8\u3092\u30de\u30fc\u30af\nlet tree: [Int?] = [1, 2, 3, 4, nil, 6, 7, 8, 9, nil, nil, 12, nil, nil, 15]\n
/* \u4e8c\u5206\u6728\u306e\u914d\u5217\u8868\u73fe */\n// null\u3092\u4f7f\u7528\u3057\u3066\u7a7a\u306e\u30b9\u30ed\u30c3\u30c8\u3092\u8868\u73fe\nlet tree = [1, 2, 3, 4, null, 6, 7, 8, 9, null, null, 12, null, null, 15];\n
/* \u4e8c\u5206\u6728\u306e\u914d\u5217\u8868\u73fe */\n// null\u3092\u4f7f\u7528\u3057\u3066\u7a7a\u306e\u30b9\u30ed\u30c3\u30c8\u3092\u8868\u73fe\nlet tree: (number | null)[] = [1, 2, 3, 4, null, 6, 7, 8, 9, null, null, 12, null, null, 15];\n
/* \u4e8c\u5206\u6728\u306e\u914d\u5217\u8868\u73fe */\n// nullable int (int?)\u3092\u4f7f\u7528\u3057\u3066null\u3067\u7a7a\u306e\u30b9\u30ed\u30c3\u30c8\u3092\u30de\u30fc\u30af\nList<int?> tree = [1, 2, 3, 4, null, 6, 7, 8, 9, null, null, 12, null, null, 15];\n
/* \u4e8c\u5206\u6728\u306e\u914d\u5217\u8868\u73fe */\n// None\u3092\u4f7f\u7528\u3057\u3066\u7a7a\u306e\u30b9\u30ed\u30c3\u30c8\u3092\u30de\u30fc\u30af\nlet tree = [Some(1), Some(2), Some(3), Some(4), None, Some(6), Some(7), Some(8), Some(9), None, None, Some(12), None, None, Some(15)];\n
/* \u4e8c\u5206\u6728\u306e\u914d\u5217\u8868\u73fe */\n// \u6700\u5927int\u5024\u3092\u4f7f\u7528\u3057\u3066\u7a7a\u306e\u30b9\u30ed\u30c3\u30c8\u3092\u30de\u30fc\u30af\u3001\u3057\u305f\u304c\u3063\u3066\u30ce\u30fc\u30c9\u5024\u306fINT_MAX\u3067\u3042\u3063\u3066\u306f\u306a\u3089\u306a\u3044\nint tree[] = {1, 2, 3, 4, INT_MAX, 6, 7, 8, 9, INT_MAX, INT_MAX, 12, INT_MAX, INT_MAX, 15};\n
/* \u4e8c\u5206\u6728\u306e\u914d\u5217\u8868\u73fe */\n// null\u3092\u4f7f\u7528\u3057\u3066\u7a7a\u306e\u30b9\u30ed\u30c3\u30c8\u3092\u8868\u73fe\nval tree = mutableListOf( 1, 2, 3, 4, null, 6, 7, 8, 9, null, null, 12, null, null, 15 )\n
\n

\u56f3 7-14 \u00a0 \u4efb\u610f\u306e\u7a2e\u985e\u306e\u4e8c\u5206\u6728\u306e\u914d\u5217\u8868\u73fe

\u6ce8\u76ee\u3059\u3079\u304d\u306f\u3001\u5b8c\u5099\u4e8c\u5206\u6728\u306f\u914d\u5217\u8868\u73fe\u306b\u975e\u5e38\u306b\u9069\u3057\u3066\u3044\u308b**\u3068\u3044\u3046\u3053\u3068\u3067\u3059\u3002\u5b8c\u5099\u4e8c\u5206\u6728\u306e\u5b9a\u7fa9\u3092\u601d\u3044\u51fa\u3059\u3068\u3001None\u306f\u6700\u4e0b\u4f4d\u30ec\u30d9\u30eb\u3067\u306e\u307f\u3001\u304b\u3064\u53f3\u5074\u306b\u5411\u304b\u3063\u3066\u73fe\u308c\u307e\u3059\u3002**\u3064\u307e\u308a\u3001\u3059\u3079\u3066\u306eNone\u5024\u306f\u78ba\u5b9f\u306b\u30ec\u30d9\u30eb\u9806\u63a2\u7d22\u30b7\u30fc\u30b1\u30f3\u30b9\u306e\u6700\u5f8c\u306b\u73fe\u308c\u307e\u3059\u3002

\u3053\u308c\u306f\u3001\u914d\u5217\u3092\u4f7f\u7528\u3057\u3066\u5b8c\u5099\u4e8c\u5206\u6728\u3092\u8868\u73fe\u3059\u308b\u969b\u3001\u3059\u3079\u3066\u306eNone\u5024\u306e\u683c\u7d0d\u3092\u7701\u7565\u3067\u304d\u308b\u3053\u3068\u3092\u610f\u5473\u3057\u3001\u975e\u5e38\u306b\u4fbf\u5229\u3067\u3059\u3002\u4e0b\u56f3\u306b\u4f8b\u3092\u793a\u3057\u307e\u3059\u3002

\u56f3 7-15 \u00a0 \u5b8c\u5099\u4e8c\u5206\u6728\u306e\u914d\u5217\u8868\u73fe

\u4ee5\u4e0b\u306e\u30b3\u30fc\u30c9\u306f\u3001\u914d\u5217\u8868\u73fe\u306b\u57fa\u3065\u304f\u4e8c\u5206\u6728\u3092\u5b9f\u88c5\u3057\u3001\u6b21\u306e\u64cd\u4f5c\u3092\u542b\u307f\u307e\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby array_binary_tree.py
class ArrayBinaryTree:\n    \"\"\"\u914d\u5217\u30d9\u30fc\u30b9\u306e\u4e8c\u5206\u6728\u30af\u30e9\u30b9\"\"\"\n\n    def __init__(self, arr: list[int | None]):\n        \"\"\"\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\"\"\"\n        self._tree = list(arr)\n\n    def size(self):\n        \"\"\"\u30ea\u30b9\u30c8\u306e\u5bb9\u91cf\"\"\"\n        return len(self._tree)\n\n    def val(self, i: int) -> int | None:\n        \"\"\"\u30a4\u30f3\u30c7\u30c3\u30af\u30b9i\u306e\u30ce\u30fc\u30c9\u306e\u5024\u3092\u53d6\u5f97\"\"\"\n        # \u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u304c\u7bc4\u56f2\u5916\u306e\u5834\u5408\u3001None\u3092\u8fd4\u3057\u3001\u7a7a\u5e2d\u3092\u8868\u3059\n        if i < 0 or i >= self.size():\n            return None\n        return self._tree[i]\n\n    def left(self, i: int) -> int | None:\n        \"\"\"\u30a4\u30f3\u30c7\u30c3\u30af\u30b9i\u306e\u30ce\u30fc\u30c9\u306e\u5de6\u306e\u5b50\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u53d6\u5f97\"\"\"\n        return 2 * i + 1\n\n    def right(self, i: int) -> int | None:\n        \"\"\"\u30a4\u30f3\u30c7\u30c3\u30af\u30b9i\u306e\u30ce\u30fc\u30c9\u306e\u53f3\u306e\u5b50\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u53d6\u5f97\"\"\"\n        return 2 * i + 2\n\n    def parent(self, i: int) -> int | None:\n        \"\"\"\u30a4\u30f3\u30c7\u30c3\u30af\u30b9i\u306e\u30ce\u30fc\u30c9\u306e\u89aa\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u53d6\u5f97\"\"\"\n        return (i - 1) // 2\n\n    def level_order(self) -> list[int]:\n        \"\"\"\u30ec\u30d9\u30eb\u9806\u8d70\u67fb\"\"\"\n        self.res = []\n        # \u914d\u5217\u3092\u8d70\u67fb\n        for i in range(self.size()):\n            if self.val(i) is not None:\n                self.res.append(self.val(i))\n        return self.res\n\n    def dfs(self, i: int, order: str):\n        \"\"\"\u6df1\u3055\u512a\u5148\u8d70\u67fb\"\"\"\n        if self.val(i) is None:\n            return\n        # \u524d\u9806\u8d70\u67fb\n        if order == \"pre\":\n            self.res.append(self.val(i))\n        self.dfs(self.left(i), order)\n        # \u4e2d\u9806\u8d70\u67fb\n        if order == \"in\":\n            self.res.append(self.val(i))\n        self.dfs(self.right(i), order)\n        # \u5f8c\u9806\u8d70\u67fb\n        if order == \"post\":\n            self.res.append(self.val(i))\n\n    def pre_order(self) -> list[int]:\n        \"\"\"\u524d\u9806\u8d70\u67fb\"\"\"\n        self.res = []\n        self.dfs(0, order=\"pre\")\n        return self.res\n\n    def in_order(self) -> list[int]:\n        \"\"\"\u4e2d\u9806\u8d70\u67fb\"\"\"\n        self.res = []\n        self.dfs(0, order=\"in\")\n        return self.res\n\n    def post_order(self) -> list[int]:\n        \"\"\"\u5f8c\u9806\u8d70\u67fb\"\"\"\n        self.res = []\n        self.dfs(0, order=\"post\")\n        return self.res\n
array_binary_tree.cpp
/* \u914d\u5217\u30d9\u30fc\u30b9\u306e\u4e8c\u5206\u6728\u30af\u30e9\u30b9 */\nclass ArrayBinaryTree {\n  public:\n    /* \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf */\n    ArrayBinaryTree(vector<int> arr) {\n        tree = arr;\n    }\n\n    /* \u30ea\u30b9\u30c8\u306e\u5bb9\u91cf */\n    int size() {\n        return tree.size();\n    }\n\n    /* \u30a4\u30f3\u30c7\u30c3\u30af\u30b9 i \u306e\u30ce\u30fc\u30c9\u306e\u5024\u3092\u53d6\u5f97 */\n    int val(int i) {\n        // \u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u304c\u7bc4\u56f2\u5916\u306e\u5834\u5408\u3001INT_MAX \u3092\u8fd4\u3059\uff08null \u3092\u8868\u3059\uff09\n        if (i < 0 || i >= size())\n            return INT_MAX;\n        return tree[i];\n    }\n\n    /* \u30a4\u30f3\u30c7\u30c3\u30af\u30b9 i \u306e\u30ce\u30fc\u30c9\u306e\u5de6\u306e\u5b50\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u53d6\u5f97 */\n    int left(int i) {\n        return 2 * i + 1;\n    }\n\n    /* \u30a4\u30f3\u30c7\u30c3\u30af\u30b9 i \u306e\u30ce\u30fc\u30c9\u306e\u53f3\u306e\u5b50\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u53d6\u5f97 */\n    int right(int i) {\n        return 2 * i + 2;\n    }\n\n    /* \u30a4\u30f3\u30c7\u30c3\u30af\u30b9 i \u306e\u30ce\u30fc\u30c9\u306e\u89aa\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u53d6\u5f97 */\n    int parent(int i) {\n        return (i - 1) / 2;\n    }\n\n    /* \u30ec\u30d9\u30eb\u9806\u8d70\u67fb */\n    vector<int> levelOrder() {\n        vector<int> res;\n        // \u914d\u5217\u3092\u8d70\u67fb\n        for (int i = 0; i < size(); i++) {\n            if (val(i) != INT_MAX)\n                res.push_back(val(i));\n        }\n        return res;\n    }\n\n    /* \u524d\u9806\u8d70\u67fb */\n    vector<int> preOrder() {\n        vector<int> res;\n        dfs(0, \"pre\", res);\n        return res;\n    }\n\n    /* \u4e2d\u9806\u8d70\u67fb */\n    vector<int> inOrder() {\n        vector<int> res;\n        dfs(0, \"in\", res);\n        return res;\n    }\n\n    /* \u5f8c\u9806\u8d70\u67fb */\n    vector<int> postOrder() {\n        vector<int> res;\n        dfs(0, \"post\", res);\n        return res;\n    }\n\n  private:\n    vector<int> tree;\n\n    /* \u6df1\u3055\u512a\u5148\u8d70\u67fb */\n    void dfs(int i, string order, vector<int> &res) {\n        // \u7a7a\u306e\u4f4d\u7f6e\u306e\u5834\u5408\u3001\u623b\u308b\n        if (val(i) == INT_MAX)\n            return;\n        // \u524d\u9806\u8d70\u67fb\n        if (order == \"pre\")\n            res.push_back(val(i));\n        dfs(left(i), order, res);\n        // \u4e2d\u9806\u8d70\u67fb\n        if (order == \"in\")\n            res.push_back(val(i));\n        dfs(right(i), order, res);\n        // \u5f8c\u9806\u8d70\u67fb\n        if (order == \"post\")\n            res.push_back(val(i));\n    }\n};\n
array_binary_tree.java
/* \u914d\u5217\u30d9\u30fc\u30b9\u306e\u4e8c\u5206\u6728\u30af\u30e9\u30b9 */\nclass ArrayBinaryTree {\n    private List<Integer> tree;\n\n    /* \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf */\n    public ArrayBinaryTree(List<Integer> arr) {\n        tree = new ArrayList<>(arr);\n    }\n\n    /* \u30ea\u30b9\u30c8\u306e\u5bb9\u91cf */\n    public int size() {\n        return tree.size();\n    }\n\n    /* \u30a4\u30f3\u30c7\u30c3\u30af\u30b9 i \u306e\u30ce\u30fc\u30c9\u306e\u5024\u3092\u53d6\u5f97 */\n    public Integer val(int i) {\n        // \u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u304c\u7bc4\u56f2\u5916\u306e\u5834\u5408\u3001null \u3092\u8fd4\u3059\uff08\u7a7a\u306e\u4f4d\u7f6e\u3092\u8868\u3059\uff09\n        if (i < 0 || i >= size())\n            return null;\n        return tree.get(i);\n    }\n\n    /* \u30a4\u30f3\u30c7\u30c3\u30af\u30b9 i \u306e\u30ce\u30fc\u30c9\u306e\u5de6\u306e\u5b50\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u53d6\u5f97 */\n    public Integer left(int i) {\n        return 2 * i + 1;\n    }\n\n    /* \u30a4\u30f3\u30c7\u30c3\u30af\u30b9 i \u306e\u30ce\u30fc\u30c9\u306e\u53f3\u306e\u5b50\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u53d6\u5f97 */\n    public Integer right(int i) {\n        return 2 * i + 2;\n    }\n\n    /* \u30a4\u30f3\u30c7\u30c3\u30af\u30b9 i \u306e\u30ce\u30fc\u30c9\u306e\u89aa\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u53d6\u5f97 */\n    public Integer parent(int i) {\n        return (i - 1) / 2;\n    }\n\n    /* \u30ec\u30d9\u30eb\u9806\u8d70\u67fb */\n    public List<Integer> levelOrder() {\n        List<Integer> res = new ArrayList<>();\n        // \u914d\u5217\u3092\u8d70\u67fb\n        for (int i = 0; i < size(); i++) {\n            if (val(i) != null)\n                res.add(val(i));\n        }\n        return res;\n    }\n\n    /* \u6df1\u3055\u512a\u5148\u8d70\u67fb */\n    private void dfs(Integer i, String order, List<Integer> res) {\n        // \u7a7a\u306e\u4f4d\u7f6e\u306e\u5834\u5408\u3001\u623b\u308b\n        if (val(i) == null)\n            return;\n        // \u524d\u9806\u8d70\u67fb\n        if (\"pre\".equals(order))\n            res.add(val(i));\n        dfs(left(i), order, res);\n        // \u4e2d\u9806\u8d70\u67fb\n        if (\"in\".equals(order))\n            res.add(val(i));\n        dfs(right(i), order, res);\n        // \u5f8c\u9806\u8d70\u67fb\n        if (\"post\".equals(order))\n            res.add(val(i));\n    }\n\n    /* \u524d\u9806\u8d70\u67fb */\n    public List<Integer> preOrder() {\n        List<Integer> res = new ArrayList<>();\n        dfs(0, \"pre\", res);\n        return res;\n    }\n\n    /* \u4e2d\u9806\u8d70\u67fb */\n    public List<Integer> inOrder() {\n        List<Integer> res = new ArrayList<>();\n        dfs(0, \"in\", res);\n        return res;\n    }\n\n    /* \u5f8c\u9806\u8d70\u67fb */\n    public List<Integer> postOrder() {\n        List<Integer> res = new ArrayList<>();\n        dfs(0, \"post\", res);\n        return res;\n    }\n}\n
array_binary_tree.cs
[class]{ArrayBinaryTree}-[func]{}\n
array_binary_tree.go
[class]{arrayBinaryTree}-[func]{}\n
array_binary_tree.swift
[class]{ArrayBinaryTree}-[func]{}\n
array_binary_tree.js
[class]{ArrayBinaryTree}-[func]{}\n
array_binary_tree.ts
[class]{ArrayBinaryTree}-[func]{}\n
array_binary_tree.dart
[class]{ArrayBinaryTree}-[func]{}\n
array_binary_tree.rs
[class]{ArrayBinaryTree}-[func]{}\n
array_binary_tree.c
[class]{ArrayBinaryTree}-[func]{}\n
array_binary_tree.kt
[class]{ArrayBinaryTree}-[func]{}\n
array_binary_tree.rb
[class]{ArrayBinaryTree}-[func]{}\n
"},{"location":"chapter_tree/array_representation_of_tree/#733","title":"7.3.3 \u00a0 \u5229\u70b9\u3068\u5236\u9650","text":"

\u4e8c\u5206\u6728\u306e\u914d\u5217\u8868\u73fe\u306b\u306f\u4ee5\u4e0b\u306e\u5229\u70b9\u304c\u3042\u308a\u307e\u3059\uff1a

\u3057\u304b\u3057\u3001\u914d\u5217\u8868\u73fe\u306b\u306f\u3044\u304f\u3064\u304b\u306e\u5236\u9650\u3082\u3042\u308a\u307e\u3059\uff1a

"},{"location":"chapter_tree/avl_tree/","title":"7.5 \u00a0 AVL\u6728 *","text":"

\u300c\u4e8c\u5206\u63a2\u7d22\u6728\u300d\u306e\u7bc0\u3067\u306f\u3001\u8907\u6570\u306e\u633f\u5165\u3068\u524a\u9664\u306e\u5f8c\u3001\u4e8c\u5206\u63a2\u7d22\u6728\u304c\u9023\u7d50\u30ea\u30b9\u30c8\u306b\u9000\u5316\u3059\u308b\u53ef\u80fd\u6027\u304c\u3042\u308b\u3053\u3068\u3092\u8ff0\u3079\u307e\u3057\u305f\u3002\u3053\u306e\u3088\u3046\u306a\u5834\u5408\u3001\u3059\u3079\u3066\u306e\u64cd\u4f5c\u306e\u6642\u9593\u8a08\u7b97\u91cf\u304c\\(O(\\log n)\\)\u304b\u3089\\(O(n)\\)\u306b\u60aa\u5316\u3057\u307e\u3059\u3002

\u4e0b\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u30012\u3064\u306e\u30ce\u30fc\u30c9\u524a\u9664\u64cd\u4f5c\u306e\u5f8c\u3001\u3053\u306e\u4e8c\u5206\u63a2\u7d22\u6728\u306f\u9023\u7d50\u30ea\u30b9\u30c8\u306b\u9000\u5316\u3057\u307e\u3059\u3002

\u56f3 7-24 \u00a0 \u30ce\u30fc\u30c9\u524a\u9664\u5f8c\u306eAVL\u6728\u306e\u9000\u5316

\u4f8b\u3048\u3070\u3001\u4e0b\u56f3\u306b\u793a\u3059\u5b8c\u5168\u4e8c\u5206\u6728\u3067\u306f\u30012\u3064\u306e\u30ce\u30fc\u30c9\u3092\u633f\u5165\u3057\u305f\u5f8c\u3001\u6728\u304c\u5de6\u306b\u5927\u304d\u304f\u50be\u304d\u3001\u691c\u7d22\u64cd\u4f5c\u306e\u6642\u9593\u8a08\u7b97\u91cf\u3082\u60aa\u5316\u3057\u307e\u3059\u3002

\u56f3 7-25 \u00a0 \u30ce\u30fc\u30c9\u633f\u5165\u5f8c\u306eAVL\u6728\u306e\u9000\u5316

1962\u5e74\u3001G. M. Adelson-Velsky\u3068E. M. Landis\u304c\u8ad6\u6587\u300cAn algorithm for the organization of information\u300d\u3067AVL\u6728\u3092\u63d0\u6848\u3057\u307e\u3057\u305f\u3002\u3053\u306e\u8ad6\u6587\u3067\u306f\u3001\u30ce\u30fc\u30c9\u306e\u7d99\u7d9a\u7684\u306a\u8ffd\u52a0\u3068\u524a\u9664\u306e\u5f8c\u3082AVL\u6728\u304c\u9000\u5316\u3057\u306a\u3044\u3053\u3068\u3092\u4fdd\u8a3c\u3059\u308b\u4e00\u9023\u306e\u64cd\u4f5c\u306b\u3064\u3044\u3066\u8a73\u8ff0\u3057\u3001\u3055\u307e\u3056\u307e\u306a\u64cd\u4f5c\u306e\u6642\u9593\u8a08\u7b97\u91cf\u3092\\(O(\\log n)\\)\u30ec\u30d9\u30eb\u306b\u7dad\u6301\u3057\u307e\u3057\u305f\u3002\u3064\u307e\u308a\u3001\u983b\u7e41\u306a\u8ffd\u52a0\u3001\u524a\u9664\u3001\u691c\u7d22\u3001\u5909\u66f4\u304c\u5fc5\u8981\u306a\u30b7\u30ca\u30ea\u30aa\u3067\u3001AVL\u6728\u306f\u5e38\u306b\u52b9\u7387\u7684\u306a\u30c7\u30fc\u30bf\u64cd\u4f5c\u6027\u80fd\u3092\u7dad\u6301\u3067\u304d\u3001\u5927\u304d\u306a\u5fdc\u7528\u4fa1\u5024\u304c\u3042\u308a\u307e\u3059\u3002

"},{"location":"chapter_tree/avl_tree/#751-avl","title":"7.5.1 \u00a0 AVL\u6728\u306e\u4e00\u822c\u7684\u306a\u7528\u8a9e","text":"

AVL\u6728\u306f\u4e8c\u5206\u63a2\u7d22\u6728\u3067\u3042\u308a\u304b\u3064\u5e73\u8861\u4e8c\u5206\u6728\u3067\u3082\u3042\u308a\u3001\u3053\u308c\u30892\u3064\u306e\u7a2e\u985e\u306e\u4e8c\u5206\u6728\u306e\u3059\u3079\u3066\u306e\u6027\u8cea\u3092\u6e80\u305f\u3057\u3066\u3044\u308b\u305f\u3081\u3001\u5e73\u8861\u4e8c\u5206\u63a2\u7d22\u6728\u3067\u3059\u3002

"},{"location":"chapter_tree/avl_tree/#1","title":"1. \u00a0 \u30ce\u30fc\u30c9\u306e\u9ad8\u3055","text":"

AVL\u6728\u306b\u95a2\u9023\u3059\u308b\u64cd\u4f5c\u3067\u306f\u30ce\u30fc\u30c9\u306e\u9ad8\u3055\u3092\u53d6\u5f97\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u305f\u3081\u3001\u30ce\u30fc\u30c9\u30af\u30e9\u30b9\u306bheight\u5909\u6570\u3092\u8ffd\u52a0\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby
class TreeNode:\n    \"\"\"AVL\u6728\u30ce\u30fc\u30c9\"\"\"\n    def __init__(self, val: int):\n        self.val: int = val                 # \u30ce\u30fc\u30c9\u5024\n        self.height: int = 0                # \u30ce\u30fc\u30c9\u306e\u9ad8\u3055\n        self.left: TreeNode | None = None   # \u5de6\u306e\u5b50\u3078\u306e\u53c2\u7167\n        self.right: TreeNode | None = None  # \u53f3\u306e\u5b50\u3078\u306e\u53c2\u7167\n
/* AVL\u6728\u30ce\u30fc\u30c9 */\nstruct TreeNode {\n    int val{};          // \u30ce\u30fc\u30c9\u5024\n    int height = 0;     // \u30ce\u30fc\u30c9\u306e\u9ad8\u3055\n    TreeNode *left{};   // \u5de6\u306e\u5b50\n    TreeNode *right{};  // \u53f3\u306e\u5b50\n    TreeNode() = default;\n    explicit TreeNode(int x) : val(x){}\n};\n
/* AVL\u6728\u30ce\u30fc\u30c9 */\nclass TreeNode {\n    public int val;        // \u30ce\u30fc\u30c9\u5024\n    public int height;     // \u30ce\u30fc\u30c9\u306e\u9ad8\u3055\n    public TreeNode left;  // \u5de6\u306e\u5b50\n    public TreeNode right; // \u53f3\u306e\u5b50\n    public TreeNode(int x) { val = x; }\n}\n
/* AVL\u6728\u30ce\u30fc\u30c9 */\nclass TreeNode(int? x) {\n    public int? val = x;    // \u30ce\u30fc\u30c9\u5024\n    public int height;      // \u30ce\u30fc\u30c9\u306e\u9ad8\u3055\n    public TreeNode? left;  // \u5de6\u306e\u5b50\u3078\u306e\u53c2\u7167\n    public TreeNode? right; // \u53f3\u306e\u5b50\u3078\u306e\u53c2\u7167\n}\n
/* AVL\u6728\u30ce\u30fc\u30c9 */\ntype TreeNode struct {\n    Val    int       // \u30ce\u30fc\u30c9\u5024\n    Height int       // \u30ce\u30fc\u30c9\u306e\u9ad8\u3055\n    Left   *TreeNode // \u5de6\u306e\u5b50\u3078\u306e\u53c2\u7167\n    Right  *TreeNode // \u53f3\u306e\u5b50\u3078\u306e\u53c2\u7167\n}\n
/* AVL\u6728\u30ce\u30fc\u30c9 */\nclass TreeNode {\n    var val: Int // \u30ce\u30fc\u30c9\u5024\n    var height: Int // \u30ce\u30fc\u30c9\u306e\u9ad8\u3055\n    var left: TreeNode? // \u5de6\u306e\u5b50\n    var right: TreeNode? // \u53f3\u306e\u5b50\n\n    init(x: Int) {\n        val = x\n        height = 0\n    }\n}\n
/* AVL\u6728\u30ce\u30fc\u30c9 */\nclass TreeNode {\n    val; // \u30ce\u30fc\u30c9\u5024\n    height; // \u30ce\u30fc\u30c9\u306e\u9ad8\u3055\n    left; // \u5de6\u306e\u5b50\u30dd\u30a4\u30f3\u30bf\n    right; // \u53f3\u306e\u5b50\u30dd\u30a4\u30f3\u30bf\n    constructor(val, left, right, height) {\n        this.val = val === undefined ? 0 : val;\n        this.height = height === undefined ? 0 : height;\n        this.left = left === undefined ? null : left;\n        this.right = right === undefined ? null : right;\n    }\n}\n
/* AVL\u6728\u30ce\u30fc\u30c9 */\nclass TreeNode {\n    val: number;            // \u30ce\u30fc\u30c9\u5024\n    height: number;         // \u30ce\u30fc\u30c9\u306e\u9ad8\u3055\n    left: TreeNode | null;  // \u5de6\u306e\u5b50\u30dd\u30a4\u30f3\u30bf\n    right: TreeNode | null; // \u53f3\u306e\u5b50\u30dd\u30a4\u30f3\u30bf\n    constructor(val?: number, height?: number, left?: TreeNode | null, right?: TreeNode | null) {\n        this.val = val === undefined ? 0 : val;\n        this.height = height === undefined ? 0 : height;\n        this.left = left === undefined ? null : left;\n        this.right = right === undefined ? null : right;\n    }\n}\n
/* AVL\u6728\u30ce\u30fc\u30c9 */\nclass TreeNode {\n  int val;         // \u30ce\u30fc\u30c9\u5024\n  int height;      // \u30ce\u30fc\u30c9\u306e\u9ad8\u3055\n  TreeNode? left;  // \u5de6\u306e\u5b50\n  TreeNode? right; // \u53f3\u306e\u5b50\n  TreeNode(this.val, [this.height = 0, this.left, this.right]);\n}\n
use std::rc::Rc;\nuse std::cell::RefCell;\n\n/* AVL\u6728\u30ce\u30fc\u30c9 */\nstruct TreeNode {\n    val: i32,                               // \u30ce\u30fc\u30c9\u5024\n    height: i32,                            // \u30ce\u30fc\u30c9\u306e\u9ad8\u3055\n    left: Option<Rc<RefCell<TreeNode>>>,    // \u5de6\u306e\u5b50\n    right: Option<Rc<RefCell<TreeNode>>>,   // \u53f3\u306e\u5b50\n}\n\nimpl TreeNode {\n    /* \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf */\n    fn new(val: i32) -> Rc<RefCell<Self>> {\n        Rc::new(RefCell::new(Self {\n            val,\n            height: 0,\n            left: None,\n            right: None\n        }))\n    }\n}\n
/* AVL\u6728\u30ce\u30fc\u30c9 */\nTreeNode struct TreeNode {\n    int val;\n    int height;\n    struct TreeNode *left;\n    struct TreeNode *right;\n} TreeNode;\n\n/* \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf */\nTreeNode *newTreeNode(int val) {\n    TreeNode *node;\n\n    node = (TreeNode *)malloc(sizeof(TreeNode));\n    node->val = val;\n    node->height = 0;\n    node->left = NULL;\n    node->right = NULL;\n    return node;\n}\n
/* AVL\u6728\u30ce\u30fc\u30c9 */\nclass TreeNode(val _val: Int) {  // \u30ce\u30fc\u30c9\u5024\n    val height: Int = 0          // \u30ce\u30fc\u30c9\u306e\u9ad8\u3055\n    val left: TreeNode? = null   // \u5de6\u306e\u5b50\n    val right: TreeNode? = null  // \u53f3\u306e\u5b50\n}\n
\n

\u300c\u30ce\u30fc\u30c9\u306e\u9ad8\u3055\u300d\u3068\u306f\u3001\u305d\u306e\u30ce\u30fc\u30c9\u304b\u3089\u6700\u3082\u9060\u3044\u8449\u30ce\u30fc\u30c9\u307e\u3067\u306e\u8ddd\u96e2\u3001\u3064\u307e\u308a\u901a\u904e\u3059\u308b\u300c\u8fba\u300d\u306e\u6570\u3092\u6307\u3057\u307e\u3059\u3002\u91cd\u8981\u306a\u306e\u306f\u3001\u8449\u30ce\u30fc\u30c9\u306e\u9ad8\u3055\u306f\\(0\\)\u3067\u3001null\u30ce\u30fc\u30c9\u306e\u9ad8\u3055\u306f\\(-1\\)\u3067\u3042\u308b\u3053\u3068\u3067\u3059\u3002\u30ce\u30fc\u30c9\u306e\u9ad8\u3055\u3092\u53d6\u5f97\u3057\u3001\u66f4\u65b0\u3059\u308b\u305f\u3081\u306e2\u3064\u306e\u30e6\u30fc\u30c6\u30a3\u30ea\u30c6\u30a3\u95a2\u6570\u3092\u4f5c\u6210\u3057\u307e\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby avl_tree.py
def height(self, node: TreeNode | None) -> int:\n    \"\"\"\u30ce\u30fc\u30c9\u306e\u9ad8\u3055\u3092\u53d6\u5f97\"\"\"\n    # \u7a7a\u30ce\u30fc\u30c9\u306e\u9ad8\u3055\u306f-1\u3001\u8449\u30ce\u30fc\u30c9\u306e\u9ad8\u3055\u306f0\n    if node is not None:\n        return node.height\n    return -1\n\ndef update_height(self, node: TreeNode | None):\n    \"\"\"\u30ce\u30fc\u30c9\u306e\u9ad8\u3055\u3092\u66f4\u65b0\"\"\"\n    # \u30ce\u30fc\u30c9\u306e\u9ad8\u3055 = \u6700\u3082\u9ad8\u3044\u90e8\u5206\u6728\u306e\u9ad8\u3055 + 1\n    node.height = max([self.height(node.left), self.height(node.right)]) + 1\n
avl_tree.cpp
/* \u30ce\u30fc\u30c9\u306e\u9ad8\u3055\u3092\u53d6\u5f97 */\nint height(TreeNode *node) {\n    // \u7a7a\u30ce\u30fc\u30c9\u306e\u9ad8\u3055\u306f-1\u3001\u8449\u30ce\u30fc\u30c9\u306e\u9ad8\u3055\u306f0\n    return node == nullptr ? -1 : node->height;\n}\n\n/* \u30ce\u30fc\u30c9\u306e\u9ad8\u3055\u3092\u66f4\u65b0 */\nvoid updateHeight(TreeNode *node) {\n    // \u30ce\u30fc\u30c9\u306e\u9ad8\u3055 = \u6700\u3082\u9ad8\u3044\u90e8\u5206\u6728\u306e\u9ad8\u3055 + 1\n    node->height = max(height(node->left), height(node->right)) + 1;\n}\n
avl_tree.java
/* \u30ce\u30fc\u30c9\u306e\u9ad8\u3055\u3092\u53d6\u5f97 */\nint height(TreeNode node) {\n    // \u7a7a\u30ce\u30fc\u30c9\u306e\u9ad8\u3055\u306f -1\u3001\u8449\u30ce\u30fc\u30c9\u306e\u9ad8\u3055\u306f 0\n    return node == null ? -1 : node.height;\n}\n\n/* \u30ce\u30fc\u30c9\u306e\u9ad8\u3055\u3092\u66f4\u65b0 */\nvoid updateHeight(TreeNode node) {\n    // \u30ce\u30fc\u30c9\u306e\u9ad8\u3055\u306f\u6700\u3082\u9ad8\u3044\u90e8\u5206\u6728\u306e\u9ad8\u3055 + 1\n    node.height = Math.max(height(node.left), height(node.right)) + 1;\n}\n
avl_tree.cs
[class]{AVLTree}-[func]{Height}\n\n[class]{AVLTree}-[func]{UpdateHeight}\n
avl_tree.go
[class]{aVLTree}-[func]{height}\n\n[class]{aVLTree}-[func]{updateHeight}\n
avl_tree.swift
[class]{AVLTree}-[func]{height}\n\n[class]{AVLTree}-[func]{updateHeight}\n
avl_tree.js
[class]{AVLTree}-[func]{height}\n\n[class]{AVLTree}-[func]{updateHeight}\n
avl_tree.ts
[class]{AVLTree}-[func]{height}\n\n[class]{AVLTree}-[func]{updateHeight}\n
avl_tree.dart
[class]{AVLTree}-[func]{height}\n\n[class]{AVLTree}-[func]{updateHeight}\n
avl_tree.rs
[class]{AVLTree}-[func]{height}\n\n[class]{AVLTree}-[func]{update_height}\n
avl_tree.c
[class]{}-[func]{height}\n\n[class]{}-[func]{updateHeight}\n
avl_tree.kt
[class]{AVLTree}-[func]{height}\n\n[class]{AVLTree}-[func]{updateHeight}\n
avl_tree.rb
[class]{AVLTree}-[func]{height}\n\n[class]{AVLTree}-[func]{update_height}\n
"},{"location":"chapter_tree/avl_tree/#2","title":"2. \u00a0 \u30ce\u30fc\u30c9\u306e\u5e73\u8861\u56e0\u5b50","text":"

\u30ce\u30fc\u30c9\u306e\u5e73\u8861\u56e0\u5b50\u306f\u3001\u305d\u306e\u30ce\u30fc\u30c9\u306e\u5de6\u90e8\u5206\u6728\u306e\u9ad8\u3055\u304b\u3089\u53f3\u90e8\u5206\u6728\u306e\u9ad8\u3055\u3092\u5f15\u3044\u305f\u5024\u3068\u3057\u3066\u5b9a\u7fa9\u3055\u308c\u3001null\u30ce\u30fc\u30c9\u306e\u5e73\u8861\u56e0\u5b50\u306f\\(0\\)\u3068\u3057\u3066\u5b9a\u7fa9\u3055\u308c\u307e\u3059\u3002\u5f8c\u3067\u4f7f\u3044\u3084\u3059\u304f\u3059\u308b\u305f\u3081\u3001\u30ce\u30fc\u30c9\u306e\u5e73\u8861\u56e0\u5b50\u3092\u53d6\u5f97\u3059\u308b\u6a5f\u80fd\u3082\u95a2\u6570\u306b\u30ab\u30d7\u30bb\u30eb\u5316\u3057\u307e\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby avl_tree.py
def balance_factor(self, node: TreeNode | None) -> int:\n    \"\"\"\u30d0\u30e9\u30f3\u30b9\u56e0\u5b50\u3092\u53d6\u5f97\"\"\"\n    # \u7a7a\u30ce\u30fc\u30c9\u306e\u30d0\u30e9\u30f3\u30b9\u56e0\u5b50\u306f0\n    if node is None:\n        return 0\n    # \u30ce\u30fc\u30c9\u306e\u30d0\u30e9\u30f3\u30b9\u56e0\u5b50 = \u5de6\u90e8\u5206\u6728\u306e\u9ad8\u3055 - \u53f3\u90e8\u5206\u6728\u306e\u9ad8\u3055\n    return self.height(node.left) - self.height(node.right)\n
avl_tree.cpp
/* \u5e73\u8861\u56e0\u5b50\u3092\u53d6\u5f97 */\nint balanceFactor(TreeNode *node) {\n    // \u7a7a\u30ce\u30fc\u30c9\u306e\u5e73\u8861\u56e0\u5b50\u306f0\n    if (node == nullptr)\n        return 0;\n    // \u30ce\u30fc\u30c9\u306e\u5e73\u8861\u56e0\u5b50 = \u5de6\u90e8\u5206\u6728\u306e\u9ad8\u3055 - \u53f3\u90e8\u5206\u6728\u306e\u9ad8\u3055\n    return height(node->left) - height(node->right);\n}\n
avl_tree.java
/* \u5e73\u8861\u56e0\u5b50\u3092\u53d6\u5f97 */\nint balanceFactor(TreeNode node) {\n    // \u7a7a\u30ce\u30fc\u30c9\u306e\u5e73\u8861\u56e0\u5b50\u306f 0\n    if (node == null)\n        return 0;\n    // \u30ce\u30fc\u30c9\u306e\u5e73\u8861\u56e0\u5b50 = \u5de6\u90e8\u5206\u6728\u306e\u9ad8\u3055 - \u53f3\u90e8\u5206\u6728\u306e\u9ad8\u3055\n    return height(node.left) - height(node.right);\n}\n
avl_tree.cs
[class]{AVLTree}-[func]{BalanceFactor}\n
avl_tree.go
[class]{aVLTree}-[func]{balanceFactor}\n
avl_tree.swift
[class]{AVLTree}-[func]{balanceFactor}\n
avl_tree.js
[class]{AVLTree}-[func]{balanceFactor}\n
avl_tree.ts
[class]{AVLTree}-[func]{balanceFactor}\n
avl_tree.dart
[class]{AVLTree}-[func]{balanceFactor}\n
avl_tree.rs
[class]{AVLTree}-[func]{balance_factor}\n
avl_tree.c
[class]{}-[func]{balanceFactor}\n
avl_tree.kt
[class]{AVLTree}-[func]{balanceFactor}\n
avl_tree.rb
[class]{AVLTree}-[func]{balance_factor}\n

Tip

\u5e73\u8861\u56e0\u5b50\u3092\\(f\\)\u3068\u3059\u308b\u3068\u3001AVL\u6728\u306e\u4efb\u610f\u306e\u30ce\u30fc\u30c9\u306e\u5e73\u8861\u56e0\u5b50\u306f\\(-1 \\le f \\le 1\\)\u3092\u6e80\u305f\u3057\u307e\u3059\u3002

"},{"location":"chapter_tree/avl_tree/#752-avl","title":"7.5.2 \u00a0 AVL\u6728\u306e\u56de\u8ee2","text":"

AVL\u6728\u306e\u7279\u5fb4\u7684\u306a\u6a5f\u80fd\u306f\u300c\u56de\u8ee2\u300d\u64cd\u4f5c\u3067\u3001\u3053\u308c\u306f\u4e8c\u5206\u6728\u306e\u4e2d\u9806\u63a2\u7d22\u30b7\u30fc\u30b1\u30f3\u30b9\u306b\u5f71\u97ff\u3092\u4e0e\u3048\u308b\u3053\u3068\u306a\u304f\u3001\u4e0d\u5e73\u8861\u306a\u30ce\u30fc\u30c9\u306e\u30d0\u30e9\u30f3\u30b9\u3092\u56de\u5fa9\u3067\u304d\u307e\u3059\u3002\u3064\u307e\u308a\u3001\u56de\u8ee2\u64cd\u4f5c\u306f\u300c\u4e8c\u5206\u63a2\u7d22\u6728\u300d\u306e\u6027\u8cea\u3092\u7dad\u6301\u3057\u306a\u304c\u3089\u3001\u6728\u3092\u300c\u5e73\u8861\u4e8c\u5206\u6728\u300d\u306b\u623b\u3059\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

\u7d76\u5bfe\u5e73\u8861\u56e0\u5b50\u304c\\(> 1\\)\u306e\u30ce\u30fc\u30c9\u3092\u300c\u4e0d\u5e73\u8861\u30ce\u30fc\u30c9\u300d\u3068\u547c\u3073\u307e\u3059\u3002\u4e0d\u5e73\u8861\u306e\u30bf\u30a4\u30d7\u306b\u5fdc\u3058\u3066\u30014\u7a2e\u985e\u306e\u56de\u8ee2\u304c\u3042\u308a\u307e\u3059\uff1a\u53f3\u56de\u8ee2\u3001\u5de6\u56de\u8ee2\u3001\u53f3\u5de6\u56de\u8ee2\u3001\u5de6\u53f3\u56de\u8ee2\u3067\u3059\u3002\u4ee5\u4e0b\u3001\u3053\u308c\u3089\u306e\u56de\u8ee2\u64cd\u4f5c\u306b\u3064\u3044\u3066\u8a73\u3057\u304f\u8aac\u660e\u3057\u307e\u3059\u3002

"},{"location":"chapter_tree/avl_tree/#1_1","title":"1. \u00a0 \u53f3\u56de\u8ee2","text":"

\u4e0b\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u4e8c\u5206\u6728\u3067\u4e0b\u304b\u3089\u4e0a\u3078\u306e\u6700\u521d\u306e\u4e0d\u5e73\u8861\u30ce\u30fc\u30c9\u306f\u300c\u30ce\u30fc\u30c93\u300d\u3067\u3059\u3002\u3053\u306e\u4e0d\u5e73\u8861\u30ce\u30fc\u30c9\u3092\u6839\u3068\u3059\u308b\u90e8\u5206\u6728\u306b\u7126\u70b9\u3092\u5f53\u3066\u3001\u3053\u308c\u3092node\u3068\u3057\u3001\u305d\u306e\u5de6\u306e\u5b50\u3092child\u3068\u3057\u3066\u3001\u300c\u53f3\u56de\u8ee2\u300d\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002\u53f3\u56de\u8ee2\u5f8c\u3001\u90e8\u5206\u6728\u306f\u518d\u3073\u30d0\u30e9\u30f3\u30b9\u304c\u53d6\u308c\u3001\u540c\u6642\u306b\u4e8c\u5206\u63a2\u7d22\u6728\u306e\u6027\u8cea\u3082\u7dad\u6301\u3055\u308c\u307e\u3059\u3002

<1><2><3><4>

\u56f3 7-26 \u00a0 \u53f3\u56de\u8ee2\u306e\u624b\u9806

\u4e0b\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001child\u30ce\u30fc\u30c9\u306b\u53f3\u306e\u5b50\uff08grand_child\u3068\u8868\u8a18\uff09\u304c\u3042\u308b\u5834\u5408\u3001\u53f3\u56de\u8ee2\u3067\u624b\u9806\u3092\u8ffd\u52a0\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\uff1agrand_child\u3092node\u306e\u5de6\u306e\u5b50\u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002

\u56f3 7-27 \u00a0 grand_child\u304c\u3042\u308b\u53f3\u56de\u8ee2

\u300c\u53f3\u56de\u8ee2\u300d\u306f\u6bd4\u55a9\u7684\u306a\u7528\u8a9e\u3067\u3001\u5b9f\u969b\u306b\u306f\u30ce\u30fc\u30c9\u30dd\u30a4\u30f3\u30bf\u3092\u5909\u66f4\u3059\u308b\u3053\u3068\u3067\u5b9f\u73fe\u3055\u308c\u307e\u3059\u3002\u4ee5\u4e0b\u306e\u30b3\u30fc\u30c9\u3067\u793a\u3055\u308c\u307e\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby avl_tree.py
def right_rotate(self, node: TreeNode | None) -> TreeNode | None:\n    \"\"\"\u53f3\u56de\u8ee2\u64cd\u4f5c\"\"\"\n    child = node.left\n    grand_child = child.right\n    # child\u3092\u4e2d\u5fc3\u306bnode\u3092\u53f3\u306b\u56de\u8ee2\n    child.right = node\n    node.left = grand_child\n    # \u30ce\u30fc\u30c9\u306e\u9ad8\u3055\u3092\u66f4\u65b0\n    self.update_height(node)\n    self.update_height(child)\n    # \u56de\u8ee2\u5f8c\u306e\u90e8\u5206\u6728\u306e\u30eb\u30fc\u30c8\u3092\u8fd4\u3059\n    return child\n
avl_tree.cpp
/* \u53f3\u56de\u8ee2\u64cd\u4f5c */\nTreeNode *rightRotate(TreeNode *node) {\n    TreeNode *child = node->left;\n    TreeNode *grandChild = child->right;\n    // child\u3092\u4e2d\u5fc3\u306bnode\u3092\u53f3\u306b\u56de\u8ee2\n    child->right = node;\n    node->left = grandChild;\n    // \u30ce\u30fc\u30c9\u306e\u9ad8\u3055\u3092\u66f4\u65b0\n    updateHeight(node);\n    updateHeight(child);\n    // \u56de\u8ee2\u5f8c\u306e\u90e8\u5206\u6728\u306e\u30eb\u30fc\u30c8\u3092\u8fd4\u3059\n    return child;\n}\n
avl_tree.java
/* \u53f3\u56de\u8ee2\u64cd\u4f5c */\nTreeNode rightRotate(TreeNode node) {\n    TreeNode child = node.left;\n    TreeNode grandChild = child.right;\n    // child \u3092\u8ef8\u3068\u3057\u3066 node \u3092\u53f3\u306b\u56de\u8ee2\n    child.right = node;\n    node.left = grandChild;\n    // \u30ce\u30fc\u30c9\u306e\u9ad8\u3055\u3092\u66f4\u65b0\n    updateHeight(node);\n    updateHeight(child);\n    // \u56de\u8ee2\u5f8c\u306e\u90e8\u5206\u6728\u306e\u6839\u3092\u8fd4\u3059\n    return child;\n}\n
avl_tree.cs
[class]{AVLTree}-[func]{RightRotate}\n
avl_tree.go
[class]{aVLTree}-[func]{rightRotate}\n
avl_tree.swift
[class]{AVLTree}-[func]{rightRotate}\n
avl_tree.js
[class]{AVLTree}-[func]{rightRotate}\n
avl_tree.ts
[class]{AVLTree}-[func]{rightRotate}\n
avl_tree.dart
[class]{AVLTree}-[func]{rightRotate}\n
avl_tree.rs
[class]{AVLTree}-[func]{right_rotate}\n
avl_tree.c
[class]{}-[func]{rightRotate}\n
avl_tree.kt
[class]{AVLTree}-[func]{rightRotate}\n
avl_tree.rb
[class]{AVLTree}-[func]{right_rotate}\n
"},{"location":"chapter_tree/avl_tree/#2_1","title":"2. \u00a0 \u5de6\u56de\u8ee2","text":"

\u5bfe\u5fdc\u3057\u3066\u3001\u4e0a\u8a18\u306e\u4e0d\u5e73\u8861\u4e8c\u5206\u6728\u306e\u300c\u93e1\u50cf\u300d\u3092\u8003\u616e\u3059\u308b\u3068\u3001\u4e0b\u56f3\u306b\u793a\u3059\u300c\u5de6\u56de\u8ee2\u300d\u64cd\u4f5c\u3092\u5b9f\u884c\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

\u56f3 7-28 \u00a0 \u5de6\u56de\u8ee2\u64cd\u4f5c

\u540c\u69d8\u306b\u3001\u4e0b\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001child\u30ce\u30fc\u30c9\u306b\u5de6\u306e\u5b50\uff08grand_child\u3068\u8868\u8a18\uff09\u304c\u3042\u308b\u5834\u5408\u3001\u5de6\u56de\u8ee2\u3067\u624b\u9806\u3092\u8ffd\u52a0\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\uff1agrand_child\u3092node\u306e\u53f3\u306e\u5b50\u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002

\u56f3 7-29 \u00a0 grand_child\u304c\u3042\u308b\u5de6\u56de\u8ee2

**\u53f3\u56de\u8ee2\u3068\u5de6\u56de\u8ee2\u306e\u64cd\u4f5c\u306f\u8ad6\u7406\u7684\u306b\u5bfe\u79f0\u3067\u3042\u308a\u30012\u3064\u306e\u5bfe\u79f0\u7684\u306a\u4e0d\u5e73\u8861\u30bf\u30a4\u30d7\u3092\u89e3\u6c7a\u3057\u307e\u3059**\u3053\u3068\u304c\u89b3\u5bdf\u3067\u304d\u307e\u3059\u3002\u5bfe\u79f0\u6027\u306b\u57fa\u3065\u3044\u3066\u3001\u53f3\u56de\u8ee2\u306e\u5b9f\u88c5\u30b3\u30fc\u30c9\u3067\u3059\u3079\u3066\u306eleft\u3092right\u306b\u3001\u3059\u3079\u3066\u306eright\u3092left\u306b\u7f6e\u304d\u63db\u3048\u308b\u3053\u3068\u3067\u3001\u5de6\u56de\u8ee2\u306e\u5b9f\u88c5\u30b3\u30fc\u30c9\u3092\u5f97\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby avl_tree.py
def left_rotate(self, node: TreeNode | None) -> TreeNode | None:\n    \"\"\"\u5de6\u56de\u8ee2\u64cd\u4f5c\"\"\"\n    child = node.right\n    grand_child = child.left\n    # child\u3092\u4e2d\u5fc3\u306bnode\u3092\u5de6\u306b\u56de\u8ee2\n    child.left = node\n    node.right = grand_child\n    # \u30ce\u30fc\u30c9\u306e\u9ad8\u3055\u3092\u66f4\u65b0\n    self.update_height(node)\n    self.update_height(child)\n    # \u56de\u8ee2\u5f8c\u306e\u90e8\u5206\u6728\u306e\u30eb\u30fc\u30c8\u3092\u8fd4\u3059\n    return child\n
avl_tree.cpp
/* \u5de6\u56de\u8ee2\u64cd\u4f5c */\nTreeNode *leftRotate(TreeNode *node) {\n    TreeNode *child = node->right;\n    TreeNode *grandChild = child->left;\n    // child\u3092\u4e2d\u5fc3\u306bnode\u3092\u5de6\u306b\u56de\u8ee2\n    child->left = node;\n    node->right = grandChild;\n    // \u30ce\u30fc\u30c9\u306e\u9ad8\u3055\u3092\u66f4\u65b0\n    updateHeight(node);\n    updateHeight(child);\n    // \u56de\u8ee2\u5f8c\u306e\u90e8\u5206\u6728\u306e\u30eb\u30fc\u30c8\u3092\u8fd4\u3059\n    return child;\n}\n
avl_tree.java
/* \u5de6\u56de\u8ee2\u64cd\u4f5c */\nTreeNode leftRotate(TreeNode node) {\n    TreeNode child = node.right;\n    TreeNode grandChild = child.left;\n    // child \u3092\u8ef8\u3068\u3057\u3066 node \u3092\u5de6\u306b\u56de\u8ee2\n    child.left = node;\n    node.right = grandChild;\n    // \u30ce\u30fc\u30c9\u306e\u9ad8\u3055\u3092\u66f4\u65b0\n    updateHeight(node);\n    updateHeight(child);\n    // \u56de\u8ee2\u5f8c\u306e\u90e8\u5206\u6728\u306e\u6839\u3092\u8fd4\u3059\n    return child;\n}\n
avl_tree.cs
[class]{AVLTree}-[func]{LeftRotate}\n
avl_tree.go
[class]{aVLTree}-[func]{leftRotate}\n
avl_tree.swift
[class]{AVLTree}-[func]{leftRotate}\n
avl_tree.js
[class]{AVLTree}-[func]{leftRotate}\n
avl_tree.ts
[class]{AVLTree}-[func]{leftRotate}\n
avl_tree.dart
[class]{AVLTree}-[func]{leftRotate}\n
avl_tree.rs
[class]{AVLTree}-[func]{left_rotate}\n
avl_tree.c
[class]{}-[func]{leftRotate}\n
avl_tree.kt
[class]{AVLTree}-[func]{leftRotate}\n
avl_tree.rb
[class]{AVLTree}-[func]{left_rotate}\n
"},{"location":"chapter_tree/avl_tree/#3","title":"3. \u00a0 \u5de6\u53f3\u56de\u8ee2","text":"

\u4e0b\u56f3\u306b\u793a\u3059\u4e0d\u5e73\u8861\u30ce\u30fc\u30c93\u306e\u5834\u5408\u3001\u5de6\u56de\u8ee2\u307e\u305f\u306f\u53f3\u56de\u8ee2\u306e\u3044\u305a\u308c\u304b\u3060\u3051\u3067\u306f\u90e8\u5206\u6728\u306e\u30d0\u30e9\u30f3\u30b9\u3092\u56de\u5fa9\u3067\u304d\u307e\u305b\u3093\u3002\u3053\u306e\u5834\u5408\u3001\u307e\u305achild\u306b\u5bfe\u3057\u3066\u300c\u5de6\u56de\u8ee2\u300d\u3092\u5b9f\u884c\u3057\u3001\u6b21\u306bnode\u306b\u5bfe\u3057\u3066\u300c\u53f3\u56de\u8ee2\u300d\u3092\u5b9f\u884c\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

\u56f3 7-30 \u00a0 \u5de6\u53f3\u56de\u8ee2

"},{"location":"chapter_tree/avl_tree/#4","title":"4. \u00a0 \u53f3\u5de6\u56de\u8ee2","text":"

\u4e0b\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u4e0a\u8a18\u306e\u4e0d\u5e73\u8861\u4e8c\u5206\u6728\u306e\u93e1\u50cf\u30b1\u30fc\u30b9\u3067\u306f\u3001\u307e\u305achild\u306b\u5bfe\u3057\u3066\u300c\u53f3\u56de\u8ee2\u300d\u3092\u5b9f\u884c\u3057\u3001\u6b21\u306bnode\u306b\u5bfe\u3057\u3066\u300c\u5de6\u56de\u8ee2\u300d\u3092\u5b9f\u884c\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

\u56f3 7-31 \u00a0 \u53f3\u5de6\u56de\u8ee2

"},{"location":"chapter_tree/avl_tree/#5","title":"5. \u00a0 \u56de\u8ee2\u306e\u9078\u629e","text":"

\u4e0b\u56f3\u306b\u793a\u30594\u7a2e\u985e\u306e\u4e0d\u5e73\u8861\u306f\u3001\u305d\u308c\u305e\u308c\u4e0a\u8a18\u3067\u8aac\u660e\u3057\u305f\u30b1\u30fc\u30b9\u306b\u5bfe\u5fdc\u3057\u3001\u53f3\u56de\u8ee2\u3001\u5de6\u53f3\u56de\u8ee2\u3001\u53f3\u5de6\u56de\u8ee2\u3001\u5de6\u56de\u8ee2\u304c\u5fc5\u8981\u3067\u3059\u3002

\u56f3 7-32 \u00a0 AVL\u6728\u306e4\u3064\u306e\u56de\u8ee2\u30b1\u30fc\u30b9

\u4e0b\u8868\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u4e0d\u5e73\u8861\u30ce\u30fc\u30c9\u306e\u5e73\u8861\u56e0\u5b50\u3068\u305d\u306e\u9ad8\u3044\u5074\u306e\u5b50\u306e\u5e73\u8861\u56e0\u5b50\u306e\u7b26\u53f7\u3092\u5224\u65ad\u3059\u308b\u3053\u3068\u3067\u3001\u4e0d\u5e73\u8861\u30ce\u30fc\u30c9\u304c\u4e0a\u8a18\u306e\u3069\u306e\u30b1\u30fc\u30b9\u306b\u5c5e\u3059\u308b\u304b\u3092\u6c7a\u5b9a\u3057\u307e\u3059\u3002

\u8868 7-3 \u00a0 4\u3064\u306e\u56de\u8ee2\u30b1\u30fc\u30b9\u306e\u9078\u629e\u6761\u4ef6

\u4e0d\u5e73\u8861\u30ce\u30fc\u30c9\u306e\u5e73\u8861\u56e0\u5b50 \u5b50\u30ce\u30fc\u30c9\u306e\u5e73\u8861\u56e0\u5b50 \u4f7f\u7528\u3059\u308b\u56de\u8ee2\u65b9\u6cd5 \\(> 1\\)\uff08\u5de6\u306b\u50be\u3044\u305f\u6728\uff09 \\(\\geq 0\\) \u53f3\u56de\u8ee2 \\(> 1\\)\uff08\u5de6\u306b\u50be\u3044\u305f\u6728\uff09 \\(<0\\) \u5de6\u56de\u8ee2\u3057\u3066\u304b\u3089\u53f3\u56de\u8ee2 \\(< -1\\)\uff08\u53f3\u306b\u50be\u3044\u305f\u6728\uff09 \\(\\leq 0\\) \u5de6\u56de\u8ee2 \\(< -1\\)\uff08\u53f3\u306b\u50be\u3044\u305f\u6728\uff09 \\(>0\\) \u53f3\u56de\u8ee2\u3057\u3066\u304b\u3089\u5de6\u56de\u8ee2

\u4fbf\u5b9c\u4e0a\u3001\u56de\u8ee2\u64cd\u4f5c\u3092\u95a2\u6570\u306b\u30ab\u30d7\u30bb\u30eb\u5316\u3057\u307e\u3059\u3002\u3053\u306e\u95a2\u6570\u306b\u3088\u308a\u3001\u3055\u307e\u3056\u307e\u306a\u7a2e\u985e\u306e\u4e0d\u5e73\u8861\u306b\u5bfe\u3057\u3066\u56de\u8ee2\u3092\u5b9f\u884c\u3057\u3001\u4e0d\u5e73\u8861\u30ce\u30fc\u30c9\u306e\u30d0\u30e9\u30f3\u30b9\u3092\u56de\u5fa9\u3067\u304d\u307e\u3059\u3002\u30b3\u30fc\u30c9\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby avl_tree.py
def rotate(self, node: TreeNode | None) -> TreeNode | None:\n    \"\"\"\u56de\u8ee2\u64cd\u4f5c\u3092\u5b9f\u884c\u3057\u3066\u90e8\u5206\u6728\u306e\u30d0\u30e9\u30f3\u30b9\u3092\u5fa9\u5143\"\"\"\n    # node\u306e\u30d0\u30e9\u30f3\u30b9\u56e0\u5b50\u3092\u53d6\u5f97\n    balance_factor = self.balance_factor(node)\n    # \u5de6\u504f\u308a\u6728\n    if balance_factor > 1:\n        if self.balance_factor(node.left) >= 0:\n            # \u53f3\u56de\u8ee2\n            return self.right_rotate(node)\n        else:\n            # \u5de6\u56de\u8ee2\u3057\u3066\u304b\u3089\u53f3\u56de\u8ee2\n            node.left = self.left_rotate(node.left)\n            return self.right_rotate(node)\n    # \u53f3\u504f\u308a\u6728\n    elif balance_factor < -1:\n        if self.balance_factor(node.right) <= 0:\n            # \u5de6\u56de\u8ee2\n            return self.left_rotate(node)\n        else:\n            # \u53f3\u56de\u8ee2\u3057\u3066\u304b\u3089\u5de6\u56de\u8ee2\n            node.right = self.right_rotate(node.right)\n            return self.left_rotate(node)\n    # \u30d0\u30e9\u30f3\u30b9\u306e\u53d6\u308c\u305f\u6728\u3001\u56de\u8ee2\u4e0d\u8981\u3001\u623b\u308b\n    return node\n
avl_tree.cpp
/* \u56de\u8ee2\u64cd\u4f5c\u3092\u5b9f\u884c\u3057\u3066\u90e8\u5206\u6728\u306e\u5e73\u8861\u3092\u56de\u5fa9 */\nTreeNode *rotate(TreeNode *node) {\n    // node\u306e\u5e73\u8861\u56e0\u5b50\u3092\u53d6\u5f97\n    int _balanceFactor = balanceFactor(node);\n    // \u5de6\u306b\u50be\u3044\u305f\u6728\n    if (_balanceFactor > 1) {\n        if (balanceFactor(node->left) >= 0) {\n            // \u53f3\u56de\u8ee2\n            return rightRotate(node);\n        } else {\n            // \u5148\u306b\u5de6\u56de\u8ee2\u3001\u305d\u306e\u5f8c\u53f3\u56de\u8ee2\n            node->left = leftRotate(node->left);\n            return rightRotate(node);\n        }\n    }\n    // \u53f3\u306b\u50be\u3044\u305f\u6728\n    if (_balanceFactor < -1) {\n        if (balanceFactor(node->right) <= 0) {\n            // \u5de6\u56de\u8ee2\n            return leftRotate(node);\n        } else {\n            // \u5148\u306b\u53f3\u56de\u8ee2\u3001\u305d\u306e\u5f8c\u5de6\u56de\u8ee2\n            node->right = rightRotate(node->right);\n            return leftRotate(node);\n        }\n    }\n    // \u5e73\u8861\u306a\u6728\u3001\u56de\u8ee2\u4e0d\u8981\u3001\u305d\u306e\u307e\u307e\u623b\u308b\n    return node;\n}\n
avl_tree.java
/* \u56de\u8ee2\u64cd\u4f5c\u3092\u5b9f\u884c\u3057\u3066\u90e8\u5206\u6728\u306e\u5e73\u8861\u3092\u56de\u5fa9 */\nTreeNode rotate(TreeNode node) {\n    // node \u306e\u5e73\u8861\u56e0\u5b50\u3092\u53d6\u5f97\n    int balanceFactor = balanceFactor(node);\n    // \u5de6\u50be\u659c\u306e\u6728\n    if (balanceFactor > 1) {\n        if (balanceFactor(node.left) >= 0) {\n            // \u53f3\u56de\u8ee2\n            return rightRotate(node);\n        } else {\n            // \u5148\u306b\u5de6\u56de\u8ee2\u3001\u305d\u306e\u5f8c\u53f3\u56de\u8ee2\n            node.left = leftRotate(node.left);\n            return rightRotate(node);\n        }\n    }\n    // \u53f3\u50be\u659c\u306e\u6728\n    if (balanceFactor < -1) {\n        if (balanceFactor(node.right) <= 0) {\n            // \u5de6\u56de\u8ee2\n            return leftRotate(node);\n        } else {\n            // \u5148\u306b\u53f3\u56de\u8ee2\u3001\u305d\u306e\u5f8c\u5de6\u56de\u8ee2\n            node.right = rightRotate(node.right);\n            return leftRotate(node);\n        }\n    }\n    // \u5e73\u8861\u6728\u3001\u56de\u8ee2\u306f\u4e0d\u8981\u3001\u623b\u308b\n    return node;\n}\n
avl_tree.cs
[class]{AVLTree}-[func]{Rotate}\n
avl_tree.go
[class]{aVLTree}-[func]{rotate}\n
avl_tree.swift
[class]{AVLTree}-[func]{rotate}\n
avl_tree.js
[class]{AVLTree}-[func]{rotate}\n
avl_tree.ts
[class]{AVLTree}-[func]{rotate}\n
avl_tree.dart
[class]{AVLTree}-[func]{rotate}\n
avl_tree.rs
[class]{AVLTree}-[func]{rotate}\n
avl_tree.c
[class]{}-[func]{rotate}\n
avl_tree.kt
[class]{AVLTree}-[func]{rotate}\n
avl_tree.rb
[class]{AVLTree}-[func]{rotate}\n
"},{"location":"chapter_tree/avl_tree/#753-avl","title":"7.5.3 \u00a0 AVL\u6728\u306e\u4e00\u822c\u7684\u306a\u64cd\u4f5c","text":""},{"location":"chapter_tree/avl_tree/#1_2","title":"1. \u00a0 \u30ce\u30fc\u30c9\u306e\u633f\u5165","text":"

AVL\u6728\u306e\u30ce\u30fc\u30c9\u633f\u5165\u64cd\u4f5c\u306f\u4e8c\u5206\u63a2\u7d22\u6728\u306e\u305d\u308c\u3068\u4f3c\u3066\u3044\u307e\u3059\u3002\u552f\u4e00\u306e\u9055\u3044\u306f\u3001AVL\u6728\u3067\u30ce\u30fc\u30c9\u3092\u633f\u5165\u3057\u305f\u5f8c\u3001\u305d\u306e\u30ce\u30fc\u30c9\u304b\u3089\u6839\u30ce\u30fc\u30c9\u307e\u3067\u306e\u30d1\u30b9\u4e0a\u306b\u4e00\u9023\u306e\u4e0d\u5e73\u8861\u30ce\u30fc\u30c9\u304c\u73fe\u308c\u308b\u53ef\u80fd\u6027\u304c\u3042\u308b\u3053\u3068\u3067\u3059\u3002\u3057\u305f\u304c\u3063\u3066\u3001\u3053\u306e\u30ce\u30fc\u30c9\u304b\u3089\u59cb\u3081\u3066\u4e0a\u5411\u304d\u306b\u56de\u8ee2\u64cd\u4f5c\u3092\u5b9f\u884c\u3057\u3001\u3059\u3079\u3066\u306e\u4e0d\u5e73\u8861\u30ce\u30fc\u30c9\u306e\u30d0\u30e9\u30f3\u30b9\u3092\u56de\u5fa9\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u30b3\u30fc\u30c9\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby avl_tree.py
def insert(self, val):\n    \"\"\"\u30ce\u30fc\u30c9\u3092\u633f\u5165\"\"\"\n    self._root = self.insert_helper(self._root, val)\n\ndef insert_helper(self, node: TreeNode | None, val: int) -> TreeNode:\n    \"\"\"\u518d\u5e30\u7684\u306b\u30ce\u30fc\u30c9\u3092\u633f\u5165\uff08\u30d8\u30eb\u30d1\u30fc\u30e1\u30bd\u30c3\u30c9\uff09\"\"\"\n    if node is None:\n        return TreeNode(val)\n    # 1. \u633f\u5165\u4f4d\u7f6e\u3092\u898b\u3064\u3051\u3066\u30ce\u30fc\u30c9\u3092\u633f\u5165\n    if val < node.val:\n        node.left = self.insert_helper(node.left, val)\n    elif val > node.val:\n        node.right = self.insert_helper(node.right, val)\n    else:\n        # \u91cd\u8907\u30ce\u30fc\u30c9\u306f\u633f\u5165\u3057\u306a\u3044\u3001\u623b\u308b\n        return node\n    # \u30ce\u30fc\u30c9\u306e\u9ad8\u3055\u3092\u66f4\u65b0\n    self.update_height(node)\n    # 2. \u56de\u8ee2\u64cd\u4f5c\u3092\u5b9f\u884c\u3057\u3066\u90e8\u5206\u6728\u306e\u30d0\u30e9\u30f3\u30b9\u3092\u5fa9\u5143\n    return self.rotate(node)\n
avl_tree.cpp
/* \u30ce\u30fc\u30c9\u3092\u633f\u5165 */\nvoid insert(int val) {\n    root = insertHelper(root, val);\n}\n\n/* \u30ce\u30fc\u30c9\u3092\u518d\u5e30\u7684\u306b\u633f\u5165\uff08\u30d8\u30eb\u30d1\u30fc\u30e1\u30bd\u30c3\u30c9\uff09 */\nTreeNode *insertHelper(TreeNode *node, int val) {\n    if (node == nullptr)\n        return new TreeNode(val);\n    /* 1. \u633f\u5165\u4f4d\u7f6e\u3092\u898b\u3064\u3051\u3066\u30ce\u30fc\u30c9\u3092\u633f\u5165 */\n    if (val < node->val)\n        node->left = insertHelper(node->left, val);\n    else if (val > node->val)\n        node->right = insertHelper(node->right, val);\n    else\n        return node;    // \u91cd\u8907\u30ce\u30fc\u30c9\u306f\u633f\u5165\u3057\u306a\u3044\u3001\u305d\u306e\u307e\u307e\u623b\u308b\n    updateHeight(node); // \u30ce\u30fc\u30c9\u306e\u9ad8\u3055\u3092\u66f4\u65b0\n    /* 2. \u56de\u8ee2\u64cd\u4f5c\u3092\u5b9f\u884c\u3057\u3066\u90e8\u5206\u6728\u306e\u5e73\u8861\u3092\u56de\u5fa9 */\n    node = rotate(node);\n    // \u90e8\u5206\u6728\u306e\u30eb\u30fc\u30c8\u30ce\u30fc\u30c9\u3092\u8fd4\u3059\n    return node;\n}\n
avl_tree.java
/* \u30ce\u30fc\u30c9\u3092\u633f\u5165 */\nvoid insert(int val) {\n    root = insertHelper(root, val);\n}\n\n/* \u518d\u5e30\u7684\u306b\u30ce\u30fc\u30c9\u3092\u633f\u5165\uff08\u88dc\u52a9\u30e1\u30bd\u30c3\u30c9\uff09 */\nTreeNode insertHelper(TreeNode node, int val) {\n    if (node == null)\n        return new TreeNode(val);\n    /* 1. \u633f\u5165\u4f4d\u7f6e\u3092\u898b\u3064\u3051\u3066\u30ce\u30fc\u30c9\u3092\u633f\u5165 */\n    if (val < node.val)\n        node.left = insertHelper(node.left, val);\n    else if (val > node.val)\n        node.right = insertHelper(node.right, val);\n    else\n        return node; // \u91cd\u8907\u30ce\u30fc\u30c9\u306f\u633f\u5165\u3057\u306a\u3044\u3001\u623b\u308b\n    updateHeight(node); // \u30ce\u30fc\u30c9\u306e\u9ad8\u3055\u3092\u66f4\u65b0\n    /* 2. \u56de\u8ee2\u64cd\u4f5c\u3092\u5b9f\u884c\u3057\u3066\u90e8\u5206\u6728\u306e\u5e73\u8861\u3092\u56de\u5fa9 */\n    node = rotate(node);\n    // \u90e8\u5206\u6728\u306e\u6839\u30ce\u30fc\u30c9\u3092\u8fd4\u3059\n    return node;\n}\n
avl_tree.cs
[class]{AVLTree}-[func]{Insert}\n\n[class]{AVLTree}-[func]{InsertHelper}\n
avl_tree.go
[class]{aVLTree}-[func]{insert}\n\n[class]{aVLTree}-[func]{insertHelper}\n
avl_tree.swift
[class]{AVLTree}-[func]{insert}\n\n[class]{AVLTree}-[func]{insertHelper}\n
avl_tree.js
[class]{AVLTree}-[func]{insert}\n\n[class]{AVLTree}-[func]{insertHelper}\n
avl_tree.ts
[class]{AVLTree}-[func]{insert}\n\n[class]{AVLTree}-[func]{insertHelper}\n
avl_tree.dart
[class]{AVLTree}-[func]{insert}\n\n[class]{AVLTree}-[func]{insertHelper}\n
avl_tree.rs
[class]{AVLTree}-[func]{insert}\n\n[class]{AVLTree}-[func]{insert_helper}\n
avl_tree.c
[class]{AVLTree}-[func]{insert}\n\n[class]{}-[func]{insertHelper}\n
avl_tree.kt
[class]{AVLTree}-[func]{insert}\n\n[class]{AVLTree}-[func]{insertHelper}\n
avl_tree.rb
[class]{AVLTree}-[func]{insert}\n\n[class]{AVLTree}-[func]{insert_helper}\n
"},{"location":"chapter_tree/avl_tree/#2_2","title":"2. \u00a0 \u30ce\u30fc\u30c9\u306e\u524a\u9664","text":"

\u540c\u69d8\u306b\u3001\u4e8c\u5206\u63a2\u7d22\u6728\u3067\u306e\u30ce\u30fc\u30c9\u524a\u9664\u65b9\u6cd5\u306b\u57fa\u3065\u3044\u3066\u3001\u4e0b\u304b\u3089\u4e0a\u3078\u56de\u8ee2\u64cd\u4f5c\u3092\u5b9f\u884c\u3057\u3066\u3059\u3079\u3066\u306e\u4e0d\u5e73\u8861\u30ce\u30fc\u30c9\u306e\u30d0\u30e9\u30f3\u30b9\u3092\u56de\u5fa9\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u30b3\u30fc\u30c9\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby avl_tree.py
def remove(self, val: int):\n    \"\"\"\u30ce\u30fc\u30c9\u3092\u524a\u9664\"\"\"\n    self._root = self.remove_helper(self._root, val)\n\ndef remove_helper(self, node: TreeNode | None, val: int) -> TreeNode | None:\n    \"\"\"\u518d\u5e30\u7684\u306b\u30ce\u30fc\u30c9\u3092\u524a\u9664\uff08\u30d8\u30eb\u30d1\u30fc\u30e1\u30bd\u30c3\u30c9\uff09\"\"\"\n    if node is None:\n        return None\n    # 1. \u30ce\u30fc\u30c9\u3092\u898b\u3064\u3051\u3066\u524a\u9664\n    if val < node.val:\n        node.left = self.remove_helper(node.left, val)\n    elif val > node.val:\n        node.right = self.remove_helper(node.right, val)\n    else:\n        if node.left is None or node.right is None:\n            child = node.left or node.right\n            # \u5b50\u30ce\u30fc\u30c9\u6570 = 0\u3001\u30ce\u30fc\u30c9\u3092\u524a\u9664\u3057\u3066\u623b\u308b\n            if child is None:\n                return None\n            # \u5b50\u30ce\u30fc\u30c9\u6570 = 1\u3001\u30ce\u30fc\u30c9\u3092\u524a\u9664\n            else:\n                node = child\n        else:\n            # \u5b50\u30ce\u30fc\u30c9\u6570 = 2\u3001\u4e2d\u9806\u8d70\u67fb\u306e\u6b21\u306e\u30ce\u30fc\u30c9\u3092\u524a\u9664\u3057\u3001\u305d\u308c\u3067\u73fe\u5728\u306e\u30ce\u30fc\u30c9\u3092\u7f6e\u304d\u63db\u3048\n            temp = node.right\n            while temp.left is not None:\n                temp = temp.left\n            node.right = self.remove_helper(node.right, temp.val)\n            node.val = temp.val\n    # \u30ce\u30fc\u30c9\u306e\u9ad8\u3055\u3092\u66f4\u65b0\n    self.update_height(node)\n    # 2. \u56de\u8ee2\u64cd\u4f5c\u3092\u5b9f\u884c\u3057\u3066\u90e8\u5206\u6728\u306e\u30d0\u30e9\u30f3\u30b9\u3092\u5fa9\u5143\n    return self.rotate(node)\n
avl_tree.cpp
/* \u30ce\u30fc\u30c9\u3092\u524a\u9664 */\nvoid remove(int val) {\n    root = removeHelper(root, val);\n}\n\n/* \u30ce\u30fc\u30c9\u3092\u518d\u5e30\u7684\u306b\u524a\u9664\uff08\u30d8\u30eb\u30d1\u30fc\u30e1\u30bd\u30c3\u30c9\uff09 */\nTreeNode *removeHelper(TreeNode *node, int val) {\n    if (node == nullptr)\n        return nullptr;\n    /* 1. \u30ce\u30fc\u30c9\u3092\u898b\u3064\u3051\u3066\u524a\u9664 */\n    if (val < node->val)\n        node->left = removeHelper(node->left, val);\n    else if (val > node->val)\n        node->right = removeHelper(node->right, val);\n    else {\n        if (node->left == nullptr || node->right == nullptr) {\n            TreeNode *child = node->left != nullptr ? node->left : node->right;\n            // \u5b50\u30ce\u30fc\u30c9\u6570 = 0\u3001\u30ce\u30fc\u30c9\u3092\u524a\u9664\u3057\u3066\u623b\u308b\n            if (child == nullptr) {\n                delete node;\n                return nullptr;\n            }\n            // \u5b50\u30ce\u30fc\u30c9\u6570 = 1\u3001\u30ce\u30fc\u30c9\u3092\u524a\u9664\n            else {\n                delete node;\n                node = child;\n            }\n        } else {\n            // \u5b50\u30ce\u30fc\u30c9\u6570 = 2\u3001\u4e2d\u9806\u8d70\u67fb\u306e\u6b21\u306e\u30ce\u30fc\u30c9\u3092\u524a\u9664\u3057\u3001\u73fe\u5728\u306e\u30ce\u30fc\u30c9\u3068\u7f6e\u304d\u63db\u3048\u308b\n            TreeNode *temp = node->right;\n            while (temp->left != nullptr) {\n                temp = temp->left;\n            }\n            int tempVal = temp->val;\n            node->right = removeHelper(node->right, temp->val);\n            node->val = tempVal;\n        }\n    }\n    updateHeight(node); // \u30ce\u30fc\u30c9\u306e\u9ad8\u3055\u3092\u66f4\u65b0\n    /* 2. \u56de\u8ee2\u64cd\u4f5c\u3092\u5b9f\u884c\u3057\u3066\u90e8\u5206\u6728\u306e\u5e73\u8861\u3092\u56de\u5fa9 */\n    node = rotate(node);\n    // \u90e8\u5206\u6728\u306e\u30eb\u30fc\u30c8\u30ce\u30fc\u30c9\u3092\u8fd4\u3059\n    return node;\n}\n
avl_tree.java
/* \u30ce\u30fc\u30c9\u3092\u524a\u9664 */\nvoid remove(int val) {\n    root = removeHelper(root, val);\n}\n\n/* \u518d\u5e30\u7684\u306b\u30ce\u30fc\u30c9\u3092\u524a\u9664\uff08\u88dc\u52a9\u30e1\u30bd\u30c3\u30c9\uff09 */\nTreeNode removeHelper(TreeNode node, int val) {\n    if (node == null)\n        return null;\n    /* 1. \u30ce\u30fc\u30c9\u3092\u898b\u3064\u3051\u3066\u524a\u9664 */\n    if (val < node.val)\n        node.left = removeHelper(node.left, val);\n    else if (val > node.val)\n        node.right = removeHelper(node.right, val);\n    else {\n        if (node.left == null || node.right == null) {\n            TreeNode child = node.left != null ? node.left : node.right;\n            // \u5b50\u30ce\u30fc\u30c9\u6570 = 0\u3001\u30ce\u30fc\u30c9\u3092\u524a\u9664\u3057\u3066\u623b\u308b\n            if (child == null)\n                return null;\n            // \u5b50\u30ce\u30fc\u30c9\u6570 = 1\u3001\u30ce\u30fc\u30c9\u3092\u524a\u9664\n            else\n                node = child;\n        } else {\n            // \u5b50\u30ce\u30fc\u30c9\u6570 = 2\u3001\u4e2d\u9806\u8d70\u67fb\u306e\u6b21\u306e\u30ce\u30fc\u30c9\u3092\u524a\u9664\u3057\u3001\u73fe\u5728\u306e\u30ce\u30fc\u30c9\u3092\u305d\u308c\u3067\u7f6e\u304d\u63db\u3048\u308b\n            TreeNode temp = node.right;\n            while (temp.left != null) {\n                temp = temp.left;\n            }\n            node.right = removeHelper(node.right, temp.val);\n            node.val = temp.val;\n        }\n    }\n    updateHeight(node); // \u30ce\u30fc\u30c9\u306e\u9ad8\u3055\u3092\u66f4\u65b0\n    /* 2. \u56de\u8ee2\u64cd\u4f5c\u3092\u5b9f\u884c\u3057\u3066\u90e8\u5206\u6728\u306e\u5e73\u8861\u3092\u56de\u5fa9 */\n    node = rotate(node);\n    // \u90e8\u5206\u6728\u306e\u6839\u30ce\u30fc\u30c9\u3092\u8fd4\u3059\n    return node;\n}\n
avl_tree.cs
[class]{AVLTree}-[func]{Remove}\n\n[class]{AVLTree}-[func]{RemoveHelper}\n
avl_tree.go
[class]{aVLTree}-[func]{remove}\n\n[class]{aVLTree}-[func]{removeHelper}\n
avl_tree.swift
[class]{AVLTree}-[func]{remove}\n\n[class]{AVLTree}-[func]{removeHelper}\n
avl_tree.js
[class]{AVLTree}-[func]{remove}\n\n[class]{AVLTree}-[func]{removeHelper}\n
avl_tree.ts
[class]{AVLTree}-[func]{remove}\n\n[class]{AVLTree}-[func]{removeHelper}\n
avl_tree.dart
[class]{AVLTree}-[func]{remove}\n\n[class]{AVLTree}-[func]{removeHelper}\n
avl_tree.rs
[class]{AVLTree}-[func]{remove}\n\n[class]{AVLTree}-[func]{remove_helper}\n
avl_tree.c
[class]{AVLTree}-[func]{removeItem}\n\n[class]{}-[func]{removeHelper}\n
avl_tree.kt
[class]{AVLTree}-[func]{remove}\n\n[class]{AVLTree}-[func]{removeHelper}\n
avl_tree.rb
[class]{AVLTree}-[func]{remove}\n\n[class]{AVLTree}-[func]{remove_helper}\n
"},{"location":"chapter_tree/avl_tree/#3_1","title":"3. \u00a0 \u30ce\u30fc\u30c9\u306e\u691c\u7d22","text":"

AVL\u6728\u3067\u306e\u30ce\u30fc\u30c9\u691c\u7d22\u64cd\u4f5c\u306f\u4e8c\u5206\u63a2\u7d22\u6728\u306e\u305d\u308c\u3068\u4e00\u81f4\u3057\u3066\u304a\u308a\u3001\u3053\u3053\u3067\u306f\u8a73\u8ff0\u3057\u307e\u305b\u3093\u3002

"},{"location":"chapter_tree/avl_tree/#754-avl","title":"7.5.4 \u00a0 AVL\u6728\u306e\u5178\u578b\u7684\u306a\u5fdc\u7528","text":""},{"location":"chapter_tree/binary_search_tree/","title":"7.4 \u00a0 \u4e8c\u5206\u63a2\u7d22\u6728","text":"

\u4e0b\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u4e8c\u5206\u63a2\u7d22\u6728\u306f\u4ee5\u4e0b\u306e\u6761\u4ef6\u3092\u6e80\u305f\u3057\u307e\u3059\u3002

  1. \u6839\u30ce\u30fc\u30c9\u306b\u3064\u3044\u3066\u3001\u5de6\u90e8\u5206\u6728\u306e\u3059\u3079\u3066\u306e\u30ce\u30fc\u30c9\u306e\u5024 \\(<\\) \u6839\u30ce\u30fc\u30c9\u306e\u5024 \\(<\\) \u53f3\u90e8\u5206\u6728\u306e\u3059\u3079\u3066\u306e\u30ce\u30fc\u30c9\u306e\u5024\u3002
  2. \u4efb\u610f\u306e\u30ce\u30fc\u30c9\u306e\u5de6\u3068\u53f3\u306e\u90e8\u5206\u6728\u3082\u4e8c\u5206\u63a2\u7d22\u6728\u3067\u3059\u3002\u3064\u307e\u308a\u3001\u6761\u4ef61.\u3082\u6e80\u305f\u3057\u307e\u3059\u3002

\u56f3 7-16 \u00a0 \u4e8c\u5206\u63a2\u7d22\u6728

"},{"location":"chapter_tree/binary_search_tree/#741","title":"7.4.1 \u00a0 \u4e8c\u5206\u63a2\u7d22\u6728\u306e\u64cd\u4f5c","text":"

\u4e8c\u5206\u63a2\u7d22\u6728\u3092\u30af\u30e9\u30b9BinarySearchTree\u3068\u3057\u3066\u30ab\u30d7\u30bb\u30eb\u5316\u3057\u3001\u6728\u306e\u6839\u30ce\u30fc\u30c9\u3092\u6307\u3059\u30e1\u30f3\u30d0\u30fc\u5909\u6570root\u3092\u5ba3\u8a00\u3057\u307e\u3059\u3002

"},{"location":"chapter_tree/binary_search_tree/#1","title":"1. \u00a0 \u30ce\u30fc\u30c9\u306e\u691c\u7d22","text":"

\u30bf\u30fc\u30b2\u30c3\u30c8\u30ce\u30fc\u30c9\u5024num\u304c\u4e0e\u3048\u3089\u308c\u305f\u5834\u5408\u3001\u4e8c\u5206\u63a2\u7d22\u6728\u306e\u6027\u8cea\u306b\u5f93\u3063\u3066\u691c\u7d22\u3067\u304d\u307e\u3059\u3002\u4e0b\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u30ce\u30fc\u30c9cur\u3092\u5ba3\u8a00\u3057\u3001\u4e8c\u5206\u6728\u306e\u6839\u30ce\u30fc\u30c9root\u304b\u3089\u958b\u59cb\u3057\u3001\u30ce\u30fc\u30c9\u5024cur.val\u3068num\u306e\u30b5\u30a4\u30ba\u3092\u6bd4\u8f03\u3059\u308b\u30eb\u30fc\u30d7\u3092\u884c\u3044\u307e\u3059\u3002

<1><2><3><4>

\u56f3 7-17 \u00a0 \u4e8c\u5206\u63a2\u7d22\u6728\u3067\u306e\u30ce\u30fc\u30c9\u691c\u7d22\u4f8b

\u4e8c\u5206\u63a2\u7d22\u6728\u3067\u306e\u691c\u7d22\u64cd\u4f5c\u306f\u4e8c\u5206\u63a2\u7d22\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3068\u540c\u3058\u539f\u7406\u3067\u52d5\u4f5c\u3057\u3001\u5404\u30e9\u30a6\u30f3\u30c9\u3067\u30b1\u30fc\u30b9\u306e\u534a\u5206\u3092\u6392\u9664\u3057\u307e\u3059\u3002\u30eb\u30fc\u30d7\u6570\u306f\u6700\u5927\u3067\u4e8c\u5206\u6728\u306e\u9ad8\u3055\u3067\u3059\u3002\u4e8c\u5206\u6728\u304c\u5e73\u8861\u3057\u3066\u3044\u308b\u5834\u5408\u3001\\(O(\\log n)\\)\u306e\u6642\u9593\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002\u30b3\u30fc\u30c9\u4f8b\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby binary_search_tree.py
def search(self, num: int) -> TreeNode | None:\n    \"\"\"\u30ce\u30fc\u30c9\u3092\u63a2\u7d22\"\"\"\n    cur = self._root\n    # \u30eb\u30fc\u30d7\u3067\u63a2\u7d22\u3001\u8449\u30ce\u30fc\u30c9\u3092\u901a\u904e\u3057\u305f\u5f8c\u306b\u30d6\u30ec\u30fc\u30af\n    while cur is not None:\n        # \u30bf\u30fc\u30b2\u30c3\u30c8\u30ce\u30fc\u30c9\u306fcur\u306e\u53f3\u90e8\u5206\u6728\u306b\u3042\u308b\n        if cur.val < num:\n            cur = cur.right\n        # \u30bf\u30fc\u30b2\u30c3\u30c8\u30ce\u30fc\u30c9\u306fcur\u306e\u5de6\u90e8\u5206\u6728\u306b\u3042\u308b\n        elif cur.val > num:\n            cur = cur.left\n        # \u30bf\u30fc\u30b2\u30c3\u30c8\u30ce\u30fc\u30c9\u3092\u767a\u898b\u3001\u30eb\u30fc\u30d7\u3092\u30d6\u30ec\u30fc\u30af\n        else:\n            break\n    return cur\n
binary_search_tree.cpp
/* \u30ce\u30fc\u30c9\u3092\u691c\u7d22 */\nTreeNode *search(int num) {\n    TreeNode *cur = root;\n    // \u30eb\u30fc\u30d7\u3067\u691c\u7d22\u3001\u8449\u30ce\u30fc\u30c9\u3092\u901a\u308a\u904e\u304e\u305f\u3089\u7d42\u4e86\n    while (cur != nullptr) {\n        // \u76ee\u6a19\u30ce\u30fc\u30c9\u306fcur\u306e\u53f3\u90e8\u5206\u6728\u306b\u3042\u308b\n        if (cur->val < num)\n            cur = cur->right;\n        // \u76ee\u6a19\u30ce\u30fc\u30c9\u306fcur\u306e\u5de6\u90e8\u5206\u6728\u306b\u3042\u308b\n        else if (cur->val > num)\n            cur = cur->left;\n        // \u76ee\u6a19\u30ce\u30fc\u30c9\u3092\u898b\u3064\u3051\u305f\u3001\u30eb\u30fc\u30d7\u3092\u629c\u3051\u308b\n        else\n            break;\n    }\n    // \u76ee\u6a19\u30ce\u30fc\u30c9\u3092\u8fd4\u3059\n    return cur;\n}\n
binary_search_tree.java
/* \u30ce\u30fc\u30c9\u3092\u691c\u7d22 */\nTreeNode search(int num) {\n    TreeNode cur = root;\n    // \u30eb\u30fc\u30d7\u3067\u691c\u7d22\u3001\u8449\u30ce\u30fc\u30c9\u3092\u901a\u904e\u5f8c\u306b\u7d42\u4e86\n    while (cur != null) {\n        // \u5bfe\u8c61\u30ce\u30fc\u30c9\u306f cur \u306e\u53f3\u90e8\u5206\u6728\u306b\u3042\u308b\n        if (cur.val < num)\n            cur = cur.right;\n        // \u5bfe\u8c61\u30ce\u30fc\u30c9\u306f cur \u306e\u5de6\u90e8\u5206\u6728\u306b\u3042\u308b\n        else if (cur.val > num)\n            cur = cur.left;\n        // \u5bfe\u8c61\u30ce\u30fc\u30c9\u3092\u898b\u3064\u3051\u305f\u3001\u30eb\u30fc\u30d7\u3092\u7d42\u4e86\n        else\n            break;\n    }\n    // \u5bfe\u8c61\u30ce\u30fc\u30c9\u3092\u8fd4\u3059\n    return cur;\n}\n
binary_search_tree.cs
[class]{BinarySearchTree}-[func]{Search}\n
binary_search_tree.go
[class]{binarySearchTree}-[func]{search}\n
binary_search_tree.swift
[class]{BinarySearchTree}-[func]{search}\n
binary_search_tree.js
[class]{BinarySearchTree}-[func]{search}\n
binary_search_tree.ts
[class]{BinarySearchTree}-[func]{search}\n
binary_search_tree.dart
[class]{BinarySearchTree}-[func]{search}\n
binary_search_tree.rs
[class]{BinarySearchTree}-[func]{search}\n
binary_search_tree.c
[class]{BinarySearchTree}-[func]{search}\n
binary_search_tree.kt
[class]{BinarySearchTree}-[func]{search}\n
binary_search_tree.rb
[class]{BinarySearchTree}-[func]{search}\n
"},{"location":"chapter_tree/binary_search_tree/#2","title":"2. \u00a0 \u30ce\u30fc\u30c9\u306e\u633f\u5165","text":"

\u633f\u5165\u3059\u308b\u8981\u7d20num\u304c\u4e0e\u3048\u3089\u308c\u305f\u5834\u5408\u3001\u4e8c\u5206\u63a2\u7d22\u6728\u306e\u6027\u8cea\u300c\u5de6\u90e8\u5206\u6728 < \u6839\u30ce\u30fc\u30c9 < \u53f3\u90e8\u5206\u6728\u300d\u3092\u7dad\u6301\u3059\u308b\u305f\u3081\u3001\u633f\u5165\u64cd\u4f5c\u306f\u4e0b\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u9032\u884c\u3057\u307e\u3059\u3002

  1. \u633f\u5165\u4f4d\u7f6e\u3092\u898b\u3064\u3051\u308b: \u691c\u7d22\u64cd\u4f5c\u3068\u540c\u69d8\u306b\u3001\u6839\u30ce\u30fc\u30c9\u304b\u3089\u958b\u59cb\u3057\u3001\u73fe\u5728\u306e\u30ce\u30fc\u30c9\u5024\u3068num\u306e\u30b5\u30a4\u30ba\u95a2\u4fc2\u306b\u5f93\u3063\u3066\u4e0b\u5411\u304d\u306b\u30eb\u30fc\u30d7\u3057\u3001\u8449\u30ce\u30fc\u30c9\u3092\u901a\u904e\uff08None\u306b\u8d70\u67fb\uff09\u3059\u308b\u307e\u3067\u3001\u30eb\u30fc\u30d7\u3092\u7d42\u4e86\u3057\u307e\u3059\u3002
  2. \u3053\u306e\u4f4d\u7f6e\u306b\u30ce\u30fc\u30c9\u3092\u633f\u5165: \u30ce\u30fc\u30c9num\u3092\u521d\u671f\u5316\u3057\u3001None\u304c\u3042\u3063\u305f\u5834\u6240\u306b\u914d\u7f6e\u3057\u307e\u3059\u3002

\u56f3 7-18 \u00a0 \u4e8c\u5206\u63a2\u7d22\u6728\u3078\u306e\u30ce\u30fc\u30c9\u633f\u5165

\u30b3\u30fc\u30c9\u5b9f\u88c5\u3067\u306f\u3001\u4ee5\u4e0b\u306e2\u70b9\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby binary_search_tree.py
def insert(self, num: int):\n    \"\"\"\u30ce\u30fc\u30c9\u3092\u633f\u5165\"\"\"\n    # \u6728\u304c\u7a7a\u306e\u5834\u5408\u3001\u30eb\u30fc\u30c8\u30ce\u30fc\u30c9\u3092\u521d\u671f\u5316\n    if self._root is None:\n        self._root = TreeNode(num)\n        return\n    # \u30eb\u30fc\u30d7\u3067\u63a2\u7d22\u3001\u8449\u30ce\u30fc\u30c9\u3092\u901a\u904e\u3057\u305f\u5f8c\u306b\u30d6\u30ec\u30fc\u30af\n    cur, pre = self._root, None\n    while cur is not None:\n        # \u91cd\u8907\u30ce\u30fc\u30c9\u3092\u767a\u898b\u3057\u305f\u305f\u3081\u3001\u623b\u308b\n        if cur.val == num:\n            return\n        pre = cur\n        # \u633f\u5165\u4f4d\u7f6e\u306fcur\u306e\u53f3\u90e8\u5206\u6728\u306b\u3042\u308b\n        if cur.val < num:\n            cur = cur.right\n        # \u633f\u5165\u4f4d\u7f6e\u306fcur\u306e\u5de6\u90e8\u5206\u6728\u306b\u3042\u308b\n        else:\n            cur = cur.left\n    # \u30ce\u30fc\u30c9\u3092\u633f\u5165\n    node = TreeNode(num)\n    if pre.val < num:\n        pre.right = node\n    else:\n        pre.left = node\n
binary_search_tree.cpp
/* \u30ce\u30fc\u30c9\u3092\u633f\u5165 */\nvoid insert(int num) {\n    // \u6728\u304c\u7a7a\u306e\u5834\u5408\u3001\u30eb\u30fc\u30c8\u30ce\u30fc\u30c9\u3092\u521d\u671f\u5316\n    if (root == nullptr) {\n        root = new TreeNode(num);\n        return;\n    }\n    TreeNode *cur = root, *pre = nullptr;\n    // \u30eb\u30fc\u30d7\u3067\u691c\u7d22\u3001\u8449\u30ce\u30fc\u30c9\u3092\u901a\u308a\u904e\u304e\u305f\u3089\u7d42\u4e86\n    while (cur != nullptr) {\n        // \u91cd\u8907\u30ce\u30fc\u30c9\u3092\u898b\u3064\u3051\u305f\u5834\u5408\u3001\u623b\u308b\n        if (cur->val == num)\n            return;\n        pre = cur;\n        // \u633f\u5165\u4f4d\u7f6e\u306fcur\u306e\u53f3\u90e8\u5206\u6728\u306b\u3042\u308b\n        if (cur->val < num)\n            cur = cur->right;\n        // \u633f\u5165\u4f4d\u7f6e\u306fcur\u306e\u5de6\u90e8\u5206\u6728\u306b\u3042\u308b\n        else\n            cur = cur->left;\n    }\n    // \u30ce\u30fc\u30c9\u3092\u633f\u5165\n    TreeNode *node = new TreeNode(num);\n    if (pre->val < num)\n        pre->right = node;\n    else\n        pre->left = node;\n}\n
binary_search_tree.java
/* \u30ce\u30fc\u30c9\u3092\u633f\u5165 */\nvoid insert(int num) {\n    // \u6728\u304c\u7a7a\u306e\u5834\u5408\u3001\u6839\u30ce\u30fc\u30c9\u3092\u521d\u671f\u5316\n    if (root == null) {\n        root = new TreeNode(num);\n        return;\n    }\n    TreeNode cur = root, pre = null;\n    // \u30eb\u30fc\u30d7\u3067\u691c\u7d22\u3001\u8449\u30ce\u30fc\u30c9\u3092\u901a\u904e\u5f8c\u306b\u7d42\u4e86\n    while (cur != null) {\n        // \u91cd\u8907\u30ce\u30fc\u30c9\u3092\u898b\u3064\u3051\u305f\u5834\u5408\u3001\u623b\u308b\n        if (cur.val == num)\n            return;\n        pre = cur;\n        // \u633f\u5165\u4f4d\u7f6e\u306f cur \u306e\u53f3\u90e8\u5206\u6728\u306b\u3042\u308b\n        if (cur.val < num)\n            cur = cur.right;\n        // \u633f\u5165\u4f4d\u7f6e\u306f cur \u306e\u5de6\u90e8\u5206\u6728\u306b\u3042\u308b\n        else\n            cur = cur.left;\n    }\n    // \u30ce\u30fc\u30c9\u3092\u633f\u5165\n    TreeNode node = new TreeNode(num);\n    if (pre.val < num)\n        pre.right = node;\n    else\n        pre.left = node;\n}\n
binary_search_tree.cs
[class]{BinarySearchTree}-[func]{Insert}\n
binary_search_tree.go
[class]{binarySearchTree}-[func]{insert}\n
binary_search_tree.swift
[class]{BinarySearchTree}-[func]{insert}\n
binary_search_tree.js
[class]{BinarySearchTree}-[func]{insert}\n
binary_search_tree.ts
[class]{BinarySearchTree}-[func]{insert}\n
binary_search_tree.dart
[class]{BinarySearchTree}-[func]{insert}\n
binary_search_tree.rs
[class]{BinarySearchTree}-[func]{insert}\n
binary_search_tree.c
[class]{BinarySearchTree}-[func]{insert}\n
binary_search_tree.kt
[class]{BinarySearchTree}-[func]{insert}\n
binary_search_tree.rb
[class]{BinarySearchTree}-[func]{insert}\n

\u30ce\u30fc\u30c9\u306e\u691c\u7d22\u3068\u540c\u69d8\u306b\u3001\u30ce\u30fc\u30c9\u306e\u633f\u5165\u306b\u306f\\(O(\\log n)\\)\u306e\u6642\u9593\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002

"},{"location":"chapter_tree/binary_search_tree/#3","title":"3. \u00a0 \u30ce\u30fc\u30c9\u306e\u524a\u9664","text":"

\u307e\u305a\u3001\u4e8c\u5206\u6728\u3067\u30bf\u30fc\u30b2\u30c3\u30c8\u30ce\u30fc\u30c9\u3092\u898b\u3064\u3051\u3001\u305d\u308c\u3092\u524a\u9664\u3057\u307e\u3059\u3002\u30ce\u30fc\u30c9\u306e\u633f\u5165\u3068\u540c\u69d8\u306b\u3001\u524a\u9664\u64cd\u4f5c\u304c\u5b8c\u4e86\u3057\u305f\u5f8c\u3082\u3001\u4e8c\u5206\u63a2\u7d22\u6728\u306e\u6027\u8cea\u300c\u5de6\u90e8\u5206\u6728 < \u6839\u30ce\u30fc\u30c9 < \u53f3\u90e8\u5206\u6728\u300d\u304c\u6e80\u305f\u3055\u308c\u308b\u3053\u3068\u3092\u4fdd\u8a3c\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u3057\u305f\u304c\u3063\u3066\u3001\u30bf\u30fc\u30b2\u30c3\u30c8\u30ce\u30fc\u30c9\u306e\u5b50\u30ce\u30fc\u30c9\u6570\u306b\u57fa\u3065\u3044\u3066\u30010\u30011\u30012\u306e3\u3064\u306e\u30b1\u30fc\u30b9\u306b\u5206\u3051\u3001\u5bfe\u5fdc\u3059\u308b\u30ce\u30fc\u30c9\u524a\u9664\u64cd\u4f5c\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002

\u4e0b\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u524a\u9664\u3059\u308b\u30ce\u30fc\u30c9\u306e\u6b21\u6570\u304c\\(0\\)\u306e\u5834\u5408\u3001\u305d\u306e\u30ce\u30fc\u30c9\u306f\u8449\u30ce\u30fc\u30c9\u3067\u3042\u308b\u3053\u3068\u3092\u610f\u5473\u3057\u3001\u76f4\u63a5\u524a\u9664\u3067\u304d\u307e\u3059\u3002

\u56f3 7-19 \u00a0 \u4e8c\u5206\u63a2\u7d22\u6728\u3067\u306e\u30ce\u30fc\u30c9\u524a\u9664\uff08\u6b21\u65700\uff09

\u4e0b\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u524a\u9664\u3059\u308b\u30ce\u30fc\u30c9\u306e\u6b21\u6570\u304c\\(1\\)\u306e\u5834\u5408\u3001\u524a\u9664\u3059\u308b\u30ce\u30fc\u30c9\u3092\u305d\u306e\u5b50\u30ce\u30fc\u30c9\u3067\u7f6e\u304d\u63db\u3048\u308b\u3060\u3051\u3067\u5341\u5206\u3067\u3059\u3002

\u56f3 7-20 \u00a0 \u4e8c\u5206\u63a2\u7d22\u6728\u3067\u306e\u30ce\u30fc\u30c9\u524a\u9664\uff08\u6b21\u65701\uff09

\u524a\u9664\u3059\u308b\u30ce\u30fc\u30c9\u306e\u6b21\u6570\u304c\\(2\\)\u306e\u5834\u5408\u3001\u76f4\u63a5\u524a\u9664\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u304c\u3001\u30ce\u30fc\u30c9\u3092\u4f7f\u7528\u3057\u3066\u7f6e\u304d\u63db\u3048\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u4e8c\u5206\u63a2\u7d22\u6728\u306e\u6027\u8cea\u300c\u5de6\u90e8\u5206\u6728 \\(<\\) \u6839\u30ce\u30fc\u30c9 \\(<\\) \u53f3\u90e8\u5206\u6728\u300d\u3092\u7dad\u6301\u3059\u308b\u305f\u3081\u3001\u3053\u306e\u30ce\u30fc\u30c9\u306f\u53f3\u90e8\u5206\u6728\u306e\u6700\u5c0f\u30ce\u30fc\u30c9\u307e\u305f\u306f\u5de6\u90e8\u5206\u6728\u306e\u6700\u5927\u30ce\u30fc\u30c9\u306e\u3044\u305a\u308c\u304b\u3067\u3059\u3002

\u53f3\u90e8\u5206\u6728\u306e\u6700\u5c0f\u30ce\u30fc\u30c9\uff08\u4e2d\u9806\u8d70\u67fb\u3067\u306e\u6b21\u306e\u30ce\u30fc\u30c9\uff09\u3092\u9078\u629e\u3059\u308b\u3068\u4eee\u5b9a\u3059\u308b\u3068\u3001\u524a\u9664\u64cd\u4f5c\u306f\u4e0b\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u9032\u884c\u3057\u307e\u3059\u3002

  1. \u524a\u9664\u3059\u308b\u30ce\u30fc\u30c9\u306e\u300c\u4e2d\u9806\u8d70\u67fb\u30b7\u30fc\u30b1\u30f3\u30b9\u300d\u3067\u306e\u6b21\u306e\u30ce\u30fc\u30c9\u3092\u898b\u3064\u3051\u3001tmp\u3068\u3057\u3066\u793a\u3057\u307e\u3059\u3002
  2. \u524a\u9664\u3059\u308b\u30ce\u30fc\u30c9\u306e\u5024\u3092tmp\u306e\u5024\u3067\u7f6e\u304d\u63db\u3048\u3001\u6728\u5185\u3067\u30ce\u30fc\u30c9tmp\u3092\u518d\u5e30\u7684\u306b\u524a\u9664\u3057\u307e\u3059\u3002
<1><2><3><4>

\u56f3 7-21 \u00a0 \u4e8c\u5206\u63a2\u7d22\u6728\u3067\u306e\u30ce\u30fc\u30c9\u524a\u9664\uff08\u6b21\u65702\uff09

\u30ce\u30fc\u30c9\u3092\u524a\u9664\u3059\u308b\u64cd\u4f5c\u3082\\(O(\\log n)\\)\u306e\u6642\u9593\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002\u524a\u9664\u3059\u308b\u30ce\u30fc\u30c9\u3092\u898b\u3064\u3051\u308b\u306e\u306b\\(O(\\log n)\\)\u306e\u6642\u9593\u304c\u5fc5\u8981\u3067\u3001\u4e2d\u9806\u8d70\u67fb\u306e\u5f8c\u7d99\u30ce\u30fc\u30c9\u3092\u53d6\u5f97\u3059\u308b\u306e\u306b\\(O(\\log n)\\)\u306e\u6642\u9593\u304c\u5fc5\u8981\u3067\u3059\u3002\u30b3\u30fc\u30c9\u4f8b\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby binary_search_tree.py
def remove(self, num: int):\n    \"\"\"\u30ce\u30fc\u30c9\u3092\u524a\u9664\"\"\"\n    # \u6728\u304c\u7a7a\u306e\u5834\u5408\u3001\u623b\u308b\n    if self._root is None:\n        return\n    # \u30eb\u30fc\u30d7\u3067\u63a2\u7d22\u3001\u8449\u30ce\u30fc\u30c9\u3092\u901a\u904e\u3057\u305f\u5f8c\u306b\u30d6\u30ec\u30fc\u30af\n    cur, pre = self._root, None\n    while cur is not None:\n        # \u524a\u9664\u3059\u308b\u30ce\u30fc\u30c9\u3092\u767a\u898b\u3001\u30eb\u30fc\u30d7\u3092\u30d6\u30ec\u30fc\u30af\n        if cur.val == num:\n            break\n        pre = cur\n        # \u524a\u9664\u3059\u308b\u30ce\u30fc\u30c9\u306fcur\u306e\u53f3\u90e8\u5206\u6728\u306b\u3042\u308b\n        if cur.val < num:\n            cur = cur.right\n        # \u524a\u9664\u3059\u308b\u30ce\u30fc\u30c9\u306fcur\u306e\u5de6\u90e8\u5206\u6728\u306b\u3042\u308b\n        else:\n            cur = cur.left\n    # \u524a\u9664\u3059\u308b\u30ce\u30fc\u30c9\u304c\u5b58\u5728\u3057\u306a\u3044\u5834\u5408\u3001\u623b\u308b\n    if cur is None:\n        return\n\n    # \u5b50\u30ce\u30fc\u30c9\u6570 = 0 \u307e\u305f\u306f 1\n    if cur.left is None or cur.right is None:\n        # \u5b50\u30ce\u30fc\u30c9\u6570 = 0/1\u306e\u5834\u5408\u3001child = null/\u305d\u306e\u5b50\u30ce\u30fc\u30c9\n        child = cur.left or cur.right\n        # \u30ce\u30fc\u30c9cur\u3092\u524a\u9664\n        if cur != self._root:\n            if pre.left == cur:\n                pre.left = child\n            else:\n                pre.right = child\n        else:\n            # \u524a\u9664\u3055\u308c\u308b\u30ce\u30fc\u30c9\u304c\u30eb\u30fc\u30c8\u306e\u5834\u5408\u3001\u30eb\u30fc\u30c8\u3092\u518d\u5272\u308a\u5f53\u3066\n            self._root = child\n    # \u5b50\u30ce\u30fc\u30c9\u6570 = 2\n    else:\n        # cur\u306e\u4e2d\u9806\u8d70\u67fb\u306e\u6b21\u306e\u30ce\u30fc\u30c9\u3092\u53d6\u5f97\n        tmp: TreeNode = cur.right\n        while tmp.left is not None:\n            tmp = tmp.left\n        # \u518d\u5e30\u7684\u306b\u30ce\u30fc\u30c9tmp\u3092\u524a\u9664\n        self.remove(tmp.val)\n        # cur\u3092tmp\u3067\u7f6e\u304d\u63db\u3048\n        cur.val = tmp.val\n
binary_search_tree.cpp
/* \u30ce\u30fc\u30c9\u3092\u524a\u9664 */\nvoid remove(int num) {\n    // \u6728\u304c\u7a7a\u306e\u5834\u5408\u3001\u623b\u308b\n    if (root == nullptr)\n        return;\n    TreeNode *cur = root, *pre = nullptr;\n    // \u30eb\u30fc\u30d7\u3067\u691c\u7d22\u3001\u8449\u30ce\u30fc\u30c9\u3092\u901a\u308a\u904e\u304e\u305f\u3089\u7d42\u4e86\n    while (cur != nullptr) {\n        // \u524a\u9664\u3059\u308b\u30ce\u30fc\u30c9\u3092\u898b\u3064\u3051\u305f\u3001\u30eb\u30fc\u30d7\u3092\u629c\u3051\u308b\n        if (cur->val == num)\n            break;\n        pre = cur;\n        // \u524a\u9664\u3059\u308b\u30ce\u30fc\u30c9\u306fcur\u306e\u53f3\u90e8\u5206\u6728\u306b\u3042\u308b\n        if (cur->val < num)\n            cur = cur->right;\n        // \u524a\u9664\u3059\u308b\u30ce\u30fc\u30c9\u306fcur\u306e\u5de6\u90e8\u5206\u6728\u306b\u3042\u308b\n        else\n            cur = cur->left;\n    }\n    // \u524a\u9664\u3059\u308b\u30ce\u30fc\u30c9\u304c\u306a\u3044\u5834\u5408\u3001\u623b\u308b\n    if (cur == nullptr)\n        return;\n    // \u5b50\u30ce\u30fc\u30c9\u6570 = 0 \u307e\u305f\u306f 1\n    if (cur->left == nullptr || cur->right == nullptr) {\n        // \u5b50\u30ce\u30fc\u30c9\u6570 = 0 / 1\u306e\u5834\u5408\u3001child = nullptr / \u305d\u306e\u5b50\u30ce\u30fc\u30c9\n        TreeNode *child = cur->left != nullptr ? cur->left : cur->right;\n        // \u30ce\u30fc\u30c9cur\u3092\u524a\u9664\n        if (cur != root) {\n            if (pre->left == cur)\n                pre->left = child;\n            else\n                pre->right = child;\n        } else {\n            // \u524a\u9664\u3055\u308c\u308b\u30ce\u30fc\u30c9\u304c\u30eb\u30fc\u30c8\u306e\u5834\u5408\u3001\u30eb\u30fc\u30c8\u3092\u518d\u5272\u308a\u5f53\u3066\n            root = child;\n        }\n        // \u30e1\u30e2\u30ea\u3092\u89e3\u653e\n        delete cur;\n    }\n    // \u5b50\u30ce\u30fc\u30c9\u6570 = 2\n    else {\n        // cur\u306e\u4e2d\u9806\u8d70\u67fb\u306e\u6b21\u306e\u30ce\u30fc\u30c9\u3092\u53d6\u5f97\n        TreeNode *tmp = cur->right;\n        while (tmp->left != nullptr) {\n            tmp = tmp->left;\n        }\n        int tmpVal = tmp->val;\n        // \u30ce\u30fc\u30c9tmp\u3092\u518d\u5e30\u7684\u306b\u524a\u9664\n        remove(tmp->val);\n        // cur\u3092tmp\u3067\u7f6e\u304d\u63db\u3048\n        cur->val = tmpVal;\n    }\n}\n
binary_search_tree.java
/* \u30ce\u30fc\u30c9\u3092\u524a\u9664 */\nvoid remove(int num) {\n    // \u6728\u304c\u7a7a\u306e\u5834\u5408\u3001\u623b\u308b\n    if (root == null)\n        return;\n    TreeNode cur = root, pre = null;\n    // \u30eb\u30fc\u30d7\u3067\u691c\u7d22\u3001\u8449\u30ce\u30fc\u30c9\u3092\u901a\u904e\u5f8c\u306b\u7d42\u4e86\n    while (cur != null) {\n        // \u524a\u9664\u3059\u308b\u30ce\u30fc\u30c9\u3092\u898b\u3064\u3051\u305f\u3001\u30eb\u30fc\u30d7\u3092\u7d42\u4e86\n        if (cur.val == num)\n            break;\n        pre = cur;\n        // \u524a\u9664\u3059\u308b\u30ce\u30fc\u30c9\u306f cur \u306e\u53f3\u90e8\u5206\u6728\u306b\u3042\u308b\n        if (cur.val < num)\n            cur = cur.right;\n        // \u524a\u9664\u3059\u308b\u30ce\u30fc\u30c9\u306f cur \u306e\u5de6\u90e8\u5206\u6728\u306b\u3042\u308b\n        else\n            cur = cur.left;\n    }\n    // \u524a\u9664\u3059\u308b\u30ce\u30fc\u30c9\u304c\u306a\u3044\u5834\u5408\u3001\u623b\u308b\n    if (cur == null)\n        return;\n    // \u5b50\u30ce\u30fc\u30c9\u6570 = 0 \u307e\u305f\u306f 1\n    if (cur.left == null || cur.right == null) {\n        // \u5b50\u30ce\u30fc\u30c9\u6570 = 0/1 \u306e\u5834\u5408\u3001child = null/\u305d\u306e\u5b50\u30ce\u30fc\u30c9\n        TreeNode child = cur.left != null ? cur.left : cur.right;\n        // \u30ce\u30fc\u30c9 cur \u3092\u524a\u9664\n        if (cur != root) {\n            if (pre.left == cur)\n                pre.left = child;\n            else\n                pre.right = child;\n        } else {\n            // \u524a\u9664\u3055\u308c\u308b\u30ce\u30fc\u30c9\u304c\u6839\u306e\u5834\u5408\u3001\u6839\u3092\u518d\u5272\u308a\u5f53\u3066\n            root = child;\n        }\n    }\n    // \u5b50\u30ce\u30fc\u30c9\u6570 = 2\n    else {\n        // cur \u306e\u4e2d\u9806\u8d70\u67fb\u306e\u6b21\u306e\u30ce\u30fc\u30c9\u3092\u53d6\u5f97\n        TreeNode tmp = cur.right;\n        while (tmp.left != null) {\n            tmp = tmp.left;\n        }\n        // \u518d\u5e30\u7684\u306b\u30ce\u30fc\u30c9 tmp \u3092\u524a\u9664\n        remove(tmp.val);\n        // cur \u3092 tmp \u3067\u7f6e\u304d\u63db\u3048\u308b\n        cur.val = tmp.val;\n    }\n}\n
binary_search_tree.cs
[class]{BinarySearchTree}-[func]{Remove}\n
binary_search_tree.go
[class]{binarySearchTree}-[func]{remove}\n
binary_search_tree.swift
[class]{BinarySearchTree}-[func]{remove}\n
binary_search_tree.js
[class]{BinarySearchTree}-[func]{remove}\n
binary_search_tree.ts
[class]{BinarySearchTree}-[func]{remove}\n
binary_search_tree.dart
[class]{BinarySearchTree}-[func]{remove}\n
binary_search_tree.rs
[class]{BinarySearchTree}-[func]{remove}\n
binary_search_tree.c
[class]{BinarySearchTree}-[func]{removeItem}\n
binary_search_tree.kt
[class]{BinarySearchTree}-[func]{remove}\n
binary_search_tree.rb
[class]{BinarySearchTree}-[func]{remove}\n
"},{"location":"chapter_tree/binary_search_tree/#4","title":"4. \u00a0 \u4e2d\u9806\u8d70\u67fb\u306f\u9806\u5e8f\u4ed8\u3051\u3055\u308c\u3066\u3044\u308b","text":"

\u4e0b\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u4e8c\u5206\u6728\u306e\u4e2d\u9806\u8d70\u67fb\u306f\u300c\u5de6 \\(\\rightarrow\\) \u6839 \\(\\rightarrow\\) \u53f3\u300d\u306e\u8d70\u67fb\u9806\u5e8f\u306b\u5f93\u3044\u3001\u4e8c\u5206\u63a2\u7d22\u6728\u306f\u300c\u5de6\u5b50\u30ce\u30fc\u30c9 \\(<\\) \u6839\u30ce\u30fc\u30c9 \\(<\\) \u53f3\u5b50\u30ce\u30fc\u30c9\u300d\u306e\u30b5\u30a4\u30ba\u95a2\u4fc2\u3092\u6e80\u305f\u3057\u307e\u3059\u3002

\u3053\u308c\u306f\u3001\u4e8c\u5206\u63a2\u7d22\u6728\u3067\u4e2d\u9806\u8d70\u67fb\u3092\u5b9f\u884c\u3059\u308b\u3068\u304d\u306b\u3001\u5e38\u306b\u6b21\u306b\u5c0f\u3055\u3044\u30ce\u30fc\u30c9\u304c\u6700\u521d\u306b\u8d70\u67fb\u3055\u308c\u308b\u3053\u3068\u3092\u610f\u5473\u3057\u3001\u91cd\u8981\u306a\u6027\u8cea\u306b\u3064\u306a\u304c\u308a\u307e\u3059\uff1a\u4e8c\u5206\u63a2\u7d22\u6728\u306e\u4e2d\u9806\u8d70\u67fb\u306e\u30b7\u30fc\u30b1\u30f3\u30b9\u306f\u6607\u9806\u3067\u3059\u3002

\u4e2d\u9806\u8d70\u67fb\u306e\u6607\u9806\u6027\u8cea\u3092\u4f7f\u7528\u3057\u3066\u3001\u4e8c\u5206\u63a2\u7d22\u6728\u3067\u9806\u5e8f\u4ed8\u3051\u3055\u308c\u305f\u30c7\u30fc\u30bf\u3092\u53d6\u5f97\u3059\u308b\u306b\u306f\\(O(n)\\)\u306e\u6642\u9593\u306e\u307f\u304c\u5fc5\u8981\u3067\u3001\u8ffd\u52a0\u306e\u30bd\u30fc\u30c8\u64cd\u4f5c\u306f\u4e0d\u8981\u3067\u3042\u308a\u3001\u975e\u5e38\u306b\u52b9\u7387\u7684\u3067\u3059\u3002

\u56f3 7-22 \u00a0 \u4e8c\u5206\u63a2\u7d22\u6728\u306e\u4e2d\u9806\u8d70\u67fb\u30b7\u30fc\u30b1\u30f3\u30b9

"},{"location":"chapter_tree/binary_search_tree/#742","title":"7.4.2 \u00a0 \u4e8c\u5206\u63a2\u7d22\u6728\u306e\u52b9\u7387","text":"

\u30c7\u30fc\u30bf\u306e\u30bb\u30c3\u30c8\u304c\u4e0e\u3048\u3089\u308c\u305f\u5834\u5408\u3001\u914d\u5217\u307e\u305f\u306f\u4e8c\u5206\u63a2\u7d22\u6728\u3092\u4f7f\u7528\u3057\u3066\u683c\u7d0d\u3059\u308b\u3053\u3068\u3092\u691c\u8a0e\u3057\u307e\u3059\u3002\u4e0b\u306e\u8868\u3092\u89b3\u5bdf\u3059\u308b\u3068\u3001\u4e8c\u5206\u63a2\u7d22\u6728\u306e\u3059\u3079\u3066\u306e\u64cd\u4f5c\u306f\u5bfe\u6570\u6642\u9593\u8a08\u7b97\u91cf\u3092\u6301\u3061\u3001\u5b89\u5b9a\u3057\u3066\u52b9\u7387\u7684\u3067\u3059\u3002\u914d\u5217\u306f\u3001\u983b\u7e41\u306a\u8ffd\u52a0\u3068\u691c\u7d22\u3084\u524a\u9664\u306e\u983b\u5ea6\u304c\u5c11\u306a\u3044\u30b7\u30ca\u30ea\u30aa\u3067\u306e\u307f\u3001\u4e8c\u5206\u63a2\u7d22\u6728\u3088\u308a\u3082\u52b9\u7387\u7684\u3067\u3059\u3002

\u8868 7-2 \u00a0 \u914d\u5217\u3068\u63a2\u7d22\u6728\u306e\u52b9\u7387\u6bd4\u8f03

\u672a\u30bd\u30fc\u30c8\u914d\u5217 \u4e8c\u5206\u63a2\u7d22\u6728 \u8981\u7d20\u306e\u691c\u7d22 \\(O(n)\\) \\(O(\\log n)\\) \u8981\u7d20\u306e\u633f\u5165 \\(O(1)\\) \\(O(\\log n)\\) \u8981\u7d20\u306e\u524a\u9664 \\(O(n)\\) \\(O(\\log n)\\)

\u7406\u60f3\u7684\u306b\u306f\u3001\u4e8c\u5206\u63a2\u7d22\u6728\u306f\u300c\u5e73\u8861\u300d\u3057\u3066\u304a\u308a\u3001\u4efb\u610f\u306e\u30ce\u30fc\u30c9\u3092\\(\\log n\\)\u30eb\u30fc\u30d7\u5185\u3067\u898b\u3064\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

\u3057\u304b\u3057\u3001\u4e8c\u5206\u63a2\u7d22\u6728\u3067\u7d99\u7d9a\u7684\u306b\u30ce\u30fc\u30c9\u3092\u633f\u5165\u304a\u3088\u3073\u524a\u9664\u3059\u308b\u3068\u3001\u4e0b\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u9023\u7d50\u30ea\u30b9\u30c8\u306b\u9000\u5316\u3059\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u3001\u3055\u307e\u3056\u307e\u306a\u64cd\u4f5c\u306e\u6642\u9593\u8a08\u7b97\u91cf\u3082\\(O(n)\\)\u306b\u60aa\u5316\u3057\u307e\u3059\u3002

\u56f3 7-23 \u00a0 \u4e8c\u5206\u63a2\u7d22\u6728\u306e\u9000\u5316

"},{"location":"chapter_tree/binary_search_tree/#743","title":"7.4.3 \u00a0 \u4e8c\u5206\u63a2\u7d22\u6728\u306e\u4e00\u822c\u7684\u306a\u5fdc\u7528","text":""},{"location":"chapter_tree/binary_tree/","title":"7.1 \u00a0 \u4e8c\u5206\u6728","text":"

\u4e8c\u5206\u6728\u306f\u3001\u7956\u5148\u3068\u5b50\u5b6b\u306e\u9593\u306e\u968e\u5c64\u95a2\u4fc2\u3092\u8868\u73fe\u3057\u3001\u300c\u4e8c\u3064\u306b\u5206\u5272\u3059\u308b\u300d\u5206\u5272\u7d71\u6cbb\u6cd5\u306e\u8ad6\u7406\u3092\u4f53\u73fe\u3059\u308b\u975e\u7dda\u5f62\u30c7\u30fc\u30bf\u69cb\u9020\u3067\u3059\u3002\u9023\u7d50\u30ea\u30b9\u30c8\u3068\u540c\u69d8\u306b\u3001\u4e8c\u5206\u6728\u306e\u57fa\u672c\u5358\u4f4d\u306f\u30ce\u30fc\u30c9\u3067\u3042\u308a\u3001\u5404\u30ce\u30fc\u30c9\u306f\u5024\u3001\u5de6\u306e\u5b50\u30ce\u30fc\u30c9\u3078\u306e\u53c2\u7167\u3001\u53f3\u306e\u5b50\u30ce\u30fc\u30c9\u3078\u306e\u53c2\u7167\u3092\u542b\u307f\u307e\u3059\u3002

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby
class TreeNode:\n    \"\"\"\u4e8c\u5206\u6728\u30ce\u30fc\u30c9\"\"\"\n    def __init__(self, val: int):\n        self.val: int = val                # \u30ce\u30fc\u30c9\u5024\n        self.left: TreeNode | None = None  # \u5de6\u306e\u5b50\u30ce\u30fc\u30c9\u3078\u306e\u53c2\u7167\n        self.right: TreeNode | None = None # \u53f3\u306e\u5b50\u30ce\u30fc\u30c9\u3078\u306e\u53c2\u7167\n
/* \u4e8c\u5206\u6728\u30ce\u30fc\u30c9 */\nstruct TreeNode {\n    int val;          // \u30ce\u30fc\u30c9\u5024\n    TreeNode *left;   // \u5de6\u306e\u5b50\u30ce\u30fc\u30c9\u3078\u306e\u30dd\u30a4\u30f3\u30bf\n    TreeNode *right;  // \u53f3\u306e\u5b50\u30ce\u30fc\u30c9\u3078\u306e\u30dd\u30a4\u30f3\u30bf\n    TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}\n};\n
/* \u4e8c\u5206\u6728\u30ce\u30fc\u30c9 */\nclass TreeNode {\n    int val;         // \u30ce\u30fc\u30c9\u5024\n    TreeNode left;   // \u5de6\u306e\u5b50\u30ce\u30fc\u30c9\u3078\u306e\u53c2\u7167\n    TreeNode right;  // \u53f3\u306e\u5b50\u30ce\u30fc\u30c9\u3078\u306e\u53c2\u7167\n    TreeNode(int x) { val = x; }\n}\n
/* \u4e8c\u5206\u6728\u30ce\u30fc\u30c9 */\nclass TreeNode(int? x) {\n    public int? val = x;    // \u30ce\u30fc\u30c9\u5024\n    public TreeNode? left;  // \u5de6\u306e\u5b50\u30ce\u30fc\u30c9\u3078\u306e\u53c2\u7167\n    public TreeNode? right; // \u53f3\u306e\u5b50\u30ce\u30fc\u30c9\u3078\u306e\u53c2\u7167\n}\n
/* \u4e8c\u5206\u6728\u30ce\u30fc\u30c9 */\ntype TreeNode struct {\n    Val   int\n    Left  *TreeNode\n    Right *TreeNode\n}\n/* \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf */\nfunc NewTreeNode(v int) *TreeNode {\n    return &TreeNode{\n        Left:  nil, // \u5de6\u306e\u5b50\u30ce\u30fc\u30c9\u3078\u306e\u30dd\u30a4\u30f3\u30bf\n        Right: nil, // \u53f3\u306e\u5b50\u30ce\u30fc\u30c9\u3078\u306e\u30dd\u30a4\u30f3\u30bf\n        Val:   v,   // \u30ce\u30fc\u30c9\u5024\n    }\n}\n
/* \u4e8c\u5206\u6728\u30ce\u30fc\u30c9 */\nclass TreeNode {\n    var val: Int // \u30ce\u30fc\u30c9\u5024\n    var left: TreeNode? // \u5de6\u306e\u5b50\u30ce\u30fc\u30c9\u3078\u306e\u53c2\u7167\n    var right: TreeNode? // \u53f3\u306e\u5b50\u30ce\u30fc\u30c9\u3078\u306e\u53c2\u7167\n\n    init(x: Int) {\n        val = x\n    }\n}\n
/* \u4e8c\u5206\u6728\u30ce\u30fc\u30c9 */\nclass TreeNode {\n    val; // \u30ce\u30fc\u30c9\u5024\n    left; // \u5de6\u306e\u5b50\u30ce\u30fc\u30c9\u3078\u306e\u30dd\u30a4\u30f3\u30bf\n    right; // \u53f3\u306e\u5b50\u30ce\u30fc\u30c9\u3078\u306e\u30dd\u30a4\u30f3\u30bf\n    constructor(val, left, right) {\n        this.val = val === undefined ? 0 : val;\n        this.left = left === undefined ? null : left;\n        this.right = right === undefined ? null : right;\n    }\n}\n
/* \u4e8c\u5206\u6728\u30ce\u30fc\u30c9 */\nclass TreeNode {\n    val: number;\n    left: TreeNode | null;\n    right: TreeNode | null;\n\n    constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {\n        this.val = val === undefined ? 0 : val; // \u30ce\u30fc\u30c9\u5024\n        this.left = left === undefined ? null : left; // \u5de6\u306e\u5b50\u30ce\u30fc\u30c9\u3078\u306e\u53c2\u7167\n        this.right = right === undefined ? null : right; // \u53f3\u306e\u5b50\u30ce\u30fc\u30c9\u3078\u306e\u53c2\u7167\n    }\n}\n
/* \u4e8c\u5206\u6728\u30ce\u30fc\u30c9 */\nclass TreeNode {\n  int val;         // \u30ce\u30fc\u30c9\u5024\n  TreeNode? left;  // \u5de6\u306e\u5b50\u30ce\u30fc\u30c9\u3078\u306e\u53c2\u7167\n  TreeNode? right; // \u53f3\u306e\u5b50\u30ce\u30fc\u30c9\u3078\u306e\u53c2\u7167\n  TreeNode(this.val, [this.left, this.right]);\n}\n
use std::rc::Rc;\nuse std::cell::RefCell;\n\n/* \u4e8c\u5206\u6728\u30ce\u30fc\u30c9 */\nstruct TreeNode {\n    val: i32,                               // \u30ce\u30fc\u30c9\u5024\n    left: Option<Rc<RefCell<TreeNode>>>,    // \u5de6\u306e\u5b50\u30ce\u30fc\u30c9\u3078\u306e\u53c2\u7167\n    right: Option<Rc<RefCell<TreeNode>>>,   // \u53f3\u306e\u5b50\u30ce\u30fc\u30c9\u3078\u306e\u53c2\u7167\n}\n\nimpl TreeNode {\n    /* \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf */\n    fn new(val: i32) -> Rc<RefCell<Self>> {\n        Rc::new(RefCell::new(Self {\n            val,\n            left: None,\n            right: None\n        }))\n    }\n}\n
/* \u4e8c\u5206\u6728\u30ce\u30fc\u30c9 */\ntypedef struct TreeNode {\n    int val;                // \u30ce\u30fc\u30c9\u5024\n    int height;             // \u30ce\u30fc\u30c9\u306e\u9ad8\u3055\n    struct TreeNode *left;  // \u5de6\u306e\u5b50\u30ce\u30fc\u30c9\u3078\u306e\u30dd\u30a4\u30f3\u30bf\n    struct TreeNode *right; // \u53f3\u306e\u5b50\u30ce\u30fc\u30c9\u3078\u306e\u30dd\u30a4\u30f3\u30bf\n} TreeNode;\n\n/* \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf */\nTreeNode *newTreeNode(int val) {\n    TreeNode *node;\n\n    node = (TreeNode *)malloc(sizeof(TreeNode));\n    node->val = val;\n    node->height = 0;\n    node->left = NULL;\n    node->right = NULL;\n    return node;\n}\n
/* \u4e8c\u5206\u6728\u30ce\u30fc\u30c9 */\nclass TreeNode(val _val: Int) {  // \u30ce\u30fc\u30c9\u5024\n    val left: TreeNode? = null   // \u5de6\u306e\u5b50\u30ce\u30fc\u30c9\u3078\u306e\u53c2\u7167\n    val right: TreeNode? = null  // \u53f3\u306e\u5b50\u30ce\u30fc\u30c9\u3078\u306e\u53c2\u7167\n}\n
\n

\u5404\u30ce\u30fc\u30c9\u306f2\u3064\u306e\u53c2\u7167\uff08\u30dd\u30a4\u30f3\u30bf\uff09\u3092\u6301\u3061\u3001\u305d\u308c\u305e\u308c\u5de6\u306e\u5b50\u30ce\u30fc\u30c9\u3068\u53f3\u306e\u5b50\u30ce\u30fc\u30c9\u3092\u6307\u3057\u3066\u3044\u307e\u3059\u3002\u3053\u306e\u30ce\u30fc\u30c9\u306f\u3001\u3053\u308c\u30892\u3064\u306e\u5b50\u30ce\u30fc\u30c9\u306e\u89aa\u30ce\u30fc\u30c9\u3068\u547c\u3070\u308c\u307e\u3059\u3002\u4e8c\u5206\u6728\u306e\u30ce\u30fc\u30c9\u304c\u4e0e\u3048\u3089\u308c\u305f\u3068\u304d\u3001\u3053\u306e\u30ce\u30fc\u30c9\u306e\u5de6\u306e\u5b50\u3068\u305d\u306e\u4e0b\u306b\u3042\u308b\u3059\u3079\u3066\u306e\u30ce\u30fc\u30c9\u3067\u5f62\u6210\u3055\u308c\u308b\u6728\u3092\u3001\u3053\u306e\u30ce\u30fc\u30c9\u306e\u5de6\u90e8\u5206\u6728\u3068\u547c\u3073\u307e\u3059\u3002\u540c\u69d8\u306b\u3001\u53f3\u90e8\u5206\u6728\u3082\u5b9a\u7fa9\u3067\u304d\u307e\u3059\u3002

\u4e8c\u5206\u6728\u3067\u306f\u3001\u8449\u30ce\u30fc\u30c9\u3092\u9664\u3044\u3066\u3001\u4ed6\u306e\u3059\u3079\u3066\u306e\u30ce\u30fc\u30c9\u306f\u5b50\u30ce\u30fc\u30c9\u3068\u7a7a\u3067\u306a\u3044\u90e8\u5206\u6728\u3092\u542b\u307f\u307e\u3059\u3002 \u4e0b\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u300c\u30ce\u30fc\u30c92\u300d\u3092\u89aa\u30ce\u30fc\u30c9\u3068\u3057\u3066\u898b\u308b\u3068\u3001\u305d\u306e\u5de6\u3068\u53f3\u306e\u5b50\u30ce\u30fc\u30c9\u306f\u305d\u308c\u305e\u308c\u300c\u30ce\u30fc\u30c94\u300d\u3068\u300c\u30ce\u30fc\u30c95\u300d\u3067\u3059\u3002\u5de6\u90e8\u5206\u6728\u306f\u300c\u30ce\u30fc\u30c94\u300d\u3068\u305d\u306e\u4e0b\u306b\u3042\u308b\u3059\u3079\u3066\u306e\u30ce\u30fc\u30c9\u3067\u5f62\u6210\u3055\u308c\u3001\u53f3\u90e8\u5206\u6728\u306f\u300c\u30ce\u30fc\u30c95\u300d\u3068\u305d\u306e\u4e0b\u306b\u3042\u308b\u3059\u3079\u3066\u306e\u30ce\u30fc\u30c9\u3067\u5f62\u6210\u3055\u308c\u307e\u3059\u3002

\u56f3 7-1 \u00a0 \u89aa\u30ce\u30fc\u30c9\u3001\u5b50\u30ce\u30fc\u30c9\u3001\u90e8\u5206\u6728

"},{"location":"chapter_tree/binary_tree/#711","title":"7.1.1 \u00a0 \u4e8c\u5206\u6728\u306e\u4e00\u822c\u7684\u306a\u7528\u8a9e","text":"

\u4e8c\u5206\u6728\u3067\u3088\u304f\u4f7f\u7528\u3055\u308c\u308b\u7528\u8a9e\u3092\u4e0b\u56f3\u306b\u793a\u3057\u307e\u3059\u3002

\u56f3 7-2 \u00a0 \u4e8c\u5206\u6728\u306e\u4e00\u822c\u7684\u306a\u7528\u8a9e

Tip

\u300c\u9ad8\u3055\u300d\u3068\u300c\u6df1\u3055\u300d\u306f\u901a\u5e38\u300c\u901a\u904e\u3059\u308b\u8fba\u306e\u6570\u300d\u3068\u3057\u3066\u5b9a\u7fa9\u3057\u307e\u3059\u304c\u3001\u4e00\u90e8\u306e\u554f\u984c\u3084\u6559\u79d1\u66f8\u3067\u306f\u300c\u901a\u904e\u3059\u308b\u30ce\u30fc\u30c9\u306e\u6570\u300d\u3068\u3057\u3066\u5b9a\u7fa9\u3055\u308c\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u306e\u5834\u5408\u3001\u9ad8\u3055\u3068\u6df1\u3055\u306e\u4e21\u65b9\u30921\u3060\u3051\u5897\u3084\u3059\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002

"},{"location":"chapter_tree/binary_tree/#712","title":"7.1.2 \u00a0 \u4e8c\u5206\u6728\u306e\u57fa\u672c\u64cd\u4f5c","text":""},{"location":"chapter_tree/binary_tree/#1","title":"1. \u00a0 \u4e8c\u5206\u6728\u306e\u521d\u671f\u5316","text":"

\u9023\u7d50\u30ea\u30b9\u30c8\u3068\u540c\u69d8\u306b\u3001\u4e8c\u5206\u6728\u306e\u521d\u671f\u5316\u3067\u306f\u3001\u307e\u305a\u30ce\u30fc\u30c9\u3092\u4f5c\u6210\u3057\u3001\u6b21\u306b\u305d\u308c\u3089\u306e\u9593\u306e\u53c2\u7167\uff08\u30dd\u30a4\u30f3\u30bf\uff09\u3092\u78ba\u7acb\u3057\u307e\u3059\u3002

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby binary_tree.py
# \u4e8c\u5206\u6728\u306e\u521d\u671f\u5316\n# \u30ce\u30fc\u30c9\u306e\u521d\u671f\u5316\nn1 = TreeNode(val=1)\nn2 = TreeNode(val=2)\nn3 = TreeNode(val=3)\nn4 = TreeNode(val=4)\nn5 = TreeNode(val=5)\n# \u30ce\u30fc\u30c9\u9593\u306e\u53c2\u7167\uff08\u30dd\u30a4\u30f3\u30bf\uff09\u3092\u7d50\u3076\nn1.left = n2\nn1.right = n3\nn2.left = n4\nn2.right = n5\n
binary_tree.cpp
/* \u4e8c\u5206\u6728\u306e\u521d\u671f\u5316 */\n// \u30ce\u30fc\u30c9\u306e\u521d\u671f\u5316\nTreeNode* n1 = new TreeNode(1);\nTreeNode* n2 = new TreeNode(2);\nTreeNode* n3 = new TreeNode(3);\nTreeNode* n4 = new TreeNode(4);\nTreeNode* n5 = new TreeNode(5);\n// \u30ce\u30fc\u30c9\u9593\u306e\u53c2\u7167\uff08\u30dd\u30a4\u30f3\u30bf\uff09\u3092\u7d50\u3076\nn1->left = n2;\nn1->right = n3;\nn2->left = n4;\nn2->right = n5;\n
binary_tree.java
// \u30ce\u30fc\u30c9\u306e\u521d\u671f\u5316\nTreeNode n1 = new TreeNode(1);\nTreeNode n2 = new TreeNode(2);\nTreeNode n3 = new TreeNode(3);\nTreeNode n4 = new TreeNode(4);\nTreeNode n5 = new TreeNode(5);\n// \u30ce\u30fc\u30c9\u9593\u306e\u53c2\u7167\uff08\u30dd\u30a4\u30f3\u30bf\uff09\u3092\u7d50\u3076\nn1.left = n2;\nn1.right = n3;\nn2.left = n4;\nn2.right = n5;\n
binary_tree.cs
/* \u4e8c\u5206\u6728\u306e\u521d\u671f\u5316 */\n// \u30ce\u30fc\u30c9\u306e\u521d\u671f\u5316\nTreeNode n1 = new(1);\nTreeNode n2 = new(2);\nTreeNode n3 = new(3);\nTreeNode n4 = new(4);\nTreeNode n5 = new(5);\n// \u30ce\u30fc\u30c9\u9593\u306e\u53c2\u7167\uff08\u30dd\u30a4\u30f3\u30bf\uff09\u3092\u7d50\u3076\nn1.left = n2;\nn1.right = n3;\nn2.left = n4;\nn2.right = n5;\n
binary_tree.go
/* \u4e8c\u5206\u6728\u306e\u521d\u671f\u5316 */\n// \u30ce\u30fc\u30c9\u306e\u521d\u671f\u5316\nn1 := NewTreeNode(1)\nn2 := NewTreeNode(2)\nn3 := NewTreeNode(3)\nn4 := NewTreeNode(4)\nn5 := NewTreeNode(5)\n// \u30ce\u30fc\u30c9\u9593\u306e\u53c2\u7167\uff08\u30dd\u30a4\u30f3\u30bf\uff09\u3092\u7d50\u3076\nn1.Left = n2\nn1.Right = n3\nn2.Left = n4\nn2.Right = n5\n
binary_tree.swift
// \u30ce\u30fc\u30c9\u306e\u521d\u671f\u5316\nlet n1 = TreeNode(x: 1)\nlet n2 = TreeNode(x: 2)\nlet n3 = TreeNode(x: 3)\nlet n4 = TreeNode(x: 4)\nlet n5 = TreeNode(x: 5)\n// \u30ce\u30fc\u30c9\u9593\u306e\u53c2\u7167\uff08\u30dd\u30a4\u30f3\u30bf\uff09\u3092\u7d50\u3076\nn1.left = n2\nn1.right = n3\nn2.left = n4\nn2.right = n5\n
binary_tree.js
/* \u4e8c\u5206\u6728\u306e\u521d\u671f\u5316 */\n// \u30ce\u30fc\u30c9\u306e\u521d\u671f\u5316\nlet n1 = new TreeNode(1),\n    n2 = new TreeNode(2),\n    n3 = new TreeNode(3),\n    n4 = new TreeNode(4),\n    n5 = new TreeNode(5);\n// \u30ce\u30fc\u30c9\u9593\u306e\u53c2\u7167\uff08\u30dd\u30a4\u30f3\u30bf\uff09\u3092\u7d50\u3076\nn1.left = n2;\nn1.right = n3;\nn2.left = n4;\nn2.right = n5;\n
binary_tree.ts
/* \u4e8c\u5206\u6728\u306e\u521d\u671f\u5316 */\n// \u30ce\u30fc\u30c9\u306e\u521d\u671f\u5316\nlet n1 = new TreeNode(1),\n    n2 = new TreeNode(2),\n    n3 = new TreeNode(3),\n    n4 = new TreeNode(4),\n    n5 = new TreeNode(5);\n// \u30ce\u30fc\u30c9\u9593\u306e\u53c2\u7167\uff08\u30dd\u30a4\u30f3\u30bf\uff09\u3092\u7d50\u3076\nn1.left = n2;\nn1.right = n3;\nn2.left = n4;\nn2.right = n5;\n
binary_tree.dart
/* \u4e8c\u5206\u6728\u306e\u521d\u671f\u5316 */\n// \u30ce\u30fc\u30c9\u306e\u521d\u671f\u5316\nTreeNode n1 = new TreeNode(1);\nTreeNode n2 = new TreeNode(2);\nTreeNode n3 = new TreeNode(3);\nTreeNode n4 = new TreeNode(4);\nTreeNode n5 = new TreeNode(5);\n// \u30ce\u30fc\u30c9\u9593\u306e\u53c2\u7167\uff08\u30dd\u30a4\u30f3\u30bf\uff09\u3092\u7d50\u3076\nn1.left = n2;\nn1.right = n3;\nn2.left = n4;\nn2.right = n5;\n
binary_tree.rs
// \u30ce\u30fc\u30c9\u306e\u521d\u671f\u5316\nlet n1 = TreeNode::new(1);\nlet n2 = TreeNode::new(2);\nlet n3 = TreeNode::new(3);\nlet n4 = TreeNode::new(4);\nlet n5 = TreeNode::new(5);\n// \u30ce\u30fc\u30c9\u9593\u306e\u53c2\u7167\uff08\u30dd\u30a4\u30f3\u30bf\uff09\u3092\u7d50\u3076\nn1.borrow_mut().left = Some(n2.clone());\nn1.borrow_mut().right = Some(n3);\nn2.borrow_mut().left = Some(n4);\nn2.borrow_mut().right = Some(n5);\n
binary_tree.c
/* \u4e8c\u5206\u6728\u306e\u521d\u671f\u5316 */\n// \u30ce\u30fc\u30c9\u306e\u521d\u671f\u5316\nTreeNode *n1 = newTreeNode(1);\nTreeNode *n2 = newTreeNode(2);\nTreeNode *n3 = newTreeNode(3);\nTreeNode *n4 = newTreeNode(4);\nTreeNode *n5 = newTreeNode(5);\n// \u30ce\u30fc\u30c9\u9593\u306e\u53c2\u7167\uff08\u30dd\u30a4\u30f3\u30bf\uff09\u3092\u7d50\u3076\nn1->left = n2;\nn1->right = n3;\nn2->left = n4;\nn2->right = n5;\n
binary_tree.kt
// \u30ce\u30fc\u30c9\u306e\u521d\u671f\u5316\nval n1 = TreeNode(1)\nval n2 = TreeNode(2)\nval n3 = TreeNode(3)\nval n4 = TreeNode(4)\nval n5 = TreeNode(5)\n// \u30ce\u30fc\u30c9\u9593\u306e\u53c2\u7167\uff08\u30dd\u30a4\u30f3\u30bf\uff09\u3092\u7d50\u3076\nn1.left = n2\nn1.right = n3\nn2.left = n4\nn2.right = n5\n
binary_tree.rb
\n
"},{"location":"chapter_tree/binary_tree/#2","title":"2. \u00a0 \u30ce\u30fc\u30c9\u306e\u633f\u5165\u3068\u524a\u9664","text":"

\u9023\u7d50\u30ea\u30b9\u30c8\u3068\u540c\u69d8\u306b\u3001\u4e8c\u5206\u6728\u3067\u306e\u30ce\u30fc\u30c9\u306e\u633f\u5165\u3068\u524a\u9664\u306f\u30dd\u30a4\u30f3\u30bf\u3092\u5909\u66f4\u3059\u308b\u3053\u3068\u3067\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002\u4e0b\u56f3\u306b\u4f8b\u3092\u793a\u3057\u307e\u3059\u3002

\u56f3 7-3 \u00a0 \u4e8c\u5206\u6728\u3067\u306e\u30ce\u30fc\u30c9\u306e\u633f\u5165\u3068\u524a\u9664

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby binary_tree.py
# \u30ce\u30fc\u30c9\u306e\u633f\u5165\u3068\u524a\u9664\np = TreeNode(0)\n# n1 -> n2\u306e\u9593\u306b\u30ce\u30fc\u30c9P\u3092\u633f\u5165\nn1.left = p\np.left = n2\n# \u30ce\u30fc\u30c9P\u3092\u524a\u9664\nn1.left = n2\n
binary_tree.cpp
/* \u30ce\u30fc\u30c9\u306e\u633f\u5165\u3068\u524a\u9664 */\nTreeNode* P = new TreeNode(0);\n// n1\u3068n2\u306e\u9593\u306b\u30ce\u30fc\u30c9P\u3092\u633f\u5165\nn1->left = P;\nP->left = n2;\n// \u30ce\u30fc\u30c9P\u3092\u524a\u9664\nn1->left = n2;\n
binary_tree.java
TreeNode P = new TreeNode(0);\n// n1\u3068n2\u306e\u9593\u306b\u30ce\u30fc\u30c9P\u3092\u633f\u5165\nn1.left = P;\nP.left = n2;\n// \u30ce\u30fc\u30c9P\u3092\u524a\u9664\nn1.left = n2;\n
binary_tree.cs
/* \u30ce\u30fc\u30c9\u306e\u633f\u5165\u3068\u524a\u9664 */\nTreeNode P = new(0);\n// n1\u3068n2\u306e\u9593\u306b\u30ce\u30fc\u30c9P\u3092\u633f\u5165\nn1.left = P;\nP.left = n2;\n// \u30ce\u30fc\u30c9P\u3092\u524a\u9664\nn1.left = n2;\n
binary_tree.go
/* \u30ce\u30fc\u30c9\u306e\u633f\u5165\u3068\u524a\u9664 */\n// n1\u3068n2\u306e\u9593\u306b\u30ce\u30fc\u30c9P\u3092\u633f\u5165\np := NewTreeNode(0)\nn1.Left = p\np.Left = n2\n// \u30ce\u30fc\u30c9P\u3092\u524a\u9664\nn1.Left = n2\n
binary_tree.swift
let P = TreeNode(x: 0)\n// n1\u3068n2\u306e\u9593\u306b\u30ce\u30fc\u30c9P\u3092\u633f\u5165\nn1.left = P\nP.left = n2\n// \u30ce\u30fc\u30c9P\u3092\u524a\u9664\nn1.left = n2\n
binary_tree.js
/* \u30ce\u30fc\u30c9\u306e\u633f\u5165\u3068\u524a\u9664 */\nlet P = new TreeNode(0);\n// n1\u3068n2\u306e\u9593\u306b\u30ce\u30fc\u30c9P\u3092\u633f\u5165\nn1.left = P;\nP.left = n2;\n// \u30ce\u30fc\u30c9P\u3092\u524a\u9664\nn1.left = n2;\n
binary_tree.ts
/* \u30ce\u30fc\u30c9\u306e\u633f\u5165\u3068\u524a\u9664 */\nconst P = new TreeNode(0);\n// n1\u3068n2\u306e\u9593\u306b\u30ce\u30fc\u30c9P\u3092\u633f\u5165\nn1.left = P;\nP.left = n2;\n// \u30ce\u30fc\u30c9P\u3092\u524a\u9664\nn1.left = n2;\n
binary_tree.dart
/* \u30ce\u30fc\u30c9\u306e\u633f\u5165\u3068\u524a\u9664 */\nTreeNode P = new TreeNode(0);\n// n1\u3068n2\u306e\u9593\u306b\u30ce\u30fc\u30c9P\u3092\u633f\u5165\nn1.left = P;\nP.left = n2;\n// \u30ce\u30fc\u30c9P\u3092\u524a\u9664\nn1.left = n2;\n
binary_tree.rs
let p = TreeNode::new(0);\n// n1\u3068n2\u306e\u9593\u306b\u30ce\u30fc\u30c9P\u3092\u633f\u5165\nn1.borrow_mut().left = Some(p.clone());\np.borrow_mut().left = Some(n2.clone());\n// \u30ce\u30fc\u30c9P\u3092\u524a\u9664\nn1.borrow_mut().left = Some(n2);\n
binary_tree.c
/* \u30ce\u30fc\u30c9\u306e\u633f\u5165\u3068\u524a\u9664 */\nTreeNode *P = newTreeNode(0);\n// n1\u3068n2\u306e\u9593\u306b\u30ce\u30fc\u30c9P\u3092\u633f\u5165\nn1->left = P;\nP->left = n2;\n// \u30ce\u30fc\u30c9P\u3092\u524a\u9664\nn1->left = n2;\n
binary_tree.kt
val P = TreeNode(0)\n// n1\u3068n2\u306e\u9593\u306b\u30ce\u30fc\u30c9P\u3092\u633f\u5165\nn1.left = P\nP.left = n2\n// \u30ce\u30fc\u30c9P\u3092\u524a\u9664\nn1.left = n2\n
binary_tree.rb
\n

Tip

\u30ce\u30fc\u30c9\u306e\u633f\u5165\u306f\u4e8c\u5206\u6728\u306e\u5143\u306e\u8ad6\u7406\u69cb\u9020\u3092\u5909\u66f4\u3059\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u3001\u30ce\u30fc\u30c9\u306e\u524a\u9664\u306f\u901a\u5e38\u305d\u306e\u30ce\u30fc\u30c9\u3068\u305d\u306e\u3059\u3079\u3066\u306e\u90e8\u5206\u6728\u3092\u524a\u9664\u3059\u308b\u3053\u3068\u306b\u306a\u308b\u3053\u3068\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3057\u305f\u304c\u3063\u3066\u3001\u4e8c\u5206\u6728\u3067\u306f\u3001\u633f\u5165\u3068\u524a\u9664\u306f\u901a\u5e38\u4e00\u9023\u306e\u64cd\u4f5c\u3092\u901a\u3058\u3066\u5b9f\u884c\u3055\u308c\u3001\u610f\u5473\u306e\u3042\u308b\u7d50\u679c\u3092\u5f97\u307e\u3059\u3002

"},{"location":"chapter_tree/binary_tree/#713","title":"7.1.3 \u00a0 \u4e8c\u5206\u6728\u306e\u4e00\u822c\u7684\u306a\u7a2e\u985e","text":""},{"location":"chapter_tree/binary_tree/#1_1","title":"1. \u00a0 \u5b8c\u5168\u4e8c\u5206\u6728","text":"

\u4e0b\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u5b8c\u5168\u4e8c\u5206\u6728\u3067\u306f\u3001\u3059\u3079\u3066\u306e\u30ec\u30d9\u30eb\u304c\u30ce\u30fc\u30c9\u3067\u5b8c\u5168\u306b\u57cb\u3081\u3089\u308c\u3066\u3044\u307e\u3059\u3002\u5b8c\u5168\u4e8c\u5206\u6728\u3067\u306f\u3001\u8449\u30ce\u30fc\u30c9\u306e\u6b21\u6570\u306f\\(0\\)\u3067\u3001\u4ed6\u306e\u3059\u3079\u3066\u306e\u30ce\u30fc\u30c9\u306e\u6b21\u6570\u306f\\(2\\)\u3067\u3059\u3002\u30ce\u30fc\u30c9\u306e\u7dcf\u6570\u306f\\(2^{h+1} - 1\\)\u3068\u3057\u3066\u8a08\u7b97\u3067\u304d\u3001\u3053\u3053\u3067\\(h\\)\u306f\u6728\u306e\u9ad8\u3055\u3067\u3059\u3002\u3053\u308c\u306f\u6a19\u6e96\u7684\u306a\u6307\u6570\u95a2\u4fc2\u3092\u793a\u3057\u3001\u81ea\u7136\u754c\u306e\u7d30\u80de\u5206\u88c2\u306e\u4e00\u822c\u7684\u306a\u73fe\u8c61\u3092\u53cd\u6620\u3057\u3066\u3044\u307e\u3059\u3002

Tip

\u4e2d\u56fd\u8a9e\u570f\u3067\u306f\u3001\u5b8c\u5168\u4e8c\u5206\u6728\u306f\u3057\u3070\u3057\u3070\u6e80\u4e8c\u5206\u6728\u3068\u547c\u3070\u308c\u308b\u3053\u3068\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002

\u56f3 7-4 \u00a0 \u5b8c\u5168\u4e8c\u5206\u6728

"},{"location":"chapter_tree/binary_tree/#2_1","title":"2. \u00a0 \u5b8c\u5099\u4e8c\u5206\u6728","text":"

\u4e0b\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u5b8c\u5099\u4e8c\u5206\u6728\u306f\u3001\u6700\u4e0b\u4f4d\u30ec\u30d9\u30eb\u306e\u307f\u304c\u5b8c\u5168\u306b\u57cb\u3081\u3089\u308c\u3066\u3044\u306a\u3044\u53ef\u80fd\u6027\u304c\u3042\u308b\u4e8c\u5206\u6728\u3067\u3001\u6700\u4e0b\u4f4d\u30ec\u30d9\u30eb\u306e\u30ce\u30fc\u30c9\u306f\u5de6\u304b\u3089\u53f3\u306b\u9023\u7d9a\u3057\u3066\u57cb\u3081\u3089\u308c\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u5b8c\u5168\u4e8c\u5206\u6728\u306f\u5b8c\u5099\u4e8c\u5206\u6728\u3067\u3082\u3042\u308b\u3053\u3068\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002

\u56f3 7-5 \u00a0 \u5b8c\u5099\u4e8c\u5206\u6728

"},{"location":"chapter_tree/binary_tree/#3","title":"3. \u00a0 \u6e80\u4e8c\u5206\u6728","text":"

\u4e0b\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u6e80\u4e8c\u5206\u6728\u3067\u306f\u3001\u8449\u30ce\u30fc\u30c9\u3092\u9664\u3044\u3066\u3001\u4ed6\u306e\u3059\u3079\u3066\u306e\u30ce\u30fc\u30c9\u304c2\u3064\u306e\u5b50\u30ce\u30fc\u30c9\u3092\u6301\u3061\u307e\u3059\u3002

\u56f3 7-6 \u00a0 \u6e80\u4e8c\u5206\u6728

"},{"location":"chapter_tree/binary_tree/#4","title":"4. \u00a0 \u5e73\u8861\u4e8c\u5206\u6728","text":"

\u4e0b\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u5e73\u8861\u4e8c\u5206\u6728\u3067\u306f\u3001\u4efb\u610f\u306e\u30ce\u30fc\u30c9\u306e\u5de6\u3068\u53f3\u306e\u90e8\u5206\u6728\u306e\u9ad8\u3055\u306e\u7d76\u5bfe\u5dee\u304c1\u3092\u8d85\u3048\u307e\u305b\u3093\u3002

\u56f3 7-7 \u00a0 \u5e73\u8861\u4e8c\u5206\u6728

"},{"location":"chapter_tree/binary_tree/#714","title":"7.1.4 \u00a0 \u4e8c\u5206\u6728\u306e\u9000\u5316","text":"

\u4e0b\u56f3\u306f\u3001\u4e8c\u5206\u6728\u306e\u7406\u60f3\u7684\u306a\u69cb\u9020\u3068\u9000\u5316\u3057\u305f\u69cb\u9020\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002\u4e8c\u5206\u6728\u306f\u3001\u3059\u3079\u3066\u306e\u30ec\u30d9\u30eb\u304c\u57cb\u3081\u3089\u308c\u3066\u3044\u308b\u3068\u304d\u306b\u300c\u5b8c\u5168\u4e8c\u5206\u6728\u300d\u306b\u306a\u308a\u3001\u3059\u3079\u3066\u306e\u30ce\u30fc\u30c9\u304c\u4e00\u65b9\u306b\u504f\u3063\u3066\u3044\u308b\u3068\u304d\u306b\u300c\u9023\u7d50\u30ea\u30b9\u30c8\u300d\u306b\u9000\u5316\u3057\u307e\u3059\u3002

\u56f3 7-8 \u00a0 \u4e8c\u5206\u6728\u306e\u6700\u826f\u3068\u6700\u60aa\u306e\u69cb\u9020

\u4e0b\u8868\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u6700\u826f\u3068\u6700\u60aa\u306e\u69cb\u9020\u3067\u306f\u3001\u4e8c\u5206\u6728\u306f\u8449\u30ce\u30fc\u30c9\u6570\u3001\u7dcf\u30ce\u30fc\u30c9\u6570\u3001\u9ad8\u3055\u306e\u6700\u5927\u5024\u307e\u305f\u306f\u6700\u5c0f\u5024\u3092\u9054\u6210\u3057\u307e\u3059\u3002

\u8868 7-1 \u00a0 \u4e8c\u5206\u6728\u306e\u6700\u826f\u3068\u6700\u60aa\u306e\u69cb\u9020

\u5b8c\u5168\u4e8c\u5206\u6728 \u9023\u7d50\u30ea\u30b9\u30c8 \u30ec\u30d9\u30eb\\(i\\)\u306e\u30ce\u30fc\u30c9\u6570 \\(2^{i-1}\\) \\(1\\) \u9ad8\u3055\\(h\\)\u306e\u6728\u306e\u8449\u30ce\u30fc\u30c9\u6570 \\(2^h\\) \\(1\\) \u9ad8\u3055\\(h\\)\u306e\u6728\u306e\u7dcf\u30ce\u30fc\u30c9\u6570 \\(2^{h+1} - 1\\) \\(h + 1\\) \u7dcf\u30ce\u30fc\u30c9\u6570\\(n\\)\u306e\u6728\u306e\u9ad8\u3055 \\(\\log_2 (n+1) - 1\\) \\(n - 1\\)"},{"location":"chapter_tree/binary_tree_traversal/","title":"7.2 \u00a0 \u4e8c\u5206\u6728\u306e\u8d70\u67fb","text":"

\u7269\u7406\u7684\u69cb\u9020\u306e\u89b3\u70b9\u304b\u3089\u898b\u308b\u3068\u3001\u6728\u306f\u9023\u7d50\u30ea\u30b9\u30c8\u306b\u57fa\u3065\u304f\u30c7\u30fc\u30bf\u69cb\u9020\u3067\u3059\u3002\u3057\u305f\u304c\u3063\u3066\u3001\u305d\u306e\u8d70\u67fb\u65b9\u6cd5\u306f\u30dd\u30a4\u30f3\u30bf\u3092\u901a\u3057\u3066\u30ce\u30fc\u30c9\u306b\u4e00\u3064\u305a\u3064\u30a2\u30af\u30bb\u30b9\u3059\u308b\u3053\u3068\u3092\u542b\u307f\u307e\u3059\u3002\u3057\u304b\u3057\u3001\u6728\u306f\u975e\u7dda\u5f62\u30c7\u30fc\u30bf\u69cb\u9020\u3067\u3042\u308b\u305f\u3081\u3001\u6728\u306e\u8d70\u67fb\u306f\u9023\u7d50\u30ea\u30b9\u30c8\u306e\u8d70\u67fb\u3088\u308a\u3082\u8907\u96d1\u3067\u3001\u691c\u7d22\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u652f\u63f4\u304c\u5fc5\u8981\u3067\u3059\u3002

\u4e8c\u5206\u6728\u306e\u4e00\u822c\u7684\u306a\u8d70\u67fb\u65b9\u6cd5\u306b\u306f\u3001\u30ec\u30d9\u30eb\u9806\u8d70\u67fb\u3001\u524d\u9806\u8d70\u67fb\u3001\u4e2d\u9806\u8d70\u67fb\u3001\u5f8c\u9806\u8d70\u67fb\u304c\u3042\u308a\u307e\u3059\u3002

"},{"location":"chapter_tree/binary_tree_traversal/#721","title":"7.2.1 \u00a0 \u30ec\u30d9\u30eb\u9806\u8d70\u67fb","text":"

\u4e0b\u56f3\u306b\u793a\u3059\u3088\u3046\u306b\u3001\u30ec\u30d9\u30eb\u9806\u8d70\u67fb\u306f\u4e8c\u5206\u6728\u3092\u4e0a\u304b\u3089\u4e0b\u3078\u3001\u5c64\u3054\u3068\u306b\u8d70\u67fb\u3057\u307e\u3059\u3002\u5404\u30ec\u30d9\u30eb\u5185\u3067\u306f\u3001\u5de6\u304b\u3089\u53f3\u3078\u30ce\u30fc\u30c9\u3092\u8a2a\u554f\u3057\u307e\u3059\u3002

\u30ec\u30d9\u30eb\u9806\u8d70\u67fb\u306f\u672c\u8cea\u7684\u306b\u5e45\u512a\u5148\u8d70\u67fb\u306e\u4e00\u7a2e\u3067\u3001\u5e45\u512a\u5148\u63a2\u7d22\uff08BFS\uff09\u3068\u3082\u547c\u3070\u308c\u3001\u300c\u5468\u56f2\u306b\u5411\u304b\u3063\u3066\u5916\u5411\u304d\u306b\u62e1\u5f35\u3059\u308b\u300d\u5c64\u3054\u3068\u306e\u8d70\u67fb\u65b9\u6cd5\u3092\u4f53\u73fe\u3057\u3066\u3044\u307e\u3059\u3002

\u56f3 7-9 \u00a0 \u4e8c\u5206\u6728\u306e\u30ec\u30d9\u30eb\u9806\u8d70\u67fb

"},{"location":"chapter_tree/binary_tree_traversal/#1","title":"1. \u00a0 \u30b3\u30fc\u30c9\u5b9f\u88c5","text":"

\u5e45\u512a\u5148\u8d70\u67fb\u306f\u901a\u5e38\u300c\u30ad\u30e5\u30fc\u300d\u306e\u52a9\u3051\u3092\u501f\u308a\u3066\u5b9f\u88c5\u3055\u308c\u307e\u3059\u3002\u30ad\u30e5\u30fc\u306f\u300c\u5148\u5165\u308c\u5148\u51fa\u3057\u300d\u306e\u898f\u5247\u306b\u5f93\u3044\u3001\u5e45\u512a\u5148\u8d70\u67fb\u306f\u300c\u5c64\u3054\u3068\u306e\u9032\u884c\u300d\u898f\u5247\u306b\u5f93\u3044\u307e\u3059\u3002\u4e21\u8005\u306e\u57fa\u672c\u7684\u306a\u8003\u3048\u65b9\u306f\u4e00\u81f4\u3057\u3066\u3044\u307e\u3059\u3002\u5b9f\u88c5\u30b3\u30fc\u30c9\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby binary_tree_bfs.py
def level_order(root: TreeNode | None) -> list[int]:\n    \"\"\"\u30ec\u30d9\u30eb\u9806\u8d70\u67fb\"\"\"\n    # \u30ad\u30e5\u30fc\u3092\u521d\u671f\u5316\u3057\u3001\u30eb\u30fc\u30c8\u30ce\u30fc\u30c9\u3092\u8ffd\u52a0\n    queue: deque[TreeNode] = deque()\n    queue.append(root)\n    # \u8d70\u67fb\u30b7\u30fc\u30b1\u30f3\u30b9\u3092\u683c\u7d0d\u3059\u308b\u30ea\u30b9\u30c8\u3092\u521d\u671f\u5316\n    res = []\n    while queue:\n        node: TreeNode = queue.popleft()  # \u30ad\u30e5\u30fc\u304b\u3089\u30c7\u30ad\u30e5\u30fc\n        res.append(node.val)  # \u30ce\u30fc\u30c9\u306e\u5024\u3092\u4fdd\u5b58\n        if node.left is not None:\n            queue.append(node.left)  # \u5de6\u306e\u5b50\u30ce\u30fc\u30c9\u3092\u30a8\u30f3\u30ad\u30e5\u30fc\n        if node.right is not None:\n            queue.append(node.right)  # \u53f3\u306e\u5b50\u30ce\u30fc\u30c9\u3092\u30a8\u30f3\u30ad\u30e5\u30fc\n    return res\n
binary_tree_bfs.cpp
/* \u30ec\u30d9\u30eb\u9806\u8d70\u67fb */\nvector<int> levelOrder(TreeNode *root) {\n    // \u30ad\u30e5\u30fc\u3092\u521d\u671f\u5316\u3001\u30eb\u30fc\u30c8\u30ce\u30fc\u30c9\u3092\u8ffd\u52a0\n    queue<TreeNode *> queue;\n    queue.push(root);\n    // \u8d70\u67fb\u9806\u5e8f\u3092\u4fdd\u5b58\u3059\u308b\u30ea\u30b9\u30c8\u3092\u521d\u671f\u5316\n    vector<int> vec;\n    while (!queue.empty()) {\n        TreeNode *node = queue.front();\n        queue.pop();              // \u30ad\u30e5\u30fc\u304b\u3089\u30c7\u30ad\u30e5\u30fc\n        vec.push_back(node->val); // \u30ce\u30fc\u30c9\u5024\u3092\u4fdd\u5b58\n        if (node->left != nullptr)\n            queue.push(node->left); // \u5de6\u306e\u5b50\u30ce\u30fc\u30c9\u3092\u30a8\u30f3\u30ad\u30e5\u30fc\n        if (node->right != nullptr)\n            queue.push(node->right); // \u53f3\u306e\u5b50\u30ce\u30fc\u30c9\u3092\u30a8\u30f3\u30ad\u30e5\u30fc\n    }\n    return vec;\n}\n
binary_tree_bfs.java
/* \u30ec\u30d9\u30eb\u9806\u8d70\u67fb */\nList<Integer> levelOrder(TreeNode root) {\n    // \u30ad\u30e5\u30fc\u3092\u521d\u671f\u5316\u3057\u3001\u6839\u30ce\u30fc\u30c9\u3092\u8ffd\u52a0\n    Queue<TreeNode> queue = new LinkedList<>();\n    queue.add(root);\n    // \u8d70\u67fb\u9806\u5e8f\u3092\u683c\u7d0d\u3059\u308b\u30ea\u30b9\u30c8\u3092\u521d\u671f\u5316\n    List<Integer> list = new ArrayList<>();\n    while (!queue.isEmpty()) {\n        TreeNode node = queue.poll(); // \u30ad\u30e5\u30fc\u306e\u30c7\u30ad\u30e5\u30fc\n        list.add(node.val);           // \u30ce\u30fc\u30c9\u306e\u5024\u3092\u4fdd\u5b58\n        if (node.left != null)\n            queue.offer(node.left);   // \u5de6\u306e\u5b50\u30ce\u30fc\u30c9\u3092\u30a8\u30f3\u30ad\u30e5\u30fc\n        if (node.right != null)\n            queue.offer(node.right);  // \u53f3\u306e\u5b50\u30ce\u30fc\u30c9\u3092\u30a8\u30f3\u30ad\u30e5\u30fc\n    }\n    return list;\n}\n
binary_tree_bfs.cs
[class]{binary_tree_bfs}-[func]{LevelOrder}\n
binary_tree_bfs.go
[class]{}-[func]{levelOrder}\n
binary_tree_bfs.swift
[class]{}-[func]{levelOrder}\n
binary_tree_bfs.js
[class]{}-[func]{levelOrder}\n
binary_tree_bfs.ts
[class]{}-[func]{levelOrder}\n
binary_tree_bfs.dart
[class]{}-[func]{levelOrder}\n
binary_tree_bfs.rs
[class]{}-[func]{level_order}\n
binary_tree_bfs.c
[class]{}-[func]{levelOrder}\n
binary_tree_bfs.kt
[class]{}-[func]{levelOrder}\n
binary_tree_bfs.rb
[class]{}-[func]{level_order}\n
"},{"location":"chapter_tree/binary_tree_traversal/#2","title":"2. \u00a0 \u8a08\u7b97\u91cf\u5206\u6790","text":""},{"location":"chapter_tree/binary_tree_traversal/#722","title":"7.2.2 \u00a0 \u524d\u9806\u3001\u4e2d\u9806\u3001\u5f8c\u9806\u8d70\u67fb","text":"

\u5bfe\u5fdc\u3057\u3066\u3001\u524d\u9806\u3001\u4e2d\u9806\u3001\u5f8c\u9806\u8d70\u67fb\u306f\u3059\u3079\u3066\u6df1\u5ea6\u512a\u5148\u8d70\u67fb\u306b\u5c5e\u3057\u3001\u6df1\u5ea6\u512a\u5148\u63a2\u7d22\uff08DFS\uff09\u3068\u3082\u547c\u3070\u308c\u3001\u300c\u307e\u305a\u6700\u5f8c\u307e\u3067\u9032\u307f\u3001\u305d\u306e\u5f8c\u30d0\u30c3\u30af\u30c8\u30e9\u30c3\u30af\u3057\u3066\u7d9a\u884c\u3059\u308b\u300d\u8d70\u67fb\u65b9\u6cd5\u3092\u4f53\u73fe\u3057\u3066\u3044\u307e\u3059\u3002

\u4e0b\u56f3\u306f\u4e8c\u5206\u6728\u306b\u5bfe\u3057\u3066\u6df1\u5ea6\u512a\u5148\u8d70\u67fb\u3092\u5b9f\u884c\u3059\u308b\u52d5\u4f5c\u539f\u7406\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002\u6df1\u5ea6\u512a\u5148\u8d70\u67fb\u306f\u4e8c\u5206\u6728\u5168\u4f53\u3092\u300c\u6b69\u304d\u56de\u308b\u300d\u3088\u3046\u306a\u3082\u306e\u3067\u3001\u5404\u30ce\u30fc\u30c9\u30673\u3064\u306e\u4f4d\u7f6e\u306b\u906d\u9047\u3057\u3001\u305d\u308c\u3089\u306f\u524d\u9806\u3001\u4e2d\u9806\u3001\u5f8c\u9806\u8d70\u67fb\u306b\u5bfe\u5fdc\u3057\u3066\u3044\u307e\u3059\u3002

\u56f3 7-10 \u00a0 \u4e8c\u5206\u63a2\u7d22\u6728\u306e\u524d\u9806\u3001\u4e2d\u9806\u3001\u5f8c\u9806\u8d70\u67fb

"},{"location":"chapter_tree/binary_tree_traversal/#1_1","title":"1. \u00a0 \u30b3\u30fc\u30c9\u5b9f\u88c5","text":"

\u6df1\u5ea6\u512a\u5148\u63a2\u7d22\u306f\u901a\u5e38\u518d\u5e30\u306b\u57fa\u3065\u3044\u3066\u5b9f\u88c5\u3055\u308c\u307e\u3059\uff1a

PythonC++JavaC#GoSwiftJSTSDartRustCKotlinRuby binary_tree_dfs.py
def pre_order(root: TreeNode | None):\n    \"\"\"\u524d\u9806\u8d70\u67fb\"\"\"\n    if root is None:\n        return\n    # \u8a2a\u554f\u9806\u5e8f: \u30eb\u30fc\u30c8\u30ce\u30fc\u30c9 -> \u5de6\u90e8\u5206\u6728 -> \u53f3\u90e8\u5206\u6728\n    res.append(root.val)\n    pre_order(root=root.left)\n    pre_order(root=root.right)\n\ndef in_order(root: TreeNode | None):\n    \"\"\"\u4e2d\u9806\u8d70\u67fb\"\"\"\n    if root is None:\n        return\n    # \u8a2a\u554f\u9806\u5e8f: \u5de6\u90e8\u5206\u6728 -> \u30eb\u30fc\u30c8\u30ce\u30fc\u30c9 -> \u53f3\u90e8\u5206\u6728\n    in_order(root=root.left)\n    res.append(root.val)\n    in_order(root=root.right)\n\ndef post_order(root: TreeNode | None):\n    \"\"\"\u5f8c\u9806\u8d70\u67fb\"\"\"\n    if root is None:\n        return\n    # \u8a2a\u554f\u9806\u5e8f: \u5de6\u90e8\u5206\u6728 -> \u53f3\u90e8\u5206\u6728 -> \u30eb\u30fc\u30c8\u30ce\u30fc\u30c9\n    post_order(root=root.left)\n    post_order(root=root.right)\n    res.append(root.val)\n
binary_tree_dfs.cpp
/* \u524d\u9806\u8d70\u67fb */\nvoid preOrder(TreeNode *root) {\n    if (root == nullptr)\n        return;\n    // \u8a2a\u554f\u512a\u5148\u5ea6\uff1a\u30eb\u30fc\u30c8\u30ce\u30fc\u30c9 -> \u5de6\u90e8\u5206\u6728 -> \u53f3\u90e8\u5206\u6728\n    vec.push_back(root->val);\n    preOrder(root->left);\n    preOrder(root->right);\n}\n\n/* \u4e2d\u9806\u8d70\u67fb */\nvoid inOrder(TreeNode *root) {\n    if (root == nullptr)\n        return;\n    // \u8a2a\u554f\u512a\u5148\u5ea6\uff1a\u5de6\u90e8\u5206\u6728 -> \u30eb\u30fc\u30c8\u30ce\u30fc\u30c9 -> \u53f3\u90e8\u5206\u6728\n    inOrder(root->left);\n    vec.push_back(root->val);\n    inOrder(root->right);\n}\n\n/* \u5f8c\u9806\u8d70\u67fb */\nvoid postOrder(TreeNode *root) {\n    if (root == nullptr)\n        return;\n    // \u8a2a\u554f\u512a\u5148\u5ea6\uff1a\u5de6\u90e8\u5206\u6728 -> \u53f3\u90e8\u5206\u6728 -> \u30eb\u30fc\u30c8\u30ce\u30fc\u30c9\n    postOrder(root->left);\n    postOrder(root->right);\n    vec.push_back(root->val);\n}\n
binary_tree_dfs.java
/* \u524d\u9806\u8d70\u67fb */\nvoid preOrder(TreeNode root) {\n    if (root == null)\n        return;\n    // \u8a2a\u554f\u512a\u5148\u5ea6: \u6839\u30ce\u30fc\u30c9 -> \u5de6\u90e8\u5206\u6728 -> \u53f3\u90e8\u5206\u6728\n    list.add(root.val);\n    preOrder(root.left);\n    preOrder(root.right);\n}\n\n/* \u4e2d\u9806\u8d70\u67fb */\nvoid inOrder(TreeNode root) {\n    if (root == null)\n        return;\n    // \u8a2a\u554f\u512a\u5148\u5ea6: \u5de6\u90e8\u5206\u6728 -> \u6839\u30ce\u30fc\u30c9 -> \u53f3\u90e8\u5206\u6728\n    inOrder(root.left);\n    list.add(root.val);\n    inOrder(root.right);\n}\n\n/* \u5f8c\u9806\u8d70\u67fb */\nvoid postOrder(TreeNode root) {\n    if (root == null)\n        return;\n    // \u8a2a\u554f\u512a\u5148\u5ea6: \u5de6\u90e8\u5206\u6728 -> \u53f3\u90e8\u5206\u6728 -> \u6839\u30ce\u30fc\u30c9\n    postOrder(root.left);\n    postOrder(root.right);\n    list.add(root.val);\n}\n
binary_tree_dfs.cs
[class]{binary_tree_dfs}-[func]{PreOrder}\n\n[class]{binary_tree_dfs}-[func]{InOrder}\n\n[class]{binary_tree_dfs}-[func]{PostOrder}\n
binary_tree_dfs.go
[class]{}-[func]{preOrder}\n\n[class]{}-[func]{inOrder}\n\n[class]{}-[func]{postOrder}\n
binary_tree_dfs.swift
[class]{}-[func]{preOrder}\n\n[class]{}-[func]{inOrder}\n\n[class]{}-[func]{postOrder}\n
binary_tree_dfs.js
[class]{}-[func]{preOrder}\n\n[class]{}-[func]{inOrder}\n\n[class]{}-[func]{postOrder}\n
binary_tree_dfs.ts
[class]{}-[func]{preOrder}\n\n[class]{}-[func]{inOrder}\n\n[class]{}-[func]{postOrder}\n
binary_tree_dfs.dart
[class]{}-[func]{preOrder}\n\n[class]{}-[func]{inOrder}\n\n[class]{}-[func]{postOrder}\n
binary_tree_dfs.rs
[class]{}-[func]{pre_order}\n\n[class]{}-[func]{in_order}\n\n[class]{}-[func]{post_order}\n
binary_tree_dfs.c
[class]{}-[func]{preOrder}\n\n[class]{}-[func]{inOrder}\n\n[class]{}-[func]{postOrder}\n
binary_tree_dfs.kt
[class]{}-[func]{preOrder}\n\n[class]{}-[func]{inOrder}\n\n[class]{}-[func]{postOrder}\n
binary_tree_dfs.rb
[class]{}-[func]{pre_order}\n\n[class]{}-[func]{in_order}\n\n[class]{}-[func]{post_order}\n

Tip

\u6df1\u5ea6\u512a\u5148\u63a2\u7d22\u306f\u53cd\u5fa9\u306b\u57fa\u3065\u3044\u3066\u3082\u5b9f\u88c5\u3067\u304d\u307e\u3059\u3002\u8208\u5473\u306e\u3042\u308b\u8aad\u8005\u306f\u81ea\u5206\u3067\u5b66\u7fd2\u3057\u3066\u304f\u3060\u3055\u3044\u3002

\u4e0b\u56f3\u306f\u4e8c\u5206\u6728\u306e\u524d\u9806\u8d70\u67fb\u306e\u518d\u5e30\u30d7\u30ed\u30bb\u30b9\u3092\u793a\u3057\u3066\u304a\u308a\u3001\u3053\u308c\u306f\u300c\u518d\u5e30\u300d\u3068\u300c\u5fa9\u5e30\u300d\u3068\u3044\u30462\u3064\u306e\u53cd\u5bfe\u306e\u90e8\u5206\u306b\u5206\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

  1. \u300c\u518d\u5e30\u300d\u306f\u65b0\u3057\u3044\u30e1\u30bd\u30c3\u30c9\u3092\u958b\u59cb\u3059\u308b\u3053\u3068\u3092\u610f\u5473\u3057\u3001\u30d7\u30ed\u30b0\u30e9\u30e0\u306f\u3053\u306e\u30d7\u30ed\u30bb\u30b9\u3067\u6b21\u306e\u30ce\u30fc\u30c9\u306b\u30a2\u30af\u30bb\u30b9\u3057\u307e\u3059\u3002
  2. \u300c\u5fa9\u5e30\u300d\u306f\u95a2\u6570\u304c\u623b\u308b\u3053\u3068\u3092\u610f\u5473\u3057\u3001\u73fe\u5728\u306e\u30ce\u30fc\u30c9\u304c\u5b8c\u5168\u306b\u30a2\u30af\u30bb\u30b9\u3055\u308c\u305f\u3053\u3068\u3092\u793a\u3057\u307e\u3059\u3002
<1><2><3><4><5><6><7><8><9><10><11>

\u56f3 7-11 \u00a0 \u524d\u9806\u8d70\u67fb\u306e\u518d\u5e30\u30d7\u30ed\u30bb\u30b9

"},{"location":"chapter_tree/binary_tree_traversal/#2_1","title":"2. \u00a0 \u8a08\u7b97\u91cf\u5206\u6790","text":""},{"location":"chapter_tree/summary/","title":"7.6 \u00a0 \u307e\u3068\u3081","text":""},{"location":"chapter_tree/summary/#1","title":"1. \u00a0 \u91cd\u8981\u306a\u30dd\u30a4\u30f3\u30c8","text":""},{"location":"chapter_tree/summary/#2-q-a","title":"2. \u00a0 Q & A","text":"

Q: \u4e00\u3064\u306e\u30ce\u30fc\u30c9\u306e\u307f\u3092\u6301\u3064\u4e8c\u5206\u6728\u306b\u3064\u3044\u3066\u3001\u6728\u306e\u9ad8\u3055\u3068\u6839\u30ce\u30fc\u30c9\u306e\u6df1\u3055\u306e\u4e21\u65b9\u304c\\(0\\)\u3067\u3059\u304b\uff1f

\u306f\u3044\u3001\u9ad8\u3055\u3068\u6df1\u3055\u306f\u901a\u5e38\u300c\u901a\u904e\u3057\u305f\u30a8\u30c3\u30b8\u306e\u6570\u300d\u3068\u3057\u3066\u5b9a\u7fa9\u3055\u308c\u308b\u305f\u3081\u3067\u3059\u3002

Q: \u4e8c\u5206\u6728\u306b\u304a\u3051\u308b\u633f\u5165\u3068\u524a\u9664\u306f\u4e00\u822c\u7684\u306b\u4e00\u9023\u306e\u64cd\u4f5c\u306b\u3088\u3063\u3066\u9054\u6210\u3055\u308c\u307e\u3059\u3002\u3053\u3053\u3067\u306e\u300c\u4e00\u9023\u306e\u64cd\u4f5c\u300d\u3068\u306f\u4f55\u3092\u6307\u3057\u307e\u3059\u304b\uff1f\u5b50\u30ce\u30fc\u30c9\u306e\u30ea\u30bd\u30fc\u30b9\u3092\u89e3\u653e\u3059\u308b\u3053\u3068\u3092\u610f\u5473\u3057\u307e\u3059\u304b\uff1f

\u4e8c\u5206\u63a2\u7d22\u6728\u3092\u4f8b\u306b\u53d6\u308b\u3068\u3001\u30ce\u30fc\u30c9\u3092\u524a\u9664\u3059\u308b\u64cd\u4f5c\u306f3\u3064\u306e\u7570\u306a\u308b\u30b7\u30ca\u30ea\u30aa\u3067\u51e6\u7406\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u3001\u305d\u308c\u305e\u308c\u8907\u6570\u30b9\u30c6\u30c3\u30d7\u306e\u30ce\u30fc\u30c9\u64cd\u4f5c\u304c\u5fc5\u8981\u3067\u3059\u3002

Q: \u4e8c\u5206\u6728\u306eDFS\u8d70\u67fb\u3067\u524d\u9806\u3001\u4e2d\u9806\u3001\u5f8c\u9806\u306e3\u3064\u306e\u30b7\u30fc\u30b1\u30f3\u30b9\u304c\u3042\u308b\u306e\u306f\u306a\u305c\u3067\u3059\u304b\uff1f\u305d\u306e\u7528\u9014\u306f\u4f55\u3067\u3059\u304b\uff1f

\u914d\u5217\u306e\u9806\u6b21\u304a\u3088\u3073\u9006\u9806\u8d70\u67fb\u3068\u540c\u69d8\u306b\u3001\u524d\u9806\u3001\u4e2d\u9806\u3001\u5f8c\u9806\u8d70\u67fb\u306f\u4e8c\u5206\u6728\u3092\u8d70\u67fb\u3059\u308b3\u3064\u306e\u65b9\u6cd5\u3067\u3042\u308a\u3001\u7279\u5b9a\u306e\u9806\u5e8f\u3067\u8d70\u67fb\u7d50\u679c\u3092\u53d6\u5f97\u3067\u304d\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001\u4e8c\u5206\u63a2\u7d22\u6728\u3067\u306f\u3001\u30ce\u30fc\u30c9\u30b5\u30a4\u30ba\u304c\u300c\u5de6\u5b50\u30ce\u30fc\u30c9\u5024 < \u6839\u30ce\u30fc\u30c9\u5024 < \u53f3\u5b50\u30ce\u30fc\u30c9\u5024\u300d\u3092\u6e80\u305f\u3059\u305f\u3081\u3001\u300c\u5de6 \\(\\rightarrow\\) \u6839 \\(\\rightarrow\\) \u53f3\u300d\u306e\u512a\u5148\u9806\u4f4d\u3067\u6728\u3092\u8d70\u67fb\u3059\u308b\u3053\u3068\u3067\u3001\u9806\u5e8f\u4ed8\u3051\u3089\u308c\u305f\u30ce\u30fc\u30c9\u30b7\u30fc\u30b1\u30f3\u30b9\u3092\u53d6\u5f97\u3067\u304d\u307e\u3059\u3002

Q: \u4e0d\u5e73\u8861\u30ce\u30fc\u30c9node\u3001child\u3001grand_child\u9593\u306e\u95a2\u4fc2\u3092\u51e6\u7406\u3059\u308b\u53f3\u56de\u8ee2\u64cd\u4f5c\u306b\u304a\u3044\u3066\u3001\u53f3\u56de\u8ee2\u5f8c\u306bnode\u3068\u305d\u306e\u89aa\u30ce\u30fc\u30c9\u9593\u306e\u63a5\u7d9a\u3068node\u306e\u5143\u306e\u30ea\u30f3\u30af\u304c\u5931\u308f\u308c\u308b\u306e\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u304b\uff1f

\u3053\u306e\u554f\u984c\u3092\u518d\u5e30\u7684\u306a\u89b3\u70b9\u304b\u3089\u898b\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002right_rotate(root)\u64cd\u4f5c\u306f\u90e8\u5206\u6728\u306e\u6839\u30ce\u30fc\u30c9\u3092\u6e21\u3057\u3001\u6700\u7d42\u7684\u306breturn child\u3067\u56de\u8ee2\u3055\u308c\u305f\u90e8\u5206\u6728\u306e\u6839\u30ce\u30fc\u30c9\u3092\u8fd4\u3057\u307e\u3059\u3002\u90e8\u5206\u6728\u306e\u6839\u30ce\u30fc\u30c9\u3068\u305d\u306e\u89aa\u30ce\u30fc\u30c9\u9593\u306e\u63a5\u7d9a\u306f\u3001\u3053\u306e\u95a2\u6570\u304c\u623b\u3063\u305f\u5f8c\u306b\u78ba\u7acb\u3055\u308c\u3001\u3053\u308c\u306f\u53f3\u56de\u8ee2\u64cd\u4f5c\u306e\u4fdd\u5b88\u7bc4\u56f2\u5916\u3067\u3059\u3002

Q: C++\u3067\u306f\u3001\u95a2\u6570\u306fprivate\u3068public\u30bb\u30af\u30b7\u30e7\u30f3\u306b\u5206\u304b\u308c\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u306b\u306f\u3069\u306e\u3088\u3046\u306a\u8003\u616e\u4e8b\u9805\u304c\u3042\u308a\u307e\u3059\u304b\uff1f\u306a\u305cheight()\u95a2\u6570\u3068updateHeight()\u95a2\u6570\u304c\u305d\u308c\u305e\u308cpublic\u3068private\u306b\u914d\u7f6e\u3055\u308c\u3066\u3044\u308b\u306e\u3067\u3059\u304b\uff1f

\u3053\u308c\u306f\u30e1\u30bd\u30c3\u30c9\u306e\u4f7f\u7528\u7bc4\u56f2\u306b\u3088\u308a\u307e\u3059\u3002\u30e1\u30bd\u30c3\u30c9\u304c\u30af\u30e9\u30b9\u5185\u3067\u306e\u307f\u4f7f\u7528\u3055\u308c\u308b\u5834\u5408\u3001private\u306b\u8a2d\u8a08\u3055\u308c\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001\u30e6\u30fc\u30b6\u30fc\u304c\u72ec\u81ea\u306bupdateHeight()\u3092\u547c\u3073\u51fa\u3059\u3053\u3068\u306f\u610f\u5473\u304c\u3042\u308a\u307e\u305b\u3093\u3002\u3053\u308c\u306f\u633f\u5165\u307e\u305f\u306f\u524a\u9664\u64cd\u4f5c\u306e\u4e00\u30b9\u30c6\u30c3\u30d7\u306b\u904e\u304e\u306a\u3044\u304b\u3089\u3067\u3059\u3002\u3057\u304b\u3057\u3001height()\u306f\u30ce\u30fc\u30c9\u306e\u9ad8\u3055\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u305f\u3081\u306e\u3082\u306e\u3067\u3001vector.size()\u3068\u540c\u69d8\u3067\u3042\u308b\u305f\u3081\u3001\u4f7f\u7528\u306e\u305f\u3081\u306bpublic\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059\u3002

Q: \u5165\u529b\u30c7\u30fc\u30bf\u306e\u30bb\u30c3\u30c8\u304b\u3089\u4e8c\u5206\u63a2\u7d22\u6728\u3092\u3069\u306e\u3088\u3046\u306b\u69cb\u7bc9\u3057\u307e\u3059\u304b\uff1f\u6839\u30ce\u30fc\u30c9\u306e\u9078\u629e\u306f\u975e\u5e38\u306b\u91cd\u8981\u3067\u3059\u304b\uff1f

\u306f\u3044\u3001\u6728\u3092\u69cb\u7bc9\u3059\u308b\u65b9\u6cd5\u306f\u4e8c\u5206\u63a2\u7d22\u6728\u30b3\u30fc\u30c9\u306ebuild_tree()\u30e1\u30bd\u30c3\u30c9\u3067\u63d0\u4f9b\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u6839\u30ce\u30fc\u30c9\u306e\u9078\u629e\u306b\u3064\u3044\u3066\u306f\u3001\u901a\u5e38\u5165\u529b\u30c7\u30fc\u30bf\u3092\u30bd\u30fc\u30c8\u3057\u3001\u4e2d\u592e\u306e\u8981\u7d20\u3092\u6839\u30ce\u30fc\u30c9\u3068\u3057\u3066\u9078\u629e\u3057\u3001\u518d\u5e30\u7684\u306b\u5de6\u3068\u53f3\u306e\u90e8\u5206\u6728\u3092\u69cb\u7bc9\u3057\u307e\u3059\u3002\u3053\u306e\u30a2\u30d7\u30ed\u30fc\u30c1\u306f\u6728\u306e\u5e73\u8861\u3092\u6700\u5927\u5316\u3057\u307e\u3059\u3002

Q: Java\u3067\u306f\u3001\u6587\u5b57\u5217\u6bd4\u8f03\u306b\u5e38\u306bequals()\u30e1\u30bd\u30c3\u30c9\u3092\u4f7f\u7528\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u304b\uff1f

Java\u3067\u306f\u3001\u30d7\u30ea\u30df\u30c6\u30a3\u30d6\u30c7\u30fc\u30bf\u578b\u306e\u5834\u5408\u3001==\u306f2\u3064\u306e\u5909\u6570\u306e\u5024\u304c\u7b49\u3057\u3044\u304b\u3069\u3046\u304b\u3092\u6bd4\u8f03\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002\u53c2\u7167\u578b\u306e\u5834\u5408\u30012\u3064\u306e\u30b7\u30f3\u30dc\u30eb\u306e\u52d5\u4f5c\u539f\u7406\u306f\u7570\u306a\u308a\u307e\u3059\u3002

\u3057\u305f\u304c\u3063\u3066\u3001\u5024\u3092\u6bd4\u8f03\u3059\u308b\u306b\u306fequals()\u3092\u4f7f\u7528\u3059\u3079\u304d\u3067\u3059\u3002\u305f\u3060\u3057\u3001String a = \"hi\"; String b = \"hi\";\u3067\u521d\u671f\u5316\u3055\u308c\u305f\u6587\u5b57\u5217\u306f\u6587\u5b57\u5217\u5b9a\u6570\u30d7\u30fc\u30eb\u306b\u683c\u7d0d\u3055\u308c\u3001\u540c\u3058\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u6307\u3059\u305f\u3081\u3001a == b\u30822\u3064\u306e\u6587\u5b57\u5217\u306e\u5185\u5bb9\u3092\u6bd4\u8f03\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002

Q: \u6700\u4e0b\u4f4d\u30ec\u30d9\u30eb\u306b\u5230\u9054\u3059\u308b\u524d\u306b\u3001\u5e45\u512a\u5148\u8d70\u67fb\u3067\u30ad\u30e5\u30fc\u5185\u306e\u30ce\u30fc\u30c9\u6570\u306f\\(2^h\\)\u3067\u3059\u304b\uff1f

\u306f\u3044\u3001\u4f8b\u3048\u3070\u9ad8\u3055\\(h = 2\\)\u306e\u6e80\u4e8c\u5206\u6728\u306f\u5408\u8a08\\(n = 7\\)\u500b\u306e\u30ce\u30fc\u30c9\u3092\u6301\u3061\u3001\u6700\u4e0b\u4f4d\u30ec\u30d9\u30eb\u306b\u306f\\(4 = 2^h = (n + 1) / 2\\)\u500b\u306e\u30ce\u30fc\u30c9\u304c\u3042\u308a\u307e\u3059\u3002

"}]}